diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 ## Changelog
 
+## 0.20.0.1 (2015-06-24)
+
+* Fix polymorphic arguments in `Data.Var` (thanks Jakub Ryška)
+
 ## 0.20.0.0 (2015-02-10)
 
 * Changes the type signature of `when` and `unless` from `:: Bool -> Fay a -> Fay ()` to `:: Bool -> Fay () -> Fay ()`. This allows tail call optimization for these functions and matches base - by Zachary Mason
diff --git a/fay-base.cabal b/fay-base.cabal
--- a/fay-base.cabal
+++ b/fay-base.cabal
@@ -1,5 +1,5 @@
 name:                fay-base
-version:             0.20.0.0
+version:             0.20.0.1
 synopsis:            The base package for Fay.
 description:         The base package for Fay.
                      This package amongst others exports Prelude and FFI which you probably want to use with Fay.
diff --git a/src/Data/Var.hs b/src/Data/Var.hs
--- a/src/Data/Var.hs
+++ b/src/Data/Var.hs
@@ -51,14 +51,14 @@
 data Sig a
 
 -- | Make a new signal.
-newSig :: Fay (Sig a)
+newSig :: Fay (Ptr (Sig a))
 newSig = ffi "new Fay$$Sig()"
 
 -- | A mutable reference, with no subscribers.
 data Ref a
 
 -- | Make a new mutable reference.
-newRef :: a -> Fay (Ref a)
+newRef :: Ptr a -> Fay (Ptr (Ref a))
 newRef = ffi "new Fay$$Ref2(%1)"
 
 -- | A reactive variable.  Stores a value, and can have handlers subscribed to
@@ -66,7 +66,7 @@
 data Var a
 
 -- | Make a new reactive variable.
-newVar :: a -> Fay (Var a)
+newVar :: Ptr a -> Fay (Ptr (Var a))
 newVar = ffi "new Fay$$Var(%1)"
 
 
@@ -77,7 +77,7 @@
 instance Settable (Var a)
 
 -- | Write to the value (if any), and call subscribers (if any).
-set :: Settable (v a) => v a -> a -> Fay ()
+set :: Settable (v a) => Ptr (v a) -> Ptr a -> Fay ()
 set = ffi "Fay$$setValue(Fay$$_(%1), %2, Fay$$_)"
 
 
@@ -87,7 +87,7 @@
 instance Gettable (Var a)
 
 -- | Get the value of a 'Ref' or 'Var'.
-get :: Gettable (v a) => v a -> Fay a
+get :: Gettable (v a) => Ptr (v a) -> Fay (Ptr a)
 get = ffi "Fay$$_(%1).val"
 
 -- | Modifies the current value with a pure function.
@@ -107,7 +107,7 @@
 -- | Subscribe to the value of a 'Sig' or 'Var'.
 --
 --   The result is an unsubscribe function.
-subscribe :: Subscribable (v a) => v a -> Ptr (a -> Fay void) -> Fay (() -> Fay ())
+subscribe :: Subscribable (v a) => Ptr (v a) -> Ptr (a -> Fay void) -> Fay (() -> Fay ())
 subscribe = ffi "Fay$$subscribe(Fay$$_(%1), Fay$$_(%2))"
 
 -- | Run the same subscribing action but provide an additional
@@ -241,10 +241,10 @@
       return $ unsubscribeA () >> unsubscribeB () >> unsubscribeC ()
   return (vc, unsubscribe)
 
-setInternal :: Var a -> a -> Fay ()
+setInternal :: Ptr (Var a) -> Ptr a -> Fay ()
 setInternal = ffi "function() { Fay$$_(%1).val = %2; }()"
 
-broadcastInternal :: Var a -> a -> Fay ()
+broadcastInternal :: Ptr (Var a) -> Ptr a -> Fay ()
 broadcastInternal = ffi "Fay$$broadcastInternal(Fay$$_(%1), %2, Fay$$_)"
 
 -- | Like 'mergeVars', but discards the unsubscribe function.
