diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Tero Laitinen
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/RedisJobQueue.hs b/RedisJobQueue.hs
new file mode 100644
--- /dev/null
+++ b/RedisJobQueue.hs
@@ -0,0 +1,70 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module RedisJobQueue (
+    withJobQueue,
+    withJobQueue',
+    JobQueue,
+    push,
+    pop,
+    pushJson,
+    popJson,
+    QueueName,
+    Job,
+    Priority
+) where
+
+import Database.Redis
+import Data.ByteString
+import qualified Data.Aeson as A
+import qualified Data.ByteString.Lazy as LBS
+import Data.ByteString.Char8 as BS8
+
+
+type QueueName = ByteString
+type Job       = ByteString
+type Priority  = Double
+
+data JobQueue = JobQueue QueueName Connection
+
+withJobQueue :: QueueName -> (JobQueue -> IO ()) -> IO ()
+withJobQueue = withJobQueue' defaultConnectInfo
+
+withJobQueue' :: ConnectInfo -> QueueName -> (JobQueue -> IO ()) -> IO ()
+withJobQueue' connInfo qn f = do
+    conn <- connect connInfo
+    f $ JobQueue qn conn
+
+push :: JobQueue -> Priority -> Job -> IO (Either Reply Integer)
+push (JobQueue qn conn) p j = runRedis conn $ zadd qn [(p,j)]
+ 
+pop :: JobQueue -> IO (Either Reply (Maybe Job))
+pop (JobQueue qn conn) = runRedis conn $ do
+    _ <- watch [qn]
+    js <- zrange qn 0 0 
+    case js of  
+        Right (j:_) -> do
+            r <- multiExec $ zrem qn [j]
+            case r of
+                TxSuccess _ -> return $ Right (Just j)
+                TxAborted -> return $ Left $ Error "aborted"
+                TxError err -> return $ Left $ Error $ BS8.pack err
+        Right [] -> do
+            _ <- unwatch
+            return $ Right Nothing
+        Left e -> return $ Left e
+        
+pushJson :: A.ToJSON a => JobQueue -> Priority -> a -> IO (Either Reply Integer)
+pushJson jq p j = push jq p $ LBS.toStrict $ A.encode j
+
+popJson :: A.FromJSON a => JobQueue -> IO (Either String (Maybe a))
+popJson jq = do
+    mj <- pop jq
+    case mj of
+        Right (Just j) -> return $ A.eitherDecode $ LBS.fromStrict j
+        Right Nothing -> return $ Right Nothing
+        Left l -> return $ Left (show l)
+    
+    
+    
+     
+
diff --git a/redis-job-queue.cabal b/redis-job-queue.cabal
new file mode 100644
--- /dev/null
+++ b/redis-job-queue.cabal
@@ -0,0 +1,28 @@
+name:           redis-job-queue
+version:        0.1.0
+license:        MIT
+license-file:   LICENSE
+author:         Tero Laitinen 
+maintainer:     Tero Laitinen
+synopsis:       Simple priority job queue backed by Redis.
+description:    Priority queue for background jobs implemented using Redis' sorted sets.
+category:       Client
+stability:      Experimental
+cabal-version:  >= 1.8
+build-type:     Simple
+
+
+library
+    build-depends: base >= 4 && < 5
+                 , bytestring -any
+                 , hedis -any
+                 , aeson -any
+    ghc-options: -Wall 
+    exposed: True
+    buildable: True
+    exposed-modules:
+           RedisJobQueue
+
+source-repository head
+  type:     git
+  location: https://github.com/tlaitinen/redis-job-queue
