diff --git a/lib/FRP/Netwire/Input/GLFW.hs b/lib/FRP/Netwire/Input/GLFW.hs
--- a/lib/FRP/Netwire/Input/GLFW.hs
+++ b/lib/FRP/Netwire/Input/GLFW.hs
@@ -1,7 +1,7 @@
 {-|
 Module      : FRP.Netwire.Input.GLFW
 Description : netwire-input instances for use with GLFW
-Copyright   : (c) Pavel Krajcevski, 2017
+Copyright   : (c) Pavel Krajcevski, 2018
 License     : MIT
 Maintainer  : Krajcevski@gmail.com
 Stability   : experimental
@@ -13,10 +13,13 @@
 'MonadMouse'
 
 -}
-
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE FlexibleInstances #-}
 {-# LANGUAGE GeneralizedNewtypeDeriving #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE TypeSynonymInstances #-}
 {-# LANGUAGE UndecidableInstances #-}
-
 module FRP.Netwire.Input.GLFW (
   -- * GLFW Input
 
@@ -40,12 +43,14 @@
 import qualified Graphics.UI.GLFW as GLFW
 import Control.Applicative
 import Control.Concurrent.STM
+import Control.DeepSeq
 import Control.Monad.RWS
 import Control.Monad.State
 import Control.Monad.Except
 import Control.Monad.Cont
 import Control.Monad.Identity
 import GHC.Float hiding (clamp)
+import GHC.Generics
 
 import FRP.Netwire.Input
 --------------------------------------------------------------------------------
@@ -82,8 +87,12 @@
   cursorPos :: (Float, Float),
   cmode :: CursorMode,
   scrollAmt :: (Double, Double)
-} deriving(Show)
+} deriving(Show, Generic)
 
+instance NFData GLFW.Key
+instance NFData GLFW.MouseButton
+instance NFData GLFWInputState
+
 instance Key GLFW.Key
 instance MouseButton GLFW.MouseButton
 
@@ -213,7 +222,6 @@
 
 setInput :: GLFWInputControl -> GLFWInputState -> IO ()
 setInput (IptCtl var win) ipt = do
-
   -- Do we need to change the cursor mode?
   curMode <- GLFW.getCursorInputMode win
   let newMode = modeToGLFWMode (cmode ipt)
@@ -221,18 +229,20 @@
     GLFW.setCursorInputMode win newMode
 
   -- Write the new input
-  atomically $ writeTVar var (ipt { scrollAmt = (0, 0) })
+  atomically $ writeTVar var $!! (ipt { scrollAmt = (0, 0) })
 
 resetCursorPos :: GLFWInputState -> GLFWInputState
 resetCursorPos input = input { cursorPos = (0, 0) }
 
 resolveReleased :: GLFWInputState -> GLFWInputState
 resolveReleased input = input {
-  keysPressed = Map.map (+1) $
-                foldl (flip Map.delete) (keysPressed input) (Set.elems $ keysReleased input),
+  keysPressed =
+     (+1) <$>
+     foldl (flip Map.delete) (keysPressed input) (Set.elems $ keysReleased input),
   keysReleased = Set.empty,
-  mbPressed = Map.map (+1) $
-              foldl (flip Map.delete) (mbPressed input) (Set.elems $ mbReleased input),
+  mbPressed =
+    (+1) <$>
+    foldl (flip Map.delete) (mbPressed input) (Set.elems $ mbReleased input),
   mbReleased = Set.empty
   }
 
diff --git a/netwire-input-glfw.cabal b/netwire-input-glfw.cabal
--- a/netwire-input-glfw.cabal
+++ b/netwire-input-glfw.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                netwire-input-glfw
-version:             0.0.8
+version:             0.0.9
 synopsis:            GLFW instance of netwire-input
 description:         This package contains the necessary glue to allow the use
                      of wires from the netwire-input package. In general, the
@@ -14,7 +14,7 @@
 license-file:        LICENSE
 author:              Pavel Krajcevski
 maintainer:          Krajcevski@gmail.com
-copyright:           Pavel Krajcevski, 2014-2017
+copyright:           Pavel Krajcevski, 2014-2018
 category:            Game
 build-type:          Simple
 extra-source-files:  examples/Cursor.hs README.md
@@ -29,18 +29,14 @@
   location:       https://github.com/Mokosha/netwire-input-glfw
 
 library
-  default-extensions:  FlexibleInstances,
-                       TypeSynonymInstances,
-                       MultiParamTypeClasses,
-                       InstanceSigs
   exposed-modules:     FRP.Netwire.Input.GLFW
-  -- other-modules:       
-  build-depends:       base >= 4.6 && < 6,
-                       netwire-input,
-                       containers,
-                       GLFW-b,
-                       stm,
-                       mtl
+  build-depends:         base              >= 4.6 && < 6
+                       , netwire-input     >= 0.0.7
+                       , containers
+                       , deepseq
+                       , GLFW-b
+                       , stm
+                       , mtl
   hs-source-dirs:      lib
   default-language:    Haskell2010
 
