diff --git a/doc/markup.rst b/doc/markup.rst
index a00caba66a9343d27065d37912af853fea666250..a587948bc4d2d1b6821615f387f3fbcb3f141a68 100644
--- a/doc/markup.rst
+++ b/doc/markup.rst
@@ -1263,3 +1263,14 @@ subject to change in the future per user feedback. ::
     -- Some comment
     --
     -- @since 1.2.3
+
+Additionally, as of GHC 9.10 ``@since`` in docstrings following export list items: ::
+
+    module Mod
+        ( wombat -- ^ @since 2.0
+        ) where ...
+
+This has the function of superceding the ``@since`` annotation given at the
+definition site of ``wombat`` and can be used to record changes in the
+module exports, particularly when a declaration is re-exported from another
+module.
diff --git a/haddock-api/src/Haddock/Backends/Xhtml/DocMarkup.hs b/haddock-api/src/Haddock/Backends/Xhtml/DocMarkup.hs
index 91a5b1201f8602f370b1d9ff739d3027bab2f6dd..d3282ef69bc11afe207593ff3322a64579c4d430 100644
--- a/haddock-api/src/Haddock/Backends/Xhtml/DocMarkup.hs
+++ b/haddock-api/src/Haddock/Backends/Xhtml/DocMarkup.hs
@@ -198,14 +198,17 @@ hackMarkup fmt' currPkg h' =
                          in (markupAppend fmt x y, m ++ m')
 
 renderMeta :: DocMarkup id Html -> Maybe Package -> Meta -> Html
-renderMeta fmt currPkg (Meta { _version = Just x, _package = pkg }) =
+renderMeta fmt currPkg m =
+  maybe noHtml (renderMetaSince fmt currPkg) (_metaSince m)
+
+renderMetaSince :: DocMarkup id Html -> Maybe Package -> MetaSince -> Html
+renderMetaSince fmt currPkg (MetaSince { sincePackage = pkg, sinceVersion = ver }) =
   markupParagraph fmt . markupEmphasis fmt . toHtml $
-    "Since: " ++ formatPkgMaybe pkg ++ formatVersion x
+    "Since: " ++ formatPkgMaybe pkg ++ formatVersion ver
   where
     formatVersion v = concat . intersperse "." $ map show v
     formatPkgMaybe (Just p) | Just p /= currPkg = p ++ "-"
     formatPkgMaybe _ = ""
-renderMeta _ _ _ = noHtml
 
 -- | Goes through 'hackMarkup' to generate the 'Html' rather than
 -- skipping straight to 'markup': this allows us to employ XHtml
diff --git a/haddock-api/src/Haddock/Interface/Create.hs b/haddock-api/src/Haddock/Interface/Create.hs
index 73a9bdc3411308975c86d9552ad1a4189a3ff71a..29a457d1413b4f5b97a43c87fdb60cc62acd6214 100644
--- a/haddock-api/src/Haddock/Interface/Create.hs
+++ b/haddock-api/src/Haddock/Interface/Create.hs
@@ -70,7 +70,7 @@ import GHC.Builtin.Names
 import GHC.Builtin.Types
 import GHC.Builtin.Types.Prim
 import GHC.Types.SafeHaskell
-import Control.Arrow ((&&&))
+import Control.Arrow ((&&&), first)
 import GHC.Iface.Syntax
 
 createInterface1
@@ -157,6 +157,8 @@ createInterface1 flags unit_state mod_sum mod_iface ifaces inst_ifaces (instance
     let docsDecls = Map.fromList $ UniqMap.nonDetUniqMapToList mod_iface_docs.docs_decls
     traverse (processDocStringsParas dflags pkg_name) docsDecls
 
+  exportsSinceMap <- mkExportSinceMap dflags pkg_name mod_iface_docs
+
   (argMap :: Map Name (Map Int (MDoc Name))) <- do
       let docsArgs = Map.fromList $ UniqMap.nonDetUniqMapToList mod_iface_docs.docs_args
       (result :: Map Name (IntMap (MDoc Name))) <-
@@ -188,6 +190,7 @@ createInterface1 flags unit_state mod_sum mod_iface ifaces inst_ifaces (instance
     pkg_name
     mdl
     transitiveWarnings
+    exportsSinceMap
     docMap
     argMap
     fixities
@@ -246,6 +249,29 @@ createInterface1 flags unit_state mod_sum mod_iface ifaces inst_ifaces (instance
     --
     funAvail  = [ AvailTC fUNTyConName [fUNTyConName] ]
 
+-------------------------------------------------------------------------------
+-- Export @since annotations
+-------------------------------------------------------------------------------
+mkExportSinceMap
+  :: forall m. (MonadIO m)
+  => DynFlags
+  -> Maybe Package
+  -> Docs
+  -> IfM m (Map Name MetaSince)
+mkExportSinceMap dflags pkg_name docs = do
+    Map.unions <$> traverse processExportDoc (UniqMap.nonDetUniqMapToList (docs_exports docs))
+  where
+    processExportDoc :: (Name, HsDoc GhcRn) -> IfM m (Map Name MetaSince)
+    processExportDoc (nm, doc) = do
+      mdoc <- processDocStringsParas dflags pkg_name [doc]
+      case _doc mdoc of
+        DocEmpty -> return ()
+        _ -> warn "Export docstrings may only contain @since annotations"
+      case _metaSince (_meta mdoc) of
+        Nothing -> return mempty
+        Just since -> return $ Map.singleton nm since
+
+
 -------------------------------------------------------------------------------
 -- Warnings
 -------------------------------------------------------------------------------
@@ -294,6 +320,7 @@ parseWarning dflags w = case w of
 
     format x bs = DocWarning . DocParagraph . DocAppend (DocString x)
                   <$> foldrM (\doc rest -> docAppend <$> processDocString dflags doc <*> pure rest) DocEmpty bs
+
 -------------------------------------------------------------------------------
 -- Doc options
 --
@@ -352,6 +379,7 @@ mkExportItems
   -> Maybe Package      -- this package
   -> Module             -- this module
   -> WarningMap
+  -> Map Name MetaSince
   -> DocMap Name
   -> ArgMap Name
   -> FixMap
@@ -362,7 +390,8 @@ mkExportItems
   -> OccEnv Name
   -> IfM m [ExportItem GhcRn]
 mkExportItems
-  prr modMap pkgName thisMod warnings docMap argMap fixMap namedChunks dsItems
+  prr modMap pkgName thisMod warnings exportSinceMap
+  docMap argMap fixMap namedChunks dsItems
   instIfaceMap dflags defMeths =
     concat <$> traverse lookupExport dsItems
   where
@@ -395,7 +424,7 @@ mkExportItems
 
     availExport :: MonadIO m => AvailInfo -> IfM m [ExportItem GhcRn]
     availExport avail =
-      availExportItem prr modMap thisMod warnings
+      availExportItem prr modMap thisMod warnings exportSinceMap
         docMap argMap fixMap instIfaceMap dflags avail defMeths
 
 unrestrictedModExports
@@ -451,6 +480,7 @@ availExportItem
   -> IfaceMap
   -> Module             -- this module
   -> WarningMap
+  -> Map Name MetaSince  -- ^ export \@since declarations
   -> Map Name (MDoc Name)        -- docs (keyed by 'Name's)
   -> ArgMap Name        -- docs for arguments (keyed by 'Name's)
   -> FixMap
@@ -460,7 +490,7 @@ availExportItem
   -> OccEnv Name       -- Default methods
   -> IfM m [ExportItem GhcRn]
 availExportItem
-    prr modMap thisMod warnings docMap argMap fixMap instIfaceMap dflags
+    prr modMap thisMod warnings exportSinceMap docMap argMap fixMap instIfaceMap dflags
     availInfo defMeths
   =
     declWith availInfo
@@ -479,7 +509,9 @@ availExportItem
             then pure (lookupDocs avail warnings docMap argMap defMeths)
             else case Map.lookup tmod modMap of
               Just iface ->
-                pure (lookupDocs avail warnings (ifaceDocMap iface) (ifaceArgMap iface) (mkOccEnv (ifaceDefMeths iface)))
+                pure
+                  $ first (applyExportSince exportSinceMap t)
+                  $ lookupDocs avail warnings (ifaceDocMap iface) (ifaceArgMap iface) (mkOccEnv (ifaceDefMeths iface))
               Nothing ->
                 -- We try to get the subs and docs
                 -- from the installed .haddock file for that package.
@@ -493,7 +525,9 @@ availExportItem
                     let subs_ = availNoDocs avail
                     pure (noDocForDecl, subs_)
                   Just instIface ->
-                    pure (lookupDocs avail warnings (instDocMap instIface) (instArgMap instIface) (mkOccEnv (instDefMeths instIface)))
+                    pure
+                      $ first (applyExportSince exportSinceMap t)
+                      $ lookupDocs avail warnings (instDocMap instIface) (instArgMap instIface) (mkOccEnv (instDefMeths instIface))
 
     -- Tries 'extractDecl' first then falls back to 'hiDecl' if that fails
     availDecl :: Name -> LHsDecl GhcRn -> IfM m (LHsDecl GhcRn)
@@ -587,6 +621,22 @@ availNoDocs :: AvailInfo -> [(Name, DocForDecl Name)]
 availNoDocs avail =
   zip (availSubordinates avail) (repeat noDocForDecl)
 
+-- | Override 'MetaSince' of a declaration with that of its export if appropriate.
+applyExportSince
+  :: Map Name MetaSince
+  -> Name
+  -> DocForDecl Name
+  -> DocForDecl Name
+applyExportSince exportSinceMap nm (dd, argDoc)
+  | Just since <- Map.lookup nm exportSinceMap =
+    let dd' = dd { documentationDoc = setMDocSince (documentationDoc dd) }
+        setMDocSince :: Maybe (MDoc name) -> Maybe (MDoc name)
+        setMDocSince (Just (MetaDoc meta doc)) = Just $ MetaDoc (meta {_metaSince = Just since}) doc
+        setMDocSince Nothing                   = Just $ MetaDoc (Meta {_metaSince = Just since}) DocEmpty
+     in (dd', argDoc)
+applyExportSince _ _ dd = dd
+
+
 hiDecl
   :: MonadIO m
   => DynFlags
@@ -616,6 +666,7 @@ lookupDocs
   -> ArgMap Name
   -> OccEnv Name
   -> (DocForDecl Name, [(Name, DocForDecl Name)])
+     -- ^ documentation for declaration and its subordinates
 lookupDocs avail warningMap docMap argMap def_meths_env =
   let
     n = availName avail
diff --git a/haddock-api/src/Haddock/Interface/Json.hs b/haddock-api/src/Haddock/Interface/Json.hs
index 8b27a9821d18f4f7d6c00966b99c403c05edd1f7..c4cd3b39813c3e0002e762e05458d28d9d92fbcc 100644
--- a/haddock-api/src/Haddock/Interface/Json.hs
+++ b/haddock-api/src/Haddock/Interface/Json.hs
@@ -56,7 +56,7 @@ jsonMap f g = jsonObject . map (f *** g) . Map.toList
 
 jsonMDoc :: MDoc Name -> JsonDoc
 jsonMDoc MetaDoc{..} =
-  jsonObject [ ("meta", jsonObject [("version", jsonMaybe (jsonString . show) (_version _meta))])
+  jsonObject [ ("meta", jsonObject [("version", jsonMaybe (jsonString . show . sinceVersion) (_metaSince _meta))])
              , ("document",  jsonDoc _doc)
              ]
 
diff --git a/haddock-api/src/Haddock/InterfaceFile.hs b/haddock-api/src/Haddock/InterfaceFile.hs
index ac6aacaecc71945261f60d7bc155a956b113d8d7..128fa34737d988859d10bd45591d992d413a65d3 100644
--- a/haddock-api/src/Haddock/InterfaceFile.hs
+++ b/haddock-api/src/Haddock/InterfaceFile.hs
@@ -438,13 +438,20 @@ instance Binary a => Binary (TableCell a) where
         return (TableCell i j c)
 
 instance Binary Meta where
-    put_ bh (Meta v p) = do
+    put_ bh (Meta since) = do
+        put_ bh since
+    get bh = do
+        since <- get bh
+        return (Meta since)
+
+instance Binary MetaSince where
+    put_ bh (MetaSince v p) = do
         put_ bh v
         put_ bh p
     get bh = do
         v <- get bh
         p <- get bh
-        return (Meta v p)
+        return (MetaSince v p)
 
 instance (Binary mod, Binary id) => Binary (MetaDoc mod id) where
   put_ bh MetaDoc { _meta = m, _doc = d } = do
diff --git a/haddock-api/src/Haddock/Types.hs b/haddock-api/src/Haddock/Types.hs
index 9aa7730740e206fc100c5e04fbe79b0b63416050..997ebb24a954dbc9fe9ab1d1dbb8e4142ada9caa 100644
--- a/haddock-api/src/Haddock/Types.hs
+++ b/haddock-api/src/Haddock/Types.hs
@@ -594,8 +594,11 @@ type MDoc id = MetaDoc (Wrap (ModuleName, OccName)) (Wrap id)
 
 type DocMarkup id a = DocMarkupH (Wrap (ModuleName, OccName)) id a
 
+instance NFData MetaSince where
+  rnf (MetaSince v p) = v `deepseq` p `deepseq` ()
+
 instance NFData Meta where
-  rnf (Meta v p) = v `deepseq` p `deepseq` ()
+  rnf (Meta since) = since `deepseq` ()
 
 instance NFData id => NFData (MDoc id) where
   rnf (MetaDoc m d) = m `deepseq` d `deepseq` ()
diff --git a/haddock-library/src/Documentation/Haddock/Doc.hs b/haddock-library/src/Documentation/Haddock/Doc.hs
index 33988e0b732db4c8d4928ede1676d67aff2e1536..47147e7b30206a0689a15e050bdeb40710d37766 100644
--- a/haddock-library/src/Documentation/Haddock/Doc.hs
+++ b/haddock-library/src/Documentation/Haddock/Doc.hs
@@ -9,7 +9,7 @@ module Documentation.Haddock.Doc
   , metaConcat
   ) where
 
-import Control.Applicative ((<|>), empty)
+import Control.Applicative ((<|>))
 import Documentation.Haddock.Types
 import Data.Char (isSpace)
 
@@ -35,13 +35,13 @@ metaDocAppend (MetaDoc { _meta = m, _doc = d })
 -- | This is not a monoidal append, it uses '<|>' for the '_version' and
 -- '_package'.
 metaAppend :: Meta -> Meta -> Meta
-metaAppend (Meta v1 p1) (Meta v2 p2) = Meta (v1 <|> v2) (p1 <|> p2)
+metaAppend (Meta v1) (Meta v2) = Meta (v1 <|> v2)
 
 emptyMetaDoc :: MetaDoc mod id
 emptyMetaDoc = MetaDoc { _meta = emptyMeta, _doc = DocEmpty }
 
 emptyMeta :: Meta
-emptyMeta = Meta empty empty
+emptyMeta = Meta Nothing
 
 docAppend :: DocH mod id -> DocH mod id -> DocH mod id
 docAppend (DocDefList ds1) (DocDefList ds2) = DocDefList (ds1++ds2)
diff --git a/haddock-library/src/Documentation/Haddock/Parser.hs b/haddock-library/src/Documentation/Haddock/Parser.hs
index 19c9272197855042e226a8e217d91dbcf9239378..031de4287f85c96cb47dc019dbf1545085d3924f 100644
--- a/haddock-library/src/Documentation/Haddock/Parser.hs
+++ b/haddock-library/src/Documentation/Haddock/Parser.hs
@@ -108,11 +108,11 @@ parseParas :: Maybe Package
            -> String -- ^ String to parse
            -> MetaDoc mod Identifier
 parseParas pkg input = case parseParasState input of
-  (state, a) -> MetaDoc { _meta = Meta { _version = parserStateSince state
-                                       , _package = pkg
-                                       }
-                        , _doc = a
-                        }
+  (state, a) ->
+    let defaultPackage s = s { sincePackage = sincePackage s <|> pkg }
+    in MetaDoc { _meta = Meta { _metaSince = defaultPackage <$> parserStateSince state }
+               , _doc = a
+               }
 
 parseParasState :: String -> (ParserState, DocH mod Identifier)
 parseParasState = parse (emptyLines *> p) . T.pack . (++ "\n") . filter (/= '\r')
@@ -529,7 +529,10 @@ tableStepFour rs hdrIndex cells =  case hdrIndex of
 
 -- | Parse \@since annotations.
 since :: Parser (DocH mod a)
-since = ("@since " *> version <* skipHorizontalSpace <* endOfLine) >>= setSince >> return DocEmpty
+since = do
+  ver <- ("@since " *> version <* skipHorizontalSpace <* endOfLine)
+  setSince (MetaSince Nothing ver)
+  return DocEmpty
   where
     version = decimal `Parsec.sepBy1` "."
 
diff --git a/haddock-library/src/Documentation/Haddock/Parser/Monad.hs b/haddock-library/src/Documentation/Haddock/Parser/Monad.hs
index 8d6e7a1d17d6e4376170a0b58d4566f1c81fc39e..f753c0d7f1374d3f029135231352e0725a636bd7 100644
--- a/haddock-library/src/Documentation/Haddock/Parser/Monad.hs
+++ b/haddock-library/src/Documentation/Haddock/Parser/Monad.hs
@@ -34,7 +34,7 @@ import           Data.Char                   ( ord )
 import           Data.List                   ( foldl' )
 import           Control.Applicative as App
 
-import           Documentation.Haddock.Types ( Version )
+import           Documentation.Haddock.Types ( MetaSince(..) )
 
 import           Prelude hiding (takeWhile)
 import           CompatPrelude
@@ -43,13 +43,13 @@ import           CompatPrelude
 -- through parsing is the version attached to a @\@since@ annotation - if
 -- the doc even contained one.
 newtype ParserState = ParserState {
-  parserStateSince :: Maybe Version
+  parserStateSince :: Maybe MetaSince
 } deriving (Eq, Show)
 
 initialParserState :: ParserState
 initialParserState = ParserState Nothing
 
-setSince :: Version -> Parser ()
+setSince :: MetaSince -> Parser ()
 setSince since = Parsec.modifyState (\st -> st{ parserStateSince = Just since })
 
 type Parser = Parsec.Parsec Text ParserState
diff --git a/haddock-library/src/Documentation/Haddock/Types.hs b/haddock-library/src/Documentation/Haddock/Types.hs
index d72ab4b44e64034d284d25e584436e1e6cd59138..fc34768c58dd7479021c1889e74f08866409b5fb 100644
--- a/haddock-library/src/Documentation/Haddock/Types.hs
+++ b/haddock-library/src/Documentation/Haddock/Types.hs
@@ -30,12 +30,18 @@ import Data.Bifoldable
 import Data.Bitraversable
 #endif
 
+-- | A @\@since@ declaration.
+data MetaSince =
+  MetaSince { sincePackage :: Maybe Package
+              -- ^ optional package qualification
+            , sinceVersion :: Version
+            } deriving (Eq, Show)
+
 -- | With the advent of 'Version', we may want to start attaching more
 -- meta-data to comments. We make a structure for this ahead of time
 -- so we don't have to gut half the core each time we want to add such
 -- info.
-data Meta = Meta { _version :: Maybe Version
-                 , _package :: Maybe Package
+data Meta = Meta { _metaSince :: Maybe MetaSince
                  } deriving (Eq, Show)
 
 data MetaDoc mod id =
diff --git a/haddock-library/test/Documentation/Haddock/ParserSpec.hs b/haddock-library/test/Documentation/Haddock/ParserSpec.hs
index 1d227e576e75a887c1ed2694cbe8794ae2596562..005f47f7e34287d9316ac9f931c5517198710cd4 100644
--- a/haddock-library/test/Documentation/Haddock/ParserSpec.hs
+++ b/haddock-library/test/Documentation/Haddock/ParserSpec.hs
@@ -28,8 +28,7 @@ instance IsString a => IsString (Maybe a) where
 emptyMeta :: Meta
 emptyMeta =
   Meta {
-    _version = Nothing
-  , _package = Nothing
+    _metaSince = Nothing
   }
 
 parseParas :: String -> MetaDoc () String
@@ -547,8 +546,11 @@ spec = do
               "@since 0.5.0"
             , "@since 0.6.0"
             , "@since 0.7.0"
-            ] `shouldBe` MetaDoc { _meta = emptyMeta { _version = Just [0,7,0] }
-                                 , _doc = DocEmpty }
+                                 ]
+          `shouldBe`
+          MetaDoc { _meta = emptyMeta { _metaSince = Just $ MetaSince { sincePackage = Nothing
+                                                                      , sinceVersion = [0,7,0] } }
+                  , _doc = DocEmpty }
 
 
     context "when parsing text paragraphs" $ do
diff --git a/html-test/ref/ExportSince1.html b/html-test/ref/ExportSince1.html
new file mode 100644
index 0000000000000000000000000000000000000000..e3c21b01a09cd478ca405bbf783383c3be91ae73
--- /dev/null
+++ b/html-test/ref/ExportSince1.html
@@ -0,0 +1,216 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+><head
+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
+     /><meta name="viewport" content="width=device-width, initial-scale=1"
+     /><title
+    >ExportSince1</title
+    ><link href="#" rel="stylesheet" type="text/css" title="Linuwial"
+     /><link rel="stylesheet" type="text/css" href="#"
+     /><link rel="stylesheet" type="text/css" href="#"
+     /><script src="haddock-bundle.min.js" async="async" type="text/javascript"
+    ></script
+    ><script type="text/x-mathjax-config"
+    >MathJax.Hub.Config({ tex2jax: { processClass: "mathjax", ignoreClass: ".*" } });</script
+    ><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+    ></script
+    ></head
+  ><body
+  ><div id="package-header"
+    ><span class="caption empty"
+      >&nbsp;</span
+      ><ul class="links" id="page-menu"
+      ><li
+	><a href="#"
+	  >Contents</a
+	  ></li
+	><li
+	><a href="#"
+	  >Index</a
+	  ></li
+	></ul
+      ></div
+    ><div id="content"
+    ><div id="module-header"
+      ><table class="info"
+	><tr
+	  ><th
+	    >Safe Haskell</th
+	    ><td
+	    >None</td
+	    ></tr
+	  ></table
+	><p class="caption"
+	>ExportSince1</p
+	></div
+      ><div id="synopsis"
+      ><details id="syn"
+	><summary
+	  >Synopsis</summary
+	  ><ul class="details-toggle" data-details-id="syn"
+	  ><li class="src short"
+	    ><a href="#"
+	      >hello1</a
+	      > :: <a href="#" title="Prelude"
+	      >String</a
+	      ></li
+	    ><li class="src short"
+	    ><a href="#"
+	      >hello2</a
+	      > :: <a href="#" title="Prelude"
+	      >String</a
+	      ></li
+	    ><li class="src short"
+	    ><span class="keyword"
+	      >data</span
+	      > <a href="#"
+	      >HelloTy</a
+	      > = <a href="#"
+	      >HelloTy</a
+	      > {<ul class="subs"
+	      ><li
+		><a href="#"
+		  >field1</a
+		  > :: <a href="#" title="Prelude"
+		  >String</a
+		  ></li
+		></ul
+	      >}</li
+	    ><li class="src short"
+	    ><span class="keyword"
+	      >class</span
+	      > <a href="#"
+	      >HelloClass</a
+	      > a <span class="keyword"
+	      >where</span
+	      ><ul class="subs"
+	      ><li
+		><a href="#"
+		  >method1</a
+		  > :: a -&gt; <a href="#" title="Prelude"
+		  >String</a
+		  ></li
+		></ul
+	      ></li
+	    ></ul
+	  ></details
+	></div
+      ><div id="interface"
+      ><h1
+	>Documentation</h1
+	><div class="top"
+	><p class="src"
+	  ><a id="v:hello1" class="def"
+	    >hello1</a
+	    > :: <a href="#" title="Prelude"
+	    >String</a
+	    > <a href="#" class="selflink"
+	    >#</a
+	    ></p
+	  ><div class="doc"
+	  ><p
+	    ><em
+	      >Since: 1.0</em
+	      ></p
+	    ></div
+	  ></div
+	><div class="top"
+	><p class="src"
+	  ><a id="v:hello2" class="def"
+	    >hello2</a
+	    > :: <a href="#" title="Prelude"
+	    >String</a
+	    > <a href="#" class="selflink"
+	    >#</a
+	    ></p
+	  ><div class="doc"
+	  ><p
+	    ><em
+	      >Since: 1.0</em
+	      ></p
+	    ></div
+	  ></div
+	><div class="top"
+	><p class="src"
+	  ><span class="keyword"
+	    >data</span
+	    > <a id="t:HelloTy" class="def"
+	    >HelloTy</a
+	    > <a href="#" class="selflink"
+	    >#</a
+	    ></p
+	  ><div class="doc"
+	  ><p
+	    ><em
+	      >Since: 1.0</em
+	      ></p
+	    ></div
+	  ><div class="subs constructors"
+	  ><p class="caption"
+	    >Constructors</p
+	    ><table
+	    ><tr
+	      ><td class="src"
+		><a id="v:HelloTy" class="def"
+		  >HelloTy</a
+		  ></td
+		><td class="doc empty"
+		>&nbsp;</td
+		></tr
+	      ><tr
+	      ><td colspan="2"
+		><div class="subs fields"
+		  ><p class="caption"
+		    >Fields</p
+		    ><ul
+		    ><li
+		      ><dfn class="src"
+			><a id="v:field1" class="def"
+			  >field1</a
+			  > :: <a href="#" title="Prelude"
+			  >String</a
+			  ></dfn
+			><div class="doc empty"
+			>&nbsp;</div
+			></li
+		      ></ul
+		    ></div
+		  ></td
+		></tr
+	      ></table
+	    ></div
+	  ></div
+	><div class="top"
+	><p class="src"
+	  ><span class="keyword"
+	    >class</span
+	    > <a id="t:HelloClass" class="def"
+	    >HelloClass</a
+	    > a <span class="keyword"
+	    >where</span
+	    > <a href="#" class="selflink"
+	    >#</a
+	    ></p
+	  ><div class="doc"
+	  ><p
+	    ><em
+	      >Since: 1.0</em
+	      ></p
+	    ></div
+	  ><div class="subs methods"
+	  ><p class="caption"
+	    >Methods</p
+	    ><p class="src"
+	    ><a id="v:method1" class="def"
+	      >method1</a
+	      > :: a -&gt; <a href="#" title="Prelude"
+	      >String</a
+	      > <a href="#" class="selflink"
+	      >#</a
+	      ></p
+	    ></div
+	  ></div
+	></div
+      ></div
+    ></body
+  ></html
+>
diff --git a/html-test/ref/ExportSince2.html b/html-test/ref/ExportSince2.html
new file mode 100644
index 0000000000000000000000000000000000000000..32b7d18f7bfd792744982ed6484678e78a95f451
--- /dev/null
+++ b/html-test/ref/ExportSince2.html
@@ -0,0 +1,156 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+><head
+  ><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"
+     /><meta name="viewport" content="width=device-width, initial-scale=1"
+     /><title
+    >ExportSince2</title
+    ><link href="#" rel="stylesheet" type="text/css" title="Linuwial"
+     /><link rel="stylesheet" type="text/css" href="#"
+     /><link rel="stylesheet" type="text/css" href="#"
+     /><script src="haddock-bundle.min.js" async="async" type="text/javascript"
+    ></script
+    ><script type="text/x-mathjax-config"
+    >MathJax.Hub.Config({ tex2jax: { processClass: "mathjax", ignoreClass: ".*" } });</script
+    ><script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML" type="text/javascript"
+    ></script
+    ></head
+  ><body
+  ><div id="package-header"
+    ><span class="caption empty"
+      >&nbsp;</span
+      ><ul class="links" id="page-menu"
+      ><li
+	><a href="#"
+	  >Contents</a
+	  ></li
+	><li
+	><a href="#"
+	  >Index</a
+	  ></li
+	></ul
+      ></div
+    ><div id="content"
+    ><div id="module-header"
+      ><table class="info"
+	><tr
+	  ><th
+	    >Safe Haskell</th
+	    ><td
+	    >None</td
+	    ></tr
+	  ></table
+	><p class="caption"
+	>ExportSince2</p
+	></div
+      ><div id="synopsis"
+      ><details id="syn"
+	><summary
+	  >Synopsis</summary
+	  ><ul class="details-toggle" data-details-id="syn"
+	  ><li class="src short"
+	    ><a href="#"
+	      >hello1</a
+	      > :: <a href="#" title="Prelude"
+	      >String</a
+	      ></li
+	    ><li class="src short"
+	    ><a href="#"
+	      >hello2</a
+	      > :: <a href="#" title="Prelude"
+	      >String</a
+	      ></li
+	    ><li class="src short"
+	    ><span class="keyword"
+	      >data</span
+	      > <a href="#"
+	      >HelloTy</a
+	      ></li
+	    ><li class="src short"
+	    ><span class="keyword"
+	      >class</span
+	      > <a href="#"
+	      >HelloClass</a
+	      > a</li
+	    ></ul
+	  ></details
+	></div
+      ><div id="interface"
+      ><h1
+	>Documentation</h1
+	><div class="top"
+	><p class="src"
+	  ><a id="v:hello1" class="def"
+	    >hello1</a
+	    > :: <a href="#" title="Prelude"
+	    >String</a
+	    > <a href="#" class="selflink"
+	    >#</a
+	    ></p
+	  ><div class="doc"
+	  ><p
+	    ><em
+	      >Since: 2.0</em
+	      ></p
+	    ></div
+	  ></div
+	><div class="top"
+	><p class="src"
+	  ><a id="v:hello2" class="def"
+	    >hello2</a
+	    > :: <a href="#" title="Prelude"
+	    >String</a
+	    > <a href="#" class="selflink"
+	    >#</a
+	    ></p
+	  ><div class="doc"
+	  ><p
+	    ><em
+	      >Since: 2.0</em
+	      ></p
+	    ></div
+	  ></div
+	><div class="top"
+	><p class="src"
+	  ><span class="keyword"
+	    >data</span
+	    > <a id="t:HelloTy" class="def"
+	    >HelloTy</a
+	    > <a href="#" class="selflink"
+	    >#</a
+	    ></p
+	  ><div class="doc"
+	  ><p
+	    ><em
+	      >Since: 2.0</em
+	      ></p
+	    ></div
+	  ></div
+	><div class="top"
+	><p class="src"
+	  ><span class="keyword"
+	    >class</span
+	    > <a id="t:HelloClass" class="def"
+	    >HelloClass</a
+	    > a <a href="#" class="selflink"
+	    >#</a
+	    ></p
+	  ><div class="doc"
+	  ><p
+	    ><em
+	      >Since: 2.0</em
+	      ></p
+	    ></div
+	  ><div class="subs minimal"
+	  ><p class="caption"
+	    >Minimal complete definition</p
+	    ><p class="src"
+	    ><a href="#" title="ExportSince1"
+	      >method1</a
+	      ></p
+	    ></div
+	  ></div
+	></div
+      ></div
+    ></body
+  ></html
+>
diff --git a/html-test/src/ExportSince1.hs b/html-test/src/ExportSince1.hs
new file mode 100644
index 0000000000000000000000000000000000000000..b5425fa5b31fb18045ba49d57e68fc7c65457257
--- /dev/null
+++ b/html-test/src/ExportSince1.hs
@@ -0,0 +1,21 @@
+module ExportSince1
+  ( hello1
+  , hello2
+  , HelloTy(..)
+  , HelloClass(..)
+  ) where
+
+-- | @since 1.0
+hello1 :: String
+hello1 = "Hello"
+
+-- | @since 1.0
+hello2 :: String
+hello2 = "Hello"
+
+-- | @since 1.0
+data HelloTy = HelloTy { field1 :: String }
+
+-- | @since 1.0
+class HelloClass a where
+  method1 :: a -> String
diff --git a/html-test/src/ExportSince2.hs b/html-test/src/ExportSince2.hs
new file mode 100644
index 0000000000000000000000000000000000000000..eca14fea591d990a7845912e035b7cb4d7f188eb
--- /dev/null
+++ b/html-test/src/ExportSince2.hs
@@ -0,0 +1,8 @@
+module ExportSince2
+  ( hello1, -- ^ @since 2.0
+    hello2, -- ^ @since 2.0
+    HelloTy,  -- ^ @since 2.0
+    HelloClass,  -- ^ @since 2.0
+  ) where
+
+import ExportSince1