diff --git a/Cabal/Distribution/Simple/Build.hs b/Cabal/Distribution/Simple/Build.hs
index a15138061f5f4be951c0fdf0a12865cdbb535ab1..dad2b9da83238ef72abe79c3e55d3fcbc0d85771 100644
--- a/Cabal/Distribution/Simple/Build.hs
+++ b/Cabal/Distribution/Simple/Build.hs
@@ -75,6 +75,7 @@ import qualified Distribution.InstalledPackageInfo as IPI
 import qualified Distribution.ModuleName as ModuleName
 import Distribution.ModuleName (ModuleName)
 
+import Distribution.Simple.Program (ghcPkgProgram)
 import Distribution.Simple.Setup
          ( BuildFlags(..), ReplFlags(..), fromFlag )
 import Distribution.Simple.BuildTarget
@@ -91,6 +92,7 @@ import Distribution.Simple.LocalBuildInfo
          , inplacePackageId, LibraryName(..) )
 import Distribution.Simple.Program.Types
 import Distribution.Simple.Program.Db
+import qualified Distribution.Simple.Program.HcPkg as HcPkg
 import Distribution.Simple.BuildPaths
          ( autogenModulesDir, autogenModuleName, cppHeaderName, exeExtension )
 import Distribution.Simple.Register
@@ -116,7 +118,7 @@ import Control.Monad
 import System.FilePath
          ( (</>), (<.>) )
 import System.Directory
-         ( getCurrentDirectory )
+         ( getCurrentDirectory, removeDirectoryRecursive, doesDirectoryExist )
 
 -- -----------------------------------------------------------------------------
 -- |Build the libraries and executables in this package.
@@ -141,7 +143,8 @@ build pkg_descr lbi flags suffixes = do
     -- Only bother with this message if we're building the whole package
     setupMessage verbosity "Building" (packageId pkg_descr)
 
-  internalPackageDB <- createInternalPackageDB distPref
+  let Just ghcPkgProg = lookupProgram ghcPkgProgram (withPrograms lbi)
+  internalPackageDB <- createInternalPackageDB verbosity ghcPkgProg distPref
 
   withComponentsInBuildOrder pkg_descr lbi componentsToBuild $ \comp clbi ->
     let bi     = componentBuildInfo comp
@@ -177,7 +180,8 @@ repl pkg_descr lbi flags suffixes args = do
 
   initialBuildSteps distPref pkg_descr lbi verbosity
 
-  internalPackageDB <- createInternalPackageDB distPref
+  let Just ghcPkgProg = lookupProgram ghcPkgProgram (withPrograms lbi)
+  internalPackageDB <- createInternalPackageDB verbosity ghcPkgProg distPref
   let lbiForComponent comp lbi' =
         lbi' {
           withPackageDB = withPackageDB lbi ++ [internalPackageDB],
@@ -435,11 +439,13 @@ benchmarkExeV10asExe Benchmark{} _ = error "benchmarkExeV10asExe: wrong kind"
 
 -- | Initialize a new package db file for libraries defined
 -- internally to the package.
-createInternalPackageDB :: FilePath -> IO PackageDB
-createInternalPackageDB distPref = do
-    let dbFile = distPref </> "package.conf.inplace"
-        packageDB = SpecificPackageDB dbFile
-    writeFile dbFile "[]"
+createInternalPackageDB :: Verbosity -> ConfiguredProgram -> FilePath -> IO PackageDB
+createInternalPackageDB verbosity ghcPkgProg distPref = do
+    let dbDir = distPref </> "package.conf.inplace"
+        packageDB = SpecificPackageDB dbDir
+    exists <- doesDirectoryExist dbDir
+    when exists $ removeDirectoryRecursive dbDir
+    HcPkg.init verbosity ghcPkgProg dbDir
     return packageDB
 
 addInternalBuildTools :: PackageDescription -> LocalBuildInfo -> BuildInfo