diff --git a/ChangeLog b/ChangeLog
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+# 2.1.4 (2023-11-03)
+- spec --standalone should not create subpkgs (regression in 2.1.3)
+- spec: when subpackaging include prof for main exec deps
+- fix --flags parsing to actually work!
+- PackageUtils bringTarball: create SOURCES/ earlier for new user
+
 # 2.1.3 (2023-09-27)
 - spec: implement recursive missing deps fully; use cabal-sort if available
 - spec: also get the license of subpkgs now
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -69,10 +69,12 @@
 See the manpage or help output for more details.
 
 ## Help output
-```shellsession
-$ cabal-rpm --version
-2.1.3
-$ cabal-rpm --help
+`$ cabal-rpm --version`
+```
+2.1.4
+```
+`$ cabal-rpm --help`
+```
 Cabal-rpm tool
 
 Usage: cabal-rpm [--version] COMMAND
diff --git a/cabal-rpm.cabal b/cabal-rpm.cabal
--- a/cabal-rpm.cabal
+++ b/cabal-rpm.cabal
@@ -1,6 +1,6 @@
 Cabal-version:       1.18
 Name:                cabal-rpm
-Version:             2.1.3
+Version:             2.1.4
 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/Spec.hs b/src/Commands/Spec.hs
--- a/src/Commands/Spec.hs
+++ b/src/Commands/Spec.hs
@@ -280,10 +280,10 @@
       subpkgMacro pid = "%{" ++ mkSubpkgMacro pid ++ "}"
       subpkgMacros = map subpkgMacro subpkgs
       subpkgMacrosOrdered = map subpkgMacro subpkgsOrdered
-  forM_ (sort subpkgs) $ \pid ->
-    global (mkSubpkgMacro pid) $ display pid
-  let hasSubpkgs = subpkgs /= []
+      hasSubpkgs = not standalone &&  subpkgs /= []
   when hasSubpkgs $ do
+    forM_ (sort subpkgs) $ \pid ->
+      global (mkSubpkgMacro pid) $ display pid
     putNewline
     global "subpkgs" $ unwords subpkgMacrosOrdered
     putNewline
@@ -330,9 +330,10 @@
   putHdr "Url" $ "https://hackage.haskell.org/package" </> pkg_name
   put "# Begin cabal-rpm sources:"
   putHdr "Source0" $ sourceUrl pkgver
-  mapM_ (\ (n,p) -> putHdr ("Source" ++ n) (sourceUrl p)) $ number subpkgMacros
+  when hasSubpkgs $
+    mapM_ (\(n,p) -> putHdr ("Source" ++ n) (sourceUrl p)) $ number subpkgMacros
   when revised $
-    putHdr ("Source" ++ show (1 + length subpkgs)) $ "https://hackage.haskell.org/package" </> pkgver </> pkg_name <.> "cabal" ++ "#" </> pkgver <.> "cabal"
+    putHdr ("Source" ++ show (1 + if hasSubpkgs then length subpkgs else 0)) $ "https://hackage.haskell.org/package" </> pkgver </> pkg_name <.> "cabal" ++ "#" </> pkgver <.> "cabal"
   put "# End cabal-rpm sources"
   putNewline
   put "# Begin cabal-rpm deps:"
@@ -341,7 +342,7 @@
 --    put "# Setup"
     unless (mkPackageName "Cabal" `elem` buildDeps pkgdeps) $
       putHdr "BuildRequires" $ ghc_name ++ "-Cabal-devel"
-    mapM_ (\ d -> (if d `elem` map pkgName subpkgs then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Devel d))) $ setupDeps pkgdeps
+    mapM_ (\d -> (if d `elem` map pkgName subpkgs then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Devel d))) $ setupDeps pkgdeps
   putHdr "BuildRequires" $ "ghc-rpm-macros" ++ (if hasSubpkgs then "-extra" else "")
 
   unless (null (buildDeps pkgdeps)) $ do
@@ -353,16 +354,17 @@
       put "%else"
 
     let metaPackages = [mkPackageName "haskell-gi-overloading"]
