diff --git a/cabal-install/Distribution/Client/BuildReports/Storage.hs b/cabal-install/Distribution/Client/BuildReports/Storage.hs
index be8464b0988918f170a598fd0ac99e4c6dcd9a00..adbdb045b53d5d508d0bc1959dd060277a283f15 100644
--- a/cabal-install/Distribution/Client/BuildReports/Storage.hs
+++ b/cabal-install/Distribution/Client/BuildReports/Storage.hs
@@ -80,7 +80,7 @@ storeAnonymous reports = sequence_
     onlyRemote rs =
       [ (report, repo, remoteRepo)
       | (report, Just repo) <- rs
-      , Just remoteRepo     <- [repoRemote' repo]
+      , Just remoteRepo     <- [maybeRepoRemote repo]
       ]
 
 storeLocal :: CompilerInfo -> [PathTemplate] -> [(BuildReport, Maybe Repo)]
diff --git a/cabal-install/Distribution/Client/IndexUtils.hs b/cabal-install/Distribution/Client/IndexUtils.hs
index f5b00d004c7680e6ba94a21cffa7d44cfdb6c56a..2c8c7e67273f9088d29b5af19a1cf07c40a0d443 100644
--- a/cabal-install/Distribution/Client/IndexUtils.hs
+++ b/cabal-install/Distribution/Client/IndexUtils.hs
@@ -78,7 +78,8 @@ import Distribution.Client.Utils ( byteStringToFilePath
 import Distribution.Compat.Exception (catchIO)
 import Distribution.Client.Compat.Time (getFileAge, getModTime)
 import System.Directory (doesFileExist, doesDirectoryExist)
-import System.FilePath ((</>), takeExtension, splitDirectories, normalise)
+import System.FilePath
+         ( (</>), takeExtension, replaceExtension, splitDirectories, normalise )
 import System.FilePath.Posix as FilePath.Posix
          ( takeFileName )
 import System.IO
@@ -153,8 +154,8 @@ readRepoIndex :: Verbosity -> Repo -> ReadPackageIndexMode
 readRepoIndex verbosity repo mode =
   handleNotFound $ do
     warnIfIndexIsOld =<< getIndexFileAge repo
-    updateRepoIndexCache verbosity (GlobalIndex repo)
-    readPackageIndexCacheFile mkAvailablePackage (GlobalIndex repo) mode
+    updateRepoIndexCache verbosity (RepoIndex repo)
+    readPackageIndexCacheFile mkAvailablePackage (RepoIndex repo) mode
 
   where
     mkAvailablePackage pkgEntry =
@@ -346,19 +347,20 @@ lazySequence (x:xs) = unsafeInterleaveIO $ do
 
 -- | Which index do we mean?
 data Index =
-    -- | The global index for the specified repository
-    GlobalIndex Repo
+    -- | The main index for the specified repository
+    RepoIndex Repo
 
-    -- | A (sandbox) local repository
-  | LocalIndex { localIndexFile :: FilePath, localCacheFile :: FilePath }
+    -- | A sandbox-local repository
+    -- Argument is the location of the index file
+  | SandboxIndex FilePath
 
 indexFile :: Index -> FilePath
-indexFile (GlobalIndex repo) = repoLocalDir repo </> "00-index.tar"
-indexFile (LocalIndex{..})   = localIndexFile
+indexFile (RepoIndex    repo)  = repoLocalDir repo </> "00-index.tar"
+indexFile (SandboxIndex index) = index
 
 cacheFile :: Index -> FilePath
-cacheFile (GlobalIndex repo) = repoLocalDir repo </> "00-index.cache"
-cacheFile (LocalIndex{..})   = localCacheFile
+cacheFile (RepoIndex    repo)  = repoLocalDir repo </> "00-index.cache"
+cacheFile (SandboxIndex index) = index `replaceExtension` "cache"
 
 updatePackageIndexCacheFile :: Verbosity -> Index -> IO ()
 updatePackageIndexCacheFile verbosity index = do
diff --git a/cabal-install/Distribution/Client/Install.hs b/cabal-install/Distribution/Client/Install.hs
index 931970dbeca6ef4a9acbde6a470d1d9c430ae15f..67b1fb5621a18a891215fdf64a4e5ca6ed69c521 100644
--- a/cabal-install/Distribution/Client/Install.hs
+++ b/cabal-install/Distribution/Client/Install.hs
@@ -840,7 +840,7 @@ storeDetailedBuildReports verbosity logsDir reports = sequence_
          writeFile reportFile (show (BuildReports.show report, buildLog))
 
   | (report, Just repo) <- reports
-  , Just remoteRepo <- [repoRemote' repo]
+  , Just remoteRepo <- [maybeRepoRemote repo]
   , isLikelyToHaveLogFile (BuildReports.installOutcome report) ]
 
   where
diff --git a/cabal-install/Distribution/Client/Sandbox/Index.hs b/cabal-install/Distribution/Client/Sandbox/Index.hs
index 05f64039de77fc09f75e57d7258fa6678c57eb7f..d794cf3b1d5e9c0d3bb8e823ccd1fd4020227468 100644
--- a/cabal-install/Distribution/Client/Sandbox/Index.hs
+++ b/cabal-install/Distribution/Client/Sandbox/Index.hs
@@ -48,8 +48,7 @@ import Data.Either               (partitionEithers)
 import System.Directory          ( createDirectoryIfMissing,
                                    doesDirectoryExist, doesFileExist,
                                    renameFile, canonicalizePath)
-import System.FilePath           ( (</>), (<.>), takeDirectory, takeExtension
-                                 , replaceExtension )
+import System.FilePath           ( (</>), (<.>), takeDirectory, takeExtension )
 import System.IO                 ( IOMode(..), SeekMode(..)
                                  , hSeek, withBinaryFile )
 
@@ -156,10 +155,7 @@ addBuildTreeRefs verbosity path l' refType = do
       hSeek h AbsoluteSeek (fromIntegral offset)
       BS.hPut h (Tar.write entries)
       debug verbosity $ "Successfully appended to '" ++ path ++ "'"
-    updatePackageIndexCacheFile verbosity $ LocalIndex {
-        localIndexFile = path
-      , localCacheFile = path `replaceExtension` "cache"
-      }
+    updatePackageIndexCacheFile verbosity $ SandboxIndex path
 
 data DeleteSourceError = ErrNonregisteredSource { nrPath :: FilePath }
                        | ErrNonexistentSource   { nePath :: FilePath } deriving Show
@@ -194,10 +190,7 @@ removeBuildTreeRefs verbosity indexPath l = do
     ++ "' to '" ++ indexPath ++ "'"
 
   unless (null removedRefs) $
-    updatePackageIndexCacheFile verbosity LocalIndex {
-        localIndexFile = indexPath
-      , localCacheFile = indexPath `replaceExtension` "cache"
-      }
+    updatePackageIndexCacheFile verbosity $ SandboxIndex indexPath
 
   let results = fmap Right removedRefs
                 ++ fmap Left failures
diff --git a/cabal-install/Distribution/Client/Types.hs b/cabal-install/Distribution/Client/Types.hs
index 916a8c5a7cc4feacb1fbfc7bf0634b8c13252adb..8e0d93e78f6765276d83c939e40ebf0da760eb16 100644
--- a/cabal-install/Distribution/Client/Types.hs
+++ b/cabal-install/Distribution/Client/Types.hs
@@ -255,9 +255,9 @@ data Repo =
 deriving instance Show Repo
 
 -- | Check if this is a remote repo
-repoRemote' :: Repo -> Maybe RemoteRepo
-repoRemote' (RepoLocal    _localDir  ) = Nothing
-repoRemote' (RepoRemote r _localDir  ) = Just r
+maybeRepoRemote :: Repo -> Maybe RemoteRepo
+maybeRepoRemote (RepoLocal    _localDir  ) = Nothing
+maybeRepoRemote (RepoRemote r _localDir  ) = Just r
 
 -- ------------------------------------------------------------
 -- * Build results
diff --git a/cabal-install/Distribution/Client/Update.hs b/cabal-install/Distribution/Client/Update.hs
index 7157d0c75cdc3b19102acee02e2f73566d95a45a..0c3a4a3bb23c5a88808e9c5d4da139033c0d0ec0 100644
--- a/cabal-install/Distribution/Client/Update.hs
+++ b/cabal-install/Distribution/Client/Update.hs
@@ -16,7 +16,7 @@ module Distribution.Client.Update
     ) where
 
 import Distribution.Client.Types
-         ( Repo(..), RemoteRepo(..), repoRemote' )
+         ( Repo(..), RemoteRepo(..), maybeRepoRemote )
 import Distribution.Client.HttpUtils
          ( DownloadResult(..), HttpTransport(..) )
 import Distribution.Client.FetchUtils
@@ -43,7 +43,7 @@ update _ verbosity [] =
                 ++ "you would have one specified in the config file."
 update transport verbosity repos = do
   jobCtrl <- newParallelJobControl
-  let remoteRepos = catMaybes (map repoRemote' repos)
+  let remoteRepos = catMaybes (map maybeRepoRemote repos)
   case remoteRepos of
     [] -> return ()
     [remoteRepo] ->
@@ -65,4 +65,4 @@ updateRepo transport verbosity repo = case repo of
       FileDownloaded indexPath -> do
         writeFileAtomic (dropExtension indexPath) . maybeDecompress
                                                 =<< BS.readFile indexPath
-        updateRepoIndexCache verbosity (GlobalIndex repo)
+        updateRepoIndexCache verbosity (RepoIndex repo)
diff --git a/cabal-install/Distribution/Client/Upload.hs b/cabal-install/Distribution/Client/Upload.hs
index 3167887526be1fa9687563c6bba83b96c6653035..d37dc594b29376e99b164092bd2361363390a3b3 100644
--- a/cabal-install/Distribution/Client/Upload.hs
+++ b/cabal-install/Distribution/Client/Upload.hs
@@ -4,7 +4,7 @@
 module Distribution.Client.Upload (check, upload, uploadDoc, report) where
 
 import Distribution.Client.Types ( Username(..), Password(..)
-                                 , Repo(..), RemoteRepo(..), repoRemote' )
+                                 , Repo(..), RemoteRepo(..), maybeRepoRemote )
 import Distribution.Client.HttpUtils
          ( HttpTransport(..), remoteRepoTryUpgradeToHttps )
 
@@ -38,7 +38,7 @@ upload :: HttpTransport -> Verbosity -> [Repo]
        -> IO ()
 upload transport verbosity repos mUsername mPassword paths = do
     targetRepo <-
-      case [ remoteRepo | Just remoteRepo <- map repoRemote' repos ] of
+      case [ remoteRepo | Just remoteRepo <- map maybeRepoRemote repos ] of
         [] -> die "Cannot upload. No remote repositories are configured."
         rs -> remoteRepoTryUpgradeToHttps transport (last rs)
     let targetRepoURI = remoteRepoURI targetRepo
@@ -59,7 +59,7 @@ uploadDoc :: HttpTransport -> Verbosity -> [Repo]
           -> IO ()
 uploadDoc transport verbosity repos mUsername mPassword path = do
     targetRepo <-
-      case [ remoteRepo | Just remoteRepo <- map repoRemote' repos ] of
+      case [ remoteRepo | Just remoteRepo <- map maybeRepoRemote repos ] of
         [] -> die $ "Cannot upload. No remote repositories are configured."
         rs -> remoteRepoTryUpgradeToHttps transport (last rs)
     let targetRepoURI = remoteRepoURI targetRepo
@@ -113,7 +113,7 @@ report verbosity repos mUsername mPassword = do
   Username username <- maybe promptUsername return mUsername
   Password password <- maybe promptPassword return mPassword
   let auth = (username,password)
-  let remoteRepos = catMaybes (map repoRemote' repos)
+  let remoteRepos = catMaybes (map maybeRepoRemote repos)
   forM_ remoteRepos $ \remoteRepo ->
       do dotCabal <- defaultCabalDir
          let srcDir = dotCabal </> "reports" </> remoteRepoName remoteRepo