diff --git a/.gitignore b/.gitignore
new file mode 100644
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,1 @@
+dist/
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "cabal"]
+	path = cabal
+	url = git://github.com/gentoo-haskell/cabal.git
diff --git a/Cabal2Ebuild.hs b/Cabal2Ebuild.hs
--- a/Cabal2Ebuild.hs
+++ b/Cabal2Ebuild.hs
@@ -39,6 +39,7 @@
 import Portage.Dependency
 import qualified Portage.PackageId as Portage
 import qualified Portage.EBuild as Portage
+import qualified Portage.GHCCore as Portage
 import qualified Portage.Resolve as Portage
 import qualified Portage.EBuild as E
 import qualified Portage.Overlay as O
@@ -65,7 +66,7 @@
                    ++ (if hasTests then ["test-suite"] else [])
   } where
         cabalPkgName = display $ Cabal.pkgName (Cabal.package pkg)
-        hasExe = (not . null) (Cabal.executables pkg) 
+        hasExe = (not . null) (Cabal.executables pkg)
         hasTests = (not . null) (Cabal.testSuites pkg)
         thisHomepage = if (null $ Cabal.homepage pkg)
                          then E.homepage E.ebuildTemplate
@@ -76,7 +77,7 @@
 
 convertDependency :: O.Overlay -> Portage.Category -> Cabal.Dependency -> [Dependency]
 convertDependency _overlay _category (Cabal.Dependency pname@(Cabal.PackageName _name) _)
-  | pname `elem` coreLibs = []      -- no explicit dep on core libs
+  | pname `elem` Portage.coreLibs = []      -- no explicit dep on core libs
 convertDependency overlay category (Cabal.Dependency pname versionRange)
   = convert versionRange
   where
@@ -96,31 +97,3 @@
             )(\r1 r2 -> r1 ++ r2                                     -- ^ @\"_ && _\"@ intersection
             )(\dp    -> [AllOf dp                                  ] -- ^ @\"(_)\"@ parentheses
             )
-
-coreLibs :: [Cabal.PackageName]
-coreLibs = map Cabal.PackageName
-  ["array"
-  ,"base"
-  ,"bytestring"   -- intentionally no ebuild. use ghc's version
-                  -- to avoid dreaded 'diamond dependency' problem
-  ,"containers"
-  ,"directory"
-  --,"editline"
-  ,"filepath"     -- intentionally no ebuild. use ghc's version
-  ,"ghc"
-  ,"ghc-prim"
-  ,"haskell98"
-  ,"hpc"          --has ebuild, but only in the overlay
-  ,"integer"      -- up to ghc-6.10
-  ,"integer-gmp"  -- ghc-6.12+
-  ,"old-locale"
-  ,"old-time"
-  ,"packedstring"
-  ,"pretty"
-  ,"process"
-  -- ,"random"    -- not a core package since ghc-7.2
-  ,"rts"
-  -- ,"syb"       -- was splitted off from ghc again
-  ,"template-haskell"
-  ,"unix"         -- unsafe to upgrade
-  ]
diff --git a/Merge.hs b/Merge.hs
--- a/Merge.hs
+++ b/Merge.hs
@@ -7,6 +7,7 @@
 import Control.Monad.Error
 import Control.Exception
 import qualified Data.ByteString.Lazy.Char8 as BL
+import Data.Char (isSpace)
 import Data.Maybe
 import Data.List as L
 import Data.Version
