diff --git a/NEWS b/NEWS
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,14 @@
+* 0.8.2 (2013-07-02)
+- handle pkg-ver arg, and check cabal list is non-empty
+- sort all generated deps
+- use yum-builddep again to install deps
+- copy tarball into cwd for rpmbuild
+- warn about long synopsis rather than multiline
+- wrap after end of sentence near end of line
+- use _isa in requires ghc-<pkg>
+- --version now outputs to stdout
+- new --force flag to overwrite existing .spec file
+
 * 0.8.1 (2013-06-14)
 - word wrapping of descriptions
 - use generic description for shared subpackage
diff --git a/cabal-rpm.cabal b/cabal-rpm.cabal
--- a/cabal-rpm.cabal
+++ b/cabal-rpm.cabal
@@ -1,11 +1,13 @@
 Name:                cabal-rpm
-Version:             0.8.1
+Version:             0.8.2
 Synopsis:            RPM package creator for Haskell Cabal-based packages
 Description:
     This package generates RPM packages from Haskell Cabal packages.
     .
     Recent changes:
     .
+    * 0.8.2: wrap sentences at end of line, handle pkg-ver arg, sort deps 
+    .
     * 0.8.1: word wrapping of descriptions
     .
     * 0.8.0: new simpler revised Fedora packaging; check external commands available
@@ -40,6 +42,7 @@
                    filepath,
                    old-locale,
                    process,
+                   regex-compat,
                    time,
                    unix
     Other-modules:
diff --git a/src/Distribution/Package/Rpm.hs b/src/Distribution/Package/Rpm.hs
--- a/src/Distribution/Package/Rpm.hs
+++ b/src/Distribution/Package/Rpm.hs
@@ -19,7 +19,7 @@
     ) where
 
 --import Control.Exception (bracket)
-import Control.Monad    (unless, void, when)
+import Control.Monad    (unless, when)
 import Data.Char        (toLower)
 import Data.List        (groupBy, isPrefixOf, isSuffixOf, nub, sort)
 import Data.Maybe       (fromMaybe)
@@ -42,14 +42,11 @@
 import Distribution.Package.Rpm.Setup (RpmFlags (..))
 import Distribution.Package.Rpm.Utils (trySystem, optionalSudo, (+-+))
 
