diff --git a/hw-ip.cabal b/hw-ip.cabal
--- a/hw-ip.cabal
+++ b/hw-ip.cabal
@@ -1,6 +1,6 @@
 cabal-version: 1.12
 name: hw-ip
-version: 2.0.1.0
+version: 2.1.0.0
 license: BSD3
 license-file: LICENSE
 copyright: 2018 John Ky, David Turnbull, Jian Wan
@@ -11,8 +11,7 @@
 homepage: https://github.com/haskell-works/hw-ip#readme
 bug-reports: https://github.com/haskell-works/hw-ip/issues
 synopsis: Library for manipulating IP addresses and CIDR blocks
-description:
-    Please see README.md
+description: Library for manipulating IP addresses and CIDR blocks. Please see README.md
 category: Network
 build-type: Simple
 extra-source-files:
diff --git a/src/HaskellWorks/Data/Network/Ip/Ip.hs b/src/HaskellWorks/Data/Network/Ip/Ip.hs
--- a/src/HaskellWorks/Data/Network/Ip/Ip.hs
+++ b/src/HaskellWorks/Data/Network/Ip/Ip.hs
@@ -48,7 +48,7 @@
 canonicalise (IpBlockV6 (V6.IpBlock a m)) = mfilter isCanonical (Just $ IpBlockV6 (V6.IpBlock a m))
 
 firstIpAddress :: IpBlock Canonical -> (Word32, Word32, Word32, Word32)
-firstIpAddress (IpBlockV4 v4Block)                          = firstIpAddress (IpBlockV6 (V6.fromV4 v4Block))
+firstIpAddress (IpBlockV4 v4Block)                          = firstIpAddress (IpBlockV6 (V6.fromIpv4Block v4Block))
 firstIpAddress (IpBlockV6 (V6.IpBlock (V6.IpAddress ip) _)) = ip
 
 lastIpAddress :: IpBlock Canonical -> (Word32, Word32, Word32, Word32)
diff --git a/src/HaskellWorks/Data/Network/Ip/Ipv6.hs b/src/HaskellWorks/Data/Network/Ip/Ipv6.hs
--- a/src/HaskellWorks/Data/Network/Ip/Ipv6.hs
+++ b/src/HaskellWorks/Data/Network/Ip/Ipv6.hs
@@ -10,6 +10,8 @@
   ( IpAddress(..)
   , IpNetMask(..)
   , IpBlock(..)
+  , fromIpv4
+  , fromIpv4Block
   , fromV4
   , parseIpBlock
   , masksIp
@@ -147,10 +149,17 @@
       ipv6 = I.word32x4ToWords w in
     ipv6 == zipWith (B..&.) ipv6 (zipWith B.xor ipv6 lt)
 
+{-# DEPRECATED fromV4 "Deprecated due to poor naming. Use fromIpv4Block instead." #-}
 fromV4 :: V4.IpBlock Canonical -> IpBlock v
-fromV4 (V4.IpBlock b m) =
+fromV4 = fromIpv4Block
+
+fromIpv4Block :: V4.IpBlock Canonical -> IpBlock v
+fromIpv4Block (V4.IpBlock b m) =
   -- RFC-4291, "IPv4-Mapped IPv6 Address"
-  IpBlock (IpAddress (0, 0, 0xFFFF, V4.word b)) (IpNetMask (96 + V4.word8 m))
+  IpBlock (fromIpv4 b) (IpNetMask (96 + V4.word8 m))
+
+fromIpv4 :: V4.IpAddress -> IpAddress
+fromIpv4 (V4.IpAddress w32) = IpAddress (0, 0, 0xFFFF, w32)
 
 firstIpAddress :: IpBlock Canonical -> IpAddress
 firstIpAddress (IpBlock b _) = b
