diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,9 @@
-# 2.0.0 (2020-01-15)
+# 2.0.1 (2020-02-06)
+- quote macros in commented fields
+- read --subpackage from spec header
+- generate BRs for subpackages
+
+# 2.0.0 (2020-01-16)
 - major refactor to handle stream/pkgid more precisely and correctly
   (hence major version bump due to behavior changes)
   - eg can no longer specify both stream and pkg-ver
@@ -7,7 +12,7 @@
 - respect and read/write --standalone and --stream in spec header consistently
   (note default LTS stream is not written to header)
 - fix infinite loop for 'install'
-- optioanlly use libcurl binding instead of former stackage-query fallback
+- optionally use libcurl binding instead of former stackage-query fallback
 
 # 1.0.3 (2019-12-31)
 - define %_devel for f30 packaging compatibility
diff --git a/TODO b/TODO
--- a/TODO
+++ b/TODO
@@ -1,11 +1,24 @@
+- refresh: avoid checking subpackaging versions
+- spec: avoid rechecking subpackage versions (when checking for their deps)
+
+- --subpackage should add missing (Prof) deps
+  (testcase (git-annex) add subpackage to non-lib package needs base-prof etc)
+
+- builddep repeats looking for versions of missing packages
+  https://github.com/juhp/cabal-rpm/issues/60
+
 - --without-tests/--disable-tests for install etc
 - don't install prof deps for --standalone: use rpmspec to read BRs?
 
+- `cblrpm update -s lts` runs cabal update, even when already latest!
+
 * filter dummy pkgs like fail, bytestring-builder and mtl-compat
 
 - switch to Cabal 2 for better License handling
 - check/warn about executable doc files!
 - add rpmlint command
+
+- only "cabal update" when needed
 
 - spec --bounds
 - rework "BR: ghc-*-static" with %{?_isa}
diff --git a/cabal-rpm.cabal b/cabal-rpm.cabal
--- a/cabal-rpm.cabal
+++ b/cabal-rpm.cabal
@@ -1,5 +1,5 @@
 Name:                cabal-rpm
-Version:             2.0.0
+Version:             2.0.1
 Synopsis:            RPM packaging tool for Haskell Cabal-based packages
 Description:
     This package provides a RPM packaging tool for Haskell Cabal-based packages.
diff --git a/src/Commands/Install.hs b/src/Commands/Install.hs
--- a/src/Commands/Install.hs
+++ b/src/Commands/Install.hs
@@ -8,7 +8,7 @@
 -- Stability   :  alpha
 -- Portability :  portable
 --
--- Explanation: cabal wrapper which installs rpm dependencies
+-- Explanation: installs rpms of package and dependencies
 
 -- This program is free software: you can redistribute it and/or modify
 -- it under the terms of the GNU General Public License as published by
diff --git a/src/Commands/Spec.hs b/src/Commands/Spec.hs
--- a/src/Commands/Spec.hs
+++ b/src/Commands/Spec.hs
@@ -93,7 +93,7 @@
 createSpecFile :: Verbosity -> Flags -> Bool -> PackageType -> Bool
                -> Maybe FilePath -> Maybe PackageVersionSpecifier
                -> IO FilePath
-createSpecFile verbose flags force pkgtype subpackage mdest mpvs = do
+createSpecFile verbose flags force pkgtype subpkgOpt mdest mpvs = do
   pkgdata <- prepare flags mpvs True
   let mspec = case pkgtype of
                 SpecFile f -> Just f
@@ -104,16 +104,34 @@
       pkgid = package pkgDesc
       name = display $ pkgName pkgid
 
-  standalone <- if pkgtype == StandalonePkg then return True
-                else
-                case mspec of
-                  Nothing -> return False
-                  Just spec -> do
-                    specExists <- doesFileExist spec
-                    if specExists then
-                      withSpecHead spec $ return . ("--standalone" `elem`)
-                      else return False
+  standalone <-
+    if pkgtype == StandalonePkg then return True
+    else
+      case mspec of
+        Nothing -> return False
+        Just spec -> do
+          specExists <- doesFileExist spec
+          if specExists then
+            withSpecHead spec $ return . ("--standalone" `elem`)
+            else return False
 
