diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,8 @@
+0.8.6
+-----
+* Build/tested with GHC 7.8.3
+* Simplified implementation
+
 0.8.5
 -----
 * Raise upper bounds of dependencies
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.8.5
+version: 0.8.6
 cabal-version: >=1.9.2
 build-type: Simple
 license: BSD3
@@ -46,6 +46,7 @@
     > $ cabal-bounds drop --executable=blub myproject.cabal
 category: Utils, Development
 author: Daniel Trstenjak
+tested-with: GHC ==7.6.2 GHC ==7.6.3 GHC ==7.8.3
 extra-source-files:
     README.md
     CHANGELOG
@@ -72,7 +73,7 @@
         unordered-containers >=0.2.3.3 && <0.3,
         transformers >=0.3.0.0 && <0.5,
         either >=4.1.1 && <4.4,
-        cabal-lenses ==0.3.*,
+        cabal-lenses ==0.4.*,
         Cabal >=1.18.0 && <1.21
     exposed-modules:
         CabalBounds.Args
diff --git a/lib/CabalBounds/Drop.hs b/lib/CabalBounds/Drop.hs
--- a/lib/CabalBounds/Drop.hs
+++ b/lib/CabalBounds/Drop.hs
@@ -12,7 +12,7 @@
 import Data.List (foldl')
 import Distribution.PackageDescription (GenericPackageDescription)
 import Distribution.Package (Dependency(..))
-import Distribution.Version (mkVersionIntervals, fromVersionIntervals, asVersionIntervals, UpperBound(..), anyVersion)
+import Distribution.Version (UpperBound(..), anyVersion)
 
 
 drop :: DropBound -> [CL.Section] -> Dependencies -> GenericPackageDescription -> GenericPackageDescription
@@ -28,15 +28,5 @@
 
 
 dropFromDependency :: DropBound -> Dependency -> Dependency
-dropFromDependency DropUpper (Dependency pkgName versionRange) = Dependency pkgName versionRange'
-   where
-      versionRange'
-         | Just vi <- mkVersionIntervals intervals'
-         = fromVersionIntervals vi
-
-         | otherwise
-         = versionRange
-
-      intervals' = map (& _2 .~ NoUpperBound) (asVersionIntervals versionRange)
-
-dropFromDependency DropBoth (Dependency pkgName _) = Dependency pkgName anyVersion
+dropFromDependency DropUpper dep = dep & CL.versionRange . CL.intervals . traversed . CL.upperBound .~ NoUpperBound
+dropFromDependency DropBoth  dep = dep & CL.versionRange .~ anyVersion
diff --git a/lib/CabalBounds/Dump.hs b/lib/CabalBounds/Dump.hs
--- a/lib/CabalBounds/Dump.hs
+++ b/lib/CabalBounds/Dump.hs
@@ -4,7 +4,6 @@
    ) where
 
 import Distribution.PackageDescription (GenericPackageDescription)
