=== modified file 'src/com/goldencode/p2j/ui/client/gui/BrowseGuiImpl.java'
--- src/com/goldencode/p2j/ui/client/gui/BrowseGuiImpl.java	2015-10-12 15:48:22 +0000
+++ src/com/goldencode/p2j/ui/client/gui/BrowseGuiImpl.java	2015-10-12 22:10:23 +0000
@@ -20,8 +20,7 @@
 import com.goldencode.p2j.ui.client.border.Border;
 import com.goldencode.p2j.ui.client.event.MouseEvt;
 import com.goldencode.p2j.ui.client.gui.driver.*;
-import com.goldencode.p2j.ui.client.widget.Container;
-import com.goldencode.p2j.ui.client.widget.ScrollContainer;
+import com.goldencode.p2j.ui.client.widget.*;
 
 import java.awt.event.MouseEvent;
 
@@ -386,11 +385,11 @@
       scrollPane = screen().getFactory().createScrollPane(scrollableColumnSet);
       scrollPane.setScrollBars(ScrollBar.Bars.BOTH);
       scrollPane.setShowBars(ScrollPaneGuiImpl.ShowBars.ALWAYS);
-      scrollPane.getScrollBar(ScrollBar.Orientation.HORIZONTAL).setHeight(cc.heightFromNative(SCROLLBAR_THICKNESS));
-      scrollPane.getScrollBar(ScrollBar.Orientation.VERTICAL).setWidth(cc.widthFromNative(SCROLLBAR_THICKNESS));
+      //scrollPane.getScrollBar(ScrollBar.Orientation.HORIZONTAL).setHeight(cc.heightFromNative(SCROLLBAR_THICKNESS));
+      //scrollPane.getScrollBar(ScrollBar.Orientation.VERTICAL).setWidth(cc.widthFromNative(SCROLLBAR_THICKNESS));
       scrollPane.setLocation(getScrollPaneLocation());
       add(scrollPane);
-
+      
       if (config.box)
       {
          double x = cc.baseUnits().x * BORDER_THICKNESS;
@@ -453,7 +452,7 @@
 
       if (downBased && horizontalScrollbar)
       {
-         setHeight(cc.heightFromNative(physicalDimension().height + SCROLLBAR_THICKNESS));
+         //setHeight(cc.heightFromNative(physicalDimension().height + SCROLLBAR_THICKNESS));
       }
 
       // set scroll pane size
@@ -461,18 +460,18 @@
       scrollPane.setSize(cc.dimensionFromNative(scrollPaneDimension));
 
       // calculate viewport dimensions for the scroll pane
-      viewportDimensions = new NativeDimension(scrollPaneDimension.width, scrollPaneDimension.height);
-      viewportDimensions.width -= SCROLLBAR_THICKNESS;
+      //viewportDimensions = new NativeDimension(scrollPaneDimension.width, scrollPaneDimension.height);
+      //viewportDimensions.width -= SCROLLBAR_THICKNESS;
 
       if (config.box)
       {
-         viewportDimensions.width -= 2 * BORDER_THICKNESS;
-         viewportDimensions.height -= BORDER_THICKNESS;
+         //viewportDimensions.width -= 2 * BORDER_THICKNESS;
+         //viewportDimensions.height -= BORDER_THICKNESS;
       }
 
       if (horizontalScrollbar)
       {
-         viewportDimensions.height -= SCROLLBAR_THICKNESS;
+         //viewportDimensions.height -= SCROLLBAR_THICKNESS;
       }
 
       // adjust panel sizes according to columns width
@@ -480,10 +479,10 @@
       {
          NativeDimension d = lockedColumnSet.physicalDimension();
          int lockedPaneWidth = Math.min(lockedColumnsWidth, d.width);
-         lockedColumnSet.setSize(cc.dimensionFromNative(new NativeDimension(lockedPaneWidth, viewportDimensions.height)));
+         lockedColumnSet.setWidth(cc.columnFromNative(lockedPaneWidth));
       }
 
-      scrollableColumnSet.setHeight(cc.heightFromNative(viewportDimensions.height));
+      scrollableColumnSet.setHeight(cc.heightFromNative(scrollPaneDimension.height));
 
       // update columns heights
       if (markersColumn != null)
@@ -692,7 +691,7 @@
 
             top += getTopCellOffset(i);
 
-            int viewportWidth = viewportDimensions.width;
+            int viewportWidth = getScrollPaneDimension().width;
             viewportWidth -= markersColumnWidth;
 
             int columnsWidth = totalColumnsWidth;
@@ -831,7 +830,7 @@
    }
 
    private class ColumnSetContainer