-    mapM_ (\ d -> (if d `elem` map pkgName subpkgs then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Devel d))) $ sort $ buildDeps pkgdeps
-    when hasLibPkg $ do
+    mapM_ (\d -> (if d `elem` map pkgName subpkgs then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Devel d))) $ sort $ buildDeps pkgdeps
+    -- FIXME should tracks devel/prof deps finely when subpackaging
+    when (hasLibPkg || hasSubpkgs) $ do
       put "%if %{with ghc_prof}"
-      mapM_ (\ d -> (if d `elem` map pkgName subpkgs then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Prof d))) $ sort $ buildDeps pkgdeps \\ metaPackages
+      mapM_ (\d -> (if d `elem` map pkgName subpkgs then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Prof d))) $ sort $ buildDeps pkgdeps \\ metaPackages
       put "%endif"
   let otherdeps = sort $ toolDeps pkgdeps ++ clibDeps pkgdeps ++ pkgcfgDeps pkgdeps
   unless (null otherdeps) $ do
 --    put "# Other"
     missingOthers <- missingOtherPkgs pkgDesc
-    mapM_ (\ d -> (if d `elem` missingOthers then putHdrComment else putHdr) "BuildRequires" d) otherdeps
+    mapM_ (\d -> (if d `elem` missingOthers then putHdrComment else putHdr) "BuildRequires" d) otherdeps
   let testDeps = testsuiteDeps \\ (mkPackageName "Cabal" : (buildDeps pkgdeps ++ setupDeps pkgdeps))
   when (testable && notNull testDeps) $ do
     put "%if %{with tests}"
@@ -390,10 +392,10 @@
         unless (null moredeps) $ do
           put $ "# for missing dep '" ++ display pkg ++ "':"
           missingMore <- filterM (notSrcOrInst . RpmHsLib Devel) moredeps
-          mapM_ (\ d -> (if d `elem` missingMore then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Devel d))) moredeps
+          mapM_ (\d -> (if d `elem` missingMore then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Devel d))) moredeps
           unless standalone $ do
             put "%if %{with ghc_prof}"
-            mapM_ (\ d -> (if d `elem` missingMore then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Prof d))) moredeps
+            mapM_ (\d -> (if d `elem` missingMore then putHdrComment else putHdr) "BuildRequires" (showRpm (RpmHsLib Prof d))) moredeps
             put "%endif"
       when (isJust mwithghc) $
         put "%endif"
@@ -555,7 +557,7 @@
 
   when bashCompletions $ do
     put "mkdir -p %{buildroot}%{_datadir}/bash-completion/completions/"
-    mapM_ (\ ex -> let exn = execNaming ex in put ("%{buildroot}%{_bindir}" </> exn ++ " --bash-completion-script " ++ exn ++ " | sed s/filenames/default/ > %{buildroot}%{_datadir}/bash-completion/completions" </> exn)) execs
+    mapM_ (\ex -> let exn = execNaming ex in put ("%{buildroot}%{_bindir}" </> exn ++ " --bash-completion-script " ++ exn ++ " | sed s/filenames/default/ > %{buildroot}%{_datadir}/bash-completion/completions" </> exn)) execs
 
   put "# End cabal-rpm install"
   sectionNewline
@@ -575,7 +577,7 @@
     -- Add the license file to the main package only if it wouldn't
     -- otherwise be empty.
     unless common $ do
-      mapM_ (\ l -> put $ license_macro +-+ l) licensefiles
+      mapM_ (\l -> put $ license_macro +-+ l) licensefiles
       unless (null docs) $
         put $ "%doc" +-+ unwords docs
     mapM_ (put . ("%{_bindir}" </>) . execNaming) execs
@@ -589,7 +591,7 @@
   when common $ do
     put "%files common"
     put "# Begin cabal-rpm files:"
-    mapM_ (\ l -> put $ license_macro +-+ l) licensefiles
+    mapM_ (\l -> put $ license_macro +-+ l) licensefiles
     unless (null docs) $
       put $ "%doc" +-+ unwords docs
     put $ "%{_datadir}" </> pkgver
