diff --git a/user/src/com/google/gwt/layout/client/Layout.java b/user/src/com/google/gwt/layout/client/Layout.java
index 218432a..c92e5b2 100644
--- a/user/src/com/google/gwt/layout/client/Layout.java
+++ b/user/src/com/google/gwt/layout/client/Layout.java
@@ -511,6 +511,9 @@
         l.heightUnit = l.targetHeightUnit;
 
         impl.layout(l);
+        if (callback != null) {
+          callback.onLayout(l, 1.0);
+        }
       }
 
       impl.finalizeLayout(parentElem);
diff --git a/user/test/com/google/gwt/layout/client/LayoutTest.java b/user/test/com/google/gwt/layout/client/LayoutTest.java
index a4a3098..9b7f595 100644
--- a/user/test/com/google/gwt/layout/client/LayoutTest.java
+++ b/user/test/com/google/gwt/layout/client/LayoutTest.java
@@ -38,6 +38,9 @@
 import com.google.gwt.user.client.ResizeHelper;
 import com.google.gwt.user.client.Window;
 
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * Tests for the {@link Layout} class.
  */
@@ -275,6 +278,28 @@
   }
 
   /**
+   * Make sure to call onLayout on the AnimationCallback, when there is
+   * no animation (duration =0). This will make sure that onResize will be
+   * called on the child panels.
+   */
+  public void testOnLayoutWhenNoAnimation() {
+    final Map<Layer,Double> called = new HashMap();
+    layout.layout(0, new Layout.AnimationCallback() {
+      @Override
+      public void onAnimationComplete() {
+      }
+
+      @Override
+      public void onLayout(Layer layer, double progress) {
+        called.put(layer,progress);
+      }
+    });
+    assertEquals(2,called.size());
+    assertEquals(1.0,called.get(layer0));
+    assertEquals(1.0,called.get(layer1));
+  }
+
+  /**
    * Ensures that two children laid out using various units in such a way that
    * they should abut one another actually do so.
    */
diff --git a/user/test/com/google/gwt/user/client/ui/DeckLayoutPanelTest.java b/user/test/com/google/gwt/user/client/ui/DeckLayoutPanelTest.java
index 5103ad6..e51d240 100644
--- a/user/test/com/google/gwt/user/client/ui/DeckLayoutPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/DeckLayoutPanelTest.java
@@ -16,6 +16,9 @@
 
 package com.google.gwt.user.client.ui;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Test for {@link DeckLayoutPanel}.
  */
@@ -49,6 +52,24 @@
     assertTrue(labels[1].isVisible());
   }
 
+  /**
+   * Test that forcing layout will call onResize only once.
+   */
+  public void testForceLayoutNoRedundantOnResize() {
+    final List<Boolean> called = new ArrayList<>();
+    DeckLayoutPanel deck = createPanel();
+    SimpleLayoutPanel child = new SimpleLayoutPanel() {
+      @Override
+      public void onResize() {
+        super.onResize();
+        called.add(true);
+      }
+    };
+    deck.add(child);
+    deck.forceLayout();
+    assertEquals(1,called.size());
+  }
+
   public void testSetWidget() {
     DeckLayoutPanel deck = createPanel();
     Label[] labels = new Label[2];
diff --git a/user/test/com/google/gwt/user/client/ui/DockLayoutPanelTest.java b/user/test/com/google/gwt/user/client/ui/DockLayoutPanelTest.java
index 9a8f702..fb03d0d 100644
--- a/user/test/com/google/gwt/user/client/ui/DockLayoutPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/DockLayoutPanelTest.java
@@ -18,6 +18,9 @@
 import com.google.gwt.dom.client.Style.Unit;
 import com.google.gwt.user.client.ui.DockLayoutPanel.Direction;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Tests for {@link DockLayoutPanel}.
  */
@@ -181,6 +184,24 @@
     assertEquals(Direction.LINE_START, panel.getWidgetDirection(widget));
   }
 
+  /**
+   * Test that forcing layout will call onResize only once.
+   */
+  public void testForceLayoutNoRedundantOnResize() {
+    final List<Boolean> called = new ArrayList<>();
+    DockLayoutPanel panel = createDockLayoutPanel();
+    SimpleLayoutPanel child = new SimpleLayoutPanel() {
+      @Override
+      public void onResize() {
+        super.onResize();
+        called.add(true);
+      }
+    };
+    panel.addWest(child,123.4);
+    panel.forceLayout();
+    assertEquals(1,called.size());
+  }
+
   protected DockLayoutPanel createDockLayoutPanel() {
     return new DockLayoutPanel(Unit.PX);
   }
