diff --git a/Data/IP/Addr.hs b/Data/IP/Addr.hs
--- a/Data/IP/Addr.hs
+++ b/Data/IP/Addr.hs
@@ -25,7 +25,7 @@
 
 data IP = IPv4 { ipv4 :: IPv4 }
         | IPv6 { ipv6 :: IPv6 }
-        deriving (Eq)
+        deriving (Eq, Ord)
 
 instance Show IP where
     show (IPv4 ip) = show ip
diff --git a/Data/IP/RouteTable/Internal.hs b/Data/IP/RouteTable/Internal.hs
--- a/Data/IP/RouteTable/Internal.hs
+++ b/Data/IP/RouteTable/Internal.hs
@@ -7,7 +7,7 @@
 -}
 module Data.IP.RouteTable.Internal where
 
-import Control.Monad hiding (join)
+import Control.Monad
 import Data.Bits
 import Data.IP.Addr
 import Data.IP.Op
@@ -120,18 +120,18 @@
                   else
                     Node k1 tb1 (Just v1) Nil s
   | otherwise = let n = Node k1 tb1 (Just v1) Nil Nil
-                in join n s
+                in link n s
   where
     tb1 = keyToTestBit k1
 
-join :: Routable k => IPRTable k a -> IPRTable k a -> IPRTable k a
-join s1@(Node k1 _ _ _ _) s2@(Node k2 _ _ _ _)
+link :: Routable k => IPRTable k a -> IPRTable k a -> IPRTable k a
+link s1@(Node k1 _ _ _ _) s2@(Node k2 _ _ _ _)
   | isLeft k1 tbg = Node kg tbg Nothing s1 s2
   | otherwise     = Node kg tbg Nothing s2 s1
   where
     kg = glue 0 k1 k2
     tbg = keyToTestBit kg
-join _ _ = error "join"
+link _ _ = error "link"
 
 glue :: (Routable k) => Int -> AddrRange k -> AddrRange k -> AddrRange k
 glue n k1 k2
diff --git a/iproute.cabal b/iproute.cabal
--- a/iproute.cabal
+++ b/iproute.cabal
@@ -1,5 +1,5 @@
 Name:                   iproute
-Version:                1.2.11
+Version:                1.2.12
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