@@ -32,6 +33,7 @@
 
 -- others
 import System.Directory ( getCurrentDirectory
+                        , getDirectoryContents
                         , setCurrentDirectory
                         , createDirectoryIfMissing
                         , doesFileExist
@@ -62,11 +64,8 @@
 
 {-
 Requested features:
-  * Copy the old keywords and ~arch them
-  * Add files to darcs?
+  * Add files to git?
   * Print diff with the next latest version?
-BUGS:
-  * Dependencies are always expected to be in dev-haskell
 -}
 
 readPackageString :: [String]
@@ -199,10 +198,23 @@
   forM_ excludePkgs $
       \(Cabal.PackageName name) -> info verbosity $ "Excluded packages (comes with ghc): " ++ name
 
-  let ebuild =   (\e -> e { E.depend        = Merge.dep edeps } )
+  let p_flag (Cabal.FlagName fn, True)  =     fn
+      p_flag (Cabal.FlagName fn, False) = '-':fn
+
+      -- appends 's' to each line except the last one
+      --  handy to build multiline shell expressions
+      icalate _s []     = []
+      icalate _s [x]    = [x]
+      icalate  s (x:xs) = (x ++ s) : icalate s xs
+
+      selected_flags [] = []
+      selected_flags fs = icalate " \\" $ "haskell-cabal_src_configure" : map (("\t--flag=" ++) . p_flag) fs
+
+      ebuild =   (\e -> e { E.depend        = Merge.dep edeps } )
                . (\e -> e { E.depend_extra  = Merge.dep_e edeps } )
                . (\e -> e { E.rdepend       = Merge.rdep edeps } )
                . (\e -> e { E.rdepend_extra = Merge.rdep_e edeps } )
+               . (\e -> e { E.src_configure = selected_flags flags } )
                $ C2E.cabal2ebuild pkgDesc
 
   mergeEbuild verbosity overlayPath (Portage.unCategory cat) ebuild
@@ -232,8 +244,42 @@
     (\_ -> setCurrentDirectory oldDir)
     (\_ -> action)
 
+extractKeywords :: FilePath -> String -> Maybe [String]
+extractKeywords ebuild_path s_ebuild =
+    let ltrim :: String -> String
+        ltrim = dropWhile isSpace
+        lns    = lines s_ebuild
+        -- TODO: nicer pattern match and errno
+    in case (findIndices (isPrefixOf "KEYWORDS=\"" . ltrim) lns) of
+           []      -> Nothing
+           [kw_ln] -> let kw_line  = lns !! kw_ln
+                          kw_str   = (fst . break (== '"') . tail . snd . break (== '"')) kw_line
+                          keywords = words kw_str
+                      in Just keywords
+           other   -> error $ ebuild_path ++ ": parse_ebuild: strange KEYWORDS lines: " ++ show other
+
+findExistingKeywords :: FilePath -> IO (Maybe [String])
+findExistingKeywords edir =
+    do ebuilds <- filter (isPrefixOf (reverse ".ebuild") . reverse) `fmap` getDirectoryContents edir
+       -- TODO: version sort
+       e_kw_s <- forM ebuilds $ \e ->
+                     do let e_path = edir </> e
+                        e_conts <- readFile e_path
+                        return (e, extractKeywords e_path e_conts)
+       if null e_kw_s
+           then return Nothing
+           else return (snd $ last e_kw_s)
+
+-- "amd64" -> "~amd64"
+to_unstable :: String -> String
+to_unstable kw =
+    case kw of
+        '~':_ -> kw
+        '-':_ -> kw
+        _     -> '~':kw
+
 mergeEbuild :: Verbosity -> FilePath -> String -> E.EBuild -> IO () 
-mergeEbuild verbosity target cat ebuild = do 
+mergeEbuild verbosity target cat ebuild = do
   let edir = target </> cat </> E.name ebuild
       elocal = E.name ebuild ++"-"++ E.version ebuild <.> "ebuild"
       epath = edir </> elocal
@@ -241,8 +287,16 @@
       mpath = edir </> emeta
       default_meta = BL.pack $ Portage.makeDefaultMetadata (E.long_desc ebuild)
   createDirectoryIfMissing True edir
+  existing_keywords <- findExistingKeywords edir
+
+  let new_keywords = maybe (E.keywords ebuild) (map to_unstable) (existing_keywords)
+      ebuild'      = ebuild { E.keywords = new_keywords }
+      s_ebuild'    = display ebuild'
+
+  notice verbosity $ "Current keywords: " ++ show existing_keywords ++ " -> " ++ show new_keywords
+
   notice verbosity $ "Writing " ++ elocal
-  BL.writeFile epath (BL.pack $ display ebuild)
+  (length s_ebuild') `seq` BL.writeFile epath (BL.pack s_ebuild')
 
   yet_meta <- doesFileExist mpath
   if (not yet_meta) -- TODO: add --force-meta-rewrite to opts
diff --git a/Merge/Dependencies.hs b/Merge/Dependencies.hs
--- a/Merge/Dependencies.hs
+++ b/Merge/Dependencies.hs
@@ -123,8 +123,11 @@
     cabal_dep = cabalDependency overlay pkg compiler
     ghc_dep = compilerIdToDependency compiler
     extra_libs = findCLibs pkg
-    build_tools = buildToolsDependencies pkg
-    pkg_config = pkgConfigDependencies overlay pkg
+    pkg_config_libs = pkgConfigDependencies overlay pkg
+    pkg_config_tools = if null pkg_config_libs
+                           then []
+                           else [Portage.AnyVersionOf (Portage.mkPackageName "virtual" "pkgconfig") Portage.AnySlot []]
+    build_tools = buildToolsDependencies pkg ++ pkg_config_tools
     edeps
         | treatAsLibrary = emptyEDep
                   {
@@ -135,7 +138,7 @@
                     rdep = set_build_slot ghc_dep
                             : haskell_deps
                             ++ extra_libs
-                            ++ pkg_config
+                            ++ pkg_config_libs
                   }
         | otherwise = emptyEDep
                   {
@@ -145,7 +148,7 @@
                           ++ haskell_deps
                           ++ test_deps,
                     dep_e = [ "${RDEPEND}" ],
-                    rdep = extra_libs ++ pkg_config
+                    rdep = extra_libs ++ pkg_config_libs
                   }
     add_profile    = Portage.addDepUseFlag (Portage.mkQUse "profile")
     set_build_slot = Portage.setSlotDep Portage.AnyBuildTimeSlot
@@ -245,6 +248,15 @@
       , ("libzip", Portage.AnyVersionOf (Portage.mkPackageName "dev-libs" "libzip") Portage.AnySlot [])
       , ("ssl", Portage.AnyVersionOf (Portage.mkPackageName "dev-libs" "openssl") Portage.AnySlot [])
       , ("Judy", Portage.AnyVersionOf (Portage.mkPackageName "dev-libs" "judy") Portage.AnySlot [])
+      , ("fcgi", Portage.AnyVersionOf (Portage.mkPackageName "dev-libs" "fcgi") Portage.AnySlot [])
+      , ("gnutls", Portage.AnyVersionOf (Portage.mkPackageName "net-libs" "gnutls") Portage.AnySlot [])
+      , ("idn", Portage.AnyVersionOf (Portage.mkPackageName "net-dns" "libidn") Portage.AnySlot [])
+      , ("tre", Portage.AnyVersionOf (Portage.mkPackageName "dev-libs" "tre") Portage.AnySlot [])
+      , ("m", Portage.AnyVersionOf (Portage.mkPackageName "virtual" "libc") Portage.AnySlot [])
+      , ("asound", Portage.AnyVersionOf (Portage.mkPackageName "media-libs" "alsa-lib") Portage.AnySlot [])
+      , ("sqlite3", Portage.OrLaterVersionOf (Portage.Version [3,0] Nothing [] 0) (Portage.mkPackageName "dev-db" "sqlite") Portage.AnySlot [])
+      , ("stdc++", Portage.AnyVersionOf (Portage.mkPackageName "sys-devel" "gcc") Portage.AnySlot [Portage.mkUse "cxx"])
+      , ("crack", Portage.AnyVersionOf (Portage.mkPackageName "sys-libs" "cracklib") Portage.AnySlot [])
       ]
 
 ---------------------------------------------------------------