-   extends ScrollContainer<GuiOutputManager>
+   extends NativeScrollContainer<GuiOutputManager>
    {
       @Override
       public void draw()
@@ -852,73 +851,5 @@
             }
          });
       }
-
-      /**
-       * Returns the scroll dimension of this widget. The scroll dimension is
-       * the full size of the widget's content, it may be bigger than widget's
-       * visible size.
-       * <p>
-       * The returned dimension doesn't need to be in the same units as the
-       * widget's physical size but it must be compatible with the result
-       * of {@link #getVisibleDimension()} and {@link #getScrollStep()}.
-       *
-       * @return widget's scroll dimension
-       */
-      @Override
-      public NativeDimension getScrollDimension()
-      {
-         return scrollableColumnSet.physicalDimension();
-      }
-
-      /**
-       * Returns the visible dimension of this widget. The visible dimension is
-       * the visible portion of the widget's content.
-       * <p>
-       * The returned dimension doesn't need to be in the same units as the
-       * widget's physical size but it must be compatible with the result
-       * of {@link #getScrollDimension()} and {@link #getScrollStep()}.
-       *
-       * @return widget's visible dimension
-       */
-      @Override
-      public NativeDimension getVisibleDimension()
-      {
-         return viewportDimensions;
-      }
-
-      /**
-       * Directs the widget to scroll to the specified X and Y positions.
-       * It is the widget's responsibility to update its visuals accordingly.
-       * Note that the position values are in the same units as the returned
-       * dimensions from {@link #getScrollDimension()}, {@link #getVisibleDimension()}
-       * and {@link #getScrollStep()}.
-       *
-       * @param newXPosition New X scroll position.
-       * @param newYPosition New Y scroll position.
-       */
-      @Override
-      public void scroll(Integer newXPosition, Integer newYPosition)
-      {
-         NativePoint p = physicalLocation();
-         boolean dirty = false;
-
-         if (newXPosition != null && newXPosition != p.x)
-         {
-            p.x = -newXPosition;
-            dirty = true;
-         }
-
-         if (newYPosition != null && newYPosition != p.y)
-         {
-            p.y = -newYPosition;
-            dirty = true;
-         }
-
-         if (dirty)
-         {
-            setPhysicalLocation(p.x, p.y);
-            repaint();
-         }
-      }
    }
 }
\ No newline at end of file

=== modified file 'src/com/goldencode/p2j/ui/client/widget/NativeScrollContainer.java'
--- src/com/goldencode/p2j/ui/client/widget/NativeScrollContainer.java	2015-09-20 15:07:46 +0000
+++ src/com/goldencode/p2j/ui/client/widget/NativeScrollContainer.java	2015-10-12 21:57:19 +0000
@@ -86,13 +86,13 @@
       NativePoint p = physicalLocation();
       boolean dirty = false;
       
-      if (newXPosition != null && newXPosition != p.x)
+      if (newXPosition != null && -newXPosition != p.x)
       {
          p.x = -newXPosition;
          dirty = true;
       }
       
-      if (newYPosition != null && newYPosition != p.y)
+      if (newYPosition != null && -newYPosition != p.y)
       {
          p.y = -newYPosition;
          dirty = true;

