diff --git a/html-test/ref/TypeFamilies.html b/html-test/ref/TypeFamilies.html
index 091073fa6da5619fcf0d1ecf7f8214b15edcaccc..fd98073103cd301fe81051c35eed93e37c11d8f5 100644
--- a/html-test/ref/TypeFamilies.html
+++ b/html-test/ref/TypeFamilies.html
@@ -80,6 +80,22 @@ window.onload = function () {pageLoad();setSynopsis("mini_TypeFamilies.html");};
 	    >Y</a
 	    ></li
 	  ><li class="src short"
+	  ><span class="keyword"
+	    >data</span
+	    > <a href=""
+	    >Z</a
+	    ><ul class="subs"
+	    ><li
+	      >= <a href=""
+		>ZA</a
+		></li
+	      ><li
+	      >| <a href=""
+		>ZB</a
+		></li
+	      ></ul
+	    ></li
+	  ><li class="src short"
 	  ><span class="keyword"
 	    >class</span
 	    > <a href=""
@@ -253,17 +269,47 @@ window.onload = function () {pageLoad();setSynopsis("mini_TypeFamilies.html");};
 		  ><span class="keyword"
 		    >data</span
 		    > <a href=""
-		    >Bat</a
+		    >AssocD</a
+		    > * <a href=""
+		    >X</a
+		    > = <a name="v:AssocX" class="def"
+		    >AssocX</a
+		    ></td
+		  ><td class="doc empty"
+		  >&nbsp;</td
+		  ></tr
+		><tr
+		><td class="src"
+		  ><span class="keyword"
+		    >type</span
+		    > <a href=""
+		    >AssocT</a
+		    > * <a href=""
+		    >X</a
+		    > = <a href=""
+		    >Foo</a
+		    > * <a href=""
+		    >X</a
+		    ></td
+		  ><td class="doc empty"
+		  >&nbsp;</td
+		  ></tr
+		><tr
+		><td class="src"
+		  ><span class="keyword"
+		    >data</span
 		    > <a href=""
+		    >Bat</a
+		    > * <a href=""
 		    >X</a
-		    > <ul class="subs"
-		    ><li
+		    > <ul class="inst"
+		    ><li class="inst"
 		      >= <a name="v:BatX" class="def"
 			>BatX</a
 			> <a href=""
 			>X</a
 			></li
