diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Changelog for simple-routing-core
 
+## 0.1.1.0
+
+* `headerValue` function to extract value from HTTP headers
+*  Add `withIO` which execute an IO as part of the request handling
+
 ## 0.1.0.0
 
 * First implementation
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,7 +1,8 @@
 # purescheme-wai-routing-core
 [![Build Status](https://travis-ci.org/purescheme/purescheme-wai-routing-core.svg?branch=master)](https://travis-ci.org/purescheme/purescheme-wai-routing-core)
+[![Hackage](https://img.shields.io/hackage/v/purescheme-wai-routing-core)](http://hackage.haskell.org/package/purescheme-wai-routing-core)
 
-*The goal of purescheme is make a simple framework for building fast microservices in haskell.*
+*The goal of purescheme is make a simple framework for building fast microservices and web applications in haskell.*
 
 This module provides simple routing functions for create rest APIs on top of a WAI server.
 
@@ -56,12 +57,12 @@
 - Some of them are not using the type system properly
 
 So, as Haskell is totally functional, and, based on the simplicity of an Wai `Application` (which is basically
-a function that converts requests to responses, why not create functions on top of Wai `Application` that 
+a function that converts requests to responses), why not create functions on top of Wai `Application` that 
 provides a functional way to implement RESTful APIs?
 
 ## Status
-Currently the API is totally functionalm but the status is considered Alpha. That means, the whole API can change
-in further release until we reach the beta status.
+Currently the API is totally functional but the status is considered Alpha. That means, the API can change
+in further release until it reachs the beta status.
 
 ## Feedback are welcome!
-Please, if you feel that some functionallity is missing or something can be improve, post a issue!
+Please, if you feel that some functionallity is missing or something can be improve, post an [issue](https://github.com/purescheme/purescheme-wai-routing-core/issues) or contact the author.
diff --git a/purescheme-wai-routing-core.cabal b/purescheme-wai-routing-core.cabal
--- a/purescheme-wai-routing-core.cabal
+++ b/purescheme-wai-routing-core.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.31.2.
+-- This file has been generated from package.yaml by hpack version 0.33.0.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 62443a31064cb1b5d185060c9e61a90dfa3f438fa8bdae8a2ab8a84699adf924
+-- hash: 5fd2f81871cfa5740b4bfc13db2062bca2707dcef39d4e444bdc5e7b2d2e9597
 
 name:           purescheme-wai-routing-core
-version:        0.1.0.0
+version:        0.1.1.0
 synopsis:       Simple Routing functions for Wai Applications
 description:    Please see the README on GitHub at <https://github.com/purescheme/purescheme-wai-routing-core#readme>
 category:       Web
@@ -38,6 +38,7 @@
       Network.Wai.Routing.Purescheme.Core.Basic
       Network.Wai.Routing.Purescheme.Core.Entity
       Network.Wai.Routing.Purescheme.Core.Entity.Json
+      Network.Wai.Routing.Purescheme.Core.Header
       Network.Wai.Routing.Purescheme.Core.Internal
       Network.Wai.Routing.Purescheme.Core.Method
       Network.Wai.Routing.Purescheme.Core.Path
@@ -51,6 +52,7 @@
       aeson
     , base >=4.7 && <5
     , bytestring
+    , case-insensitive
     , http-media
     , http-types
     , interpolate
diff --git a/src/Network/Wai/Routing/Purescheme/Core.hs b/src/Network/Wai/Routing/Purescheme/Core.hs
--- a/src/Network/Wai/Routing/Purescheme/Core.hs
+++ b/src/Network/Wai/Routing/Purescheme/Core.hs
@@ -61,6 +61,8 @@
   , mapResponse
   -- ** Requests functions
   , withRequest
+  -- ** Utility functions
+  , withIO
   -- * Uri path functions
   , path
   , pathSegment
diff --git a/src/Network/Wai/Routing/Purescheme/Core/Basic.hs b/src/Network/Wai/Routing/Purescheme/Core/Basic.hs
--- a/src/Network/Wai/Routing/Purescheme/Core/Basic.hs
+++ b/src/Network/Wai/Routing/Purescheme/Core/Basic.hs
@@ -29,6 +29,7 @@
   , completeIO
   , mapResponse
   , withRequest
+  , withIO
   )
 where
 
@@ -123,6 +124,12 @@
 completeIO responseIO _ respond = do
   response <- responseIO
   respond response
+
+-- | Execute an IO Action and pass it to the provided function
+withIO :: IO a -> (a -> GenericApplication b) -> GenericApplication b
+withIO theIO f req respond = do
+  var <- theIO
+  f var req respond
 
 -- | Maps a response type to another response type
 mapResponse :: (a -> b) -> GenericApplication a -> GenericApplication b
diff --git a/src/Network/Wai/Routing/Purescheme/Core/Header.hs b/src/Network/Wai/Routing/Purescheme/Core/Header.hs
new file mode 100644
--- /dev/null
+++ b/src/Network/Wai/Routing/Purescheme/Core/Header.hs
@@ -0,0 +1,34 @@
+-- Copyright 2020 Fernando Rincon Martin
+-- 
+-- Licensed under the Apache License, Version 2.0 (the "License");
+-- you may not use this file except in compliance with the License.
+-- You may obtain a copy of the License at
+-- 
+--     http://www.apache.org/licenses/LICENSE-2.0
+-- 
+-- Unless required by applicable law or agreed to in writing, software
+-- distributed under the License is distributed on an "AS IS" BASIS,
+-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+-- See the License for the specific language governing permissions and
+-- limitations under the License.
+-------------------------------------------------------------------------------
+{-# LANGUAGE QuasiQuotes #-}
+{-# LANGUAGE OverloadedStrings #-}
+module Network.Wai.Routing.Purescheme.Core.Header
+  ( headerValue
+  )
+where
+  
+import Network.Wai.Routing.Purescheme.Core.Basic
+
+import Data.ByteString (ByteString)
+import qualified Data.CaseInsensitive as CI
+import Network.Wai (requestHeaders)
+
+-- | Extract the value of the first HTTP request header with a given name
+headerValue :: ByteString -> (Maybe ByteString -> GenericApplication b) -> GenericApplication b
+headerValue name f req =
+  let
+    maybeValue = lookup (CI.mk name) (requestHeaders req)
+  in
+    f maybeValue req