@@ -303,7 +315,7 @@
   | pkg@(Cabal.Dependency (Cabal.PackageName pn) _range) <- cdeps ]
 
 resolvePkgConfig :: Portage.Overlay -> Cabal.Dependency -> Maybe Portage.Dependency
-resolvePkgConfig overlay (Cabal.Dependency (Cabal.PackageName pn) _cabalVersion) = do
+resolvePkgConfig _overlay (Cabal.Dependency (Cabal.PackageName pn) _cabalVersion) = do
   (cat,portname, slot) <- lookup pn table
   return $ Portage.AnyVersionOf (Portage.mkPackageName cat portname) slot []
 
@@ -371,5 +383,7 @@
   ,("libxml2",                     ("dev-libs", "libxml2", Portage.AnySlot))
   ,("libgsasl",                    ("virtual", "gsasl", Portage.AnySlot))
   ,("libzip",                      ("dev-libs", "libzip", Portage.AnySlot))
-
+  ,("gnutls",                      ("net-libs", "gnutls", Portage.AnySlot))
+  ,("libidn",                      ("net-dns", "libidn", Portage.AnySlot))
+  ,("libxml-2.0",                  ("dev-libs", "libxml2", Portage.AnySlot))
   ]
diff --git a/Portage/EBuild.hs b/Portage/EBuild.hs
--- a/Portage/EBuild.hs
+++ b/Portage/EBuild.hs
@@ -33,6 +33,8 @@
     rdepend_extra :: [String],
     features :: [String],
     my_pn :: Maybe String -- ^ Just 'myOldName' if the package name contains upper characters
