diff --git a/enumset.cabal b/enumset.cabal
--- a/enumset.cabal
+++ b/enumset.cabal
@@ -1,6 +1,6 @@
 -- would also be useful as type-safe alternative in wx, wxcore
 Name:             enumset
-Version:          0.0.3
+Version:          0.0.4
 License:          BSD3
 License-File:     LICENSE
 Author:           Henning Thielemann <haskell@henning-thielemann.de>
@@ -22,6 +22,11 @@
 Cabal-Version:    >=1.10
 Tested-With:      GHC==6.10.4, GHC==6.12.3
 Build-Type:       Simple
+
+Source-Repository this
+  Tag:         0.0.4
+  Type:        darcs
+  Location:    http://code.haskell.org/~thielema/enumset/
 
 Source-Repository head
   Type:        darcs
diff --git a/src/Data/EnumSet.hs b/src/Data/EnumSet.hs
--- a/src/Data/EnumSet.hs
+++ b/src/Data/EnumSet.hs
@@ -35,6 +35,7 @@
 
 import qualified Data.Bits as B
 import Data.Bits (Bits, )
+import qualified Data.EnumSet.Utility as U
 
 import Data.Monoid (Monoid(mempty, mappend), )
 
@@ -70,13 +71,13 @@
 fromEnum = Cons . B.bit . P.fromEnum
 
 fromEnums :: (Enum a, Bits w) => [a] -> T w a
-fromEnums = Cons . foldl B.setBit 0 . map P.fromEnum
+fromEnums = Cons . foldl B.setBit U.empty . map P.fromEnum
 
 toEnums :: (Enum a, Bits w) => T w a -> [a]
 toEnums =
    map fst . filter (P.flip B.testBit 0 . snd) .
    zip [P.toEnum 0 ..] .
-   takeWhile (0/=) . iterate (P.flip B.shiftR 1) .
+   takeWhile (U.empty /= ) . iterate (P.flip B.shiftR 1) .
    decons
 
 intToEnums :: (Enum a, Integral w) => T w a -> [a]
@@ -100,7 +101,7 @@
    foldl
       (\(x0,pos) testPos ->
          let x1 = B.shiftR x0 testPos
-         in  if x1 == 0
+         in  if x1 == U.empty
                then (x0, pos)
                else (x1, pos+testPos))
       (x,0) $
@@ -115,14 +116,14 @@
 -}
 {-# INLINE singletonByPosition #-}
 singletonByPosition :: (Bits w) => Int -> T w a
-singletonByPosition = Cons . B.setBit 0
+singletonByPosition = Cons . B.setBit U.empty
 
 
 null :: (Enum a, Bits w) => T w a -> Bool
-null (Cons x)  =  x==0
+null (Cons x)  =  x==U.empty
 
 empty :: (Enum a, Bits w) => T w a
-empty = Cons 0
+empty = Cons U.empty
 
 disjoint :: (Enum a, Bits w) => T w a -> T w a -> Bool
 disjoint x y = null (x .&. y)
@@ -186,4 +187,7 @@
 
 fromBool :: (Enum a, Bits w) => a -> Bool -> T w a
 fromBool n b =
+   Cons $ if b then B.bit (P.fromEnum n) else U.empty
+{- requires Num instance
    Cons (B.shiftL (fromIntegral $ P.fromEnum b) (P.fromEnum n))
+-}
diff --git a/src/Data/EnumSet/PackedEnum.hs b/src/Data/EnumSet/PackedEnum.hs
--- a/src/Data/EnumSet/PackedEnum.hs
+++ b/src/Data/EnumSet/PackedEnum.hs
@@ -33,7 +33,7 @@
 is placed at the specified indices.
 -}
 pack ::
-   (Bits w, Enum a, Enum b) =>
+   (Num w, Bits w, Enum a, Enum b) =>
    T w a b -> b -> ES.T w a
 pack (Cons mask pos) =
    ES.Cons . flip B.shiftL pos .
@@ -52,7 +52,7 @@
 Overwrite an enumset at the specified indices with the value of type @b@.
 -}
 put ::
-   (Bits w, Enum a, Enum b) =>
+   (Num w, Bits w, Enum a, Enum b) =>
    T w a b -> b -> ES.T w a -> ES.T w a
 put set x =
    (pack set x ES..|.) . clear set
diff --git a/src/Data/EnumSet/Utility.hs b/src/Data/EnumSet/Utility.hs
--- a/src/Data/EnumSet/Utility.hs
+++ b/src/Data/EnumSet/Utility.hs
@@ -1,7 +1,7 @@
 module Data.EnumSet.Utility where
 
 import qualified Data.Bits as B
-import Data.Bits (Bits, (.&.), )
+import Data.Bits (Bits, bit, xor, (.&.), )
 
 
 -- fixity like .&.
@@ -9,3 +9,6 @@
 
 (.-.) :: (Bits w) => w -> w -> w
 x .-. y = x .&. B.complement y
+
+empty :: (Bits w) => w
+empty = xor (bit 0) (bit 0)
diff --git a/src/Data/FlagSet.hs b/src/Data/FlagSet.hs
--- a/src/Data/FlagSet.hs
+++ b/src/Data/FlagSet.hs
@@ -21,7 +21,7 @@
 
 import qualified Data.Accessor.Basic as Acc
 
-import Data.EnumSet.Utility ((.-.), )
+import Data.EnumSet.Utility (empty, (.-.), )
 
 import qualified Prelude as P
 import Prelude hiding (Enum, fromEnum, toEnum, null, flip, )
@@ -113,7 +113,7 @@
 @mappend a b@ means that values stored in @b@ overwrite corresponding values in @a@.
 -}
 instance (Bits w) => Monoid (MaskedValue w a) where
-   mempty = MaskedValue 0 0
+   mempty = MaskedValue empty empty
    mappend (MaskedValue mx vx) (MaskedValue my vy) =
       MaskedValue (mx .|. my) (vx .-. my  .|.  vy)
 
diff --git a/src/Data/FlagSet/PackedRecord.hs b/src/Data/FlagSet/PackedRecord.hs
--- a/src/Data/FlagSet/PackedRecord.hs
+++ b/src/Data/FlagSet/PackedRecord.hs
@@ -13,7 +13,7 @@
 import Data.EnumSet.Utility ((.-.), )
 
 
-leastSigBit :: Bits w => w -> w
+leastSigBit :: (Num w, Bits w) => w -> w
 leastSigBit m = (-m) .&. m
 
 getIntByMask ::
@@ -37,7 +37,7 @@
 
 
 maskFromNumber ::
-   (Bits w) =>
+   (Num w, Bits w) =>
    Int -> w
 maskFromNumber number =
    B.shiftL 1 number - 1
