diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright (c)2010, Steffen Siering
+
+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 Steffen Siering 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/pcre-light-extra.cabal b/pcre-light-extra.cabal
new file mode 100644
--- /dev/null
+++ b/pcre-light-extra.cabal
@@ -0,0 +1,70 @@
+-- pcre-ligh-extra.cabal auto-generated by cabal init. For additional
+-- options, see
+-- http://www.haskell.org/cabal/release/cabal-latest/doc/users-guide/authors.html#pkg-descr.
+-- The name of the package.
+Name:                pcre-light-extra
+
+-- The package version. See the Haskell package versioning policy
+-- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for
+-- standards guiding when and how versions should be incremented.
+Version:             0.0.0
+
+-- A short (one-line) description of the package.
+Synopsis:            pcre-light extra functionality
+
+-- A longer description of the package.
+Description:         
+ pcre-light utility functions for more user friendly usage.
+ Instead of adding execution and compile options to the matching and
+ compiling functions, the options are added to the regular expression to be
+ compiled or run. Furthermore support for different matching return types
+ (using typeclass 'MatchResult') and different regular expression types
+ (compiled or uncompiled using typeclass 'RegexLike') are supported. See module
+ documentation for examples.
+
+-- The license under which the package is released.
+License:             BSD3
+
+-- The file containing the license text.
+License-file:        LICENSE
+
+-- The package author(s).
+Author:              Steffen Siering
+
+-- An email address to which users can send suggestions, bug reports,
+-- and patches.
+Maintainer:          steffen <dot> siering <at> gmail com
+
+Homepage:            http://github.com/urso/pcre-light-extra
+
+-- A copyright notice.
+-- Copyright:           
+
+Category:            Text
+
+Build-type:          Simple
+
+-- Extra files to be distributed with the package, such as examples or
+-- a README.
+-- Extra-source-files:  
+
+-- Constraint on the version of Cabal needed to build this package.
+Cabal-version:       >=1.2
+
+
+Library
+  hs-source-dirs: src
+  -- Modules exported by the library.
+  Exposed-modules:     Text.Regex.PCRE.Light.Extra
+  
+  -- Packages needed in order to build this package.
+  Build-depends: base >= 4 && <= 5, bytestring,
+                 pcre-light >= 0.3 && <= 0.4
+
+  
+  -- Modules not exported by this package.
+  -- Other-modules:       
+  
+  -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source.
+  -- Build-tools:         
+  
diff --git a/src/Text/Regex/PCRE/Light/Extra.hs b/src/Text/Regex/PCRE/Light/Extra.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Regex/PCRE/Light/Extra.hs
@@ -0,0 +1,111 @@
+{-# LANGUAGE TypeFamilies #-}
+{-# LANGUAGE FlexibleInstances #-}
+
+-- | pcre-light utility functions for more user friendly usage.
+-- Instead of adding execution and compile options to the matching and
+-- compiling functions, the options are added to the regular expression to be
+-- compiled or run. Furthermore support for different matching return types
+-- (using typeclass 'MatchResult') and different regular expression types
+-- (compiled or uncompiled using typeclass 'RegexLike') are supported.
+--
+-- examples using GHC's -XOverloadedStrings flag:
+--
+-- simple matching with uncompiled pattern "abc" of type ByteString:
+--
+-- >>> ("abc" =~ ("abc" :: ByteString)) :: Bool
+-- True
+--
+-- case insensitive matching with uncompiled pattern of type ByteString:
+--
+-- >>> ("AbCasf" =~ caseSensitive False "abc") :: Bool
+-- True
+--
+-- >>> ("AbCasf" =~ caseSensitive False "abc") :: Maybe [ByteString]
+-- Just ["AbC"]
+--
+module Text.Regex.PCRE.Light.Extra where
+
+import Control.Arrow (right)
+import Data.ByteString (ByteString)
+import Data.Maybe (isJust)
+
+import qualified Text.Regex.PCRE.Light as R
+
+-- | Uncompiled regular expression with compile and execution options.
+-- Compiles to RegexExecPattern preserving execution options.
+data RegexPattern = Regex [R.PCREOption] [R.PCREExecOption] ByteString
+
+-- | Compiled regular expression with execution results.
+data RegexExecPattern = RegexExec [R.PCREExecOption] R.Regex
+
+-- | Typeclass defining automatic conversion of PCRE matching results
+-- to user defined type. Used in typeclass 'RegexLike' and function ('=~').
+class MatchResult x where
+  convert :: Maybe [ByteString] -> x
+
+instance MatchResult (Maybe [ByteString]) where 
+  convert = id
+
+instance MatchResult Bool where 
+  convert = isJust
+
+-- | RegexLike types can be compiled to regular epxression or directly used
+-- as regular expression.
+class RegexLike rl where
+  -- | Type of compiled regular expression for instance rl.
+  type RegexType rl 
+
+  -- | compiles a perl-compatible regular expression to an executable
+  -- regular expression. See 'Text.Regex.PCRE.Light.compileM'.
+  compile :: rl -> Either String (RegexType rl)
+
+  -- | matches a Bytestring with a regular expression of type rl.
+  -- If rl needs to be compiled (for example when rl ~ ByteString or
+  -- rl ~ RegexPattern) but is invalid, an exception will be thrown. It is
+  -- recommended to use compiled patterns with match for better error handling.
+  match   :: (MatchResult res) => rl -> ByteString -> res
+
+instance RegexLike R.Regex where
+  type RegexType R.Regex = R.Regex
+
+  compile = Right . id
+  match regex str = convert $ R.match regex str []
+
+instance RegexLike ByteString where
+  type RegexType ByteString = R.Regex
+
+  compile regex     = R.compileM regex []
+  match pattern str = either error (`match` str) $ compile pattern
+
+instance RegexLike RegexExecPattern where
+  type RegexType RegexExecPattern = RegexExecPattern
+
+  compile = Right . id
+  match (RegexExec opts regex) str = convert $ R.match regex str opts
+
+instance RegexLike RegexPattern where
+  type RegexType RegexPattern = RegexExecPattern
+
+  compile (Regex opt execOpt pattern) = 
+    right (RegexExec execOpt) $ R.compileM pattern opt
+
+  match r str = either error (`match` str) $ compile r
+
+-- | matches a ByteString with a regular expression.
+(=~) :: (RegexLike regex, MatchResult ret) => ByteString -> regex -> ret
+(=~) = flip match
+
+-- | create regular expression with compile and execution options.
+cfg :: [R.PCREOption] -> [R.PCREExecOption] -> ByteString -> RegexPattern
+cfg = Regex
+
+-- | Add execution options to compiled regular expression of pcre-light's 
+--   compiled regular expression type 'R.Regex'
+withExecOpts :: [R.PCREExecOption] -> R.Regex -> RegexExecPattern
+withExecOpts = RegexExec
+
+-- | Create case sensitive (first parameter is 'True') or case insensitive regular expression from pattern.
+caseSensitive :: Bool -> ByteString -> RegexPattern
+caseSensitive False = cfg [R.caseless, R.no_utf8_check] []
+caseSensitive True  = cfg [R.no_utf8_check] []
+
