diff --git a/html/Ocean.std-theme/ocean.css b/html/Ocean.std-theme/ocean.css
index 0baa14433bb80658926e8d8a2210448e5d73c0de..79f43834b38905e0e30036328a3f628c450dfa3a 100644
--- a/html/Ocean.std-theme/ocean.css
+++ b/html/Ocean.std-theme/ocean.css
@@ -125,10 +125,6 @@ ul.links li a {
   background-image: url(plus.gif);
   background-repeat: no-repeat;
 }
-span.module.collapser,
-span.module.expander {
-  background-position: 0 0.3em;
-}
 p.caption.collapser,
 p.caption.expander {
   background-position: 0 0.4em;
@@ -518,6 +514,11 @@ div#style-menu-holder {
   clear: right;
 }
 
+#module-list span.collapser,
+#module-list span.expander {
+  background-position: 0 0.3em;
+}
+
 #module-list .package {
   float: right;
 }
diff --git a/src/Haddock/Backends/Xhtml.hs b/src/Haddock/Backends/Xhtml.hs
index 8ea55e9b20a9e942ae2733483c12fba0c4362534..1ae8b12d7a21658884f2742a282a5f0139ad48a2 100644
--- a/src/Haddock/Backends/Xhtml.hs
+++ b/src/Haddock/Backends/Xhtml.hs
@@ -262,12 +262,19 @@ mkNode :: [String] -> String -> ModuleTree -> Html
 mkNode ss p (Node s leaf pkg short ts) =
   htmlModule +++ shortDescr +++ htmlPkg +++ subtree
   where
-    modAttrs = case ts of
-      [] -> [theclass "module"]
-      _ -> collapseControl p True "module"
-
-    htmlModule = thespan ! modAttrs <<
-      (if leaf
+    modAttrs = case (ts, leaf) of
+      (_:_, False) -> collapseControl p True "module"
+      (_,   _    ) -> [theclass "module"]
+
+    cBtn = case (ts, leaf) of
+      (_:_, True) -> thespan ! collapseControl p True "" << spaceHtml
+      (_,   _   ) -> noHtml
+      -- We only need an explicit collapser button when the module name
+      -- is also a leaf, and so is a link to a module page. Indeed, the
+      -- spaceHtml is a minor hack and does upset the layout a fraction.
+      
+    htmlModule = thespan ! modAttrs << (cBtn +++
+      if leaf
         then ppModule (mkModule (stringToPackageId (fromMaybe "" pkg))
                                        (mkModuleName mdl))
         else toHtml s