diff --git a/Data/Binary/Enum.hs b/Data/Binary/Enum.hs
new file mode 100644
--- /dev/null
+++ b/Data/Binary/Enum.hs
@@ -0,0 +1,27 @@
+{-# LANGUAGE  ViewPatterns, ScopedTypeVariables #-}
+
+module Data.Binary.Enum where
+
+import Prelude
+import Data.Binary
+import Control.Applicative
+import qualified Data.List as DL
+
+-- | we can store Enum values inside values we know how to store, so let
+newtype BitMap t a = BitMap [a]
+  -- ^ Map lets you encode 'flags' compressing distinct eg. packing 8 diferent flags per byte
+newtype BitEnc t a = BitEnc a
+          -- ^ t is a store type, you will need to make sure thats your enum fits there
+
+instance (Enum a, Enum t, Binary t) => Binary (BitEnc t a) where
+  put (BitEnc a) = put (toEnum . fromEnum $ a :: t)
+  get = BitEnc . toEnum . fromEnum <$> (get :: Get t)
+
+instance (Enum a, Eq a, Eq t, Num t, Integral t, Binary t) => Binary (BitMap t a) where
+  put (BitMap a) = put ( foldr (\(fromEnum -> x) y -> 2 ^ x + y ) 0 (DL.nub a) :: t )
+  get = BitMap . process 0 <$> (get :: Get t)
+    where
+      process _ 0    = []
+      process k (flip divMod 2 -> (d, m))
+        | m == 1     = toEnum k : process (k + 1) d
+        | otherwise  =            process (k + 1) d
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c) 2015, Marcin Tolysz
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Marcin Tolysz nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/binary-enum.cabal b/binary-enum.cabal
new file mode 100644
--- /dev/null
+++ b/binary-enum.cabal
@@ -0,0 +1,30 @@
+-- Initial binary-enum.cabal generated by cabal init.  For further 
+-- documentation, see http://haskell.org/cabal/users-guide/
+
+name:                binary-enum
+version:             0.1.0.0
+synopsis:            Simple wrappers around enum types
+description:         allowing to serise to/from binary both as values and bitmasks
+homepage:            https://github.com/tolysz/binary-enum
+license:             BSD3
+license-file:        LICENSE
+author:              Marcin Tolysz
+maintainer:          tolysz@gmail.com
+copyright:           2015(c) Marcin Tolysz
+category:            Data
+build-type:          Simple
+-- extra-source-files:  
+cabal-version:       >=1.10
+
+source-repository head
+  type: git
+  location: git://github.com/tolysz/binary-enum.git
+
+library
+  exposed-modules:     Data.Binary.Enum
+  -- other-modules:       
+  -- other-extensions:    
+  build-depends: base >=4.8 && <5
+               , binary
+  -- hs-source-dirs:      
+  default-language:    Haskell2010
