diff --git a/Graphics/Gloss/Internals/Interface/Animate/State.hs b/Graphics/Gloss/Internals/Interface/Animate/State.hs
--- a/Graphics/Gloss/Internals/Interface/Animate/State.hs
+++ b/Graphics/Gloss/Internals/Interface/Animate/State.hs
@@ -10,33 +10,33 @@
 	= State
 	{
 	-- | Whether the animation is running.
-	  stateAnimate			:: Bool
+	  stateAnimate			:: !Bool
 
         -- | How many times we've entered the animation loop.
-        , stateAnimateCount             :: Integer
+        , stateAnimateCount             :: !Integer
 
 	-- | Whether this is the first frame of the animation.
-	, stateAnimateStart		:: Bool
+	, stateAnimateStart		:: !Bool
 
 	-- | Number of msec the animation has been running for
-	, stateAnimateTime		:: Double
+	, stateAnimateTime		:: !Double
 
 	-- | The time when we entered the display callback for the current frame.
-	, stateDisplayTime		:: Double
-	, stateDisplayTimeLast		:: Double
+	, stateDisplayTime		:: !Double
+	, stateDisplayTimeLast		:: !Double
 
 	-- | Clamp the minimum time between frames to this value (in seconds)
         --      Setting this to < 10ms probably isn't worthwhile.
-	, stateDisplayTimeClamp		:: Double
+	, stateDisplayTimeClamp		:: !Double
 							
 	-- | The time when the last call to the users render function finished.
-	, stateGateTimeStart		:: Double
+	, stateGateTimeStart		:: !Double
 
 	-- | The time when displayInWindow last finished (after sleeping to clamp fps).
-	, stateGateTimeEnd		:: Double
+	, stateGateTimeEnd		:: !Double
 	
 	-- | How long it took to draw this frame
-	, stateGateTimeElapsed		:: Double }
+	, stateGateTimeElapsed		:: !Double }
 
 
 stateInit :: State
diff --git a/Graphics/Gloss/Internals/Interface/Animate/Timing.hs b/Graphics/Gloss/Internals/Interface/Animate/Timing.hs
--- a/Graphics/Gloss/Internals/Interface/Animate/Timing.hs
+++ b/Graphics/Gloss/Internals/Interface/Animate/Timing.hs
@@ -34,13 +34,12 @@
 		, stateDisplayTimeLast	= displayTimeLast }
 
 	-- increment the animation time
-	animate		<- stateRef `getsIORef` stateAnimate
+	animate         <- stateRef `getsIORef` stateAnimate
         animateCount    <- stateRef `getsIORef` stateAnimateCount
 	animateTime	<- stateRef `getsIORef` stateAnimateTime
 	animateStart	<- stateRef `getsIORef` stateAnimateStart
 
