diff --git a/doc/examples/SlotMachine.hs b/doc/examples/SlotMachine.hs
--- a/doc/examples/SlotMachine.hs
+++ b/doc/examples/SlotMachine.hs
@@ -8,6 +8,7 @@
 import Control.Monad (when)
 import Data.Maybe (isJust, fromJust)
 import System.Random
+import System.IO
 import Debug.Trace
 import Data.IORef
 
@@ -41,6 +42,7 @@
     where
     loop = do
         putStr "> "
+        hFlush stdout
         s <- getLine
         case s of
             "coin" -> fire escoin ()    -- fire corresponding events
diff --git a/reactive-banana.cabal b/reactive-banana.cabal
--- a/reactive-banana.cabal
+++ b/reactive-banana.cabal
@@ -1,5 +1,5 @@
 Name:                reactive-banana
-Version:             0.2.0.2
+Version:             0.2.0.3
 Synopsis:            Small but solid library for
                      functional reactive programming (FRP).
 Description:         
diff --git a/src/Reactive/Banana/Implementation.hs b/src/Reactive/Banana/Implementation.hs
--- a/src/Reactive/Banana/Implementation.hs
+++ b/src/Reactive/Banana/Implementation.hs
@@ -27,6 +27,8 @@
 import Control.Monad.RWS
 import Data.IORef
 
+-- debug = putStrLn
+
 {-----------------------------------------------------------------------------
     PushIO specific functions
 ------------------------------------------------------------------------------}
@@ -135,6 +137,7 @@
     let
         -- union of all  reactimates
         network = mconcat outputs :: Model.Event PushIO (IO ())
+    
     -- compile network
     paths <- compileHandlers network
     -- register event handlers
diff --git a/src/Reactive/Banana/PushIO.hs b/src/Reactive/Banana/PushIO.hs
--- a/src/Reactive/Banana/PushIO.hs
+++ b/src/Reactive/Banana/PushIO.hs
@@ -39,13 +39,13 @@
 runStore :: Store a -> IO a
 runStore = id
 
--- create a new reference. Dummy argument to prevent let floating
-newRef   :: b -> Ref a
+-- create a new reference.
+newRef   :: Store (Ref a)
 -- read a reference. Only possible in the  Store  monad.
 readRef  :: Ref a -> Store (Maybe a)
 writeRef :: Ref a -> a -> Store ()
 
-newRef b = unsafePerformIO . seq [b] . newIORef $ Nothing
+newRef   = newIORef Nothing
 readRef  = readIORef
 writeRef ref = writeIORef ref . Just
 
@@ -332,16 +332,18 @@
 
 -- sharing
 behavior :: BehaviorD Accum a -> Model.Behavior PushIO a
-behavior b = Behavior (ref, b)
+behavior b = Behavior pair
     where
-    {-# NOINLINE ref #-}    
-    ref = newRef b
+    {-# NOINLINE pair #-}
+    -- mention argument to prevent let-floating  
+    pair = unsafePerformIO (fmap (,b) newRef)
 
 event :: EventD Accum a -> Model.Event PushIO a
-event e = Event (ref, e)
+event e = Event pair
     where
-    {-# NOINLINE ref #-}
-    ref = newRef e
+    {-# NOINLINE pair #-}
+    -- mention argument to prevent let-floating
+    pair = unsafePerformIO (fmap (,e) newRef)
 
 -- boilerplate class instances
 instance Functor (Model.Event PushIO) where
