diff --git a/pred-trie.cabal b/pred-trie.cabal
--- a/pred-trie.cabal
+++ b/pred-trie.cabal
@@ -1,5 +1,5 @@
 Name:                   pred-trie
-Version:                0.0.7.1
+Version:                0.0.8
 Author:                 Athan Clark <athan.clark@gmail.com>
 Maintainer:             Athan Clark <athan.clark@gmail.com>
 License:                BSD3
diff --git a/src/Data/Trie/Pred/Unified.hs b/src/Data/Trie/Pred/Unified.hs
--- a/src/Data/Trie/Pred/Unified.hs
+++ b/src/Data/Trie/Pred/Unified.hs
@@ -14,7 +14,8 @@
 import qualified Data.List.NonEmpty as NE
 
 
-data RUPTrie t x = Rooted (Maybe x) [UPTrie t x]
+data RUPTrie t x = Rooted { root :: Maybe x
+                          , children :: [UPTrie t x] }
 
 instance (Eq t) => Monoid (RUPTrie t x) where
   mempty = Rooted Nothing []
@@ -22,7 +23,7 @@
 
 merge :: (Eq t) => RUPTrie t x -> RUPTrie t x -> RUPTrie t x
 merge (Rooted mx xs) (Rooted my ys) =
-  Rooted (getLast $ Last mx <> Last my) $ foldr go [] $ xs ++ ys
+  Rooted (getLast $ Last mx <> Last my) $ NU.sort $ foldr go [] $ xs ++ ys
   where
     go :: (Eq t) => UPTrie t x -> [UPTrie t x] -> [UPTrie t x]
     go a [] = [a]
diff --git a/src/Data/Trie/Pred/Unified/Tail.hs b/src/Data/Trie/Pred/Unified/Tail.hs
--- a/src/Data/Trie/Pred/Unified/Tail.hs
+++ b/src/Data/Trie/Pred/Unified/Tail.hs
@@ -48,10 +48,10 @@
 
 
 areDisjoint :: (Eq t) => UPTrie t x -> UPTrie t x -> Bool
-areDisjoint (UMore t _ _)    (UMore p _ _)    = t == p
-areDisjoint (UPred t _ _ _)  (UPred p _ _ _)  = t == p
-areDisjoint (UPred t _ _ _)  (UMore p _ _)    = t == p
-areDisjoint (UMore t _ _)    (UPred p _ _ _)  = t == p
+areDisjoint (UMore t _ _)    (UMore p _ _)    = not $ t == p
+areDisjoint (UPred t _ _ _)  (UPred p _ _ _)  = not $ t == p
+areDisjoint (UPred t _ _ _)  (UMore p _ _)    = not $ t == p
+areDisjoint (UMore t _ _)    (UPred p _ _ _)  = not $ t == p
 
 
 lookup :: Eq t => NonEmpty t -> UPTrie t x -> Maybe x
