diff --git a/exe/Main.hs b/exe/Main.hs
--- a/exe/Main.hs
+++ b/exe/Main.hs
@@ -8,13 +8,14 @@
 import           Data.Aeson          (eitherDecodeStrict)
 import qualified Data.ByteString     as BS
 import           Data.Foldable       (traverse_)
-import           Data.List           (intersect, nub, (\\))
+import           Data.List           (intersect)
 import           Data.List.Extra     (groupSort)
 import           Data.List.NonEmpty  (NonEmpty ((:|)), toList)
 import           Data.Map.Strict     (Map)
 import qualified Data.Map.Strict     as Map
+import           Data.Set            (Set)
 import qualified Data.Set            as Set
-import           Data.Maybe          (maybeToList)
+import           Data.Maybe          (maybeToList, mapMaybe)
 import           Data.Text           (Text, intercalate, map, pack)
 import           Data.Text.IO        (putStrLn)
 import           Jaeger.Data
@@ -120,15 +121,14 @@
 -- like you can in a single-parent world. This may make writing a GUI harder
 -- since you can't do certain flame-graph-like visualizations.
 buildFlames :: Processes -> Lookup -> [Flame]
-buildFlames procs ss = build <$>
-                       (maybeToList . lookupSpan =<< (nub $ roots ++ orphans))
+buildFlames procs ss = mapMaybe (fmap build . lookupSpan) $ Set.toList $ roots `Set.union` orphans
   where
-    roots :: [Reference]
-    roots = fst <$> filter (\ (_, Span{..}) -> null references) ss
-    orphans :: [Reference]
-    orphans = Set.foldl' f [] absentees
-      where absentees  = Map.keysSet children `Set.difference` Map.keysSet spans
-            f os absent = maybe os (os ++) $ Map.lookup absent children
+    roots :: Set Reference
+    roots = Map.keysSet $ Map.filter (\Span{..} -> null references) spans
+    orphans :: Set Reference
+    orphans = Set.foldl' f mempty absentees
+      where absentees   = Map.keysSet children `Set.difference` Map.keysSet spans
+            f os absent = maybe os (\xs -> os `Set.union` Set.fromList xs) $ Map.lookup absent children
     spans :: Map Reference Span
     spans = Map.fromList ss
     children :: Map Reference [Reference]
diff --git a/jaeger-flamegraph.cabal b/jaeger-flamegraph.cabal
--- a/jaeger-flamegraph.cabal
+++ b/jaeger-flamegraph.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                jaeger-flamegraph
-version:             1.3.1
+version:             1.3.2
 synopsis:            Generate flamegraphs from Jaeger .json dumps.
 license:             BSD-3-Clause
 license-file:        LICENSE
