diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -3,3 +3,7 @@
 ## 0.1.0.0  -- 2017-01-08
 
 * First version. Released on an unsuspecting world.
+
+## 0.2.0.0  -- 2017-07-01
+
+* Second version. Add simulation functions and fix few glitches
diff --git a/clash-multisignal.cabal b/clash-multisignal.cabal
--- a/clash-multisignal.cabal
+++ b/clash-multisignal.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                clash-multisignal
-version:             0.1.0.0
+version:             0.2.0.0
 -- synopsis:            
 description:         Clash/Fpga library for working with multiple elements arriving at same clock as stream.
 license:             BSD3
@@ -24,7 +24,10 @@
   -- we use Functor and Applicative from base 
   build-depends:       base > 4.0 && < 5.0, 
                        clash-prelude >= 0.10 && < 0.12 ,
-                       QuickCheck
+                       QuickCheck,
+                       deepseq,
+                       ghc-typelits-knownnat
+
   hs-source-dirs:      src
   default-language:    Haskell2010
   ghc-options: -fexpose-all-unfoldings
@@ -33,3 +36,5 @@
 source-repository head
   type:     git
   location: github.com:ra1u/clash-multisignal.git
+
+
diff --git a/src/CLaSH/Signal/MultiSignal.hs b/src/CLaSH/Signal/MultiSignal.hs
--- a/src/CLaSH/Signal/MultiSignal.hs
+++ b/src/CLaSH/Signal/MultiSignal.hs
@@ -5,7 +5,7 @@
 {-# LANGUAGE ScopedTypeVariables   #-}
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE ConstraintKinds #-}
-
+{-# OPTIONS_GHC -fplugin GHC.TypeLits.KnownNat.Solver #-}
 
 module CLaSH.Signal.MultiSignal (
     MultiSignal (..) ,
@@ -15,14 +15,19 @@
     SignalLike(..),
     mealyP ,
     mooreP ,
-    windowP 
+    windowP,
+    -- * Simulation functions (not synthesisable)
+    fromListP,
+    fromListPI,
+    simulateP
 ) where
 
 import qualified Data.Foldable as F
-import qualified Prelude 
-import CLaSH.Prelude as P
+import qualified Prelude as P
+import CLaSH.Prelude as CP
 import CLaSH.Signal.Explicit as SE
 import Test.QuickCheck (Arbitrary(..),CoArbitrary(..))
+import Control.DeepSeq
 
 
 -- Stream of elements where n elements arrives at same clock
@@ -40,9 +45,9 @@
       su = unMultiSignal s
 
 
-instance Foldable (MultiSignal n) where
+instance (KnownNat n) =>  Foldable (MultiSignal n) where
     foldr f x xs = (F.foldr (.) id xs') x where 
-        xs' = (\ys y -> P.foldr f y ys) <$> unMultiSignal xs       
+        xs' = (\ys y -> CP.foldr f y ys) <$> unMultiSignal xs      
 
 
 instance (KnownNat m, m ~ (n+1)) => Traversable (MultiSignal m) where
@@ -74,8 +79,8 @@
   fromRational = pure . fromRational
 
 
-instance Show a => Show (MultiSignal n a) where
-  show x = foldMap ( \a -> mappend (show a) " ") x
+instance (Show a,KnownNat n) => Show (MultiSignal n a) where
+  show = show . unMultiSignal
 
 
 instance (Arbitrary a,KnownNat n) => Arbitrary (MultiSignal n a) where
@@ -159,11 +164,41 @@
      r = fs <$> prepend s r <*> i 
 
 
-windowP :: (KnownNat n, Default a, SignalLike f)
+windowP :: (KnownNat n, Default a, Prependable f)
        => f a               -- ^ 'SignalLike' to create a window over
        -> Vec n (f a)       -- ^ Vector of signals
 windowP  x = iterateI (prepend def) x
 
+
+-- | convert list to  'MultiSignal'
+fromListP :: (NFData a) => SNat (n + 1) -> [a] -> MultiSignal (n + 1) a
+fromListP n xs = MultiSignal $ CP.fromList $ l2vl n xs where
+   l2vl n xs = v :  l2vl n ys where
+      v = P.head <$> r
+      ys = P.tail (CP.last r) 
+      r = CP.iterate n P.tail xs
+      vList = v : l2vl n ys 
+
+
+-- | convert list to  'MultiSignal'
+fromListPI :: (NFData a,KnownNat n) 
+           => [a] -> MultiSignal (n + 1) a
+fromListPI = withSNat fromListP
+
+
+-- | Simulate a (@'MultiSignal' (n + 1) a -> 'MultiSignal' (n + 1) b@) 
+-- function given a list of samples of type a
+simulateP :: (NFData a, NFData b, KnownNat n) 
+          => (MultiSignal (n + 1) a -> MultiSignal (n + 1) b )
+          -> [a] 
+          -> [b]
+simulateP f xs = P.concat 
+                 $ fmap toList 
+                 $ sample 
+                 $ unMultiSignal 
+                 $ f 
+                 $ fromListPI xs
+
 -- Prependable
 
 -- |
@@ -184,4 +219,4 @@
          MultiSignal $ liftA2 (+>>) (register x (fmap last s)) s
 
 instance Prependable (Signal' SE.SystemClock) where
-   prepend = P.register
+   prepend = CP.register
