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 6d200be..8245c2e 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
@@ -315,15 +315,29 @@
     var padding = getPadding();
     var itemHeight = Math.floor( font.getSize() * 1.3 ) + padding[ 0 ] + padding[ 2 ];
     var visibleItems = Math.min( this._.visibleItemCount, this.getItemCount() );
-    var gridWidth = this._.parent.getWidth() - FRAMEWIDTH;
+    var gridWidth = calcGridWidth.apply( this );
     var gridHeight = visibleItems * itemHeight;
     this._.popup.positionRelativeTo( this._.parent, 0, yOffset );
-    this._.popup.setWidth( this._.parent.getWidth() );
+    this._.popup.setWidth( gridWidth + FRAMEWIDTH );
     this._.popup.setHeight( gridHeight + FRAMEWIDTH );
     this._.grid.setDimension( gridWidth, gridHeight );
     renderItemMetrics.apply( this, [ itemHeight, gridWidth, padding ] );
   };
 
+  var calcGridWidth = function() {
+    var result = this._.parent.getWidth() - FRAMEWIDTH;
+    if( this._.columns ) {
+      var columnsSum = 0;
+      for( var i = 0; i < this._.columns.length; i++ ) {
+        columnsSum += this._.columns[ i ];
+      }
+      if( columnsSum > result ) {
+        result = columnsSum;
+      }
+    }
+    return result;
+  };
+
   var renderItemMetrics = function( itemHeight, itemWidth, padding ) {
     this._.grid.setItemHeight( itemHeight );
     if( this._.columns != null ) {
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 809391b..750fc77 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[] { 130, 60 } );
+    dropdown.setData( "columns", new int[] { 300, 60 } );
   }
 
   private void createKFZExample( Composite parent ) {
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 3a27dc2..f32a0de 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,20 @@
       assertEquals( 40 - PADDING_RIGHT - PADDING_LEFT, config.itemTextWidth[ 1 ] );
     },
 
+    testSetColumns_setsPopUpWidth : function() {
+      dropdown.setColumns( [ 100, 200, 100 ] );
+      showDropDown();
+
+      assertEquals( 400, popup.getInnerWidth() );
+    },
+
+    testSetColumns_setsDoesNotSetPopUpWidthIfSmaller : function() {
+      dropdown.setColumns( [ 30 ] );
+      showDropDown();
+
+      assertEquals( 100, popup.getWidth() );
+    },
+
     testSetColumns_separatesItemsByTabulator : function() {
       dropdown.setColumns( [ 30, 40 ] );
       var tab = String.fromCharCode( 9 );
