diff --git a/cblrepo.cabal b/cblrepo.cabal
--- a/cblrepo.cabal
+++ b/cblrepo.cabal
@@ -1,5 +1,5 @@
 name: cblrepo
-version: 0.6.3
+version: 0.7.0
 cabal-version: >= 1.6
 license: OtherLicense
 license-file: LICENSE-2.0
@@ -25,10 +25,10 @@
     other-modules: Util.Misc PkgDB Add BumpPkgs BuildPkgs Sync
         Versions Updates ListPkgs Urls PkgBuild Util.Translation
         OldPkgDB ConvertDB Remove
-    build-depends: base ==4.5.*, cmdargs ==0.10.*, filepath ==1.3.*,
-        directory ==1.1.*, Cabal ==1.14.*, json ==0.5.*,
-        bytestring ==0.9.*, tar ==0.4.*, zlib ==0.5.*, mtl >=2.0 && <2.2,
-        process ==1.1.*, Unixutils ==1.50.*, unix ==2.5.*,
+    build-depends: base ==4.6.*, cmdargs ==0.10.*, filepath ==1.3.*,
+        directory ==1.2.*, Cabal ==1.16.*, json ==0.7.*,
+        bytestring ==0.10.*, tar ==0.4.*, zlib ==0.5.*, mtl >=2.0 && <2.2,
+        process ==1.1.*, Unixutils ==1.50.*, unix ==2.6.*,
         ansi-wl-pprint ==0.6.*
 
 Source-Repository head
diff --git a/src/PkgBuild.hs b/src/PkgBuild.hs
--- a/src/PkgBuild.hs
+++ b/src/PkgBuild.hs
@@ -26,6 +26,7 @@
 import Data.Maybe
 import Distribution.Text
 import System.Directory
+import System.FilePath
 import System.Exit
 import System.IO
 import System.Unix.Directory
@@ -58,7 +59,8 @@
             hClose hPKGBUILD
             maybe (return ()) (\ pfn -> (runErrorT $ applyPatch "PKGBUILD" pfn) >> return ()) (apPkgbuildPatch archPkgWHash)
             when (apHasLibrary archPkgWHash) $ do
-                hInstall <- openFile (apPkgName archPkgWHash ++ ".install") WriteMode
+                hInstall <- openFile (apPkgName archPkgWHash <.> "install") WriteMode
                 let archInstall = aiFromAP archPkgWHash
                 hPutDoc hInstall $ pretty archInstall
                 hClose hInstall
+                maybe (return ()) (\ pfn -> (runErrorT $ applyPatch (apPkgName archPkgWHash <.> "install") pfn)>> return ()) (apInstallPatch archPkgWHash)
diff --git a/src/PkgDB.hs b/src/PkgDB.hs
--- a/src/PkgDB.hs
+++ b/src/PkgDB.hs
@@ -41,28 +41,53 @@
     | RepoPkg { version :: V.Version, deps :: [P.Dependency], release :: String }
     deriving (Eq, Show)
 
-type CblPkg = (String, Pkg)
+data CblPkg = CP String Pkg
+    deriving (Eq, Show)
+
 type CblDB = [CblPkg]
 
