diff --git a/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java b/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java
index f98809b..0a2422f 100644
--- a/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java
+++ b/user/src/com/google/gwt/user/client/ui/SplitLayoutPanel.java
@@ -100,6 +100,8 @@
     private final boolean reverse;
     private int minSize;
 
+    private double centerSize, syncedCenterSize;
+
     public Splitter(Widget target, boolean reverse) {
       this.target = target;
       this.reverse = reverse;
@@ -176,7 +178,26 @@
 
     protected abstract int getTargetSize();
 
+    private double getMaxSize() {
+      // To avoid seeing stale center size values due to deferred layout
+      // updates, maintain our own copy up to date and resync when the
+      // DockLayoutPanel value changes.
+      double newCenterSize = getCenterSize();
+      if (syncedCenterSize != newCenterSize) {
+        syncedCenterSize = newCenterSize;
+        centerSize = newCenterSize;
+      }
+
+      return Math.max(((LayoutData) target.getLayoutData()).size + centerSize,
+                0);
+    }
+
     private void setAssociatedWidgetSize(double size) {
+      double maxSize = getMaxSize();
+      if (size > maxSize) {
+        size = maxSize;
+      }
+
       if (size < minSize) {
         size = minSize;
       }
@@ -186,12 +207,8 @@
         return;
       }
 
-      // Don't grow beyond remaining space
-      double centerSize = getCenterSize();
-      if (size - layout.size > centerSize) {
-        size = layout.size + centerSize;
-      }
-
+      // Adjust our view until the deferred layout gets scheduled.
+      centerSize += layout.size - size;
       layout.size = size;
 
       // Defer actually updating the layout, so that if we receive many
