diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -38,27 +38,47 @@
 The `=>` shows what the result is of the operation for every dependency. Left is the dependency before
 calling the command, right the one after calling.
 
-    $> cabal-bounds drop myproject.cabal
+    $> cabal-bounds drop ...
     lens >=4.0.1 && <4.1   =>   lens
 
-    $> cabal-bounds drop --upper myproject.cabal
+    $> cabal-bounds drop --upper ...
     lens >=4.0.1 && <4.1   =>   lens >=4.0.1
 
 If the cabal build (the setup-config) uses `lens 4.1.2`, then the results of the `update` command would be:
 
-    $> cabal-bounds update myproject.cabal setup-config
+    $> cabal-bounds update ...
     lens >=4.0.1 && <4.1   =>   lens >=4.1.2 && <4.2
     lens                   =>   lens >=4.1.2 && <4.2
 
-    $> cabal-bounds update --lower myproject.cabal setup-config
+    $> cabal-bounds update --lower ...
     lens >=4.0.1 && <4.1   =>   lens >=4.1.2
     lens <4.1              =>   lens >=4.1.2
     lens                   =>   lens >=4.1.2
 
-    $> cabal-bounds update --upper myproject.cabal setup-config
+    $> cabal-bounds update --upper ...
     lens >=4.0.1 && <4.1   =>   lens >=4.0.1 && <4.2
     lens >=4.0.1           =>   lens >=4.0.1 && <4.2
     lens                   =>   lens >=4.1.2 && <4.2
+
+You can also specify which component of the version number should be updated:
+
+    $> cabal-bounds update --lowercomp=minor ...
+    lens >=4.0.1 && <4.1   =>   lens >=4.1.2
+
+    $> cabal-bounds update --lowercomp=major2 ...
+    lens >=4.0.1 && <4.1   =>   lens >=4.1
+
+    $> cabal-bounds update --lowercomp=major1 ...
+    lens >=4.0.1 && <4.1   =>   lens >=4
+
+    $> cabal-bounds update --uppercomp=minor ...
+    lens >=4.0.1 && <4.1   =>   lens >=4.0.1 && <4.1.3
+
+    $> cabal-bounds update --uppercomp=major2 ...
+    lens >=4.0.1 && <4.1   =>   lens >=4.0.1 && <4.2
+
+    $> cabal-bounds update --uppercomp=major1 ...
+    lens >=4.0.1 && <4.1   =>   lens >=4.0.1 && <5
 
 Options
 =======
diff --git a/cabal-bounds.cabal b/cabal-bounds.cabal
--- a/cabal-bounds.cabal
+++ b/cabal-bounds.cabal
@@ -1,5 +1,5 @@
 name: cabal-bounds
-version: 0.1.16
+version: 0.2
 cabal-version: >=1.9.2
 build-type: Simple
 license: BSD3
@@ -49,30 +49,50 @@
              The '=>' shows what the result is of the operation for every dependency. Left is the dependency before
              calling the command, right the one after calling.
              .
-             > $> cabal-bounds drop myproject.cabal
+             > $> cabal-bounds drop ...
              > lens >=4.0.1 && <4.1   =>   lens
              > 
-             > $> cabal-bounds drop --upper myproject.cabal
+             > $> cabal-bounds drop --upper ...
              > lens >=4.0.1 && <4.1   =>   lens >=4.0.1
              .
              If the cabal build (the setup-config) uses 'lens 4.1.2', then the results of the 'update' command would be:
              .
-             > $> cabal-bounds update myproject.cabal setup-config
+             > $> cabal-bounds update ...
              > lens >=4.0.1 && <4.1   =>   lens >=4.1.2 && <4.2
              > lens                   =>   lens >=4.1.2 && <4.2
              >
-             > $> cabal-bounds update --lower myproject.cabal setup-config
+             > $> cabal-bounds update --lower ...
              > lens >=4.0.1 && <4.1   =>   lens >=4.1.2
              > lens <4.1              =>   lens >=4.1.2
              > lens                   =>   lens >=4.1.2
              >
-             > $> cabal-bounds update --upper myproject.cabal setup-config
+             > $> cabal-bounds update --upper ...
              > lens >=4.0.1 && <4.1   =>   lens >=4.0.1 && <4.2
              > lens >=4.0.1           =>   lens >=4.0.1 && <4.2
              > lens                   =>   lens >=4.1.2 && <4.2
              .
+             You can also specify which component of the version number should be updated:
              .
+             > $> cabal-bounds update --lowercomp=minor ...
+             > lens >=4.0.1 && <4.1   =>   lens >=4.1.2
+             >
+             > $> cabal-bounds update --lowercomp=major2 ...
+             > lens >=4.0.1 && <4.1   =>   lens >=4.1
+             >
+             > $> cabal-bounds update --lowercomp=major1 ...
+             > lens >=4.0.1 && <4.1   =>   lens >=4
+             >
+             > $> cabal-bounds update --uppercomp=minor ...
+             > lens >=4.0.1 && <4.1   =>   lens >=4.0.1 && <4.1.3
+             >
+             > $> cabal-bounds update --uppercomp=major2 ...
+             > lens >=4.0.1 && <4.1   =>   lens >=4.0.1 && <4.2
+             >
+             > $> cabal-bounds update --uppercomp=major1 ...
+             > lens >=4.0.1 && <4.1   =>   lens >=4.0.1 && <5
              .
+             .
+             .
              /Installation/
              .
              .
@@ -145,7 +165,7 @@
 library
     build-depends: base >=3 && <5, cmdargs >=0.10.5 && <0.11,
                    lens >=4.0.1 && <4.1, strict >=0.3.2 && <0.4, Cabal >=1.18.0 && <1.19
-    exposed-modules: CabalBounds.Args CabalBounds.Main
+    exposed-modules: CabalBounds.Args CabalBounds.Main CabalBounds.VersionComp
     exposed: True
     buildable: True
     cpp-options: -DCABAL
@@ -165,7 +185,7 @@
     other-modules: Paths_cabal_bounds CabalBounds.Args
                    CabalBounds.Bound CabalBounds.Targets CabalBounds.Dependencies
                    CabalBounds.Drop CabalBounds.Update CabalBounds.Lenses
