diff --git a/Text/Email/Validate.hs b/Text/Email/Validate.hs
--- a/Text/Email/Validate.hs
+++ b/Text/Email/Validate.hs
@@ -1,11 +1,17 @@
+{-# LANGUAGE CPP #-}
 module Text.Email.Validate (isValid,validate,EmailAddress(..))
 where
 
 import Control.Arrow ((***))
 import qualified Data.Ranges as Range
+import Data.Char (chr)
+
+#if MIN_VERSION_parsec(3,0,0)
 import Text.Parsec
 import Text.Parsec.Char
-import Data.Char (chr)
+#else 
+import Text.ParserCombinators.Parsec
+#endif
 
 -- | Constructor does no checking for invalid emails, so use at own risk.
 data EmailAddress = EmailAddress
@@ -32,8 +38,12 @@
 	Right n -> Right $ EmailAddress local domain
 		where (local,at:domain) = splitAt (length x - n) x
 	Left e -> Left e
-			
+
+#if MIN_VERSION_parsec(3,0,0)
 addrSpec :: Parsec String () Int
+#else
+addrSpec :: CharParser () Int
+#endif
 addrSpec = do
 	localPartParser
 	s1 <- getInput
diff --git a/email-validate.cabal b/email-validate.cabal
--- a/email-validate.cabal
+++ b/email-validate.cabal
@@ -1,5 +1,5 @@
 name:           email-validate
-version:        0.2.3
+version:        0.2.4
 license:        BSD3
 license-file:   LICENSE
 author:         George Pollard
@@ -10,11 +10,12 @@
 description:    Validating an email address string against RFC 5322
 build-type:     Simple
 stability:      experimental
-cabal-version:  >= 1.2
+cabal-version:  >= 1.6
 
 library
-    build-depends:  base, parsec >= 3.0, ranges >= 0.2.2
+    build-depends: base >= 2 && <= 4, parsec >= 3.0 || == 2.1.*, ranges >= 0.2.2
     ghc-options: -O2
 
+    extensions: CPP
     exposed-modules:
             Text.Email.Validate