+  subpackage <-
+    if subpkgOpt
+    then
+      if pkgtype == StandalonePkg
+      then do
+        warn verbose "ignoring --subpackage for --standalone"
+        return False
+      else return True
+    else
+      case mspec of
+        Nothing -> return False
+        Just spec -> do
+          specExists <- doesFileExist spec
+          if specExists then
+            withSpecHead spec $ return . ("--subpackage" `elem`)
+            else return False
+
   let hasExec = hasExes pkgDesc
       hasLib = hasLibs pkgDesc
       hasLibPkg = hasLib && not standalone
@@ -151,7 +169,7 @@
   h <- openFile outputFile WriteMode
   let putHdr hdr val = hPutStrLn h (hdr ++ ":" ++ padding hdr ++ val)
       padding hdr = replicate (14 - length hdr) ' ' ++ " "
-      putHdrComment hdr val = putHdr ('#':hdr) (' ':val)
+      putHdrComment hdr val = putHdr ('#':hdr) (' ':quoteMacros val)
       putNewline = hPutStrLn h ""
       sectionNewline = putNewline >> putNewline
       put = hPutStrLn h
@@ -231,9 +249,10 @@
     putNewline
 
   let testsuiteDeps = testsuiteDependencies' pkgDesc
-  unless (null testsuiteDeps) $ do
-    missTestDeps <- filterM notSrcOrInst $ map (RpmHsLib Devel) testsuiteDeps
-    put $ "%bcond_" ++ (if null missTestDeps then "without" else "with") +-+ "tests"
+  missTestDeps <- filterM notSrcOrInst $ map (RpmHsLib Devel) testsuiteDeps
+  let testable = not (null testsuiteDeps) && null missTestDeps
+  when testable $ do
+    put "%bcond_without tests"
     putNewline
 
   let version = display $ pkgVersion pkgid
@@ -280,7 +299,7 @@
     --       any (\ d -> d `elem` map showDep ["template-haskell", "hamlet"]) deps) $
     --   putHdr "ExclusiveArch" "%{ghc_arches_with_ghci}"
   let testDeps = sort $ testsuiteDeps \\ (mkPackageName "Cabal" : (deps ++ setupDeps))
-  unless (null testDeps) $ do
+  when (testable && not (null testDeps)) $ do
     put "%if %{with tests}"
     mapM_ (putHdr "BuildRequires" . showRpm . RpmHsLib Devel) testDeps
     put "%endif"
@@ -289,18 +308,20 @@
       versionRelease = " = %{version}-%{release}"
   when common $
     putHdr "Requires" $ "%{name}-common" ++ versionRelease
-  put "# End cabal-rpm deps"
-  when standalone $ do
-    putHdr "BuildRequires" "cabal-install > 1.18"
+  when (standalone || subpackage) $ do
+    when standalone $
+      putHdr "BuildRequires" "cabal-install > 1.18"
     unless (null missingLibs) $ do
       putStrLn "checking for deps of missing dependencies:"
-      let putPkgDeps pkg = do
+      let deptype = if standalone then Devel else Prof
+          putPkgDeps pkg = do
             more <- packageDeps flags Nothing pkg
             let moredeps = more \\ (deps ++ missingLibs)
             unless (null moredeps) $ do
-              put $ "# for missing dep:" +-+ display pkg ++ ":"
-              mapM_ (\ d -> (if d `elem` missingLibs then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Devel d))) moredeps
+              put $ "# for missing dep '" ++ display pkg ++ "':"
+              mapM_ (\ d -> (if d `elem` missingLibs then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib deptype d))) moredeps
       mapM_ putPkgDeps missingLibs
+  put "# End cabal-rpm deps"
   putNewline
 
   put "%description"
@@ -440,7 +461,7 @@
   put "# End cabal-rpm install"
   sectionNewline
 
-  unless (null testsuiteDeps) $ do
+  when testable $ do
     put "%check"
     put "%cabal_test"
     sectionNewline
@@ -614,3 +635,7 @@
       hasExec = hasExes pkgDesc
       hasLib = hasLibs pkgDesc
   return $ if binary || hasExec && not hasLib then (name, hasLib) else ("ghc-" ++ name, False)
+
+quoteMacros :: String -> String
+quoteMacros "" = ""
+quoteMacros (c:cs) = (if c == '%' then "%%" else [c]) ++ quoteMacros cs