+instance Ord CblPkg where
+    compare
+        (CP n1 GhcPkg { version = v1 })
+        (CP n2 GhcPkg { version = v2 }) =
+            compare (n1, v1) (n2, v2)
+    compare (CP _ GhcPkg {}) _ = LT
+    compare _ (CP _ GhcPkg {}) = GT
+
+    compare
+        (CP n1 DistroPkg { version = v1, release = r1 })
+        (CP n2 DistroPkg { version = v2, release = r2 }) =
+            compare (n1, v1, r1) (n2, v2, r2)
+    compare (CP _ DistroPkg {}) _ = LT
+    compare _ (CP _ DistroPkg {}) = GT
+
+    compare
+        (CP n1 RepoPkg { version = v1, release = r1 })
+        (CP n2 RepoPkg { version = v2, release = r2 }) =
+            compare (n1, v1, r1) (n2, v2, r2)
+
 -- {{{1 packages
 pkgName :: CblPkg -> String
-pkgName (n, _) = n
+pkgName (CP n _) = n
 
+pkgPkg :: CblPkg -> Pkg
+pkgPkg (CP _ p) = p
+
 pkgVersion :: CblPkg -> V.Version
-pkgVersion (_, p) = version p
+pkgVersion (CP _ p) = version p
 
 pkgDeps :: CblPkg -> [P.Dependency]
-pkgDeps (_, RepoPkg { deps = d}) = d
+pkgDeps (CP _ RepoPkg { deps = d}) = d
 pkgDeps _ = []
 
 pkgRelease :: CblPkg -> String
-pkgRelease (_, GhcPkg {}) = "xx"
-pkgRelease (_, DistroPkg { release = r }) = r
-pkgRelease (_, RepoPkg { release = r }) = r
+pkgRelease (CP _ GhcPkg {}) = "xx"
+pkgRelease (CP _ DistroPkg { release = r }) = r
+pkgRelease (CP _ RepoPkg { release = r }) = r
 
-createGhcPkg n v = (n, GhcPkg v)
-createDistroPkg n v r = (n, DistroPkg v r)
-createRepoPkg n v d r = (n, RepoPkg v d r)
+createGhcPkg n v = CP n (GhcPkg v)
+createDistroPkg n v r = CP n (DistroPkg v r)
+createRepoPkg n v d r = CP n (RepoPkg v d r)
 
 createCblPkg :: PackageDescription -> CblPkg
 createCblPkg pd = createRepoPkg name version deps "1"
@@ -74,13 +99,13 @@
 getDependencyOn :: String -> CblPkg -> Maybe P.Dependency
 getDependencyOn n p = find (\ d -> _depName d == n) (pkgDeps p)
 
-isGhcPkg (_, GhcPkg {}) = True
+isGhcPkg (CP _ GhcPkg {}) = True
 isGhcPkg _ = False
 
-isDistroPkg (_, DistroPkg {}) = True
+isDistroPkg (CP _ DistroPkg {}) = True
 isDistroPkg _ = False
 
-isRepoPkg (_, RepoPkg {}) = True
+isRepoPkg (CP _ RepoPkg {}) = True
 isRepoPkg _ = False
 
 isBasePkg :: CblPkg -> Bool
@@ -93,11 +118,11 @@
 addPkg :: CblDB -> String -> Pkg -> CblDB
 addPkg db n p = nubBy cmp newdb
     where
-        cmp (n1, _) (n2, _) = n1 == n2
-        newdb = (n, p):db
+        cmp (CP n1 _) (CP n2 _) = n1 == n2
+        newdb = (CP n p):db
 
 addPkg2 :: CblDB -> CblPkg -> CblDB
-addPkg2 db (n, p) = addPkg db n p
+addPkg2 db (CP n p) = addPkg db n p
 
 addGhcPkg :: CblDB -> String -> V.Version -> CblDB
 addGhcPkg db n v = addPkg2 db (createGhcPkg n v)
@@ -110,14 +135,17 @@
 
 bumpRelease :: CblDB -> String -> CblDB
 bumpRelease db n = let
-        doBump (n', p@RepoPkg { release = r }) = (n', p { release = nr })
+        doBump (CP n' p@RepoPkg { release = r }) = CP n' (p { release = nr })
             where
                 nr = show $ (read r) + 1
         doBump p = p
     in maybe db (addPkg2 db . doBump) (lookupPkg db n)
 
 lookupPkg :: CblDB -> String -> Maybe CblPkg
-lookupPkg db n = maybe Nothing (\ p -> Just (n, p)) (lookup n db)
+lookupPkg [] _ = Nothing
+lookupPkg (p:db) n
+    | n == pkgName p = Just p
+    | otherwise = lookupPkg db n
 
 lookupDependants db n = filter (/= n) $ map pkgName $ filter (\ p -> doesDependOn p n) db
     where
@@ -151,9 +179,16 @@
 saveDb :: CblDB -> FilePath -> IO ()
 saveDb db fp = writeFile fp s
     where
-        s = unlines $ map encode db
+        s = unlines $ map encode $ sort db
 
 -- {{{1 JSON instances
+instance JSON CblPkg where
+    showJSON (CP n p) = showJSON (n, p)
+
+    readJSON object = do
+        (n,p) <- readJSON object
+        return (CP n p)
+
 instance JSON V.Version where
     showJSON v = makeObj [ ("Version", showJSON $ display v) ]
 
diff --git a/src/Util/Misc.hs b/src/Util/Misc.hs
--- a/src/Util/Misc.hs
+++ b/src/Util/Misc.hs
@@ -65,7 +65,7 @@
 progName = "cblrepo"
 dbName = progName ++ ".db"
 
-ghcVersion = (Version [7,4,2] [])
+ghcVersion = (Version [7,6,1] [])
 ghcVersionDep = "ghc=" ++ display ghcVersion ++ "-1"
 
 -- {{{1 command line argument type
@@ -208,7 +208,7 @@
         then True
         else case DB.lookupPkg db dN of
             Nothing -> False
-            Just (_, p) -> withinRange (DB.version p) dVR
+            Just (DB.CP _ p) -> withinRange (DB.version p) dVR
 
 -- {{{1 Command type
 type Command a = ReaderT Cmds IO a
diff --git a/src/Util/Translation.hs b/src/Util/Translation.hs
--- a/src/Util/Translation.hs
+++ b/src/Util/Translation.hs
@@ -38,7 +38,6 @@
 import System.Directory
 import System.Exit
 import System.FilePath
-import System.IO
 import System.Process
 import System.Unix.Directory
 import Text.PrettyPrint.ANSI.Leijen hiding((</>))
@@ -81,6 +80,7 @@
     , apLicenseFile :: Maybe FilePath
     , apCabalPatch :: Maybe FilePath
     , apPkgbuildPatch :: Maybe FilePath
+    , apInstallPatch :: Maybe FilePath
     , apBuildPatch :: Maybe FilePath
     -- shell bits
     , apShHkgName :: ShVar String
@@ -105,6 +105,7 @@
     , apLicenseFile = Nothing
     , apCabalPatch = Nothing
     , apPkgbuildPatch = Nothing
+    , apInstallPatch = Nothing
     , apBuildPatch = Nothing
     , apShHkgName = ShVar "_hkgname" ""
     , apShPkgName = ShVar "pkgname" ""
@@ -339,16 +340,19 @@
         fi tF fF v = if v then tF else fF
         cabalPatchFn = patchDir </> hkgName <.> "cabal"
         pkgbuildPatchFn = patchDir </> hkgName <.> "pkgbuild"
+        installPatchFn = patchDir </> hkgName <.> "install"
         buildPatchFn = patchDir </> hkgName <.> "source"
     in do
         cabalPatch <- doesFileExist cabalPatchFn >>= fi (liftM Just $ canonicalizePath cabalPatchFn) (return Nothing)
         pkgBuildPatch <- doesFileExist pkgbuildPatchFn >>= fi (liftM Just $ canonicalizePath pkgbuildPatchFn) (return Nothing)
+        installPatch <- doesFileExist installPatchFn >>= fi (liftM Just $ canonicalizePath installPatchFn) (return Nothing)
         buildPatch <- doesFileExist buildPatchFn >>= fi (liftM Just $ canonicalizePath buildPatchFn) (return Nothing)
         let sources' = shVarAppendValue sources
                 (ShArray $ catMaybes [maybe Nothing (const $ Just "cabal.patch") cabalPatch, maybe Nothing (const $ Just "source.patch") buildPatch])
         return ap
             { apCabalPatch = cabalPatch
             , apPkgbuildPatch = pkgBuildPatch
+            , apInstallPatch = installPatch
             , apBuildPatch = buildPatch
             , apShSource = sources'
             }