+    , src_prepare :: [String] -- ^ raw block for src_prepare() contents
+    , src_configure :: [String] -- ^ raw block for src_configure() contents
   }
 
 getHackportVersion :: Version -> String
@@ -58,6 +60,8 @@
     rdepend_extra = [],
     features = [],
     my_pn = Nothing
+    , src_prepare = []
+    , src_configure = []
   }
 
 instance Text EBuild where
@@ -77,7 +81,7 @@
 
 showEBuild :: EBuild -> String
 showEBuild ebuild =
-  ss "# Copyright 1999-2012 Gentoo Foundation". nl.
+  ss "# Copyright 1999-2013 Gentoo Foundation". nl.
   ss "# Distributed under the terms of the GNU General Public License v2". nl.
   ss "# $Header: $". nl.
   nl.
@@ -107,33 +111,50 @@
   dep_str "DEPEND"  ( depend_extra ebuild) ( depend ebuild).
   (case my_pn ebuild of
      Nothing -> id
-     Just _ -> nl. ss "S=". quote ("${WORKDIR}/${MY_P}"). nl)
-  $ []
-  where expandVars = replaceMultiVars [ (        name ebuild, "${PN}")
+     Just _ -> nl. ss "S=". quote ("${WORKDIR}/${MY_P}"). nl).
+  verbatim (nl. ss "src_prepare() {" . nl)
+               (src_prepare ebuild)
+           (ss "}" . nl).
+  verbatim (nl. ss "src_configure() {" . nl)
+               (src_configure ebuild)
+           (ss "}" . nl).
+  id $ []
+  where
+        expandVars = replaceMultiVars [ (        name ebuild, "${PN}")
                                       , (hackage_name ebuild, "${HACKAGE_N}")
                                       ]
-        toMirror = replace "http://hackage.haskell.org/" "mirror://hackage/" 
+        toMirror = replace "http://hackage.haskell.org/" "mirror://hackage/"
 
-ss :: String -> String -> String
+type DString = String -> String
+
+ss :: String -> DString
 ss = showString
 
-sc :: Char -> String -> String
+sc :: Char -> DString
 sc = showChar
 
-nl :: String -> String
+nl :: DString
 nl = sc '\n'
 
-dep_str :: String -> [String] -> [Dependency] -> (String -> String)
+verbatim :: DString -> [String] -> DString -> DString
+verbatim pre s post =
+    if null s
+        then id
+        else pre .
+            (foldl (\acc v -> acc . ss "\t" . ss v . nl) id s) .
+            post
+
+dep_str :: String -> [String] -> [Dependency] -> DString
 dep_str var extra deps = ss var. sc '='. quote' (sepBy "\n\t\t" $ extra ++ map display deps). nl
 
-quote :: String -> String -> String
+quote :: String -> DString
 quote str = sc '"'. ss (esc str). sc '"'
   where
   esc = concatMap esc'
   esc' '"' = "\""
   esc' c = [c]
 
-quote' :: (String -> String) -> String -> String
+quote' :: DString -> DString
 quote' str = sc '"'. str. sc '"'
 
 sepBy :: String -> [String] -> ShowS
@@ -142,31 +163,31 @@
 sepBy s (x:xs) = ss x. ss s. sepBy s xs
 
 getRestIfPrefix ::
