diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,8 @@
+# Haskell `timespan` package
+
+[![CircleCI](https://circleci.com/gh/agrafix/timespan.svg?style=svg)](https://circleci.com/gh/agrafix/timespan)
+[![Hackage](https://img.shields.io/hackage/v/timespan.svg)](http://hackage.haskell.org/package/timespan)
+
+The `timespan` packages provides an abstract data type for time spans. You can create them using well named quantities (`seconds`) and
+turn them back into a specified quantity. There are also some wrapper functions around commonly used functions that usually represent
+time spans as `Int` that now explicitly take a `timespan`.
diff --git a/src/Data/Time/TimeSpan.hs b/src/Data/Time/TimeSpan.hs
--- a/src/Data/Time/TimeSpan.hs
+++ b/src/Data/Time/TimeSpan.hs
@@ -2,9 +2,10 @@
 module Data.Time.TimeSpan
   ( TimeSpan
   , milliseconds, seconds, minutes, hours, days
-  , toMilliseconds, toSeconds, toMinutes, toHours, toDays
+  , toMicroseconds, toMilliseconds, toSeconds, toMinutes, toHours, toDays
+  , absTS
   , diffUTCTimeTS, addUTCTimeTS
-  , sleepTS
+  , sleepTS, timeoutTS
   , timeAction
   )
 where
@@ -12,12 +13,13 @@
 import Control.Concurrent
 import Data.Time
 import System.CPUTime
+import System.Timeout
 
 -- | An abstract timespan. Use the provided smart constructors to create
 -- a meaningful timespan
 newtype TimeSpan
   = TimeSpan { unTimeSpan :: Double } -- as milliseconds
-  deriving (Eq, Ord)
+  deriving (Show, Eq, Ord)
 
 instance Monoid TimeSpan where
     mempty = TimeSpan 0
@@ -38,6 +40,9 @@
 days :: Double -> TimeSpan
 days = hours . (* 24)
 
+toMicroseconds :: TimeSpan -> Double
+toMicroseconds = (* 1000) . toMilliseconds
+
 toMilliseconds :: TimeSpan -> Double
 toMilliseconds = unTimeSpan
 
@@ -53,14 +58,20 @@
 toDays :: TimeSpan -> Double
 toDays = (/24) . toHours
 
+absTS :: TimeSpan -> TimeSpan
+absTS (TimeSpan x) = TimeSpan (abs x)
+
 diffUTCTimeTS :: UTCTime -> UTCTime -> TimeSpan
 diffUTCTimeTS a b = seconds $ fromRational $ toRational $ diffUTCTime a b
 
 addUTCTimeTS :: TimeSpan -> UTCTime -> UTCTime
-addUTCTimeTS a b = addUTCTime (fromRational $ toRational $ toSeconds a) b
+addUTCTimeTS a = addUTCTime (fromRational $ toRational $ toSeconds a)
 
 sleepTS :: TimeSpan -> IO ()
-sleepTS ts = threadDelay (round $ toMilliseconds ts * 1000)
+sleepTS ts = threadDelay (round $ toMicroseconds ts)
+
+timeoutTS :: TimeSpan -> IO a -> IO (Maybe a)
+timeoutTS ts = timeout (round $ toMicroseconds ts)
 
 timeAction :: IO a -> IO (TimeSpan, a)
 timeAction action =
diff --git a/stack.yaml b/stack.yaml
new file mode 100644
--- /dev/null
+++ b/stack.yaml
@@ -0,0 +1,66 @@
+# This file was automatically generated by 'stack init'
+# 
+# Some commonly used options have been documented as comments in this file.
+# For advanced use and comprehensive documentation of the format, please see:
+# http://docs.haskellstack.org/en/stable/yaml_configuration/
+
+# Resolver to choose a 'specific' stackage snapshot or a compiler version.
+# A snapshot resolver dictates the compiler version and the set of packages
+# to be used for project dependencies. For example:
+# 
+# resolver: lts-3.5
+# resolver: nightly-2015-09-21
+# resolver: ghc-7.10.2
+# resolver: ghcjs-0.1.0_ghc-7.10.2
+# resolver:
+#  name: custom-snapshot
+#  location: "./custom-snapshot.yaml"
+resolver: lts-6.16
+
+# User packages to be built.
+# Various formats can be used as shown in the example below.
+# 
+# packages:
+# - some-directory
+# - https://example.com/foo/bar/baz-0.0.2.tar.gz
+# - location:
+#    git: https://github.com/commercialhaskell/stack.git
+#    commit: e7b331f14bcffb8367cd58fbfc8b40ec7642100a
+# - location: https://github.com/commercialhaskell/stack/commit/e7b331f14bcffb8367cd58fbfc8b40ec7642100a
+#   extra-dep: true
+#  subdirs:
+#  - auto-update
+#  - wai
+# 
+# A package marked 'extra-dep: true' will only be built if demanded by a
+# non-dependency (i.e. a user package), and its test suites and benchmarks
+# will not be run. This is useful for tweaking upstream packages.
+packages:
+- '.'
+# Dependency packages to be pulled from upstream that are not in the resolver
+# (e.g., acme-missiles-0.3)
+extra-deps: []
+
+# Override default flag values for local packages and extra-deps
+flags: {}
+
+# Extra package databases containing global packages
+extra-package-dbs: []
+
+# Control whether we use the GHC we find on the path
+# system-ghc: true
+# 
+# Require a specific version of stack, using version ranges
+# require-stack-version: -any # Default
+# require-stack-version: ">=1.1"
+# 
+# Override the architecture used by stack, especially useful on Windows
+# arch: i386
+# arch: x86_64
+# 
+# Extra directories used by stack for building
+# extra-include-dirs: [/path/to/dir]
+# extra-lib-dirs: [/path/to/dir]
+# 
+# Allow a newer minor version of GHC than the snapshot specifies
+# compiler-check: newer-minor
diff --git a/timespan.cabal b/timespan.cabal
--- a/timespan.cabal
+++ b/timespan.cabal
@@ -1,7 +1,7 @@
 name:                timespan
-version:             0.1.0.0
+version:             0.2.0.0
 synopsis:            Useful timespan datatype and functions
-description:         Please see README.md
+description:         A data type for time spans with some useful utility functions
 homepage:            https://github.com/agrafix/timespan#readme
 license:             MIT
 license-file:        LICENSE
@@ -10,7 +10,9 @@
 copyright:           2016 Alexander Thiemann
 category:            Web
 build-type:          Simple
--- extra-source-files:
+extra-source-files:
+                   stack.yaml
+                   README.md
 cabal-version:       >=1.10
 
 library