-import qualified Distribution.Version as V
 import qualified Data.HashMap.Strict as HM
 import Data.List (foldl')
 import Data.Maybe (fromMaybe)
@@ -22,13 +21,12 @@
       addLibsFromPkgDescrp libs pkgDescrp = foldl' addLibFromDep libs (pkgDescrp ^.. CL.allDependency)
 
       addLibFromDep libs dep
-         | depLowerBound /= CL.noLowerBound
-         = HM.insertWith min depPkgName lowerVersionBranch libs
+         | lowerBound_ /= CL.noLowerBound
+         = HM.insertWith min pkgName_ versionBranch_ libs
 
          | otherwise
          = libs
          where
-            depPkgName = dep ^. CL.depPackageName . CL.pkgNameString
-
-            depLowerBound@(V.LowerBound (V.Version { V.versionBranch = lowerVersionBranch }) _) =
-               fromMaybe CL.noLowerBound (dep ^? CL.depVersionRange . CL.rangeToIntervals . _head . CL.lowerBound)
+            pkgName_       = dep ^. CL.packageName . _Wrapped
+            versionBranch_ = lowerBound_ ^. CL.version . CL.versionBranchL
+            lowerBound_    = fromMaybe CL.noLowerBound (dep ^? CL.versionRange . CL.intervals . _head . CL.lowerBound)
diff --git a/lib/CabalBounds/Update.hs b/lib/CabalBounds/Update.hs
--- a/lib/CabalBounds/Update.hs
+++ b/lib/CabalBounds/Update.hs
@@ -7,6 +7,7 @@
 import qualified Distribution.Package as P
 import qualified Distribution.Version as V
 import Control.Lens
+import Control.Applicative ((<$>))
 import CabalBounds.Bound (UpdateBound(..))
 import CabalBounds.Dependencies (Dependencies(..), filterDependency)
 import CabalBounds.VersionComp (VersionComp(..))
@@ -15,7 +16,6 @@
 import qualified Data.HashMap.Strict as HM
 import Data.Maybe (fromMaybe)
 
-type PkgName    = String
 type LibName    = String
 type LibVersion = V.Version
 type Libraries  = HM.HashMap LibName LibVersion
@@ -39,19 +39,16 @@
       if ifMissing && lowerBound_ /= CL.noLowerBound
          then Nothing
          else do
-            version <- HM.lookup pkgName_ libs
-            let newLowerVersion = comp `compOf` version
+            lowerVersion <- HM.lookup pkgName_ libs
+            let newLowerVersion = comp `compOf` lowerVersion
                 newLowerBound   = V.LowerBound newLowerVersion V.InclusiveBound
-                vrange          = fromMaybe (V.orLaterVersion newLowerVersion)
-                                            (modifyVersionIntervals (updateLower newLowerBound) versionRange_)
-            return $ mkDependency pkgName_ vrange
+                newIntervals    = (versionRange_ ^. CL.intervals) & _head . CL.lowerBound .~ newLowerBound
+                vrange          = fromMaybe (V.orLaterVersion newLowerVersion) (mkVersionRange newIntervals)
+            return $ dep & CL.versionRange .~ vrange
    where
-      updateLower newLowerBound []        = [(newLowerBound, V.NoUpperBound)]
-      updateLower newLowerBound intervals = intervals & _head . CL.lowerBound .~ newLowerBound
-
-      pkgName_      = pkgName dep
-      versionRange_ = versionRange dep
-      lowerBound_   = fromMaybe CL.noLowerBound $ V.asVersionIntervals versionRange_ ^? _head . CL.lowerBound
+      pkgName_      = dep ^. CL.packageName . _Wrapped
+      versionRange_ = dep ^. CL.versionRange
+      lowerBound_   = fromMaybe CL.noLowerBound $ versionRange_ ^? CL.intervals . _head . CL.lowerBound
 
 updateDependency (UpdateUpper comp ifMissing) libs dep =
    fromMaybe dep $
@@ -61,25 +58,19 @@
             upperVersion <- HM.lookup pkgName_ libs
             let newUpperVersion = comp `compOf` upperVersion
                 newUpperBound   = V.UpperBound (nextVersion newUpperVersion) V.ExclusiveBound
-            vrange <- modifyVersionIntervals (updateUpper newUpperBound) versionRange_
-            return $ mkDependency pkgName_ vrange
+                newIntervals    = (versionRange_ ^. CL.intervals) & _last . CL.upperBound .~ newUpperBound
+                vrange          = fromMaybe (V.earlierVersion newUpperVersion) (mkVersionRange newIntervals)
+            return $ dep & CL.versionRange .~ vrange
    where
-      versionRange_ = versionRange dep
-      pkgName_      = pkgName dep
-      upperBound_   = fromMaybe V.NoUpperBound $ V.asVersionIntervals versionRange_ ^? _head . CL.upperBound
-
-      updateUpper newUpperBound []        = [(CL.noLowerBound, newUpperBound)]
-      updateUpper newUpperBound intervals = intervals & _last . CL.upperBound .~ newUpperBound
+      versionRange_ = dep ^. CL.versionRange
+      pkgName_      = dep ^. CL.packageName . _Wrapped
+      upperBound_   = fromMaybe V.NoUpperBound $ versionRange_ ^? CL.intervals . _last . CL.upperBound
 
 updateDependency (UpdateBoth lowerComp upperComp ifMissing) libs dep =
     updateDependency (UpdateLower lowerComp ifMissing) libs $
     updateDependency (UpdateUpper upperComp ifMissing) libs dep
 
 
-modifyVersionIntervals :: ([V.VersionInterval] -> [V.VersionInterval]) -> V.VersionRange -> Maybe V.VersionRange
-modifyVersionIntervals f = fmap V.fromVersionIntervals . V.mkVersionIntervals . f . V.asVersionIntervals
-
-
 compOf :: VersionComp -> V.Version -> V.Version
 Major1 `compOf` version =
    version & CL.versionBranchL %~ (take 1 . ensureMinimalVersionBranch Major1)
@@ -111,13 +102,5 @@
 nextVersion version = version & CL.versionBranchL . _last %~ (+ 1)
 
 
-pkgName :: P.Dependency -> PkgName
-pkgName (P.Dependency (P.PackageName name) _) = name
-
-
-versionRange :: P.Dependency -> V.VersionRange
-versionRange (P.Dependency _ vrange) = vrange
-
-
-mkDependency :: PkgName -> V.VersionRange -> P.Dependency
-mkDependency name = P.Dependency (P.PackageName name)
+mkVersionRange :: [V.VersionInterval] -> Maybe V.VersionRange
+mkVersionRange vis = V.fromVersionIntervals <$> V.mkVersionIntervals vis
diff --git a/lib/CabalBounds/VersionComp.hs b/lib/CabalBounds/VersionComp.hs
--- a/lib/CabalBounds/VersionComp.hs
+++ b/lib/CabalBounds/VersionComp.hs
@@ -6,7 +6,7 @@
    , defaultUpperComp
    ) where
 
-import Data.Data (Data(..), Typeable(..))
+import Data.Data (Data(..), Typeable)
 
 -- | The component of a version number A.B.C -> Major1.Major2.Minor
 data VersionComp = Major1