diff --git a/user/test/com/google/gwt/user/client/ui/LayoutPanelTest.java b/user/test/com/google/gwt/user/client/ui/LayoutPanelTest.java
index 1999612..a6e1219 100644
--- a/user/test/com/google/gwt/user/client/ui/LayoutPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/LayoutPanelTest.java
@@ -25,6 +25,9 @@
 import com.google.gwt.layout.client.Layout.Layer;
 import com.google.gwt.user.client.Command;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * Tests for {@link LayoutPanel}. Note that this only tests LayoutPanel-specific
  * behavior, not general layout correctness, which is covered by
@@ -311,6 +314,24 @@
             Unit.PX));
   }
 
+  /**
+   * Test that forcing layout will call onResize only once.
+   */
+  public void testForceLayoutNoRedundantOnResize() {
+    final List<Boolean> called = new ArrayList<>();
+    LayoutPanel layoutPanel = new LayoutPanel();
+    SimpleLayoutPanel child = new SimpleLayoutPanel() {
+      @Override
+      public void onResize() {
+        super.onResize();
+        called.add(true);
+      }
+    };
+    layoutPanel.add(child);
+    layoutPanel.forceLayout();
+    assertEquals(1,called.size());
+  }
+
   protected LayoutPanel createLayoutPanel() {
     return new LayoutPanel();
   }
diff --git a/user/test/com/google/gwt/user/client/ui/SplitLayoutPanelTest.java b/user/test/com/google/gwt/user/client/ui/SplitLayoutPanelTest.java
index 6a6818e..3b4ff2b 100644
--- a/user/test/com/google/gwt/user/client/ui/SplitLayoutPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/SplitLayoutPanelTest.java
@@ -20,6 +20,8 @@
 import com.google.gwt.junit.DoNotRunWith;
 import com.google.gwt.junit.Platform;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Locale;
 
 /**
@@ -209,6 +211,24 @@
     assertEquals(390, west.getOffsetWidth());
   }
 
+  /**
+   * Test that forcing layout will call onResize only once.
+   */
+  public void testForceLayoutNoRedundantOnResize() {
+    final List<Boolean> called = new ArrayList<>();
+    SplitLayoutPanel panel = new SplitLayoutPanel();
+    SimpleLayoutPanel child = new SimpleLayoutPanel() {
+      @Override
+      public void onResize() {
+        super.onResize();
+        called.add(true);
+      }
+    };
+    panel.addWest(child,123.4);
+    panel.forceLayout();
+    assertEquals(1,called.size());
+  }
+
   @Override
   protected DockLayoutPanel createDockLayoutPanel() {
     return new SplitLayoutPanel();
diff --git a/user/test/com/google/gwt/user/client/ui/StackLayoutPanelTest.java b/user/test/com/google/gwt/user/client/ui/StackLayoutPanelTest.java
index ff4cfc6..969c069 100644
--- a/user/test/com/google/gwt/user/client/ui/StackLayoutPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/StackLayoutPanelTest.java
@@ -386,6 +386,24 @@
   }
 
   /**
+   * Test that forcing layout will call onResize only once.
+   */
+  public void testForceLayoutNoRedundantOnResize() {
+    final List<Boolean> called = new ArrayList<>();
+    StackLayoutPanel panel = new StackLayoutPanel(Unit.EM);
+    SimpleLayoutPanel child = new SimpleLayoutPanel() {
+      @Override
+      public void onResize() {
+        super.onResize();
+        called.add(true);
+      }
+    };
+    panel.add(child,"foo", 1);
+    panel.forceLayout();
+    assertEquals(1,called.size());
+  }
+
+  /**
    * Asserts that <b>widget</b> is attached to <b>panel</b> as a child in the
    * logical representation of <b>panel</b>.
    * 
diff --git a/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java b/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java
index 570a53d..4646edc 100644
--- a/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java
+++ b/user/test/com/google/gwt/user/client/ui/TabLayoutPanelTest.java
@@ -508,4 +508,22 @@
 
     delayTestFinish(200);
   }
+
+  /**
+   * Test that forcing layout will call onResize only once.
+   */
+  public void testForceLayoutNoRedundantOnResize() {
+    final List<Boolean> called = new ArrayList<>();
+    final TabLayoutPanel panel = new TabLayoutPanel(2, Unit.EM);
+    SimpleLayoutPanel child = new SimpleLayoutPanel() {
+      @Override
+      public void onResize() {
+        super.onResize();
+        called.add(true);
+      }
+    };
+    panel.add(child,"Tab1");
+    panel.forceLayout();
+    assertEquals(1,called.size());
+  }
 }