-	String ->	-- ^ the prefix
-	String ->	-- ^ the string
-	Maybe String
+    String ->    -- ^ the prefix
+    String ->    -- ^ the string
+    Maybe String
 getRestIfPrefix (p:ps) (x:xs) = if p==x then getRestIfPrefix ps xs else Nothing
 getRestIfPrefix [] rest = Just rest
 getRestIfPrefix _ [] = Nothing
 
 subStr ::
-	String ->	-- ^ the search string
-	String ->	-- ^ the string to be searched
-	Maybe (String,String)  -- ^ Just (pre,post) if string is found
+    String ->    -- ^ the search string
+    String ->    -- ^ the string to be searched
+    Maybe (String,String)  -- ^ Just (pre,post) if string is found
 subStr sstr str = case getRestIfPrefix sstr str of
-	Nothing -> if null str then Nothing else case subStr sstr (tail str) of
-		Nothing -> Nothing
-		Just (pre,post) -> Just (head str:pre,post)
-	Just rest -> Just ([],rest)
+    Nothing -> if null str then Nothing else case subStr sstr (tail str) of
+        Nothing -> Nothing
+        Just (pre,post) -> Just (head str:pre,post)
+    Just rest -> Just ([],rest)
 
 replaceMultiVars ::
-	[(String,String)] ->	-- ^ pairs of variable name and content
-	String ->		-- ^ string to be searched
-	String 			-- ^ the result
+    [(String,String)] ->    -- ^ pairs of variable name and content
+    String ->        -- ^ string to be searched
+    String             -- ^ the result
 replaceMultiVars [] str = str
 replaceMultiVars whole@((pname,cont):rest) str = case subStr cont str of
-	Nothing -> replaceMultiVars rest str
-	Just (pre,post) -> (replaceMultiVars rest pre)++pname++(replaceMultiVars whole post)
+    Nothing -> replaceMultiVars rest str
+    Just (pre,post) -> (replaceMultiVars rest pre)++pname++(replaceMultiVars whole post)
 
 -- map the cabal license type to the gentoo license string format
 convertLicense :: Cabal.License -> String
diff --git a/Portage/GHCCore.hs b/Portage/GHCCore.hs
--- a/Portage/GHCCore.hs
+++ b/Portage/GHCCore.hs
@@ -1,7 +1,8 @@
 
 -- Guess GHC version from packages depended upon.
 module Portage.GHCCore
-        ( minimumGHCVersionToBuildPackage
+        ( coreLibs
+        , minimumGHCVersionToBuildPackage
         , cabalFromGHC
         , defaultGHC
         ) where
@@ -64,7 +65,7 @@
 -- Packages that are not core will always be accepted, packages that are
 -- core in any ghc must be satisfied by the 'PackageIndex'.
 dependencySatisfiable :: PackageIndex -> Dependency -> Bool
-dependencySatisfiable pi dep@(Dependency pn rang)
+dependencySatisfiable pi dep@(Dependency pn _rang)
   | pn == PackageName "Win32" = False -- only exists on windows, not in linux
   | not . null $ lookupDependency pi dep = True -- the package index satisfies the dep
   | packageIsCoreInAnyGHC pn = False -- some other ghcs support the dependency
@@ -161,7 +162,7 @@
   , p "pretty" [1,1,1,0]
   , p "process" [1,1,0,2]
   , p "template-haskell" [2,8,0,0] -- used by libghc
--- , p "time" [1,4,0,1] -- upgradeable, but used by haskell98
+  , p "time" [1,4,0,1] -- used by haskell98, unix, directory, hpc, ghc. unsafe to upgrade
   , p "unix" [2,6,0,0]
   ]
 
@@ -188,7 +189,7 @@
   , p "pretty" [1,1,1,0]
   , p "process" [1,1,0,1]
   , p "template-haskell" [2,7,0,0] -- used by libghc
--- , p "time" [1,4] -- upgradeable, but used by haskell98
+  , p "time" [1,4]
   , p "unix" [2,5,1,1]
   ]
 
@@ -215,7 +216,7 @@
   , p "pretty" [1,1,1,0]
   , p "process" [1,1,0,1]
   , p "template-haskell" [2,7,0,0] -- used by libghc