@@ -602,7 +604,7 @@
       put $ "%files" +-+ filesParams Base
       unless common $ do
         put "# Begin cabal-rpm files:"
-        mapM_ (\ l -> put $ license_macro +-+ l) licensefiles
+        mapM_ (\l -> put $ license_macro +-+ l) licensefiles
         unless (null datafiles) $
           put $ "%{_datadir}" </> pkgver
         put "# End cabal-rpm files"
@@ -611,18 +613,18 @@
     put $ "%files" +-+ filesParams Devel
     -- put "# Begin cabal-rpm files:"
     unless hasModules $
-      mapM_ (\ l -> put $ license_macro +-+ l) licensefiles
+      mapM_ (\l -> put $ license_macro +-+ l) licensefiles
     unless (common || null docs) $
       put $ "%doc" +-+ unwords docs
     unless binlib $
-      mapM_ ((\ p -> put $ "%{_bindir}" </> (if p == name then "%{pkg_name}" else p)) . unUnqualComponentName) execs
+      mapM_ ((\p -> put $ "%{_bindir}" </> (if p == name then "%{pkg_name}" else p)) . unUnqualComponentName) execs
     -- put "# End cabal-rpm files"
     sectionNewline
 
     when hasModules $ do
       put "%if %{with haddock}"
       put $ "%files" +-+ filesParams Doc
-      mapM_ (\ l -> put $ license_macro +-+ l) licensefiles
+      mapM_ (\l -> put $ license_macro +-+ l) licensefiles
       put "%endif"
       sectionNewline
       put "%if %{with ghc_prof}"
diff --git a/src/Main.hs b/src/Main.hs
--- a/src/Main.hs
+++ b/src/Main.hs
@@ -25,6 +25,7 @@
 #endif
                            )
 #endif
+import Data.List (partition)
 import Data.Version.Extra (readVersion)
 import Distribution.Text (simpleParse)
 import Distribution.Verbosity (normal, silent)
@@ -46,7 +47,7 @@
 import Paths_cabal_rpm (version)
 import Types hiding (readVersion)
 
-import SimpleCabal (PackageIdentifier(..))
+import SimpleCabal (PackageIdentifier(..), mkFlagName)
 import SimpleCmdArgs
 
 main :: IO ()
@@ -138,7 +139,13 @@
     pkgId = optional (argumentWith (maybeReader simpleParse) "PKG[VER]")
 
     flags :: Parser Flags
-    flags = optionalWith auto 'f' "flag" "[(String,Bool)]" "Set or disable Cabal flags" []
+    flags =
+      mapToFlags <$> strOptionWith 'f' "flag" "\"flag1 -flag2 ...\"" "Set or disable Cabal flags"
+      where
+        mapToFlags cs =
+          let ws = words cs in
+            case partition (\w -> head w == '-') ws of
+              (ds,es) -> map (\f -> (mkFlagName f,True)) es ++ map (\f -> (mkFlagName (tail f),False)) ds
 
     quietRpmbuild = switchWith 'q' "quiet" "Quiet rpmbuild output"
     verboseRpmbuild = flagWith True False 'v' "verbose" "Verbose rpmbuild output"
diff --git a/src/PackageUtils.hs b/src/PackageUtils.hs
--- a/src/PackageUtils.hs
+++ b/src/PackageUtils.hs
@@ -106,6 +106,7 @@
              then map sourceFieldFile <$> cmdLines "spectool" ["-S", fromJust mspec]
              else return [tarfile]
   srcdir <- getSourceDir
+  createDirectoryIfMissing True srcdir
   allExist <- and <$> mapM (doesFileExist . (srcdir </>)) sources
   unless allExist $ do
     pkggit <- grepGitConfig "\\(pkgs\\|src\\)."
@@ -113,8 +114,6 @@
       srcnv <- grep_ tarfile "sources"
       when srcnv $
         cmd_ "fedpkg" ["sources"]
-    when havespec $
-      createDirectoryIfMissing True srcdir
     mapM_ (copyTarball False srcdir) sources
     haveLocalCabal <- doesFileExist $ srcdir </> display pkgid <.> "cabal"
     unless haveLocalCabal $
