diff --git a/distributed-static.cabal b/distributed-static.cabal
--- a/distributed-static.cabal
+++ b/distributed-static.cabal
@@ -1,5 +1,5 @@
 Name:                distributed-static
-Version:             0.3.2.0
+Version:             0.3.3.0
 Synopsis:            Compositional, type-safe, polymorphic static values and closures 
 Description:         /Towards Haskell in the Cloud/ (Epstein et al, Haskell
                      Symposium 2011) introduces the concept of /static/ values:
diff --git a/src/Control/Distributed/Static.hs b/src/Control/Distributed/Static.hs
--- a/src/Control/Distributed/Static.hs
+++ b/src/Control/Distributed/Static.hs
@@ -241,7 +241,7 @@
 import qualified Data.Map as Map (lookup, empty, insert)
 import Control.Applicative ((<$>), (<*>))
 import Control.Arrow as Arrow ((***), app)
-import Control.DeepSeq (NFData(rnf))
+import Control.DeepSeq (NFData(rnf), force)
 import Data.Rank1Dynamic (Dynamic, toDynamic, fromDynamic, dynApply)
 import Data.Rank1Typeable
   ( Typeable
@@ -259,7 +259,7 @@
 
 data StaticLabel =
     StaticLabel String
-  | StaticApply StaticLabel StaticLabel
+  | StaticApply !StaticLabel !StaticLabel
   deriving (Eq, Ord, Typeable, Show)
 
 instance NFData StaticLabel where
@@ -302,7 +302,7 @@
 -- It is the responsibility of the client code to make sure the corresponding
 -- entry in the 'RemoteTable' has the appropriate type.
 staticLabel :: String -> Static a
-staticLabel = Static . StaticLabel
+staticLabel = Static . StaticLabel . force
 
 -- | Apply two static values
 staticApply :: Static (a -> b) -> Static a -> Static b
@@ -353,7 +353,7 @@
 --------------------------------------------------------------------------------
 
 -- | A closure is a static value and an encoded environment
-data Closure a = Closure (Static (ByteString -> a)) ByteString
+data Closure a = Closure !(Static (ByteString -> a)) !ByteString
   deriving (Eq, Ord, Typeable, Show)
 
 instance Typeable a => Binary (Closure a) where