--- , p "time" [1,4] -- upgradeable, but used by haskell98
+  , p "time" [1,4]
   , p "unix" [2,5,1,0]
   ]
 
@@ -241,7 +242,7 @@
   , p "process" [1,0,1,5]
 --   , p "random" [1,0,0,3] -- will not be shipped starting from ghc-7.2
   , p "template-haskell" [2,5,0,0]
---  , p "time" [1,2,0,3] package is upgradeable
+  , p "time" [1,2,0,3]
   , p "unix" [2,4,2,0]
   ]
 
@@ -269,7 +270,7 @@
 --  , p "random" [1,0,0,2] -- will not be shipped starting from ghc-7.2
 --  , p "syb" [0,1,0,2] -- not distributed with ghc-7
   , p "template-haskell" [2,4,0,1]
---  , p "time" [1,1,4] package is upgradeable
+  , p "time" [1,1,4]
   , p "unix" [2,4,0,2]
 --  , p "utf8-string" [0,3,4] package is upgradeable
   ]
@@ -297,7 +298,7 @@
 --  , p "random" [1,0,0,2] -- will not be shipped starting from ghc-7.2
 --  , p "syb" [0,1,0,2] -- not distributed with ghc-7
   , p "template-haskell" [2,4,0,1]
---  , p "time" [1,1,4] package is upgradeable
+  , p "time" [1,1,4]
   , p "unix" [2,4,0,1]
 --  , p "utf8-string" [0,3,4] package is upgradeable
   ]
@@ -325,7 +326,7 @@
 --  , p "random" [1,0,0,2] -- will not be shipped starting from ghc-7.2
 --  , p "syb" [0,1,0,2] -- not distributed with ghc-7
   , p "template-haskell" [2,4,0,0]
---  , p "time" [1,1,4] package is upgradeable
+  , p "time" [1,1,4]
   , p "unix" [2,4,0,0]
 --  , p "utf8-string" [0,3,4] package is upgradeable
   ]
@@ -353,9 +354,39 @@
 --  , p "random" [1,0,0,1] -- will not be shipped starting from ghc-7.2
 --  , p "syb" [0,1,0,1] -- not distributed with ghc-7
   , p "template-haskell" [2,3,0,1]
---  , p "time" [1,1,4] package is upgradeable
   , p "unix" [2,3,2,0]
   ]
 
 p :: String -> [Int] -> PackageIdentifier
 p pn vs = PackageIdentifier (PackageName pn) (Version vs [])
+
+coreLibs :: [PackageName]
+coreLibs = map PackageName
+  ["array"
+  ,"base"
+  ,"bytestring"   -- intentionally no ebuild. use ghc's version
+                  -- to avoid dreaded 'diamond dependency' problem
+  ,"containers"
+  ,"directory"
+  --,"editline"
+  ,"filepath"     -- intentionally no ebuild. use ghc's version
+  ,"ghc"
+  ,"ghc-prim"
+  ,"haskell98"
+  ,"hpc"          --has ebuild, but only in the overlay
+  ,"integer"      -- up to ghc-6.10
+  ,"integer-gmp"  -- ghc-6.12+
+  ,"old-locale"
+  ,"old-time"
+  ,"packedstring"
+  ,"pretty"
+  ,"process"
+  -- ,"random"    -- not a core package since ghc-7.2
+  ,"rts"
+  -- ,"syb"       -- was splitted off from ghc again
+  ,"template-haskell"
+  ,"time" -- ghc-6.12+. startig from ghc-7.6.1 it is very
+          -- unsafe to unpgrade as most others (like directory)
+          -- depend on it
+  ,"unix"         -- unsafe to upgrade
+  ]
diff --git a/Status.hs b/Status.hs
--- a/Status.hs
+++ b/Status.hs
@@ -155,7 +155,8 @@
 --   * Newer version in overlay than in portage
 toPortageFilter :: Map PackageName [FileStatus ExistingEbuild] -> Map PackageName [FileStatus ExistingEbuild]
 toPortageFilter = Map.mapMaybe $ \ sts ->
