diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Table.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Table.java
index 23446e2..898df8f 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Table.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Table.java
@@ -2515,7 +2515,7 @@
 
 
   final int getVisibleItemCount( boolean includePartlyVisible ) {
-    int clientHeight = getBounds().height - getHeaderHeight() - getHScrollBarHeight();
+    int clientHeight = getClientArea().height - getHeaderHeight();
     int result = 0;
     if( clientHeight >= 0 ) {
       int itemHeight = getItemHeight();
diff --git a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Tree.java b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Tree.java
index 21407f9..71ac7aa 100644
--- a/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Tree.java
+++ b/bundles/org.eclipse.rap.rwt/src/org/eclipse/swt/widgets/Tree.java
@@ -2077,8 +2077,8 @@
     }
   }
 
-  private int getVisibleRowCount( boolean includePartlyVisible ) {
-    int clientHeight = getBounds().height - getHeaderHeight() - getHScrollBarHeight();
+  final int getVisibleRowCount( boolean includePartlyVisible ) {
+    int clientHeight = getClientArea().height - getHeaderHeight();
     int result = 0;
     if( clientHeight >= 0 ) {
       int itemHeight = getItemHeight();
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Table_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Table_Test.java
index e9cab8c..c46d0f2 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Table_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Table_Test.java
@@ -1907,11 +1907,12 @@
     assertEquals( expected, actual );
   }
 
-  public void testGetVisibleItemCount() {
-    Table table = new Table( shell, SWT.NO_SCROLL );
+  public void testGetVisibleItemCount_WithBorder() {
+    Table table = new Table( shell, SWT.NO_SCROLL | SWT.BORDER );
     createTableItems( table, 10 );
     int itemHeight = table.getItemHeight();
-    table.setSize( 100, 5 * itemHeight );
+    int borderWidth = table.getBorderWidth();
+    table.setSize( 100, 5 * itemHeight + 2 * borderWidth );
     assertEquals( 5, table.getVisibleItemCount( true ) );
     assertEquals( 5, table.getVisibleItemCount( false ) );
   }
@@ -1921,8 +1922,8 @@
     createTableItems( table, 10 );
     int itemHeight = table.getItemHeight();
     table.setSize( 100, ( 5 * itemHeight ) + ( itemHeight / 2 ) );
-    assertEquals( 5, table.getVisibleItemCount( false ) );
     assertEquals( 6, table.getVisibleItemCount( true ) );
+    assertEquals( 5, table.getVisibleItemCount( false ) );
   }
 
   public void testGetItemHeight() throws IOException {
diff --git a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Tree_Test.java b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Tree_Test.java
index 8f8db62..5e519f2 100644
--- a/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Tree_Test.java
+++ b/tests/org.eclipse.rap.rwt.test/src/org/eclipse/swt/widgets/Tree_Test.java
@@ -1854,6 +1854,34 @@
     assertEquals( 100, adapter.getScrollLeft() );
   }
 
+  public void testGetVisibleRowCount() {
+    Tree tree = new Tree( composite, SWT.NO_SCROLL );
+    createTreeItems( tree, 10 );
+    int itemHeight = tree.getItemHeight();
+    tree.setSize( 100, 5 * itemHeight );
+    assertEquals( 5, tree.getVisibleRowCount( true ) );
+    assertEquals( 5, tree.getVisibleRowCount( false ) );
+  }
+
+  public void testGetVisibleRowCount_WithBorder() {
+    Tree tree = new Tree( composite, SWT.NO_SCROLL | SWT.BORDER );
+    createTreeItems( tree, 10 );
+    int itemHeight = tree.getItemHeight();
+    int borderWidth = tree.getBorderWidth();
+    tree.setSize( 100, 5 * itemHeight + 2 * borderWidth );
+    assertEquals( 5, tree.getVisibleRowCount( true ) );
+    assertEquals( 5, tree.getVisibleRowCount( false ) );
+  }
+
+  public void testGetVisibleItemCountWithPartiallyVisibleItem() {
+    Tree tree = new Tree( composite, SWT.NO_SCROLL );
+    createTreeItems( tree, 10 );
+    int itemHeight = tree.getItemHeight();
+    tree.setSize( 100, ( 5 * itemHeight ) + ( itemHeight / 2 ) );
+    assertEquals( 6, tree.getVisibleRowCount( true ) );
+    assertEquals( 5, tree.getVisibleRowCount( false ) );
+  }
+
   /////////
   // Helper
 
