diff --git a/lib/Properties.hs b/lib/Properties.hs
index 94cfe2469dd9c258f14e188e6051a028a4232d93..37b6bc42bdcd26c96b7230f86db23829cdaa7f7a 100644
--- a/lib/Properties.hs
+++ b/lib/Properties.hs
@@ -566,13 +566,17 @@ unwrapBadgeToken str f = case parseToken str of
   Nothing -> complain "invalid badge token."
 
 
-unwrapURI :: (KnownSymbol s, HasProperties a)
-  => Proxy s -> Property -> (Text -> LintWriter a) -> (RelPath -> LintWriter a) -> LintWriter a
-unwrapURI sym p@(Property name _) f g = unwrapString p $ \link -> do
+-- | unwraps a URI
+unwrapURI' :: (KnownSymbol s)
+  => Proxy s
+  -> Property
+  -> (Text -> LintWriter a)
+  -> (RelPath -> LintWriter a)
+  -> LintWriter a
+unwrapURI' sym p@(Property name _) f g = unwrapString p $ \link -> do
   subst <- lintConfig configUriSchemas
   case applySubst sym subst link of
     Right uri -> do
-      setProperty name uri
       f uri
     Left NotALink -> unwrapPath link g
     Left err -> complain $ case err of
@@ -588,6 +592,17 @@ unwrapURI sym p@(Property name _) f g = unwrapString p $ \link -> do
         <> intercalate ", " (fmap (<> "://") allowed) <> "."
       VarsDisallowed -> "extended API links are disallowed in links"
 
+-- | unwraps a URI and adjusts the linter's output
+unwrapURI :: (KnownSymbol s, HasProperties a)
+  => Proxy s
+  -> Property
+  -> (Text -> LintWriter a)
+  -> (RelPath -> LintWriter a)
+  -> LintWriter a
+unwrapURI sym p@(Property name _) f =
+  unwrapURI' sym p $ \uri -> setProperty name uri >> f uri
+
+
 -- | just asserts that this is a string
 isString :: Property -> LintWriter a
 isString = flip unwrapString (const $ pure ())