-    let inPortage = flip filter sts $ \st ->
+    let filter_out_lives = filter (not . V.is_live . pkgVersion . ebuildId . fromStatus)
+        inPortage = flip filter sts $ \st ->
                         case st of
                             OverlayOnly _ -> False
                             HackageOnly _ -> False
@@ -166,7 +167,7 @@
                 Differs _ _ -> True
                 _ | pkgVersion (ebuildId (fromStatus st)) > latestPortageVersion -> True
                   | otherwise -> False
-    in if not (null inPortage) && not (null interestingPackages)
+    in if not (null inPortage) && not (null $ filter_out_lives interestingPackages)
         then Just sts
         else Nothing
 
diff --git a/TODO b/TODO
--- a/TODO
+++ b/TODO
@@ -9,31 +9,20 @@
     still are any missing. set good default values, and make sure we don't
     get any 'fromFlag' errors due to missing defaults for all commands
 
-* catch base constraints and upgrade ghc requirement
-      (like in vty-4.0.0.1: base >= 4 leads to ghc >= 6.10)
-
 Harder
 ======
 
-* translate the dev-db/libpq dependency into dev-db/postgresql-base
-    the cabal field to describe c libs should be translated if we know the
-    proper gentoo package name.
-
 * see if PackageIndex and IndexUtils from cabal install can be used instead of Index
     see Distribution.Simple.PackageIndex
     PackageIndex Ebuild?
 
-* make clear destinction of Hackage.Package and Portage.Package (notice the namespaces)
+* make clear distinction of Hackage.Package and Portage.Package (notice the namespaces)
    Look into Portage, P2 and whatever other hacks there might be and
    properly separate them into the two categories.
    See the already existing Portage.PackageId
 
-* look into Ebuild's field ePkgDesc and its uses
-
 * Merge the separate tool keyword-stat into hackport, and make it use the
     hackport API.
     See http://code.haskell.org/gentoo/keyword-stat/
 
 * Pick keywords from latest available ebuild
-
-* hacport status --to-portage should warn about different 'ChangeLog' and 'metadata.xml' files
diff --git a/cabal/.gitignore b/cabal/.gitignore
new file mode 100644
--- /dev/null
+++ b/cabal/.gitignore
@@ -0,0 +1,25 @@
+# trivial gitignore file
+
+cabal-dev/
+Cabal/dist/
+cabal-install/dist/
+.hpc/
+*.hi
+*.o
+*.p_hi
+*.prof
+*.tix
+
+# editor temp files
+
+*#
+.#*
+*~
+.*.swp
+
+# GHC build
+
+Cabal/GNUmakefile
+Cabal/dist-boot/
+Cabal/dist-install/
+Cabal/ghc.mk
diff --git a/hackport.cabal b/hackport.cabal
--- a/hackport.cabal
+++ b/hackport.cabal
@@ -1,11 +1,11 @@
 Name:           hackport
-Version:	0.3.1
-License:	GPL
+Version:        0.3.2
+License:        GPL
 License-file:   LICENSE
-Author:		Henning Günther, Duncan Coutts, Lennart Kolmodin
+Author:         Henning Günther, Duncan Coutts, Lennart Kolmodin
 Maintainer:     Gentoo Haskell team <haskell@gentoo.org>
 Category:       Distribution
-Synopsis:	Hackage and Portage integration tool
+Synopsis:       Hackage and Portage integration tool
 Description:    A command line tool to manage an overlay of Gentoo ebuilds
                 that are generated from a hackage repo of Cabal packages.
 Build-Type:     Simple
@@ -17,8 +17,8 @@
 
 Flag split-base
 
-Executable	hackport
-  Main-Is:	Main.hs
+Executable    hackport
+  Main-Is:    Main.hs
   Default-Language: Haskell98
   Hs-Source-Dirs: ., cabal, cabal/Cabal, cabal/cabal-install
   Build-Depends:
@@ -89,8 +89,8 @@
     Util
 
 
-Executable	hackport-guess-ghc-version
-  Main-Is:	Main-GuessGHC.hs
+Executable    hackport-guess-ghc-version
+  Main-Is:    Main-GuessGHC.hs
   Default-Language: Haskell98
   Buildable:    False
   -- this was used as a test while developing the
