diff --git a/hs-inspector.cabal b/hs-inspector.cabal
--- a/hs-inspector.cabal
+++ b/hs-inspector.cabal
@@ -2,7 +2,7 @@
 --  http://haskell.org/cabal/users-guide/
 
 name:                hs-inspector
-version:             0.5.0.0
+version:             0.5.1.0
 license:             MIT
 license-file:        LICENSE
 author:              Franco Leonardo Bulgarelli
diff --git a/src/Language/Haskell/Explorer.hs b/src/Language/Haskell/Explorer.hs
--- a/src/Language/Haskell/Explorer.hs
+++ b/src/Language/Haskell/Explorer.hs
@@ -3,6 +3,8 @@
   parseBindings,
   declsOf,
   rhssOf,
+  bindingsOf,
+  transitiveBindingsOf,
   expressionsOf,
   expressionToBinding,
   EO(..),
@@ -12,6 +14,8 @@
 import Language.Haskell.Syntax
 import Language.Haskell.Names
 import Language.Haskell.Parser
+import Data.Maybe (maybeToList)
+import Data.List (nub)
 
 type Binding = String
 type Code = String
@@ -33,6 +37,14 @@
   top <- topExpressions rhs
   unfoldExpression top
 
+bindingsOf :: Binding -> Code -> [Binding]
+bindingsOf binding code = nub $ do
+          expr <- expressionsOf binding code
+          maybeToList . expressionToBinding $ expr
+
+transitiveBindingsOf :: Binding -> Code -> [Binding]
+transitiveBindingsOf binding code =  expand (`bindingsOf` code) binding
+
 parseDecls :: Code -> [HsDecl]
 parseDecls code
   | ParseOk (HsModule _ _ _ _ decls) <- parseModule code = decls
@@ -76,4 +88,12 @@
 rhsForBinding _ = []
 
 concatRhs rhs l = [rhs] ++ concatMap rhsForBinding l
+
+
+expand :: Eq a => (a-> [a]) -> a -> [a]
+expand f x = expand' [] f [x]
+
+expand' _ _ [] = []
+expand' ps f (x:xs) | elem x ps = expand' ps f xs
+                    | otherwise = [x] ++ expand' (x:ps) f (xs ++ f x)
 
diff --git a/src/Language/Haskell/Inspector/Combiner.hs b/src/Language/Haskell/Inspector/Combiner.hs
--- a/src/Language/Haskell/Inspector/Combiner.hs
+++ b/src/Language/Haskell/Inspector/Combiner.hs
@@ -5,7 +5,6 @@
 
 import Language.Haskell.Inspector
 import Language.Haskell.Explorer
-import Data.Maybe (maybeToList)
 
 detect :: Inspection -> Code -> [Binding]
 detect inspection code = filter (`inspection` code) $ parseBindings code
@@ -15,6 +14,4 @@
 
 transitive :: Inspection -> Inspection
 transitive inspection binding code = inspection binding code || inUsage
-  where inUsage = any (flip (transitive inspection) code) $ do
-                      expr <- expressionsOf binding code
-                      maybeToList . expressionToBinding $ expr
+  where inUsage = any (`inspection` code) . transitiveBindingsOf binding $ code
