diff --git a/arion.cabal b/arion.cabal
--- a/arion.cabal
+++ b/arion.cabal
@@ -1,5 +1,5 @@
 name:                arion
-version:             0.1.0.6
+version:             0.1.0.7
 synopsis:            Watcher and runner for Hspec
 description:         Watcher and runner for Hspec
 license:             MIT
diff --git a/src/Arion/Utilities.hs b/src/Arion/Utilities.hs
--- a/src/Arion/Utilities.hs
+++ b/src/Arion/Utilities.hs
@@ -1,5 +1,6 @@
 module Arion.Utilities (
-    associate
+    associate,
+    dependencies
 ) where
 
 import Arion.Types
@@ -7,15 +8,24 @@
 import Data.List (union)
 
 associate :: [SourceFile] -> [TestFile] -> Map FilePath [TestFile]
-associate sourceFiles testFiles = let preTransitive = map (createAssociations testFiles) sourceFiles
-                                      transitive = map (\(sourceFile, testsAssociatedWithSource) -> let imports = importedModules sourceFile
-                                                                                                        testsAssociatedWithImports =
-                                                                                                            concatMap snd $ concatMap (\imp -> filter (\(source, tests) -> moduleName source == imp) preTransitive) imports
-                                                                                                    in (sourceFilePath sourceFile, testsAssociatedWithSource `union` testsAssociatedWithImports)
-                                                       ) preTransitive
-                                  in fromList transitive
+associate sourceFiles testFiles = let sourcesAndDependencies = dependencies sourceFiles
+                                  in fromList $ map (\(source, dependencies) ->
+                                                                    let testFilesFor source = filter (\testFile -> moduleName source `elem` imports testFile) testFiles 
+                                                                        testFilesForSource = testFilesFor source
+                                                                        testFilesForDependencies = concatMap testFilesFor dependencies
+                                                                    in (sourceFilePath source, testFilesForSource ++ testFilesForDependencies)
+                                                    ) sourcesAndDependencies
 
-createAssociations :: [TestFile] -> SourceFile -> (SourceFile, [TestFile])
-createAssociations testFiles sourceFile = let associatedTestFiles = filter (\testFile -> moduleName sourceFile `elem` imports testFile) testFiles
-                                          in (sourceFile, associatedTestFiles)
+dependencies :: [SourceFile] -> [(SourceFile, [SourceFile])]
+dependencies [] = []
+dependencies sourceFiles = map (\file -> let dependencies = transitiveDependencies sourceFiles (importedModules file)
+                                         in (file, dependencies)
+                           ) sourceFiles
 
+transitiveDependencies :: [SourceFile] -> [String] -> [SourceFile]
+transitiveDependencies sourceFiles [] = []
+transitiveDependencies sourceFiles imports = let sourcesForImports = concatMap (findSourcesByModule sourceFiles) imports
+                                             in sourcesForImports ++ concatMap (transitiveDependencies sourceFiles) (map importedModules sourcesForImports)
+
+findSourcesByModule :: [SourceFile] -> String -> [SourceFile]
+findSourcesByModule sourceFiles theModuleName = filter (\file -> moduleName file == theModuleName) sourceFiles
