diff --git a/Control/Instances/Morph.hs b/Control/Instances/Morph.hs
--- a/Control/Instances/Morph.hs
+++ b/Control/Instances/Morph.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, DataKinds, TypeOperators, MultiParamTypeClasses, FlexibleInstances, PolyKinds, UndecidableInstances, AllowAmbiguousTypes, RankNTypes, ScopedTypeVariables, FlexibleContexts, OverlappingInstances #-}
+{-# LANGUAGE TypeFamilies, DataKinds, TypeOperators, MultiParamTypeClasses, FlexibleInstances, PolyKinds, UndecidableInstances, AllowAmbiguousTypes, RankNTypes, ScopedTypeVariables, FlexibleContexts #-}
 
 module Control.Instances.Morph (GenMorph(..), Morph(..)) where
 
@@ -106,14 +106,14 @@
 -- | This class extracts a given morph from the set of rules
 class HasMorph r m where 
   getMorph :: r -> m
-instance HasMorph (m :+: r) m where
-  getMorph (c :+: r) = c
-instance Monad k => HasMorph (ConnectMorph_2m a b :+: r) (ConnectMorph a (b k)) where
+instance {-# OVERLAPPING #-} Monad k => HasMorph (ConnectMorph_2m a b :+: r) (ConnectMorph a (b k)) where
   getMorph (ConnectMorph_2m f :+: r) = ConnectMorph f
-instance Monad k => HasMorph (ConnectMorph_mt t :+: r) (ConnectMorph k (t k)) where
+instance {-# OVERLAPPING #-} Monad k => HasMorph (ConnectMorph_mt t :+: r) (ConnectMorph k (t k)) where
   getMorph (ConnectMorph_mt f :+: r) = ConnectMorph f
-instance HasMorph r m => HasMorph (c :+: r) m where
+instance {-# OVERLAPS #-} HasMorph r m => HasMorph (c :+: r) m where
   getMorph (c :+: r) = getMorph r
+instance {-# OVERLAPPABLE #-} HasMorph (m :+: r) m where
+  getMorph (c :+: r) = c
 
 -- | Checks if the path is found to provide usable error messages
 class CorrectPath from to path
diff --git a/Control/Instances/ShortestPath.hs b/Control/Instances/ShortestPath.hs
--- a/Control/Instances/ShortestPath.hs
+++ b/Control/Instances/ShortestPath.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TypeFamilies, DataKinds, TypeOperators, MultiParamTypeClasses, FlexibleInstances, PolyKinds, UndecidableInstances, AllowAmbiguousTypes, RankNTypes, ScopedTypeVariables, FlexibleContexts, OverlappingInstances #-}
+{-# LANGUAGE TypeFamilies, DataKinds, TypeOperators, MultiParamTypeClasses, FlexibleInstances, PolyKinds, UndecidableInstances, AllowAmbiguousTypes, RankNTypes, ScopedTypeVariables, FlexibleContexts #-}
 
 module Control.Instances.ShortestPath where
 
diff --git a/instance-control.cabal b/instance-control.cabal
--- a/instance-control.cabal
+++ b/instance-control.cabal
@@ -1,6 +1,6 @@
 
 name:                instance-control
-version:             0.1.0.0
+version:             0.1.1.0
 synopsis:            Controls how the compiler searches for instances using type families.
 description:         GHC has no capability to perform graph searches on instance definition. Because of that,
                      transitive rules for type classes cannot be defined. This package solves the issue with
@@ -27,6 +27,8 @@
   other-modules:       Control.Instances.TypeLevelPrelude
                      , Control.Instances.ShortestPath
   other-extensions:    TypeFamilies, DataKinds, TypeOperators, MultiParamTypeClasses, FlexibleInstances, PolyKinds, UndecidableInstances, AllowAmbiguousTypes, RankNTypes, ScopedTypeVariables, FlexibleContexts, OverlappingInstances
-  build-depends:       base >=4.7 && <4.9, mtl >=2.2 && <2.3, transformers >=0.4 && <0.5
+  build-depends:       base >=4.9 && <5.0
+                     , mtl >=2.2 && <2.3
+                     , transformers >=0.4 && <0.6
   -- hs-source-dirs:      
   default-language:    Haskell2010
