diff --git a/layout/base/nsCSSFrameConstructor.cpp b/layout/base/nsCSSFrameConstructor.cpp
index 9a4306ae81bce4f5e31f8f3ae8bda53469a51444..25bc7c4260cb6e2e7ad9f0700de5712b8470f016 100644
--- a/layout/base/nsCSSFrameConstructor.cpp
+++ b/layout/base/nsCSSFrameConstructor.cpp
@@ -3399,6 +3399,14 @@ nsCSSFrameConstructor::ConstructTableCaptionFrame(nsFrameConstructorState& aStat
   // XXXbz should we be passing in a non-null aContentParentFrame?
   nsHTMLContainerFrame::CreateViewForFrame(aNewFrame, nsnull, PR_FALSE);
 
+  PRBool haveFirstLetterStyle, haveFirstLineStyle;
+  HaveSpecialBlockStyle(aContent, aStyleContext,
+                        &haveFirstLetterStyle, &haveFirstLineStyle);
+
+  // The caption frame is a float container
+  nsFrameConstructorSaveState floatSaveState;
+  aState.PushFloatContainingBlock(aNewFrame, floatSaveState,
+                                  haveFirstLetterStyle, haveFirstLineStyle);
   nsFrameItems childItems;
   // pass in aTableCreator so ProcessChildren will call TableProcessChildren
   rv = ProcessChildren(aState, aContent, aNewFrame,