diff --git a/cond.cabal b/cond.cabal
--- a/cond.cabal
+++ b/cond.cabal
@@ -1,5 +1,5 @@
 Name: cond
-Version: 0.4.1
+Version: 0.4.1.1
 Synopsis: Basic conditional and boolean operators with monadic variants.
 Category: Control, Logic, Monad
 License: BSD3
diff --git a/src/Control/Conditional.hs b/src/Control/Conditional.hs
--- a/src/Control/Conditional.hs
+++ b/src/Control/Conditional.hs
@@ -194,12 +194,12 @@
 {-# INLINE guard #-}
 
 -- |Generalization of 'Control.Monad.when'
-when :: (ToBool bool, MonadPlus m) => bool -> m () -> m ()
+when :: (ToBool bool, Monad m) => bool -> m () -> m ()
 when p m = if' p m (return ())
 {-# INLINE when #-}
 
 -- |Generalization of 'Control.Monad.unless'
-unless :: (Boolean bool, ToBool bool, MonadPlus m) => bool -> m() -> m()
+unless :: (Boolean bool, ToBool bool, Monad m) => bool -> m() -> m()
 unless p m = if' (not p) m (return ())
 {-# INLINE unless #-}
 
diff --git a/src/Data/Algebra/Boolean.hs b/src/Data/Algebra/Boolean.hs
--- a/src/Data/Algebra/Boolean.hs
+++ b/src/Data/Algebra/Boolean.hs
@@ -72,8 +72,8 @@
   true      = not false
   false     = not true
   not       = (<--> false)
-  x && y    = not (x || y)
-  x || y    = not (x && y)
+  x && y = not (not x || not y)
+  x || y = not (not x && not y)
   x `xor` y = (x || y) && (not (x && y))
   x --> y   = not x || y
   x <--> y  = (x && y) || not (x || y)