-                   CabalBounds.Main
+                   CabalBounds.VersionComp CabalBounds.Main
     ghc-options: -W
  
 test-suite cabal-bounds-tests
diff --git a/src/CabalBounds/Args.hs b/src/CabalBounds/Args.hs
--- a/src/CabalBounds/Args.hs
+++ b/src/CabalBounds/Args.hs
@@ -10,6 +10,7 @@
    ) where
 
 import System.Console.CmdArgs hiding (ignore)
+import CabalBounds.VersionComp (VersionComp(..))
 
 #ifdef CABAL
 import Data.Version (showVersion)
@@ -28,6 +29,8 @@
                  }
           | Update { lower           :: Bool
                    , upper           :: Bool
+                   , lowerComp       :: Maybe VersionComp
+                   , upperComp       :: Maybe VersionComp
                    , library         :: Bool
                    , executable      :: [String]
                    , testSuite       :: [String]
@@ -76,6 +79,8 @@
 defaultUpdate = Update
    { lower           = False
    , upper           = False
+   , lowerComp       = Nothing
+   , upperComp       = Nothing
    , library         = False
    , executable      = []
    , testSuite       = []
@@ -104,8 +109,10 @@
 
 updateArgs :: Args
 updateArgs = Update
-   { lower           = def &= explicit &= name "lower" &= name "L" &= help "Only the lower bound is updated."
-   , upper           = def &= explicit &= name "upper" &= name "U" &= help "Only the upper bound is updated."
+   { lower           = def &= explicit &= name "lower" &= name "L" &= help "Only the lower bound is updated. The same as using '--lowercomp=minor'."
+   , upper           = def &= explicit &= name "upper" &= name "U" &= help "Only the upper bound is updated. The same as using '--uppercomp=major2'."
+   , lowerComp       = def &= explicit &= name "lowercomp" &= help "Only the lower bound is updated with the specified version component. (major1, major2 or minor)" 
+   , upperComp       = def &= explicit &= name "uppercomp" &= help "Only the upper bound is updated with the specified version component. (major1, major2 or minor)"
    , setupConfigFile = def &= argPos 1 &= typ "SETUP-CONFIG-FILE"
    }
 
diff --git a/src/CabalBounds/Bound.hs b/src/CabalBounds/Bound.hs
--- a/src/CabalBounds/Bound.hs
+++ b/src/CabalBounds/Bound.hs
@@ -1,21 +1,61 @@
+{-# Language PatternGuards #-}
 
 module CabalBounds.Bound
-   ( Bound(..)
-   , bound
+   ( DropBound(..)
+   , UpdateBound(..)
+   , boundOfDrop
+   , boundOfUpdate
    ) where   
 
-import CabalBounds.Args
+import CabalBounds.Args (Args(Drop, Update))
+import qualified CabalBounds.Args as A
+import CabalBounds.VersionComp (VersionComp(..), defaultLowerComp, defaultUpperComp)
+import Data.Maybe (isJust)
 
-data Bound = LowerBound
-           | UpperBound
-           | BothBounds
-           deriving (Show, Eq)
+data DropBound = DropUpper
+               | DropBoth
+               deriving (Show, Eq)
 
-bound :: Args -> Bound
-bound Drop {upper = upper} = if upper then UpperBound else BothBounds
+data UpdateBound = UpdateLower VersionComp
+                 | UpdateUpper VersionComp
+                 | UpdateBoth { lowerComp :: VersionComp, upperComp :: VersionComp }
+                 deriving (Show, Eq)
 
-bound Update {lower = lower, upper = upper}
-   | lower && upper = BothBounds
-   | lower          = LowerBound
-   | upper          = UpperBound
-   | otherwise      = BothBounds
+
+boundOfDrop :: Args -> DropBound
+boundOfDrop Drop {A.upper = upper} = if upper then DropUpper else DropBoth
+boundOfDrop _  = error "Expected Drop Args!"
+
+
+boundOfUpdate :: Args -> UpdateBound
+boundOfUpdate upd@Update {}
+   | hasLower && hasUpper
+   = UpdateBoth lowerComp upperComp
+
+   | hasLower
+   = UpdateLower lowerComp
+
+   | hasUpper
+   = UpdateUpper upperComp
+
+   | otherwise
+   = UpdateBoth lowerComp upperComp
+   where
+      lowerComp
+         | Just comp <- A.lowerComp upd
+         = comp
+
+         | otherwise
+         = defaultLowerComp
+
+      upperComp
+         | Just comp <- A.upperComp upd
+         = comp
+
+         | otherwise
+         = defaultUpperComp
+
+      hasLower = A.lower upd || (isJust . A.lowerComp $ upd)
+      hasUpper = A.upper upd || (isJust . A.upperComp $ upd)
+
+boundOfUpdate _ = error "Expected Update Args!"
diff --git a/src/CabalBounds/Dependencies.hs b/src/CabalBounds/Dependencies.hs
--- a/src/CabalBounds/Dependencies.hs
+++ b/src/CabalBounds/Dependencies.hs
@@ -8,7 +8,7 @@
 
 import Control.Lens 
 import qualified CabalBounds.Args as A
-import qualified Distribution.Package as C
+import Distribution.Package (Dependency(..), PackageName(..))
 
 data Dependencies = AllDependencies
                   | OnlyDependencies [String]
@@ -28,12 +28,12 @@
    = AllDependencies
 
 
-filterDependencies :: Dependencies -> Traversal' [C.Dependency] C.Dependency
+filterDependencies :: Dependencies -> Traversal' [Dependency] Dependency
 filterDependencies AllDependencies =
    traversed
 
 filterDependencies (OnlyDependencies deps) =
-   traversed . filtered (\(C.Dependency (C.PackageName pkgName) _) -> any (== pkgName) deps) 
+   traversed . filtered (\(Dependency (PackageName pkgName) _) -> any (== pkgName) deps)
 
 filterDependencies (IgnoreDependencies deps) =
-   traversed . filtered (\(C.Dependency (C.PackageName pkgName) _) -> all (/= pkgName) deps)
+   traversed . filtered (\(Dependency (PackageName pkgName) _) -> all (/= pkgName) deps)
diff --git a/src/CabalBounds/Drop.hs b/src/CabalBounds/Drop.hs
--- a/src/CabalBounds/Drop.hs
+++ b/src/CabalBounds/Drop.hs
@@ -5,23 +5,23 @@
    ) where
 
 import Prelude hiding (drop)
-import qualified Distribution.PackageDescription as C
-import qualified Distribution.Package as C
-import qualified Distribution.Version as C
 import Control.Lens
-import CabalBounds.Bound (Bound(..))
+import CabalBounds.Bound (DropBound(..))
 import CabalBounds.Targets (Targets(..), dependenciesOf)
 import CabalBounds.Dependencies (Dependencies, filterDependencies)
-import CabalBounds.Lenses
+import qualified CabalBounds.Lenses as L
 import Data.List (foldl')
+import Distribution.PackageDescription (GenericPackageDescription)
+import Distribution.Package (Dependency(..))
+import Distribution.Version (mkVersionIntervals, fromVersionIntervals, asVersionIntervals, UpperBound(..), anyVersion)
 
 
-drop :: Bound -> Targets -> Dependencies -> C.GenericPackageDescription -> C.GenericPackageDescription
+drop :: DropBound -> Targets -> Dependencies -> GenericPackageDescription -> GenericPackageDescription
 drop bound AllTargets deps pkgDescrp =
-   pkgDescrp & dependenciesOfLib        . filterDeps %~ dropFromDep
-             & dependenciesOfAllExes    . filterDeps %~ dropFromDep
-             & dependenciesOfAllTests   . filterDeps %~ dropFromDep
-             & dependenciesOfAllBenchms . filterDeps %~ dropFromDep
+   pkgDescrp & L.dependenciesOfLib        . filterDeps %~ dropFromDep
+             & L.dependenciesOfAllExes    . filterDeps %~ dropFromDep
+             & L.dependenciesOfAllTests   . filterDeps %~ dropFromDep
+             & L.dependenciesOfAllBenchms . filterDeps %~ dropFromDep
    where
       filterDeps  = filterDependencies deps
       dropFromDep = dropFromDependency bound
@@ -37,16 +37,16 @@
       dropFromDep = dropFromDependency bound
 
 
-dropFromDependency :: Bound -> C.Dependency -> C.Dependency
-dropFromDependency UpperBound (C.Dependency pkgName versionRange) = C.Dependency pkgName versionRange'
+dropFromDependency :: DropBound -> Dependency -> Dependency
+dropFromDependency DropUpper (Dependency pkgName versionRange) = Dependency pkgName versionRange'
    where
       versionRange'
-         | Just vi <- C.mkVersionIntervals intervals' 
-         = C.fromVersionIntervals vi
+         | Just vi <- mkVersionIntervals intervals'
+         = fromVersionIntervals vi
 
          | otherwise
          = versionRange
 
-      intervals' = map (& _2 .~ C.NoUpperBound) (C.asVersionIntervals versionRange)
+      intervals' = map (& _2 .~ NoUpperBound) (asVersionIntervals versionRange)
 
-dropFromDependency _ (C.Dependency pkgName _) = C.Dependency pkgName C.anyVersion
+dropFromDependency DropBoth (Dependency pkgName _) = Dependency pkgName anyVersion
diff --git a/src/CabalBounds/Lenses.hs b/src/CabalBounds/Lenses.hs
--- a/src/CabalBounds/Lenses.hs
+++ b/src/CabalBounds/Lenses.hs
@@ -1,9 +1,20 @@
 {-# LANGUAGE TemplateHaskell, Rank2Types #-}
 
-module CabalBounds.Lenses where
+module CabalBounds.Lenses
+   ( vbranch
+   , vtags
+   , dependenciesOfLib
+   , dependenciesOfAllExes
+   , dependenciesOfExe
+   , dependenciesOfAllTests
+   , dependenciesOfTest
+   , dependenciesOfAllBenchms
+   , dependenciesOfBenchm
+   ) where
 
 import Distribution.PackageDescription
 import Distribution.Package
+import Distribution.Version
 import Control.Lens
 import Data.Data.Lens
 
@@ -13,17 +24,9 @@
               , ("condBenchmarks" , "condBenchmarksL")
               ] ''GenericPackageDescription
 
-makeLensesFor [ ("condTreeConstraints", "condTreeConstraintsL")
-              ] ''CondTree
-
-makeLensesFor [ ("exeName", "exeNameL")
-              ] ''Executable
-
-makeLensesFor [ ("testName", "testNameL")
-              ] ''TestSuite
-
-makeLensesFor [ ("benchmarkName", "benchmarkNameL")
-              ] ''Benchmark
+makeLensesFor [ ("versionBranch", "vbranch")
+              , ("versionTags"  , "vtags")
+              ] ''Version
 
 dependenciesOfLib :: Traversal' GenericPackageDescription [Dependency]
 dependenciesOfLib = condLibraryL . _Just . biplate
diff --git a/src/CabalBounds/Main.hs b/src/CabalBounds/Main.hs
--- a/src/CabalBounds/Main.hs
+++ b/src/CabalBounds/Main.hs
@@ -26,7 +26,7 @@
    case pkgDescrp of
         Left  error      -> return . Just $ error
         Right pkgDescrp_ -> do
-           let pkgDescrp' = D.drop (B.bound args) (T.targets args) (DP.dependencies args) pkgDescrp_
+           let pkgDescrp' = D.drop (B.boundOfDrop args) (T.targets args) (DP.dependencies args) pkgDescrp_
            writeFile (A.outputFile args) (showGenericPackageDescription pkgDescrp')
            return Nothing
 
@@ -37,7 +37,7 @@
         (Left error, _) -> return . Just $ error
         (_, Left error) -> return . Just $ error
         (Right pkgDescrp_, Right buildInfo_) -> do
-           let pkgDescrp' = U.update (B.bound args) (T.targets args) (DP.dependencies args) pkgDescrp_ buildInfo_
+           let pkgDescrp' = U.update (B.boundOfUpdate args) (T.targets args) (DP.dependencies args) pkgDescrp_ buildInfo_
            writeFile (A.outputFile args) (showGenericPackageDescription pkgDescrp')
            return Nothing
 
diff --git a/src/CabalBounds/Targets.hs b/src/CabalBounds/Targets.hs
--- a/src/CabalBounds/Targets.hs
+++ b/src/CabalBounds/Targets.hs
@@ -8,10 +8,11 @@
    ) where
 
 import Control.Lens
-import qualified Distribution.PackageDescription as C
-import qualified Distribution.Package as C
-import CabalBounds.Args
-import CabalBounds.Lenses
+import Distribution.PackageDescription (GenericPackageDescription(..))
+import Distribution.Package (Dependency(..))
+import CabalBounds.Args (Args)
+import qualified CabalBounds.Args as A
+import qualified CabalBounds.Lenses as L
 
 data Targets = Targets [Target]
              | AllTargets
@@ -25,10 +26,10 @@
 
 targets :: Args -> Targets
 targets args 
-   | ts@(_:_) <- concat [ if (library args) then [Library] else []
-                        , map Executable (executable args)
-                        , map TestSuite (testSuite args)
-                        , map Benchmark (benchmark args)
+   | ts@(_:_) <- concat [ if (A.library args) then [Library] else []
+                        , map Executable (A.executable args)
+                        , map TestSuite (A.testSuite args)
+                        , map Benchmark (A.benchmark args)
                         ]
    = Targets ts
 
@@ -36,8 +37,8 @@
    = AllTargets
 
 
-dependenciesOf :: Target -> Traversal' C.GenericPackageDescription [C.Dependency]
-dependenciesOf Library            = dependenciesOfLib
-dependenciesOf (Executable exe)   = dependenciesOfExe exe
-dependenciesOf (TestSuite test)   = dependenciesOfTest test
-dependenciesOf (Benchmark benchm) = dependenciesOfBenchm benchm
+dependenciesOf :: Target -> Traversal' GenericPackageDescription [Dependency]
+dependenciesOf Library            = L.dependenciesOfLib
+dependenciesOf (Executable exe)   = L.dependenciesOfExe exe
+dependenciesOf (TestSuite test)   = L.dependenciesOfTest test
+dependenciesOf (Benchmark benchm) = L.dependenciesOfBenchm benchm
diff --git a/src/CabalBounds/Update.hs b/src/CabalBounds/Update.hs
--- a/src/CabalBounds/Update.hs
+++ b/src/CabalBounds/Update.hs
@@ -4,22 +4,23 @@
    ( update
    ) where
 
-import qualified Distribution.PackageDescription as C
-import qualified Distribution.Package as C
-import qualified Distribution.Version as C
-import qualified Distribution.Simple.LocalBuildInfo as C
-import qualified Distribution.Simple.PackageIndex as C
-import qualified Distribution.InstalledPackageInfo as C
+import qualified Distribution.PackageDescription as D
+import qualified Distribution.Package as P
+import qualified Distribution.Version as V
+import qualified Distribution.Simple.LocalBuildInfo as L
+import qualified Distribution.Simple.PackageIndex as PX
+import qualified Distribution.InstalledPackageInfo as PI
 import Control.Lens
-import CabalBounds.Bound (Bound(..))
+import CabalBounds.Bound (UpdateBound(..))
 import CabalBounds.Targets (Targets(..), dependenciesOf)
 import CabalBounds.Dependencies (Dependencies, filterDependencies)
+import CabalBounds.VersionComp (VersionComp(..), defaultLowerComp)
 import CabalBounds.Lenses
 import Data.List (sort, foldl', find)
 
-type InstalledPackages = [(C.PackageName, C.Version)]
+type InstalledPackages = [(P.PackageName, V.Version)]
 
-update :: Bound -> Targets -> Dependencies -> C.GenericPackageDescription -> C.LocalBuildInfo -> C.GenericPackageDescription
+update :: UpdateBound -> Targets -> Dependencies -> D.GenericPackageDescription -> L.LocalBuildInfo -> D.GenericPackageDescription
 update bound AllTargets deps pkgDescrp buildInfo =
    pkgDescrp & dependenciesOfLib        . filterDeps %~ updateDep
              & dependenciesOfAllExes    . filterDeps %~ updateDep
@@ -40,58 +41,66 @@
       updateDep  = updateDependency bound (installedPackages buildInfo)
 
 
-updateDependency :: Bound -> InstalledPackages -> C.Dependency -> C.Dependency
-updateDependency LowerBound instPkgs dep@(C.Dependency pkgName _)
+updateDependency :: UpdateBound -> InstalledPackages -> P.Dependency -> P.Dependency
+updateDependency (UpdateLower comp) instPkgs dep@(P.Dependency pkgName _)
    | Just (_, version) <- find ((== pkgName) . fst) instPkgs
-   , Just intervals    <- versionIntervals version Nothing
-   = C.Dependency pkgName (C.fromVersionIntervals intervals)
+   , Just intervals    <- versionIntervals (versionComp comp version) Nothing
+   = P.Dependency pkgName (V.fromVersionIntervals intervals)
 
    | otherwise
    = dep
 
-updateDependency UpperBound instPkgs dep@(C.Dependency pkgName versionRange)
-   | not . C.isAnyVersion $ versionRange
+updateDependency (UpdateUpper comp) instPkgs dep@(P.Dependency pkgName versionRange)
+   | not . V.isAnyVersion $ versionRange
    , Just (_, upperVersion)             <- find ((== pkgName) . fst) instPkgs
-   , (C.LowerBound lowerVersion _, _):_ <- C.asVersionIntervals versionRange
-   , Just intervals                     <- versionIntervals lowerVersion (Just $ nextMajorVersion upperVersion)
-   = C.Dependency pkgName (C.fromVersionIntervals intervals)
+   , (V.LowerBound lowerVersion _, _):_ <- V.asVersionIntervals versionRange
+   , Just intervals                     <- versionIntervals lowerVersion (Just $ nextVersion $ versionComp comp upperVersion)
+   = P.Dependency pkgName (V.fromVersionIntervals intervals)
 
    | otherwise
-   = updateDependency BothBounds instPkgs dep
+   = updateDependency (UpdateBoth defaultLowerComp comp) instPkgs dep
 
-updateDependency BothBounds instPkgs dep@(C.Dependency pkgName _)
+updateDependency (UpdateBoth lowerComp upperComp) instPkgs dep@(P.Dependency pkgName _)
    | Just (_, version) <- find ((== pkgName) . fst) instPkgs
-   , Just intervals    <- versionIntervals version (Just $ nextMajorVersion version)
-   = C.Dependency pkgName (C.fromVersionIntervals intervals)
+   , Just intervals    <- versionIntervals (versionComp lowerComp version) (Just $ nextVersion $ versionComp upperComp version)
+   = P.Dependency pkgName (V.fromVersionIntervals intervals)
 
    | otherwise
    = dep
 
 
-versionIntervals :: C.Version -> Maybe C.Version -> Maybe C.VersionIntervals
+versionIntervals :: V.Version -> Maybe V.Version -> Maybe V.VersionIntervals
 versionIntervals lowerVersion Nothing =
-   C.mkVersionIntervals [(C.LowerBound lowerVersion C.InclusiveBound, C.NoUpperBound)]
+   V.mkVersionIntervals [(V.LowerBound lowerVersion V.InclusiveBound, V.NoUpperBound)]
 
 versionIntervals lowerVersion (Just upperVersion) =
-   C.mkVersionIntervals [(C.LowerBound lowerVersion C.InclusiveBound, C.UpperBound upperVersion C.ExclusiveBound)]
+   V.mkVersionIntervals [(V.LowerBound lowerVersion V.InclusiveBound, V.UpperBound upperVersion V.ExclusiveBound)]
 
 
-nextMajorVersion :: C.Version -> C.Version
-nextMajorVersion version
-   | (v1:v2:_) <- C.versionBranch version
-   = C.Version {C.versionBranch = [v1, (v2 + 1)], C.versionTags = []}
+versionComp :: VersionComp -> V.Version -> V.Version
+versionComp Major1 version =
+   version & vbranch %~ take 1
+           & vtags   .~ []
 
-   | (v1:_)    <- C.versionBranch version
-   = C.Version {C.versionBranch = [v1, 1], C.versionTags = []}
+versionComp Major2 version =
+   version & vbranch %~ take 2
+           & vtags   .~ []
 
-   | otherwise
-   = version
+versionComp Minor version =
+   version & vtags .~ []
 
 
-installedPackages :: C.LocalBuildInfo -> InstalledPackages
+nextVersion :: V.Version -> V.Version
+nextVersion version =
+   version & vbranch %~ increaseLast
+   where
+      increaseLast = reverse . (& ix 0 %~ (+ 1)) . reverse
+
+
+installedPackages :: L.LocalBuildInfo -> InstalledPackages
 installedPackages = map (& _2 %~ newestVersion)
                     . filter ((not . null) . snd)
-                    . C.allPackagesByName . C.installedPkgs
+                    . PX.allPackagesByName . L.installedPkgs
    where
-      newestVersion :: [C.InstalledPackageInfo] -> C.Version
-      newestVersion = last . sort . map (C.pkgVersion . C.sourcePackageId)
+      newestVersion :: [PI.InstalledPackageInfo] -> V.Version
+      newestVersion = last . sort . map (P.pkgVersion . PI.sourcePackageId)
diff --git a/src/CabalBounds/VersionComp.hs b/src/CabalBounds/VersionComp.hs
new file mode 100644
--- /dev/null
+++ b/src/CabalBounds/VersionComp.hs
@@ -0,0 +1,23 @@
+{-# LANGUAGE DeriveDataTypeable #-}
+
+module CabalBounds.VersionComp
+   ( VersionComp(..)
+   , defaultLowerComp
+   , defaultUpperComp
+   ) where
+
+import Data.Data (Data(..), Typeable(..))
+
+-- | The component of a version number A.B.C -> Major1.Major2.Minor
+data VersionComp = Major1
+                 | Major2
+                 | Minor
+                 deriving (Data, Typeable, Eq, Show)
+
+
+defaultLowerComp :: VersionComp
+defaultLowerComp = Minor
+
+
+defaultUpperComp :: VersionComp
+defaultUpperComp = Major2
diff --git a/tests/Main.hs b/tests/Main.hs
--- a/tests/Main.hs
+++ b/tests/Main.hs
@@ -1,20 +1,21 @@
 
 module Main where
 
-import Test.Tasty
-import Test.Tasty.Golden
-import System.FilePath
+import qualified Test.Tasty as T
+import qualified Test.Tasty.Golden as G
 import System.IO (hPutStrLn, stderr)
+import System.FilePath ((</>), (<.>))
 import CabalBounds.Args
 import CabalBounds.Main (cabalBounds)
+import CabalBounds.VersionComp (VersionComp(..))
 
-main = defaultMain tests
+main = T.defaultMain tests
 
-tests :: TestTree
-tests = testGroup "Tests" [dropTests, updateTests]
+tests :: T.TestTree
+tests = T.testGroup "Tests" [dropTests, updateTests]
 
-dropTests :: TestTree
-dropTests = testGroup "Drop Tests"
+dropTests :: T.TestTree
+dropTests = T.testGroup "Drop Tests"
    [ test "DropBothOfAll" defaultDrop
    , test "DropUpperOfAll" $ defaultDrop { upper = True }
    , test "DropBothOfLib" $ defaultDrop { library = True }
@@ -34,8 +35,8 @@
    ]
 
 
-updateTests :: TestTree
-updateTests = testGroup "Update Tests"
+updateTests :: T.TestTree
+updateTests = T.testGroup "Update Tests"
    [ test "UpdateBothOfAll" $ defaultUpdate
    , test "UpdateBothOfAll" $ defaultUpdate { lower = True, upper = True }
    , test "UpdateBothOfAllExes" $ defaultUpdate { executable = ["cabal-bounds", "other-exe"] }
@@ -59,12 +60,20 @@
    , test "UpdateUpperOnlyBase" $ defaultUpdate { upper = True, only = ["base"] }
    , test "UpdateBothIgnoreBase" $ defaultUpdate { ignore = ["base"] }
    , test "UpdateLowerIgnoreBase" $ defaultUpdate { lower = True, ignore = ["base"] }
+   , test "UpdateMinorLower" $ defaultUpdate { lowerComp = Just Minor }
+   , test "UpdateMajor2Lower" $ defaultUpdate {lowerComp = Just Major2 }
+   , test "UpdateMajor1Lower" $ defaultUpdate {lowerComp = Just Major1 }
+   , test "UpdateMinorUpper" $ defaultUpdate { upperComp = Just Minor }
+   , test "UpdateMajor2Upper" $ defaultUpdate {upperComp = Just Major2 }
+   , test "UpdateMajor1Upper" $ defaultUpdate {upperComp = Just Major1 }
+   , test "UpdateMinorLowerAndUpper" $ defaultUpdate { lowerComp = Just Minor, upperComp = Just Minor }
+   , test "UpdateMajor1LowerAndUpper" $ defaultUpdate { lowerComp = Just Major1, upperComp = Just Major1 }
    ] 
 
 
-test :: String -> Args -> TestTree
+test :: String -> Args -> T.TestTree
 test testName args =
-   goldenVsFileDiff testName diff goldenFile outputFile command
+   G.goldenVsFileDiff testName diff goldenFile outputFile command
    where
       command = do
          error <- cabalBounds argsWithFiles
diff --git a/tests/goldenFiles/UpdateMajor1Lower.cabal b/tests/goldenFiles/UpdateMajor1Lower.cabal
new file mode 100644
--- /dev/null
+++ b/tests/goldenFiles/UpdateMajor1Lower.cabal
@@ -0,0 +1,65 @@
+name: cabal-bounds
+version: 0.1
+cabal-version: >=1.9.2
+build-type: Simple
+license: BSD3
+license-file: LICENSE
+maintainer: daniel.trstenjak@gmail.com
+synopsis: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+description: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+category: Utils
+author: Daniel Trstenjak
+data-dir: ""
+ 
+source-repository head
+    type: git
+    location: https://github.com/dan-t/cabal-bounds
+ 
+library
+    build-depends: base >=4, cmdargs -any, lens >=4, pretty-show -any,
+                   strict -any, Cabal >=1
+    exposed-modules: CabalBounds.Args CabalBounds.Command
+                     CabalBounds.Execute CabalBounds.Lenses
+    exposed: True
+    buildable: True
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+ 
+executable cabal-bounds
+    build-depends: base >=4, cmdargs -any, lens >=4, pretty-show -any,
+                   strict -any, Cabal >=1
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+executable other-exe
+    build-depends: base >=4, cmdargs -any, lens >=4, pretty-show -any,
+                   strict -any, Cabal >=1
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+test-suite some-test
+    build-depends: base >=4, cmdargs -any, lens >=4, pretty-show -any,
+                   strict -any, Cabal >=1
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+test-suite other-test
+    build-depends: base >=4, cmdargs -any, lens >=4, pretty-show -any,
+                   strict -any, Cabal >=1
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+ 
diff --git a/tests/goldenFiles/UpdateMajor1LowerAndUpper.cabal b/tests/goldenFiles/UpdateMajor1LowerAndUpper.cabal
new file mode 100644
--- /dev/null
+++ b/tests/goldenFiles/UpdateMajor1LowerAndUpper.cabal
@@ -0,0 +1,65 @@
+name: cabal-bounds
+version: 0.1
+cabal-version: >=1.9.2
+build-type: Simple
+license: BSD3
+license-file: LICENSE
+maintainer: daniel.trstenjak@gmail.com
+synopsis: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+description: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+category: Utils
+author: Daniel Trstenjak
+data-dir: ""
+ 
+source-repository head
+    type: git
+    location: https://github.com/dan-t/cabal-bounds
+ 
+library
+    build-depends: base ==4.*, cmdargs ==0.*, lens ==4.*,
+                   pretty-show -any, strict ==0.*, Cabal ==1.*
+    exposed-modules: CabalBounds.Args CabalBounds.Command
+                     CabalBounds.Execute CabalBounds.Lenses
+    exposed: True
+    buildable: True
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+ 
+executable cabal-bounds
+    build-depends: base ==4.*, cmdargs ==0.*, lens ==4.*,
+                   pretty-show -any, strict ==0.*, Cabal ==1.*
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+executable other-exe
+    build-depends: base ==4.*, cmdargs ==0.*, lens ==4.*,
+                   pretty-show -any, strict ==0.*, Cabal ==1.*
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+test-suite some-test
+    build-depends: base ==4.*, cmdargs ==0.*, lens ==4.*,
+                   pretty-show -any, strict ==0.*, Cabal ==1.*
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+test-suite other-test
+    build-depends: base ==4.*, cmdargs ==0.*, lens ==4.*,
+                   pretty-show -any, strict ==0.*, Cabal ==1.*
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+ 
diff --git a/tests/goldenFiles/UpdateMajor1Upper.cabal b/tests/goldenFiles/UpdateMajor1Upper.cabal
new file mode 100644
--- /dev/null
+++ b/tests/goldenFiles/UpdateMajor1Upper.cabal
@@ -0,0 +1,70 @@
+name: cabal-bounds
+version: 0.1
+cabal-version: >=1.9.2
+build-type: Simple
+license: BSD3
+license-file: LICENSE
+maintainer: daniel.trstenjak@gmail.com
+synopsis: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+description: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+category: Utils
+author: Daniel Trstenjak
+data-dir: ""
+ 
+source-repository head
+    type: git
+    location: https://github.com/dan-t/cabal-bounds
+ 
+library
+    build-depends: base >=3 && <5, cmdargs >=0.10.5 && <1,
+                   lens >=4.0.1 && <5, pretty-show -any, strict >=0.3.2 && <1,
+                   Cabal >=1.18.1 && <2
+    exposed-modules: CabalBounds.Args CabalBounds.Command
+                     CabalBounds.Execute CabalBounds.Lenses
+    exposed: True
+    buildable: True
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+ 
+executable cabal-bounds
+    build-depends: base >=3 && <5, cmdargs >=0.10.5 && <1,
+                   lens >=4.0.1 && <5, pretty-show -any, strict >=0.3.2 && <1,
+                   Cabal >=1.18.1 && <2
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+executable other-exe
+    build-depends: base >=3 && <5, cmdargs >=0.10.5 && <1,
+                   lens >=4.0.1 && <5, pretty-show -any, strict >=0.3.2 && <1,
+                   Cabal >=1.18.1 && <2
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+test-suite some-test
+    build-depends: base >=3 && <5, cmdargs >=0.10.5 && <1,
+                   lens >=4.0.1 && <5, pretty-show -any, strict >=0.3.2 && <1,
+                   Cabal >=1.18.1 && <2
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+test-suite other-test
+    build-depends: base >=3 && <5, cmdargs >=0.10.5 && <1,
+                   lens >=4.0.1 && <5, pretty-show -any, strict >=0.3.2 && <1,
+                   Cabal >=1.18.1 && <2
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+ 
diff --git a/tests/goldenFiles/UpdateMajor2Lower.cabal b/tests/goldenFiles/UpdateMajor2Lower.cabal
new file mode 100644
--- /dev/null
+++ b/tests/goldenFiles/UpdateMajor2Lower.cabal
@@ -0,0 +1,65 @@
+name: cabal-bounds
+version: 0.1
+cabal-version: >=1.9.2
+build-type: Simple
+license: BSD3
+license-file: LICENSE
+maintainer: daniel.trstenjak@gmail.com
+synopsis: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+description: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+category: Utils
+author: Daniel Trstenjak
+data-dir: ""
+ 
+source-repository head
+    type: git
+    location: https://github.com/dan-t/cabal-bounds
+ 
+library
+    build-depends: base >=4.6, cmdargs >=0.10, lens >=4.0,
+                   pretty-show -any, strict >=0.3, Cabal >=1.18
+    exposed-modules: CabalBounds.Args CabalBounds.Command
+                     CabalBounds.Execute CabalBounds.Lenses
+    exposed: True
+    buildable: True
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+ 
+executable cabal-bounds
+    build-depends: base >=4.6, cmdargs >=0.10, lens >=4.0,
+                   pretty-show -any, strict >=0.3, Cabal >=1.18
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+executable other-exe
+    build-depends: base >=4.6, cmdargs >=0.10, lens >=4.0,
+                   pretty-show -any, strict >=0.3, Cabal >=1.18
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+test-suite some-test
+    build-depends: base >=4.6, cmdargs >=0.10, lens >=4.0,
+                   pretty-show -any, strict >=0.3, Cabal >=1.18
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+test-suite other-test
+    build-depends: base >=4.6, cmdargs >=0.10, lens >=4.0,
+                   pretty-show -any, strict >=0.3, Cabal >=1.18
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+ 
diff --git a/tests/goldenFiles/UpdateMajor2Upper.cabal b/tests/goldenFiles/UpdateMajor2Upper.cabal
new file mode 100644
--- /dev/null
+++ b/tests/goldenFiles/UpdateMajor2Upper.cabal
@@ -0,0 +1,70 @@
+name: cabal-bounds
+version: 0.1
+cabal-version: >=1.9.2
+build-type: Simple
+license: BSD3
+license-file: LICENSE
+maintainer: daniel.trstenjak@gmail.com
+synopsis: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+description: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+category: Utils
+author: Daniel Trstenjak
+data-dir: ""
+ 
+source-repository head
+    type: git
+    location: https://github.com/dan-t/cabal-bounds
+ 
+library
+    build-depends: base >=3 && <4.7, cmdargs >=0.10.5 && <0.11,
+                   lens >=4.0.1 && <4.1, pretty-show -any, strict >=0.3.2 && <0.4,
+                   Cabal >=1.18.1 && <1.19
+    exposed-modules: CabalBounds.Args CabalBounds.Command
+                     CabalBounds.Execute CabalBounds.Lenses
+    exposed: True
+    buildable: True
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+ 
+executable cabal-bounds
+    build-depends: base >=3 && <4.7, cmdargs >=0.10.5 && <0.11,
+                   lens >=4.0.1 && <4.1, pretty-show -any, strict >=0.3.2 && <0.4,
+                   Cabal >=1.18.1 && <1.19
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+executable other-exe
+    build-depends: base >=3 && <4.7, cmdargs >=0.10.5 && <0.11,
+                   lens >=4.0.1 && <4.1, pretty-show -any, strict >=0.3.2 && <0.4,
+                   Cabal >=1.18.1 && <1.19
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+test-suite some-test
+    build-depends: base >=3 && <4.7, cmdargs >=0.10.5 && <0.11,
+                   lens >=4.0.1 && <4.1, pretty-show -any, strict >=0.3.2 && <0.4,
+                   Cabal >=1.18.1 && <1.19
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+test-suite other-test
+    build-depends: base >=3 && <4.7, cmdargs >=0.10.5 && <0.11,
+                   lens >=4.0.1 && <4.1, pretty-show -any, strict >=0.3.2 && <0.4,
+                   Cabal >=1.18.1 && <1.19
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+ 
diff --git a/tests/goldenFiles/UpdateMinorLower.cabal b/tests/goldenFiles/UpdateMinorLower.cabal
new file mode 100644
--- /dev/null
+++ b/tests/goldenFiles/UpdateMinorLower.cabal
@@ -0,0 +1,65 @@
+name: cabal-bounds
+version: 0.1
+cabal-version: >=1.9.2
+build-type: Simple
+license: BSD3
+license-file: LICENSE
+maintainer: daniel.trstenjak@gmail.com
+synopsis: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+description: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+category: Utils
+author: Daniel Trstenjak
+data-dir: ""
+ 
+source-repository head
+    type: git
+    location: https://github.com/dan-t/cabal-bounds
+ 
+library
+    build-depends: base >=4.6.0.1, cmdargs >=0.10.7, lens >=4.0.1,
+                   pretty-show -any, strict >=0.3.2, Cabal >=1.18.1
+    exposed-modules: CabalBounds.Args CabalBounds.Command
+                     CabalBounds.Execute CabalBounds.Lenses
+    exposed: True
+    buildable: True
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+ 
+executable cabal-bounds
+    build-depends: base >=4.6.0.1, cmdargs >=0.10.7, lens >=4.0.1,
+                   pretty-show -any, strict >=0.3.2, Cabal >=1.18.1
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+executable other-exe
+    build-depends: base >=4.6.0.1, cmdargs >=0.10.7, lens >=4.0.1,
+                   pretty-show -any, strict >=0.3.2, Cabal >=1.18.1
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+test-suite some-test
+    build-depends: base >=4.6.0.1, cmdargs >=0.10.7, lens >=4.0.1,
+                   pretty-show -any, strict >=0.3.2, Cabal >=1.18.1
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+test-suite other-test
+    build-depends: base >=4.6.0.1, cmdargs >=0.10.7, lens >=4.0.1,
+                   pretty-show -any, strict >=0.3.2, Cabal >=1.18.1
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+ 
diff --git a/tests/goldenFiles/UpdateMinorLowerAndUpper.cabal b/tests/goldenFiles/UpdateMinorLowerAndUpper.cabal
new file mode 100644
--- /dev/null
+++ b/tests/goldenFiles/UpdateMinorLowerAndUpper.cabal
@@ -0,0 +1,70 @@
+name: cabal-bounds
+version: 0.1
+cabal-version: >=1.9.2
+build-type: Simple
+license: BSD3
+license-file: LICENSE
+maintainer: daniel.trstenjak@gmail.com
+synopsis: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+description: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+category: Utils
+author: Daniel Trstenjak
+data-dir: ""
+ 
+source-repository head
+    type: git
+    location: https://github.com/dan-t/cabal-bounds
+ 
+library
+    build-depends: base ==4.6.0.1.*, cmdargs ==0.10.7.*,
+                   lens ==4.0.1.*, pretty-show -any, strict ==0.3.2.*,
+                   Cabal ==1.18.1.*
+    exposed-modules: CabalBounds.Args CabalBounds.Command
+                     CabalBounds.Execute CabalBounds.Lenses
+    exposed: True
+    buildable: True
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+ 
+executable cabal-bounds
+    build-depends: base ==4.6.0.1.*, cmdargs ==0.10.7.*,
+                   lens ==4.0.1.*, pretty-show -any, strict ==0.3.2.*,
+                   Cabal ==1.18.1.*
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+executable other-exe
+    build-depends: base ==4.6.0.1.*, cmdargs ==0.10.7.*,
+                   lens ==4.0.1.*, pretty-show -any, strict ==0.3.2.*,
+                   Cabal ==1.18.1.*
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+test-suite some-test
+    build-depends: base ==4.6.0.1.*, cmdargs ==0.10.7.*,
+                   lens ==4.0.1.*, pretty-show -any, strict ==0.3.2.*,
+                   Cabal ==1.18.1.*
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+test-suite other-test
+    build-depends: base ==4.6.0.1.*, cmdargs ==0.10.7.*,
+                   lens ==4.0.1.*, pretty-show -any, strict ==0.3.2.*,
+                   Cabal ==1.18.1.*
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+ 
diff --git a/tests/goldenFiles/UpdateMinorUpper.cabal b/tests/goldenFiles/UpdateMinorUpper.cabal
new file mode 100644
--- /dev/null
+++ b/tests/goldenFiles/UpdateMinorUpper.cabal
@@ -0,0 +1,70 @@
+name: cabal-bounds
+version: 0.1
+cabal-version: >=1.9.2
+build-type: Simple
+license: BSD3
+license-file: LICENSE
+maintainer: daniel.trstenjak@gmail.com
+synopsis: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+description: A command line program for managing the bounds/versions of the dependencies in a cabal file.
+category: Utils
+author: Daniel Trstenjak
+data-dir: ""
+ 
+source-repository head
+    type: git
+    location: https://github.com/dan-t/cabal-bounds
+ 
+library
+    build-depends: base >=3 && <4.6.0.2, cmdargs >=0.10.5 && <0.10.8,
+                   lens ==4.0.1.*, pretty-show -any, strict ==0.3.2.*,
+                   Cabal ==1.18.1.*
+    exposed-modules: CabalBounds.Args CabalBounds.Command
+                     CabalBounds.Execute CabalBounds.Lenses
+    exposed: True
+    buildable: True
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+ 
+executable cabal-bounds
+    build-depends: base >=3 && <4.6.0.2, cmdargs >=0.10.5 && <0.10.8,
+                   lens ==4.0.1.*, pretty-show -any, strict ==0.3.2.*,
+                   Cabal ==1.18.1.*
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+executable other-exe
+    build-depends: base >=3 && <4.6.0.2, cmdargs >=0.10.5 && <0.10.8,
+                   lens ==4.0.1.*, pretty-show -any, strict ==0.3.2.*,
+                   Cabal ==1.18.1.*
+    main-is: Main.hs
+    buildable: True
+    cpp-options: -DCABAL
+    hs-source-dirs: src
+    other-modules: Paths_cabal_bounds CabalBounds.Args
+                   CabalBounds.Command CabalBounds.Execute CabalBounds.Lenses
+    ghc-options: -W
+ 
+test-suite some-test
+    build-depends: base >=3 && <4.6.0.2, cmdargs >=0.10.5 && <0.10.8,
+                   lens ==4.0.1.*, pretty-show -any, strict ==0.3.2.*,
+                   Cabal ==1.18.1.*
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+test-suite other-test
+    build-depends: base >=3 && <4.6.0.2, cmdargs >=0.10.5 && <0.10.8,
+                   lens ==4.0.1.*, pretty-show -any, strict ==0.3.2.*,
+                   Cabal ==1.18.1.*
+    type: exitcode-stdio-1.0
+    main-is: Main.hs
+    buildable: True
+    ghc-options: -W
+ 
