diff --git a/Data/IP/Addr.hs b/Data/IP/Addr.hs
--- a/Data/IP/Addr.hs
+++ b/Data/IP/Addr.hs
@@ -168,6 +168,34 @@
     enumFromThen ip ip' = fmap integerToIP6 [ip6ToInteger ip, ip6ToInteger ip' ..]
     enumFromThenTo ip inc fin = fmap integerToIP6 [ip6ToInteger ip, ip6ToInteger inc .. ip6ToInteger fin]
 
+instance Enum IP where
+    fromEnum (IPv4 ip) = fromEnum ip
+    fromEnum (IPv6 ip) = fromEnum ip
+
+    -- Because Int cannot hold an IPv6 anyway
+    toEnum = IPv4 . toEnum
+
+    succ (IPv4 ip) = IPv4 $ succ ip
+    succ (IPv6 ip) = IPv6 $ succ ip
+
+    pred (IPv4 ip) = IPv4 $ pred ip
+    pred (IPv6 ip) = IPv6 $ pred ip
+
+    enumFrom (IPv4 ip) = fmap IPv4 $ enumFrom ip
+    enumFrom (IPv6 ip) = fmap IPv6 $ enumFrom ip
+
+    enumFromTo (IPv4 ip) (IPv4 ip') = fmap IPv4 $ enumFromTo ip ip'
+    enumFromTo (IPv6 ip) (IPv6 ip') = fmap IPv6 $ enumFromTo ip ip'
+    enumFromTo _ _ = error "enumFromTo: Incompatible IP families"
+
+    enumFromThen (IPv4 ip) (IPv4 ip') = fmap IPv4 $ enumFromThen ip ip'
+    enumFromThen (IPv6 ip) (IPv6 ip') = fmap IPv6 $ enumFromThen ip ip'
+    enumFromThen _ _ = error "enumFromThen: Incompatible IP families"
+
+    enumFromThenTo (IPv4 ip) (IPv4 inc) (IPv4 fin) = fmap IPv4 $ enumFromThenTo ip inc fin
+    enumFromThenTo (IPv6 ip) (IPv6 inc) (IPv6 fin) = fmap IPv6 $ enumFromThenTo ip inc fin
+    enumFromThenTo _ _ _ = error "enumFromThenTo: Incompatible IP families"
+
 ip6ToInteger :: IPv6 -> Integer
 ip6ToInteger (IP6 (a,b,c,d)) = let a' = word32ToInteger a `shift` 96
                                    b' = word32ToInteger b `shift` 64
diff --git a/Data/IP/Range.hs b/Data/IP/Range.hs
--- a/Data/IP/Range.hs
+++ b/Data/IP/Range.hs
@@ -28,9 +28,9 @@
 data IPRange = IPv4Range { ipv4range :: AddrRange IPv4 }
              | IPv6Range { ipv6range :: AddrRange IPv6 }
 #ifdef GENERICS
-        deriving (Eq, Generic)
+        deriving (Eq, Ord, Generic)
 #else
-        deriving (Eq)
+        deriving (Eq, Ord)
 #endif
 
 ----------------------------------------------------------------
diff --git a/iproute.cabal b/iproute.cabal
--- a/iproute.cabal
+++ b/iproute.cabal
@@ -1,5 +1,5 @@
 Name:                   iproute
-Version:                1.5.0
+Version:                1.6.0
 Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
 Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
 License:                BSD3
