diff --git a/lib/CheckMap.hs b/lib/CheckMap.hs
index 04f32640a294cd08f6f9730f31a3e16429527ead..63b264aed53ed409f7aef52a0737120b61bdfba9 100644
--- a/lib/CheckMap.hs
+++ b/lib/CheckMap.hs
@@ -61,6 +61,7 @@ instance ToJSON MapResult where
     [ "layer" .= CollectedLints (fmap getName <$> mapresultLayer res)
     , "tileset" .= CollectedLints (fmap getName <$> mapresultTileset res)
     , "general" .= mapresultGeneral res
+    , "offers" .= mapresultProvides res
     ]
 
 newtype CollectedLints = CollectedLints (Map Hint [Text])
@@ -143,22 +144,26 @@ checkLayerRec config depth layers =
       (runLintWriter config parent depth checkLayer,[])
     -- this is a group layer. Fun!
     Just sublayers ->
-      let
-        -- before linting, append the group's top-level name to that of sublayers
-        results = take (length sublayers)
-                  $ checkLayerRec config depth $ sublayers
-                  <&> \l -> l { layerName = layerName parent <> "/" <> layerName l }
-        -- get the original sublayer names
-        names = fmap layerName sublayers
-        -- pass the adjusted sublayers on to linting the parent layer,
-        -- but restore the actual names of sublayers
-        result = runLintWriter config
-            (parent { layerLayers = Just
-                     $ zipWith (\n l -> (resultToAdjusted l) { layerName = n })
-                     names results
-                   }
-            ) depth checkLayer
-      in (result,results)
+      (parentResult, subresults)
+      where
+        -- Lintresults for sublayers with adjusted names
+        subresults :: [LintResult Layer]
+        subresults =
+          take (length sublayers)
+          . fmap (fmap (\l -> l { layerName = layerName parent <> "/" <> layerName l } ))
+          $ subresults'
+
+        -- Lintresults for sublayers and subsublayers etc.
+        subresults' =
+          checkLayerRec config depth
+          $ sublayers
+
+        -- lintresult for the parent layer
+        parentResult = runLintWriter config parentAdjusted depth (checkLayer)
+
+        -- the parent layer with adjusted sublayers
+        parentAdjusted =
+          parent { layerLayers = Just (fmap resultToAdjusted subresults') }
 
 
 
diff --git a/lib/LintWriter.hs b/lib/LintWriter.hs
index fa8207be455af2d6943e09542ad61e7151ee72ac..5a6fc7d5279224e4807085891c175c8842a48a54 100644
--- a/lib/LintWriter.hs
+++ b/lib/LintWriter.hs
@@ -7,6 +7,7 @@
 {-# LANGUAGE OverloadedStrings #-}
 {-# LANGUAGE RankNTypes        #-}
 {-# LANGUAGE TupleSections     #-}
+{-# LANGUAGE DeriveFunctor     #-}
 {-# OPTIONS_GHC -Wno-missing-signatures #-}
 
 -- | a monad that collects warnings, outputs, etc,
@@ -67,6 +68,7 @@ type LintWriter' ctxt res =
 -- | it already collected.
 newtype LinterState ctxt = LinterState
   { fromLinterState :: ([Lint], ctxt)}
+  deriving Functor
 
 -- | The result of running a linter: an adjusted context, and a list of lints.
 -- | This is actually just a type synonym of LinterState, but kept seperately