diff --git a/cabal-install/Distribution/Client/Outdated.hs b/cabal-install/Distribution/Client/Outdated.hs
index 96a9dd379abad0d8d383eb7afa47988a8b104c8d..652dd1314d6e186bccac28ad4ef39b3c43816c8d 100644
--- a/cabal-install/Distribution/Client/Outdated.hs
+++ b/cabal-install/Distribution/Client/Outdated.hs
@@ -14,6 +14,8 @@ import Prelude ()
 import Distribution.Client.Config
 import Distribution.Client.IndexUtils as IndexUtils
 import Distribution.Client.Compat.Prelude
+import Distribution.Client.ProjectConfig
+import Distribution.Client.RebuildMonad
 import Distribution.Client.Setup
 import Distribution.Client.Targets
 import Distribution.Client.Types
@@ -50,14 +52,17 @@ outdated :: Verbosity -> OutdatedFlags -> RepoContext
          -> IO ()
 outdated verbosity outdatedFlags repoContext comp platform = do
   sourcePkgDb <- IndexUtils.getSourcePackages verbosity repoContext
-  let freeze   = fromFlagOrDefault False (outdatedFreeze outdatedFlags)
-      exitCode = fromFlagOrDefault False (outdatedExitCode outdatedFlags)
-      ignore   = S.fromList (outdatedIgnore outdatedFlags)
-      minor    = S.fromList (outdatedMinor outdatedFlags)
-      pkgIndex = packageIndex sourcePkgDb
-  deps <- if freeze
+  let freezeFile    = fromFlagOrDefault False (outdatedFreezeFile outdatedFlags)
+      newFreezeFile = fromFlagOrDefault False (outdatedNewFreezeFile outdatedFlags)
+      exitCode      = fromFlagOrDefault False (outdatedExitCode outdatedFlags)
+      ignore        = S.fromList (outdatedIgnore outdatedFlags)
+      minor         = S.fromList (outdatedMinor outdatedFlags)
+      pkgIndex      = packageIndex sourcePkgDb
+  deps <- if freezeFile
           then depsFromFreezeFile verbosity
