diff --git a/Data/Conduit/OpenPGP/Filter.hs b/Data/Conduit/OpenPGP/Filter.hs
--- a/Data/Conduit/OpenPGP/Filter.hs
+++ b/Data/Conduit/OpenPGP/Filter.hs
@@ -61,6 +61,7 @@
         ev (E e') = t e' v
 
 data PKPOp = PKEquals | PKLessThan | PKGreaterThan
+    deriving Enum
 
 data PKPPredicate = PKPPredicate PKPVar PKPOp PKPValue
 
@@ -84,6 +85,7 @@
 pkvToInt (PKPPKA i) = fromIntegral (fromFVal i)
 
 data SPOp = SPEquals | SPLessThan | SPGreaterThan
+    deriving Enum
 
 data SPPredicate = SPPredicate SPVar SPOp SPValue
 
@@ -107,6 +109,7 @@
 spvToInt (SPHA i) = fromIntegral (fromFVal i)
 
 data OOp = OEquals | OLessThan | OGreaterThan
+    deriving Enum
 
 data OPredicate = OPredicate OVar OOp OValue
 
@@ -123,10 +126,13 @@
 ovToInteger (OInt i) = fromIntegral i
 ovToInteger (OInteger i) = i
 
-data UPredicate = UPKPP PKPPredicate
-                | USPP SPPredicate
-                | UOP OPredicate
+data UPredicate = UPKPP PKPVar UOp PKPValue
+                | USPP SPVar UOp SPValue
+                | UOP OVar UOp OValue
 
+data UOp = UEquals | ULessThan | UGreaterThan
+    deriving Enum
+
 conduitFilter :: Monad m => FilterPredicates -> Conduit Pkt m Pkt
 conduitFilter = CL.filter . superPredicate
 
@@ -177,7 +183,7 @@
         vreduce (OVLength, p) = OInteger (fromIntegral (B.length (runPut $ put p)))  -- FIXME: this should be a length that makes sense
 
 uEval :: UPredicate -> Pkt -> Bool
-uEval (UPKPP pred) (PublicKeyPkt p) = pkpEval pred p
-uEval (USPP pred) (SignaturePkt s) = spEval pred s
-uEval (UOP pred) pkt = oEval pred pkt
+uEval (UPKPP l o r) (PublicKeyPkt p) = pkpEval (PKPPredicate l (toEnum . fromEnum $ o) r)  p
+uEval (USPP l o r) (SignaturePkt s) = spEval (SPPredicate l (toEnum . fromEnum $ o) r)  s
+uEval (UOP l o r) pkt = oEval (OPredicate l (toEnum . fromEnum $ o) r) pkt
 uEval _ _ = False  -- do not match packets of wrong type
diff --git a/hOpenPGP.cabal b/hOpenPGP.cabal
--- a/hOpenPGP.cabal
+++ b/hOpenPGP.cabal
@@ -1,5 +1,5 @@
 Name:                hOpenPGP
-Version:             1.7
+Version:             1.8
 Synopsis:            native Haskell implementation of OpenPGP (RFC4880)
 Description:         native Haskell implementation of OpenPGP (RFC4880)
 Homepage:            http://floss.scru.org/hOpenPGP/
@@ -255,4 +255,4 @@
 source-repository this
   type:     git
   location: git://git.debian.org/users/clint/hOpenPGP.git
-  tag:      v1.7
+  tag:      v1.8