-		      ><li
+		      ><li class="inst"
 		      >| <a name="v:BatXX" class="def"
 			>BatXX</a
 			> { <ul class="subs"
@@ -289,36 +335,6 @@ window.onload = function () {pageLoad();setSynopsis("mini_TypeFamilies.html");};
 		    ></td
 		  ></tr
 		><tr
-		><td class="src"
-		  ><span class="keyword"
-		    >data</span
-		    > <a href=""
-		    >AssocD</a
-		    > * <a href=""
-		    >X</a
-		    > = <a name="v:AssocX" class="def"
-		    >AssocX</a
-		    ></td
-		  ><td class="doc empty"
-		  >&nbsp;</td
-		  ></tr
-		><tr
-		><td class="src"
-		  ><span class="keyword"
-		    >type</span
-		    > <a href=""
-		    >AssocT</a
-		    > * <a href=""
-		    >X</a
-		    > = <a href=""
-		    >Foo</a
-		    > * <a href=""
-		    >X</a
-		    ></td
-		  ><td class="doc empty"
-		  >&nbsp;</td
-		  ></tr
-		><tr
 		><td class="src"
 		  ><span class="keyword"
 		    >type</span
@@ -423,36 +439,6 @@ window.onload = function () {pageLoad();setSynopsis("mini_TypeFamilies.html");};
 		  >&nbsp;</td
 		  ></tr
 		><tr
-		><td class="src"
-		  ><span class="keyword"
-		    >data</span
-		    > <a href=""
-		    >Bat</a
-		    > <a href=""
-		    >Y</a
-		    > <ul class="subs"
-		    ><li
-		      >= <a name="v:BatY" class="def"
-			>BatY</a
-			> <a href=""
-			>Y</a
-			></li
-		      ><li
-		      >| <a href=""
-			>X</a
-			> <a name="v::-43-" class="def"
-			>:+</a
-			> <a href=""
-			>X</a
-			></li
-		      ></ul
-		    ></td
-		  ><td class="doc"
-		  ><p
-		    >Doc for: data instance Bat Y</p
-		    ></td
-		  ></tr
-		><tr
 		><td class="src"
 		  ><span class="keyword"
 		    >data</span
@@ -476,13 +462,31 @@ window.onload = function () {pageLoad();setSynopsis("mini_TypeFamilies.html");};
 		    >Y</a
 		    > = <a href=""
 		    >Bat</a
-		    > <a href=""
+		    > * <a href=""
 		    >Y</a
 		    ></td
 		  ><td class="doc empty"
 		  >&nbsp;</td
 		  ></tr
 		><tr
+		><td class="src"
+		  ><span class="keyword"
+		    >data</span
+		    > <a href=""
+		    >Bat</a
+		    > * <a href=""
+		    >Y</a
+		    > = <a name="v:BatY" class="def"
+		    >BatY</a
+		    > <a href=""
+		    >Y</a
+		    ></td
+		  ><td class="doc"
+		  ><p
+		    >Doc for: data instance Bat Y</p
+		    ></td
+		  ></tr
+		><tr
 		><td class="src"
 		  ><span class="keyword"
 		    >type</span
@@ -515,6 +519,102 @@ window.onload = function () {pageLoad();setSynopsis("mini_TypeFamilies.html");};
 	    ></div
 	  ></div
 	><div class="top"
+	><p class="src"
+	  ><span class="keyword"
+	    >data</span
+	    > <a name="t:Z" class="def"
+	    >Z</a
+	    ></p
+	  ><div class="doc"
+	  ><p
+	    >Doc for: data Z</p
+	    ></div
+	  ><div class="subs constructors"
+	  ><p class="caption"
+	    >Constructors</p
+	    ><table
+	    ><tr
+	      ><td class="src"
+		><a name="v:ZA" class="def"
+		  >ZA</a
+		  ></td
+		><td class="doc empty"
+		>&nbsp;</td
+		></tr
+	      ><tr
+	      ><td class="src"
+		><a name="v:ZB" class="def"
+		  >ZB</a
+		  ></td
+		><td class="doc empty"
+		>&nbsp;</td
+		></tr
+	      ></table
+	    ></div
+	  ><div class="subs instances"
+	  ><p id="control.i:Z" class="caption collapser" onclick="toggleSection('i:Z')"
+	    >Instances</p
+	    ><div id="section.i:Z" class="show"
+	    ><table
+	      ><tr
+		><td class="src"
+		  ><span class="keyword"
+		    >data</span
+		    > <a href=""
+		    >Bat</a
+		    > <a href=""
+		    >Z</a
+		    > <span class="keyword"
+		    >where</span
+		    ><ul class="inst"
+		    ><li class="inst"
+		      ><a name="v:BatZ1" class="def"
+			>BatZ1</a
+			> ::  <a href=""
+			>Z</a
+			> -&gt; <a href=""
+			>Bat</a
+			> <a href=""
+			>Z</a
+			> <a href=""
+			>ZA</a
+			></li
+		      ><li class="inst"
+		      ><a name="v:BatZ2" class="def"
+			>BatZ2</a
+			> :: { <ul class="subs"
+			><li
+			  ><a name="v:batx" class="def"
+			    >batx</a
+			    > :: <a href=""
+			    >X</a
+			    ></li
+			  ><li
+			  ><a name="v:baty" class="def"
+			    >baty</a
+			    > :: <a href=""
+			    >Y</a
+			    ></li
+			  ></ul
+			> } -&gt; <a href=""
+			>Bat</a
+			> <a href=""
+			>Z</a
+			> <a href=""
+			>ZB</a
+			></li
+		      ></ul
+		    ></td
+		  ><td class="doc"
+		  ><p
+		    >Doc for: data instance Bat Z</p
+		    ></td
+		  ></tr
+		></table
+	      ></div
+	    ></div
+	  ></div
+	><div class="top"
 	><p class="src"
 	  ><span class="keyword"
 	    >class</span
@@ -633,27 +733,51 @@ window.onload = function () {pageLoad();setSynopsis("mini_TypeFamilies.html");};
 		    > <a href=""
 		    >Bat</a
 		    > <a href=""
-		    >Y</a
-		    > <ul class="subs"
-		    ><li
-		      >= <a name="v:BatY" class="def"
-			>BatY</a
+		    >Z</a
+		    > <span class="keyword"
+		    >where</span
+		    ><ul class="inst"
+		    ><li class="inst"
+		      ><a name="v:BatZ1" class="def"
+			>BatZ1</a
+			> ::  <a href=""
+			>Z</a
+			> -&gt; <a href=""
+			>Bat</a
+			> <a href=""
+			>Z</a
 			> <a href=""
-			>Y</a
+			>ZA</a
 			></li
-		      ><li
-		      >| <a href=""
-			>X</a
-			> <a name="v::-43-" class="def"
-			>:+</a
+		      ><li class="inst"
+		      ><a name="v:BatZ2" class="def"
+			>BatZ2</a
+			> :: { <ul class="subs"
+			><li
+			  ><a name="v:batx" class="def"
+			    >batx</a
+			    > :: <a href=""
+			    >X</a
+			    ></li
+			  ><li
+			  ><a name="v:baty" class="def"
+			    >baty</a
+			    > :: <a href=""
+			    >Y</a
+			    ></li
+			  ></ul
+			> } -&gt; <a href=""
+			>Bat</a
 			> <a href=""
-			>X</a
+			>Z</a
+			> <a href=""
+			>ZB</a
 			></li
 		      ></ul
 		    ></td
 		  ><td class="doc"
 		  ><p
-		    >Doc for: data instance Bat Y</p
+		    >Doc for: data instance Bat Z</p
 		    ></td
 		  ></tr
 		><tr
@@ -662,16 +786,34 @@ window.onload = function () {pageLoad();setSynopsis("mini_TypeFamilies.html");};
 		    >data</span
 		    > <a href=""
 		    >Bat</a
+		    > * <a href=""
+		    >Y</a
+		    > = <a name="v:BatY" class="def"
+		    >BatY</a
 		    > <a href=""
+		    >Y</a
+		    ></td
+		  ><td class="doc"
+		  ><p
+		    >Doc for: data instance Bat Y</p
+		    ></td
+		  ></tr
+		><tr
+		><td class="src"
+		  ><span class="keyword"
+		    >data</span
+		    > <a href=""
+		    >Bat</a
+		    > * <a href=""
 		    >X</a
-		    > <ul class="subs"
-		    ><li
+		    > <ul class="inst"
+		    ><li class="inst"
 		      >= <a name="v:BatX" class="def"
 			>BatX</a
 			> <a href=""
 			>X</a
 			></li
-		      ><li
+		      ><li class="inst"
 		      >| <a name="v:BatXX" class="def"
 			>BatXX</a
 			> { <ul class="subs"
diff --git a/html-test/src/TypeFamilies.hs b/html-test/src/TypeFamilies.hs
index 5cd4480edf75adfe8424aa46992cdebf43497180..a79d503e7e943a4ea19904d7362e1e03f72f62a6 100644
--- a/html-test/src/TypeFamilies.hs
+++ b/html-test/src/TypeFamilies.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, UndecidableInstances, PolyKinds, TypeOperators, DataKinds, MultiParamTypeClasses #-}
+{-# LANGUAGE TypeFamilies, UndecidableInstances, PolyKinds, TypeOperators, DataKinds, MultiParamTypeClasses, GADTs #-}
 
 -- | Doc for: module TypeFamilies
 module TypeFamilies where
@@ -14,6 +14,9 @@ data X
 -- | Doc for: data Y
 data Y
 
+-- | Doc for: data Z
+data Z = ZA | ZB
+
 -- | Doc for: class Test a
 class Test a
 
@@ -31,7 +34,7 @@ type instance Foo X = Y
 type instance Foo Y = X
 
 -- | Doc for: data family Bat a
-data family Bat a :: *
+data family Bat (a :: k) :: *
 
 -- | Doc for: data instance Bat X
 data instance Bat X
@@ -39,9 +42,12 @@ data instance Bat X
   | BatXX { aaa :: X , bbb :: Y } -- ^ Doc for: BatXX { ... }
 
 -- | Doc for: data instance Bat Y
-data instance Bat Y
-  = BatY Y -- ^ Doc for: BatY Y
-  | X :+ X -- X :+ X
+data instance Bat Y = BatY Y -- ^ Doc for: BatY Y
+
+-- | Doc for: data instance Bat Z
+data instance Bat (z :: Z) where
+  BatZ1 :: Z -> Bat ZA
+  BatZ2 :: { batx :: X, baty :: Y } -> Bat ZB
 
 -- | Doc for: class Assoc a
 class Assoc a where
diff --git a/resources/html/Ocean.std-theme/ocean.css b/resources/html/Ocean.std-theme/ocean.css
index ff4d1b532c9eb4687aeca28dfc808ff1708a6a06..de436324ff062ee9a4174b890c0dfc1ac4c3568a 100644
--- a/resources/html/Ocean.std-theme/ocean.css
+++ b/resources/html/Ocean.std-theme/ocean.css
@@ -433,19 +433,18 @@ div#style-menu-holder {
   margin: 0;
 }
 
-.subs ul {
+/* Render short-style data instances */
+.inst ul {
   height: 100%;
   padding: 0.5em;
   margin: 0;
 }
 
-.subs ul,
-.subs ul li.src {
+.inst, .inst li {
   list-style: none;
   margin-left: 1em;
 }
 
-
 .top p.src {
   border-top: 1px solid #ccc;
 }
diff --git a/src/Haddock/Backends/Xhtml/Decl.hs b/src/Haddock/Backends/Xhtml/Decl.hs
index 67185bff9766b0478fd8b9f5464ffeb2604d9210..2dc1e0e74f0dbc34f79a0be328873323af26ba11 100644
--- a/src/Haddock/Backends/Xhtml/Decl.hs
+++ b/src/Haddock/Backends/Xhtml/Decl.hs
@@ -410,7 +410,7 @@ ppShortClassDecl summary links (ClassDecl { tcdCtxt = lctxt, tcdLName = lname, t
   if not (any isVanillaLSig sigs) && null ats
     then (if summary then id else topDeclElem links loc splice [nm]) hdr
     else (if summary then id else topDeclElem links loc splice [nm]) (hdr <+> keyword "where")
-      +++ shortSubDecls
+      +++ shortSubDecls False
           (
             [ ppAssocType summary links doc at [] splice unicode qual | at <- ats
               , let doc = lookupAnySubdoc (unL $ fdLName $ unL at) subdocs ]  ++
@@ -532,14 +532,14 @@ ppShortDataDecl summary dataInst dataDecl unicode qual
   | [] <- cons = dataHeader
 
   | [lcon] <- cons, ResTyH98 <- resTy,
-    (cHead,cBody,cFoot) <- ppShortConstrParts summary (unLoc lcon) unicode qual
+    (cHead,cBody,cFoot) <- ppShortConstrParts summary dataInst (unLoc lcon) unicode qual
        = (dataHeader <+> equals <+> cHead) +++ cBody +++ cFoot
 
   | ResTyH98 <- resTy = dataHeader
-      +++ shortSubDecls (zipWith doConstr ('=':repeat '|') cons)
+      +++ shortSubDecls dataInst (zipWith doConstr ('=':repeat '|') cons)
 
   | otherwise = (dataHeader <+> keyword "where")
-      +++ shortSubDecls (map doGADTConstr cons)
+      +++ shortSubDecls dataInst (map doGADTConstr cons)
 
   where
     dataHeader
@@ -591,13 +591,13 @@ ppDataDecl summary links instances fixities subdocs loc doc dataDecl
 ppShortConstr :: Bool -> ConDecl DocName -> Unicode -> Qualification -> Html
 ppShortConstr summary con unicode qual = cHead <+> cBody <+> cFoot
   where
-    (cHead,cBody,cFoot) = ppShortConstrParts summary con unicode qual
+    (cHead,cBody,cFoot) = ppShortConstrParts summary False con unicode qual
 
 
 -- returns three pieces: header, body, footer so that header & footer can be
 -- incorporated into the declaration
-ppShortConstrParts :: Bool -> ConDecl DocName -> Unicode -> Qualification -> (Html, Html, Html)
-ppShortConstrParts summary con unicode qual = case con_res con of
+ppShortConstrParts :: Bool -> Bool -> ConDecl DocName -> Unicode -> Qualification -> (Html, Html, Html)
+ppShortConstrParts summary dataInst con unicode qual = case con_res con of
   ResTyH98 -> case con_details con of
     PrefixCon args ->
       (header_ unicode qual +++ hsep (ppBinder summary occ
@@ -626,7 +626,7 @@ ppShortConstrParts summary con unicode qual = case con_res con of
     InfixCon arg1 arg2 -> (doGADTCon [arg1, arg2] resTy, noHtml, noHtml)
 
   where
-    doRecordFields fields = shortSubDecls (map (ppShortField summary unicode qual) fields)
+    doRecordFields fields = shortSubDecls dataInst (map (ppShortField summary unicode qual) fields)
     doGADTCon args resTy = ppBinder summary occ <+> dcolon unicode <+> hsep [
                              ppForAll forall_ ltvs lcontext unicode qual,
                              ppLType unicode qual (foldr mkFunTy resTy args) ]
diff --git a/src/Haddock/Backends/Xhtml/Layout.hs b/src/Haddock/Backends/Xhtml/Layout.hs
index d3d9442438c00d3bdb65ff30df4565720b184f5c..e84a57b327cad8161fac0dfd0d96299632f41964 100644
--- a/src/Haddock/Backends/Xhtml/Layout.hs
+++ b/src/Haddock/Backends/Xhtml/Layout.hs
@@ -104,8 +104,12 @@ shortDeclList :: [Html] -> Html
 shortDeclList items = ulist << map (li ! [theclass "src short"] <<) items
 
 
-shortSubDecls :: [Html] -> Html
-shortSubDecls items = ulist ! [theclass "subs"] << map (li <<) items
+shortSubDecls :: Bool -> [Html] -> Html
+shortSubDecls inst items = ulist ! [theclass c] << map (i <<) items
+  where i | inst      = li ! [theclass "inst"]
+          | otherwise = li
+        c | inst      = "inst"
+          | otherwise = "subs"
 
 
 divTopDecl :: Html -> Html