-          else depsFromPkgDesc    verbosity comp platform
+          else if newFreezeFile
+               then depsFromNewFreezeFile verbosity
+               else depsFromPkgDesc       verbosity comp platform
   let outdatedDeps = listOutdated deps pkgIndex ignore minor
   notice verbosity ("Outdated dependencies: "
                      ++ intercalate ", "
@@ -67,17 +72,33 @@ outdated verbosity outdatedFlags repoContext comp platform = do
     then exitFailure
     else return ()
 
+-- | Convert a list of 'UserConstraint's to a 'Dependency' list.
+userConstraintsToDependencies :: [UserConstraint] -> [Dependency]
+userConstraintsToDependencies ucnstrs =
+  mapMaybe (packageConstraintToDependency . userToPackageConstraint) ucnstrs
+
 -- | Read the list of dependencies from the freeze file.
 depsFromFreezeFile :: Verbosity -> IO [Dependency]
 depsFromFreezeFile verbosity = do
   cwd        <- getCurrentDirectory
   userConfig <- loadUserConfig verbosity cwd Nothing
   let ucnstrs = map fst . configExConstraints . savedConfigureExFlags $ userConfig
-      deps    = mapMaybe (packageConstraintToDependency . userToPackageConstraint)
-                ucnstrs
+      deps    = userConstraintsToDependencies ucnstrs
   debug verbosity "Reading the list of dependencies from the freeze file"
   return deps
 
+-- | Read the list of dependencies from the new-style freeze file.
+depsFromNewFreezeFile :: Verbosity -> IO [Dependency]
+depsFromNewFreezeFile verbosity = do
+  projectRootDir <- findProjectRoot {- TODO: Support '--project-file' -} mempty
+  projectConfig <- runRebuild projectRootDir $
+                   readProjectLocalFreezeConfig verbosity mempty projectRootDir
+  let ucnstrs = map fst . projectConfigConstraints . projectConfigShared
+                $ projectConfig
+      deps    = userConstraintsToDependencies ucnstrs
+  debug verbosity "Reading the list of dependencies from the new-style freeze file"
+  return deps
+
 -- | Read the list of dependencies from the package description.
 depsFromPkgDesc :: Verbosity -> Compiler  -> Platform -> IO [Dependency]
 depsFromPkgDesc verbosity comp platform = do
diff --git a/cabal-install/Distribution/Client/ProjectConfig.hs b/cabal-install/Distribution/Client/ProjectConfig.hs
index 14269bc1913bd89691b18200e617769b948bf49a..d04b4e9d11a068de566403cacd02364506105997 100644
--- a/cabal-install/Distribution/Client/ProjectConfig.hs
+++ b/cabal-install/Distribution/Client/ProjectConfig.hs
@@ -16,6 +16,7 @@ module Distribution.Client.ProjectConfig (
     -- * Project config files
     findProjectRoot,
     readProjectConfig,
+    readProjectLocalFreezeConfig,
     writeProjectLocalExtraConfig,
     writeProjectLocalFreezeConfig,
     writeProjectConfigFile,
diff --git a/cabal-install/Distribution/Client/Setup.hs b/cabal-install/Distribution/Client/Setup.hs
index e9585eec95e6b862c4a411f20fd948414c451a15..61f7eed0fa6ecc87122ee9fe80d4aaa17a96fb6b 100644
--- a/cabal-install/Distribution/Client/Setup.hs
+++ b/cabal-install/Distribution/Client/Setup.hs
@@ -862,20 +862,22 @@ genBoundsCommand = CommandUI {
 -- ------------------------------------------------------------
 
 data OutdatedFlags = OutdatedFlags {
-  outdatedVerbosity :: Flag Verbosity,
-  outdatedFreeze    :: Flag Bool,
-  outdatedExitCode  :: Flag Bool,
-  outdatedIgnore    :: [PackageName],
-  outdatedMinor     :: [PackageName]
+  outdatedVerbosity     :: Flag Verbosity,
+  outdatedFreezeFile    :: Flag Bool,
+  outdatedNewFreezeFile :: Flag Bool,
+  outdatedExitCode      :: Flag Bool,
+  outdatedIgnore        :: [PackageName],
+  outdatedMinor         :: [PackageName]
   }
 
 defaultOutdatedFlags :: OutdatedFlags
 defaultOutdatedFlags = OutdatedFlags {
-  outdatedVerbosity = toFlag normal,
-  outdatedFreeze    = mempty,
-  outdatedExitCode  = mempty,
-  outdatedIgnore    = mempty,
-  outdatedMinor     = mempty
+  outdatedVerbosity     = toFlag normal,
+  outdatedFreezeFile    = mempty,
+  outdatedNewFreezeFile = mempty,
+  outdatedExitCode      = mempty,
+  outdatedIgnore        = mempty,
+  outdatedMinor         = mempty
   }
 
 outdatedCommand :: CommandUI OutdatedFlags
@@ -892,9 +894,14 @@ outdatedCommand = CommandUI {
     optionVerbosity outdatedVerbosity
       (\v flags -> flags { outdatedVerbosity = v })
 
-    ,option [] ["freeze"]
+    ,option [] ["freeze-file"]
      "Act on the freeze file"
-     outdatedFreeze (\v flags -> flags { outdatedFreeze = v })
+     outdatedFreezeFile (\v flags -> flags { outdatedFreezeFile = v })
+     trueArg
+
+    ,option [] ["new-freeze-file"]
+     "Act on the new-style freeze file"
+     outdatedNewFreezeFile (\v flags -> flags { outdatedNewFreezeFile = v })
      trueArg
 
     ,option [] ["exit-code"]