diff --git a/hpack.cabal b/hpack.cabal
--- a/hpack.cabal
+++ b/hpack.cabal
@@ -1,9 +1,9 @@
--- This file has been generated from package.yaml by hpack version 0.10.0.
+-- This file has been generated from package.yaml by hpack version 0.11.0.
 --
 -- see: https://github.com/sol/hpack
 
 name:           hpack
-version:        0.11.0
+version:        0.11.1
 synopsis:       An alternative format for Haskell packages
 category:       Development
 homepage:       https://github.com/sol/hpack#readme
diff --git a/src/Hpack/Config.hs b/src/Hpack/Config.hs
--- a/src/Hpack/Config.hs
+++ b/src/Hpack/Config.hs
@@ -13,6 +13,8 @@
 module Hpack.Config (
   packageConfig
 , readPackageConfig
+, renamePackage
+, packageDependencies
 , package
 , section
 , Package(..)
@@ -20,7 +22,6 @@
 , AddSource(..)
 , GitUrl
 , GitRef
-, packageDependencies
 , GhcOption
 , Section(..)
 , Library(..)
@@ -29,6 +30,7 @@
 , Flag(..)
 , SourceRepository(..)
 #ifdef TEST
+, renameDependencies
 , HasFieldNames(..)
 , CaptureUnknownFields(..)
 , Empty(..)
@@ -63,6 +65,31 @@
 package :: String -> String -> Package
 package name version = Package name version Nothing Nothing Nothing Nothing Nothing Nothing [] [] [] Nothing Nothing Nothing [] [] [] Nothing Nothing [] [] []
 
+renamePackage :: String -> Package -> Package
+renamePackage name package@Package{..} = package {
+    packageName = name
+  , packageExecutables = map (renameDependencies packageName name) packageExecutables
+  , packageTests = map (renameDependencies packageName name) packageTests
+  , packageBenchmarks = map (renameDependencies packageName name) packageBenchmarks
+  }
+
+renameDependencies :: String -> String -> Section a -> Section a
+renameDependencies old new section@Section{..} = section {sectionDependencies = map rename sectionDependencies, sectionConditionals = map renameConditional sectionConditionals}
+  where
+    rename dep
+      | dependencyName dep == old = dep {dependencyName = new}
+      | otherwise = dep
+
+    renameConditional :: Conditional -> Conditional
+    renameConditional (Conditional condition then_ else_) = Conditional condition (renameDependencies old new then_) (renameDependencies old new <$> else_)
+
+packageDependencies :: Package -> [Dependency]
+packageDependencies Package{..} = nub . sortBy (comparing (lexicographically . dependencyName)) $
+     (concatMap sectionDependencies packageExecutables)
+  ++ (concatMap sectionDependencies packageTests)
+  ++ (concatMap sectionDependencies packageBenchmarks)
+  ++ maybe [] sectionDependencies packageLibrary
+
 section :: a -> Section a
 section a = Section a [] [] [] [] [] [] [] [] [] [] Nothing []
 
@@ -237,13 +264,6 @@
 } deriving (Eq, Show, Generic)
 
 instance HasFieldNames PackageConfig
-
-packageDependencies :: Package -> [Dependency]
-packageDependencies Package{..} = nub . sortBy (comparing (lexicographically . dependencyName)) $
-     (concatMap sectionDependencies packageExecutables)
-  ++ (concatMap sectionDependencies packageTests)
-  ++ (concatMap sectionDependencies packageBenchmarks)
-  ++ maybe [] sectionDependencies packageLibrary
 
 instance FromJSON PackageConfig where
   parseJSON value = handleNullValues <$> genericParseJSON_ value
diff --git a/test/Hpack/ConfigSpec.hs b/test/Hpack/ConfigSpec.hs
--- a/test/Hpack/ConfigSpec.hs
+++ b/test/Hpack/ConfigSpec.hs
@@ -55,6 +55,32 @@
 
 spec :: Spec
 spec = do
+  describe "renamePackage" $ do
+    it "renames a package" $ do
+      renamePackage "bar" package `shouldBe` package {packageName = "bar"}
+
+    it "renames dependencies on self" $ do
+      let packageWithExecutable dependencies = package {packageExecutables = [(section $ executable "main" "Main.hs") {sectionDependencies = dependencies}]}
+      renamePackage "bar" (packageWithExecutable ["foo"]) `shouldBe` (packageWithExecutable ["bar"]) {packageName = "bar"}
+
+  describe "renameDependencies" $ do
+    let sectionWithDeps dependencies = (section ()) {sectionDependencies = dependencies}
+
+    it "renames dependencies" $ do
+      renameDependencies "bar" "baz" (sectionWithDeps ["foo", "bar"]) `shouldBe` sectionWithDeps ["foo", "baz"]
+
+    it "renames dependency in conditionals" $ do
+      let sectionWithConditional dependencies = (section ()) {
+              sectionConditionals = [
+                Conditional {
+                  conditionalCondition = "some condition"
+                , conditionalThen = sectionWithDeps dependencies
+                , conditionalElse = Just (sectionWithDeps dependencies)
+                }
+                ]
+            }
+      renameDependencies "bar" "baz" (sectionWithConditional ["foo", "bar"]) `shouldBe` sectionWithConditional ["foo", "baz"]
+
   describe "parseJSON" $ do
     context "when parsing (CaptureUnknownFields Section a)" $ do
       it "accepts dependencies" $ do