-{-
-        when (animateCount `mod` 5 == 0)
+{-      when (animateCount `mod` 5 == 0)
          $  putStr  $  "  displayTime        = " ++ show displayTime                ++ "\n"
                     ++ "  displayTimeLast    = " ++ show displayTimeLast            ++ "\n"
                     ++ "  displayTimeElapsed = " ++ show displayTimeElapsed         ++ "\n"
diff --git a/Graphics/Gloss/Internals/Interface/Simulate/State.hs b/Graphics/Gloss/Internals/Interface/Simulate/State.hs
--- a/Graphics/Gloss/Internals/Interface/Simulate/State.hs
+++ b/Graphics/Gloss/Internals/Interface/Simulate/State.hs
@@ -9,25 +9,25 @@
 data State	
  = 	State
 	{ -- | The iteration number we're up to.
-	  stateIteration	:: Integer
+	  stateIteration	:: !Integer
 
 	-- | Whether the animation is free-running (or single step)
-	, stateRun		:: Bool
+	, stateRun		:: !Bool
 
 	-- | Signals to callbackIdle to take a single step of the automation.
-	, stateStep		:: Bool
+	, stateStep		:: !Bool
 
 	-- | Signals to callbackIdle to roll-back to the initial world.
-	, stateReset		:: Bool
+	, stateReset		:: !Bool
 		
 	-- | How many simulation setps to take for each second of real time
-	, stateResolution	:: Int 
+	, stateResolution	:: !Int 
 	
 	-- | How many seconds worth of simulation we've done so far
-	, stateSimTime		:: Float
+	, stateSimTime		:: !Float
 	
 	-- | Record how many steps we've been taking per frame
-	, stateStepsPerFrame 	:: Int  }
+	, stateStepsPerFrame 	:: !Int  }
 	
 
 -- | Initial control state
diff --git a/Graphics/Gloss/Internals/Interface/ViewPort.hs b/Graphics/Gloss/Internals/Interface/ViewPort.hs
--- a/Graphics/Gloss/Internals/Interface/ViewPort.hs
+++ b/Graphics/Gloss/Internals/Interface/ViewPort.hs
@@ -9,13 +9,13 @@
 data ViewPort
 	= ViewPort { 
 	-- | Global translation.
-	  viewPortTranslate	:: (Float, Float)
+	  viewPortTranslate	:: !(Float, Float)
 
 	-- | Global rotation (in degrees).
-	, viewPortRotate	:: Float		
+	, viewPortRotate	:: !Float		
 
 	-- | Global scaling (of both x and y coordinates).
-	, viewPortScale		:: Float		
+	, viewPortScale		:: !Float		
 	}
 	
 	
diff --git a/Graphics/Gloss/Internals/Interface/ViewPort/ControlState.hs b/Graphics/Gloss/Internals/Interface/ViewPort/ControlState.hs
--- a/Graphics/Gloss/Internals/Interface/ViewPort/ControlState.hs
+++ b/Graphics/Gloss/Internals/Interface/ViewPort/ControlState.hs
@@ -17,21 +17,21 @@
 	-- | The command list for the viewport controller.
 	--	These can be safely overwridden at any time by deleting / adding entries to the list.
 	--	Entries at the front of the list take precedence.
-	  stateCommands		:: Map Command [(Key, Maybe Modifiers)]
+	  stateCommands		:: !(Map Command [(Key, Maybe Modifiers)])
 
 	-- | How much to scale the world by for each step of the mouse wheel.
-	, stateScaleStep	:: Float	
+	, stateScaleStep	:: !Float	
 							
 	-- | How many degrees to rotate the world by for each pixel of x motion.
-	, stateRotateFactor	:: Float
+	, stateRotateFactor	:: !Float
 
 	-- | During viewport translation,
 	--	where the mouse was clicked on the window.
-	, stateTranslateMark	:: Maybe (Int, Int)	
+	, stateTranslateMark	:: !(Maybe (Int, Int))
 
 	-- | During viewport rotation,	
 	--	where the mouse was clicked on the window
-	, stateRotateMark	:: Maybe (Int, Int)
+	, stateRotateMark	:: !(Maybe (Int, Int))
 	}
 
 
diff --git a/Graphics/Gloss/Internals/Interface/ViewPort/Reshape.hs b/Graphics/Gloss/Internals/Interface/ViewPort/Reshape.hs
--- a/Graphics/Gloss/Internals/Interface/ViewPort/Reshape.hs
+++ b/Graphics/Gloss/Internals/Interface/ViewPort/Reshape.hs
@@ -23,5 +23,6 @@
 	--	This controls what part of the window openGL renders to.
 	--	We'll use the whole window.
 	--
- 	GL.viewport 	$= (GL.Position 0 0, GL.Size (fromIntegral width) (fromIntegral height))
+ 	GL.viewport 	$= ( GL.Position 0 0
+                           , GL.Size (fromIntegral width) (fromIntegral height))
 	postRedisplay stateRef
diff --git a/Graphics/Gloss/Internals/Render/State.hs b/Graphics/Gloss/Internals/Render/State.hs
--- a/Graphics/Gloss/Internals/Render/State.hs
+++ b/Graphics/Gloss/Internals/Render/State.hs
@@ -17,19 +17,19 @@
 data State
 	= State
 	{ -- | Whether to use color
-	  stateColor		:: Bool
+	  stateColor		:: !Bool
 
 	-- | Whether to force wireframe mode only
-	, stateWireframe	:: Bool
+	, stateWireframe	:: !Bool
 
 	-- | Whether to use alpha blending
-	, stateBlendAlpha	:: Bool
+	, stateBlendAlpha	:: !Bool
 
 	-- | Whether to use line smoothing
-	, stateLineSmooth	:: Bool
+	, stateLineSmooth	:: !Bool
 	
 	-- | Cache of Textures that we've sent to OpenGL.
-	, stateTextures         :: IORef [Texture]
+	, stateTextures         :: !(IORef [Texture])
 	}
 	
 
diff --git a/gloss.cabal b/gloss.cabal
--- a/gloss.cabal
+++ b/gloss.cabal
@@ -1,5 +1,5 @@
 Name:                gloss
-Version:             1.7.6.6
+Version:             1.7.7.1
 License:             MIT
 License-file:        LICENSE
 Author:              Ben Lippmeier
