diff --git a/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js b/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js
index ef64fd3..6d200be 100644
--- a/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js
+++ b/bundles/org.eclipse.rap.addons.dropdown/js/rwt/dropdown/DropDown.js
@@ -13,6 +13,7 @@
 
   var POPUP_BORDER = new rwt.html.Border( 1, "solid", "#000000" );
   var FRAMEWIDTH = 2;
+  var TAB = String.fromCharCode( 9 );
   var getPadding = function() {
     var manager = rwt.theme.AppearanceManager.getInstance();
     var stylemap = manager.styleFrom( "list-item", {} );
@@ -365,7 +366,11 @@
     rootItem.setItemCount( items.length );
     for( var i = 0; i < items.length; i++ ) {
       var gridItem = new rwt.widgets.GridItem( rootItem, i, false );
-      gridItem.setTexts( [ items[ i ] ] );
+      if( this._.columns ) {
+        gridItem.setTexts( items[ i ].split( TAB ) );
+      } else {
+        gridItem.setTexts( [ items[ i ] ] );
+      }
     }
     delete this._.grid._inServerResponse;
   };
diff --git a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/DropDownDemo.java b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/DropDownDemo.java
index d75f8e6..809391b 100644
--- a/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/DropDownDemo.java
+++ b/examples/org.eclipse.rap.addons.dropdown.demo/src/org/eclipse/rap/addons/dropdown/demo/DropDownDemo.java
@@ -119,7 +119,7 @@
         dropdown.hide();
       }
     } );
-    dropdown.setData( "columns", new int[] { 90, 50 } );
+    dropdown.setData( "columns", new int[] { 130, 60 } );
   }
 
   private void createKFZExample( Composite parent ) {
@@ -312,7 +312,10 @@
       String item = values[ i ];
       if( item.toLowerCase().startsWith( text ) ) {
         int length = text.length();
-        result.add( "<b>" + item.substring( 0, length ) + "</b>" + item.substring( length ) );
+        int rating = ( int )( Math.random() * 10 );
+        result.add(
+          "<b>" + item.substring( 0, length ) + "</b>" + item.substring( length ) + "\t" + rating + "/10"
+        );
       }
     }
     return result.toArray( new String[ result.size() ] );
diff --git a/tests/org.eclipse.rap.addons.dropdown.test/js/rwt/dropdown/DropDown_Test.js b/tests/org.eclipse.rap.addons.dropdown.test/js/rwt/dropdown/DropDown_Test.js
index 2d4c68f..3a27dc2 100644
--- a/tests/org.eclipse.rap.addons.dropdown.test/js/rwt/dropdown/DropDown_Test.js
+++ b/tests/org.eclipse.rap.addons.dropdown.test/js/rwt/dropdown/DropDown_Test.js
@@ -483,6 +483,18 @@
       assertEquals( 40 - PADDING_RIGHT - PADDING_LEFT, config.itemTextWidth[ 1 ] );
     },
 
+    testSetColumns_separatesItemsByTabulator : function() {
+      dropdown.setColumns( [ 30, 40 ] );
+      var tab = String.fromCharCode( 9 );
+
+      dropdown.setItems( [ "foo" + tab + "bar" ] );
+      showDropDown();
+
+      var gridItem = grid.getRootItem().getChild( 0 );
+      assertEquals( "foo", gridItem.getText( 0 ) );
+      assertEquals( "bar", gridItem.getText( 1 ) );
+    },
+
     testGetItemCount : function() {
       showDropDown();
 
