diff --git a/Merge.hs b/Merge.hs
--- a/Merge.hs
+++ b/Merge.hs
@@ -427,15 +427,17 @@
   createDirectoryIfMissing True edir
   now <- TC.getCurrentTime
 
-  let (existing_keywords, existing_license)  = (EM.keywords existing_meta, EM.license existing_meta)
+  let (existing_keywords, existing_license, existing_description) = (EM.keywords existing_meta, EM.license existing_meta, EM.description existing_meta)
       new_keywords = maybe (E.keywords ebuild) (map to_unstable) existing_keywords
       new_license  = either (\err -> maybe (Left err)
                                            Right
                                            existing_license)
                             Right
                             (E.license ebuild)
+      new_description = maybe (E.description ebuild) id existing_description
       ebuild'      = ebuild { E.keywords = new_keywords
                             , E.license = new_license
+                            , E.description = new_description
                             }
       s_ebuild'    = E.showEBuild now ebuild'
 
diff --git a/Merge/Dependencies.hs b/Merge/Dependencies.hs
--- a/Merge/Dependencies.hs
+++ b/Merge/Dependencies.hs
@@ -5,21 +5,8 @@
   , resolveDependencies
   ) where
 
-import Distribution.PackageDescription ( PackageDescription(..)
-                                       , libBuildInfo
-                                       , buildInfo
-                                       , buildable
-                                       , extraLibs
-                                       , buildTools
-                                       , pkgconfigDepends
-                                       , specVersion
-                                       , TestSuite(..)
-                                       , targetBuildDepends
-                                       )
-
 import Data.Maybe ( isJust, isNothing )
 import Data.Monoid ( Monoid, mempty, mappend)
-import Data.List ( nub )
 import qualified Data.List as L
 import qualified Data.Set as S
 
@@ -68,7 +55,7 @@
     , dep_e  = dep_eA  `S.union` dep_eB
     }
 
-resolveDependencies :: Portage.Overlay -> PackageDescription -> Cabal.CompilerInfo
+resolveDependencies :: Portage.Overlay -> Cabal.PackageDescription -> Cabal.CompilerInfo
                     -> [Cabal.PackageName] -> Cabal.PackageName
                     -> EDep
 resolveDependencies overlay pkg compiler_info ghc_package_names merged_cabal_pkg_name = edeps
@@ -78,7 +65,7 @@
     treatAsLibrary = isJust (Cabal.library pkg)
     -- without slot business
     raw_haskell_deps :: Portage.Dependency
-    raw_haskell_deps = PN.normalize_depend $ Portage.DependAllOf $ haskellDependencies overlay (buildDepends pkg)
+    raw_haskell_deps = PN.normalize_depend $ Portage.DependAllOf $ haskellDependencies overlay (Cabal.buildDepends pkg)
     test_deps :: Portage.Dependency
     test_deps = Portage.mkUseDependency (True, Portage.Use "test") $
                     Portage.DependAllOf $
@@ -146,9 +133,9 @@
 -- TODO: move partitioning part to Merge:mergeGenericPackageDescription
 ---------------------------------------------------------------
 
-setupDependencies :: Portage.Overlay -> PackageDescription -> [Cabal.PackageName] -> Cabal.PackageName -> [Portage.Dependency]
+setupDependencies :: Portage.Overlay -> Cabal.PackageDescription -> [Cabal.PackageName] -> Cabal.PackageName -> [Portage.Dependency]
 setupDependencies overlay pkg ghc_package_names merged_cabal_pkg_name = deps
-    where cabalDeps = maybe [] id $ Cabal.setupDepends `fmap` setupBuildInfo pkg
+    where cabalDeps = maybe [] id $ Cabal.setupDepends `fmap` Cabal.setupBuildInfo pkg
           cabalDeps' = fst $ Portage.partition_depends ghc_package_names merged_cabal_pkg_name cabalDeps
           deps = C2E.convertDependencies overlay (Portage.Category "dev-haskell") cabalDeps'
 
@@ -157,9 +144,9 @@
 -- TODO: move partitioning part to Merge:mergeGenericPackageDescription
 ---------------------------------------------------------------
 