-import System.Cmd (system)
-import System.Directory (doesDirectoryExist, doesFileExist,
+import System.Directory (copyFile, doesDirectoryExist, doesFileExist,
                          getCurrentDirectory, getDirectoryContents)
-import System.Exit (ExitCode(..))
 import System.Environment (getEnv)
 import System.IO     (IOMode (..), hClose, hPutStrLn, openFile)
 import System.Locale (defaultTimeLocale)
---import System.Process (runInteractiveCommand, waitForProcess)
 import System.FilePath (dropFileName)
 import System.FilePath.Posix ((</>))
 
@@ -64,17 +61,6 @@
 --             setupMessage verbose "Running autoreconf" pkgDesc
 --             trySystem "autoreconf"
 
-unlessSudo :: String -> String -> IO ()
-unlessSudo tst act = do
-    ret <- system tst
-    case ret of
-      ExitSuccess -> return ()
-      ExitFailure _ -> void $ optionalSudo act
-
-maybeInstall :: String -> IO ()
-maybeInstall pkg = do
-    unlessSudo ("rpm -q" +-+ pkg) ("yum install" +-+ pkg)
-
 rpmBuild :: FilePath -> PackageDescription -> RpmFlags -> Bool -> IO ()
 rpmBuild cabalPath pkgDesc flags binary = do
 --    let verbose = rpmVerbosity flags
@@ -90,8 +76,7 @@
     let pkg = package pkgDesc
         name = packageName pkg
     when binary $ do
-        -- optionalSystem ("sudo yum-builddep" +-+ specFile)
-        mapM_ maybeInstall $ map showDep $ buildDependencies pkgDesc [name]
+      optionalSudo ("sudo yum-builddep" +-+ specFile)
     cwd <- getCurrentDirectory
     home <- getEnv "HOME"
     let version = packageVersion pkg
@@ -99,15 +84,13 @@
         tarFile = name ++ "-" ++ version ++ ".tar.gz"
         rpmCmd = if binary then "a" else "s"
     tarFileExists <- doesFileExist tarFile
-    srcdir <- if tarFileExists
-                then return cwd
-                else do
-                     trySystem ("cabal fetch -v0 --no-dependencies" +-+ name ++ "-" ++ version)
-                     return cachedir
+    unless tarFileExists $ do
+      trySystem ("cabal fetch -v0 --no-dependencies" +-+ name ++ "-" ++ version)
+      copyFile (cachedir </> tarFile) (cwd </> tarFile)
     trySystem ("rpmbuild -b" ++ rpmCmd +-+
                      "--define \"_rpmdir" +-+ cwd ++ "\"" +-+
                      "--define \"_srcrpmdir" +-+ cwd ++ "\"" +-+
-                     "--define \"_sourcedir" +-+ srcdir ++ "\"" +-+
+                     "--define \"_sourcedir" +-+ cwd ++ "\"" +-+
                      specFile)
 
 defaultRelease :: UTCTime -> IO String
@@ -166,7 +149,7 @@
         isLib = hasLibs pkgDesc
         isBinLib = isExec && isLib
     specAlreadyExists <- doesFileExist specFile
-    let specFilename = specFile ++ if specAlreadyExists then ".cblrpm" else ""
+    let specFilename = specFile ++ if (not $ rpmForce flags) && specAlreadyExists then ".cblrpm" else ""
     when specAlreadyExists $ putStrLn $ specFile +-+ "exists:" +-+ "creating" +-+ specFilename
     h <- openFile specFilename WriteMode
     let putHdr hdr val = hPutStrLn h (hdr ++ ":" ++ padding hdr ++ val)
@@ -184,17 +167,17 @@
     -- Some packages conflate the synopsis and description fields.  Ugh.
     let syn = synopsis pkgDesc
     when (null syn) $
-      warn verbose "This package has no synopsis."
+      warn verbose "this package has no synopsis."
     let syn' = if (null syn)
               then ("Haskell" +-+ name +-+ "package")
               else (unwords $ lines syn)
     let summary = rstrip (== '.') syn'
-    when ((length . lines) syn > 1) $
-      warn verbose "The synopsis for this package spans multiple lines."
+    when ((length $ "Summary     : " ++ syn') > 79) $
+      warn verbose "this package has a long synopsis."
 
     let descr = description pkgDesc
     when (null descr) $
-      warn verbose "This package has no description."
+      warn verbose "this package has no description."
     let common_description = (formatParagraphs . lines . finalPeriod) $
           if (null descr) then syn' else descr
         finalPeriod cs = if (last cs == '.') then cs else cs ++ "."
@@ -235,12 +218,10 @@
 
     when (not . null $ deps ++ tools ++ clibs ++ pkgcfgs) $ do
       put "# Begin cabal-rpm deps:"
-      mapM_ (putHdr "BuildRequires") $ map showDep deps
+      let pkgdeps = sort $ map showDep deps ++ tools ++ map (++ "-devel%{?_isa}") clibs ++ map showPkgCfg pkgcfgs
+      mapM_ (putHdr "BuildRequires") pkgdeps
       when (any (\ d -> elem d ["template-haskell", "hamlet"]) deps) $
         putHdr "ExclusiveArch" "%{ghc_arches_with_ghci}"
-      mapM_ (putHdr "BuildRequires") tools
-      mapM_ (putHdr "BuildRequires") $ map (++ "-devel%{?_isa}") clibs
-      mapM_ (putHdr "BuildRequires") $ map showPkgCfg pkgcfgs
       put "# End cabal-rpm deps"
 
     putNewline
@@ -262,7 +243,7 @@
       putHdr "Requires" "ghc-compiler = %{ghc_version}"
       putHdr "Requires(post)" "ghc-compiler = %{ghc_version}"
       putHdr "Requires(postun)" "ghc-compiler = %{ghc_version}"
-      putHdr "Requires" $ (if isExec then "ghc-%{name}" else "%{name}") +-+ "= %{version}-%{release}"
+      putHdr "Requires" $ (if isExec then "ghc-%{name}" else "%{name}") ++ "%{?_isa} = %{version}-%{release}"
       when (not . null $ clibs ++ pkgcfgs) $ do
         put "# Begin cabal-rpm deps:"
         mapM_ (putHdr "Requires") $ map (++ "-devel%{?_isa}") clibs
@@ -381,14 +362,16 @@
 
 -- http://rosettacode.org/wiki/Word_wrap#Haskell
 wordwrap :: Int -> String -> String
-wordwrap maxlen = (wrap_ 0) . words where
-	wrap_ _ [] = "\n"
-	wrap_ pos (w:ws)
+wordwrap maxlen = (wrap_ 0 False) . words where
+	wrap_ _ _ [] = "\n"
+	wrap_ pos eos (w:ws)
 		-- at line start: put down the word no matter what
-		| pos == 0 = w ++ wrap_ (pos + lw) ws
-		| pos + lw + 1 > maxlen = '\n':wrap_ 0 (w:ws)
-		| otherwise = " " ++ w ++ wrap_ (pos + lw + 1) ws
+		| pos == 0 = w ++ wrap_ (pos + lw) endp ws
+		| pos + lw + 1 > maxlen - 9 && eos = '\n':wrap_ 0 endp (w:ws)
+		| pos + lw + 1 > maxlen = '\n':wrap_ 0 endp (w:ws)
+		| otherwise = " " ++ w ++ wrap_ (pos + lw + 1) endp ws
 		where lw = length w
+                      endp = last w == '.'
 
 formatParagraphs :: [String] -> [String]
 formatParagraphs = map (wordwrap 79) . paragraphs
diff --git a/src/Distribution/Package/Rpm/Main.hs b/src/Distribution/Package/Rpm/Main.hs
--- a/src/Distribution/Package/Rpm/Main.hs
+++ b/src/Distribution/Package/Rpm/Main.hs
@@ -29,11 +29,14 @@
 import Distribution.Simple.Utils (defaultPackageDesc, die, findPackageDesc)
 import Distribution.System            (Platform (..), buildArch, buildOS)
 import Data.List (isSuffixOf)
+import Data.Maybe (isJust)
 import System.Directory (doesDirectoryExist, doesFileExist, getCurrentDirectory,
                          removeDirectoryRecursive, setCurrentDirectory)
 import System.Environment (getArgs)
 import System.FilePath.Posix (takeExtension)
 
+import Text.Regex (matchRegex, mkRegex)
+
 main :: IO ()
 main = do (opts, args) <- getArgs >>= parseArgs
           let verbosity = rpmVerbosity opts
@@ -80,7 +83,7 @@
     else do
       isfile <- doesFileExist path
       if not isfile
-        then if (all (\ p -> p `notElem` path) "/.")
+        then if (isJust $ matchRegex pkg_re path)
              then do
                tryUnpack path
              else error $ path ++ ": No such file or directory"
@@ -94,14 +97,16 @@
                     file <- findPackageDesc $ tmpdir ++ "/" ++ init subdir
                     return (file, Just tmpdir)
                   else error $ path ++ ": file should be a .cabal or .tar.gz file."
-
+  where pkg_re = mkRegex "^([A-Za-z0-9-]+)(-([0-9.]+))?$"
 tryUnpack :: String -> IO (FilePath, Maybe FilePath)
 tryUnpack pkg = do
   pkgver <- if elem '.' pkg then return pkg
             else do
               contains_pkg <- tryReadProcess "cabal" ["list", "--simple-output", pkg]
               let pkgs = filter ((== pkg) . fst . break (== ' ')) $ lines contains_pkg
-              return $ map (\c -> if c == ' ' then '-' else c) $ last pkgs
+              if (null pkgs)
+                then error $ pkg ++ " hackage not found"
+                else return $ map (\c -> if c == ' ' then '-' else c) $ last pkgs
   isdir <- doesDirectoryExist pkgver
   if isdir
     then do
diff --git a/src/Distribution/Package/Rpm/Setup.hs b/src/Distribution/Package/Rpm/Setup.hs
--- a/src/Distribution/Package/Rpm/Setup.hs
+++ b/src/Distribution/Package/Rpm/Setup.hs
@@ -36,6 +36,7 @@
 
 data RpmFlags = RpmFlags
     { rpmConfigurationsFlags :: [(FlagName, Bool)]
+    , rpmForce               :: Bool
     , rpmHelp                :: Bool
     , rpmLibrary             :: Bool
     , rpmRelease             :: Maybe String
@@ -45,9 +46,9 @@
     deriving (Eq, Show)
 
 emptyRpmFlags :: RpmFlags
-
 emptyRpmFlags = RpmFlags
     { rpmConfigurationsFlags = []
+    , rpmForce = False
     , rpmHelp = False
     , rpmLibrary = False
     , rpmRelease = Nothing
@@ -65,6 +66,8 @@
              "Force package to be a Library ignoring executables",
       Option "f" ["flags"] (ReqArg (\flags x -> x { rpmConfigurationsFlags = rpmConfigurationsFlags x ++ flagList flags }) "FLAGS")
              "Set given flags in Cabal conditionals",
+      Option "" ["force"] (NoArg (\x -> x { rpmForce = True }))
+             "Overwrite existing spec file.",
       Option "" ["release"] (ReqArg (\rel x -> x { rpmRelease = Just rel }) "RELEASE")
              "Override the default package release",
       Option "v" ["verbose"] (ReqArg (\verb x -> x { rpmVerbosity = readEOrFail flagToVerbosity verb }) "n")
@@ -103,7 +106,7 @@
        printHelp stdout
        exitSuccess
      when (rpmVersion opts) $ do
-       hPutStrLn stderr $ "Version " ++ (showVersion version)
+       hPutStrLn stdout $ showVersion version
        exitSuccess
      unless (null errs) $ do
        hPutStrLn stderr "Error:"