-testDependencies :: Portage.Overlay -> PackageDescription -> [Cabal.PackageName] -> Cabal.PackageName -> [Portage.Dependency]
+testDependencies :: Portage.Overlay -> Cabal.PackageDescription -> [Cabal.PackageName] -> Cabal.PackageName -> [Portage.Dependency]
 testDependencies overlay pkg ghc_package_names merged_cabal_pkg_name = deps
-    where cabalDeps = concat $ map targetBuildDepends $ map testBuildInfo (testSuites pkg)
+    where cabalDeps = concat $ map Cabal.targetBuildDepends $ map Cabal.testBuildInfo (Cabal.testSuites pkg)
           cabalDeps' = fst $ Portage.partition_depends ghc_package_names merged_cabal_pkg_name cabalDeps
           deps = C2E.convertDependencies overlay (Portage.Category "dev-haskell") cabalDeps'
 
@@ -177,7 +164,7 @@
 
 -- | Select the most restrictive dependency on Cabal, either the .cabal
 -- file's descCabalVersion, or the Cabal GHC shipped with.
-cabalDependency :: Portage.Overlay -> PackageDescription -> Cabal.CompilerInfo -> Portage.Dependency
+cabalDependency :: Portage.Overlay -> Cabal.PackageDescription -> Cabal.CompilerInfo -> Portage.Dependency
 cabalDependency overlay pkg ~(Cabal.CompilerInfo {
                                   Cabal.compilerInfoId =
                                       Cabal.CompilerId Cabal.GHC cabal_version
@@ -188,7 +175,7 @@
                                                  finalCabalDep)
   where
     versionNumbers = Cabal.versionNumbers cabal_version
-    userCabalVersion = Cabal.orLaterVersion (specVersion pkg)
+    userCabalVersion = Cabal.orLaterVersion (Cabal.specVersion pkg)
     shippedCabalVersion = GHCCore.cabalFromGHC versionNumbers
     shippedCabalDep = maybe Cabal.anyVersion Cabal.orLaterVersion shippedCabalVersion
     finalCabalDep = Cabal.simplifyVersionRange
@@ -210,16 +197,16 @@
 -- C Libraries
 ---------------------------------------------------------------
 
-findCLibs :: PackageDescription -> [Portage.Dependency]
-findCLibs (PackageDescription { library = lib, executables = exes }) =
+findCLibs :: Cabal.PackageDescription -> [Portage.Dependency]
+findCLibs (Cabal.PackageDescription { Cabal.library = lib, Cabal.executables = exes }) =
   [ trace ("WARNING: This package depends on a C library we don't know the portage name for: " ++ p ++ ". Check the generated ebuild.")
           (any_c_p "unknown-c-lib" p)
   | p <- notFound
   ] ++
   found
   where
-  libE = concatMap (extraLibs . libBuildInfo) $ maybe [] return lib
-  exeE = concatMap extraLibs (filter buildable (map buildInfo exes))
+  libE = concatMap (Cabal.extraLibs . Cabal.libBuildInfo) $ maybe [] return lib
+  exeE = concatMap Cabal.extraLibs (filter Cabal.buildable (map Cabal.buildInfo exes))
   allE = libE ++ exeE
 
   notFound = [ p | p <- allE, isNothing (staticTranslateExtraLib p) ]
@@ -347,8 +334,8 @@
 -- Build Tools
 ---------------------------------------------------------------
 
-buildToolsDependencies :: PackageDescription -> [Portage.Dependency]
-buildToolsDependencies (PackageDescription { library = lib, executables = exes }) = nub $
+buildToolsDependencies :: Cabal.PackageDescription -> [Portage.Dependency]
+buildToolsDependencies (Cabal.PackageDescription { Cabal.library = lib, Cabal.executables = exes }) = L.nub $
   [ case pkg of
       Just p -> p
       Nothing -> trace ("WARNING: Unknown build tool '" ++ Cabal.display exe ++ "'. Check the generated ebuild.")
@@ -358,8 +345,8 @@
   ]
   where
   cabalDeps = filter notProvided $ depL ++ depE
-  depL = concatMap (buildTools . libBuildInfo) $ maybe [] return lib
-  depE = concatMap buildTools (filter buildable (map buildInfo exes))
+  depL = concatMap (Cabal.buildTools . Cabal.libBuildInfo) $ maybe [] return lib
+  depE = concatMap Cabal.buildTools (filter Cabal.buildable (map Cabal.buildInfo exes))
   notProvided (Cabal.LegacyExeDependency pn _range) = pn `notElem` buildToolsProvided
 
 buildToolsTable :: [(String, Portage.Dependency)]
@@ -388,12 +375,12 @@
 -- pkg-config
 ---------------------------------------------------------------
 
-pkgConfigDependencies :: Portage.Overlay -> PackageDescription -> [Portage.Dependency]
-pkgConfigDependencies overlay (PackageDescription { library = lib, executables = exes }) = nub $ resolvePkgConfigs overlay cabalDeps
+pkgConfigDependencies :: Portage.Overlay -> Cabal.PackageDescription -> [Portage.Dependency]
+pkgConfigDependencies overlay (Cabal.PackageDescription { Cabal.library = lib, Cabal.executables = exes }) = L.nub $ resolvePkgConfigs overlay cabalDeps
   where
   cabalDeps = depL ++ depE
-  depL = concatMap (pkgconfigDepends . libBuildInfo) $ maybe [] return lib
-  depE = concatMap pkgconfigDepends (filter buildable (map buildInfo exes))
+  depL = concatMap (Cabal.pkgconfigDepends . Cabal.libBuildInfo) $ maybe [] return lib
+  depE = concatMap Cabal.pkgconfigDepends (filter Cabal.buildable (map Cabal.buildInfo exes))
 
 resolvePkgConfigs :: Portage.Overlay -> [Cabal.PkgconfigDependency] -> [Portage.Dependency]
 resolvePkgConfigs overlay cdeps =
diff --git a/Portage/EBuild.hs b/Portage/EBuild.hs
--- a/Portage/EBuild.hs
+++ b/Portage/EBuild.hs
@@ -93,7 +93,6 @@
 showEBuild now ebuild =
   ss ("# Copyright 1999-" ++ this_year ++ " Gentoo Foundation"). nl.
   ss "# Distributed under the terms of the GNU General Public License v2". nl.
-  ss "# $Id$". nl.
   nl.
   ss "EAPI=6". nl.
   nl.
diff --git a/Portage/EMeta.hs b/Portage/EMeta.hs
--- a/Portage/EMeta.hs
+++ b/Portage/EMeta.hs
@@ -58,10 +58,15 @@
 extractCabalFlags ebuild_path s_ebuild =
     extract_hackport_var ebuild_path s_ebuild "flags"
 
+extractDescription :: FilePath -> String -> Maybe String
+extractDescription ebuild_path s_ebuild =
+    extract_quoted_string ebuild_path s_ebuild "DESCRIPTION"
+
 -- aggregated (best inferred) metadata for a new ebuild of package
 data EMeta = EMeta { keywords :: Maybe [String]
                    , license  :: Maybe String
                    , cabal_flags :: Maybe String
+                   , description :: Maybe String
                    }
 
 findExistingMeta :: FilePath -> IO EMeta
@@ -76,10 +81,12 @@
                          return EMeta { keywords = extractKeywords e e_conts
                                       , license = extractLicense  e e_conts
                                       , cabal_flags = extractCabalFlags e e_conts
+                                      , description = extractDescription e e_conts
                                       }
        let get_latest candidates = last (Nothing : filter (/= Nothing) candidates)
            aggregated_meta = EMeta { keywords = get_latest $ map keywords e_metas
                                    , license = get_latest $ map license e_metas
                                    , cabal_flags = get_latest $ map cabal_flags e_metas
+                                   , description = get_latest $ map description e_metas
                                    }
        return aggregated_meta
diff --git a/hackport.cabal b/hackport.cabal
--- a/hackport.cabal
+++ b/hackport.cabal
@@ -1,5 +1,5 @@
 Name:           hackport
-Version:        0.5.1
+Version:        0.5.2
 License:        GPL
 License-file:   LICENSE
 Author:         Henning Günther, Duncan Coutts, Lennart Kolmodin
@@ -40,7 +40,7 @@
     old-locale,
     regex-compat,
     split,
-    tar,
+    tar >= 0.5,
     time,
     zlib,
     xml >= 1.3.7,
