diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,11 @@
 # TidalCycles log of changes
 
-## 1.0.11 - as yet unnamed
+## 1.0.12 - 🐝⌛️🦋
+
+* Fix ESPGrid support - @dktr0
+* Add 'snowbal'' function - @XiNNiW
+
+## 1.0.11 - Cros Bríde
 
 2019-04-17  Alex McLean  <alex@slab.org>
 	* Add `bite` function for slicing patterns (rather than samples)
diff --git a/src/Sound/Tidal/EspGrid.hs b/src/Sound/Tidal/EspGrid.hs
--- a/src/Sound/Tidal/EspGrid.hs
+++ b/src/Sound/Tidal/EspGrid.hs
@@ -17,7 +17,7 @@
   n :: Integer <- datum_integral (d!!4)
   let nanos = (t1*1000000000) + t2
   return $ \t -> t {
-    atTime = realToFrac nanos / 1000000000,
+    atTime = ut_to_ntpr $ realToFrac nanos / 1000000000,
     atCycle = fromIntegral n,
     cps = bpm/60,
     paused = on == 0
@@ -26,7 +26,10 @@
 changeTempo :: MVar Tempo -> Packet -> IO ()
 changeTempo t (Packet_Message msg) =
     case parseEspTempo (messageDatum msg) of
-      Just f -> takeMVar t >>= putMVar t . f
+      Just f -> do
+        t0 <- takeMVar t
+        let t1 = f t0
+        putMVar t t1
       Nothing -> putStrLn "Warning: Unable to parse message (likely from EspGrid) as Tempo"
 changeTempo _ _ = putStrLn "Serious error: Can only process Packet_Message"
 
diff --git a/src/Sound/Tidal/UI.hs b/src/Sound/Tidal/UI.hs
--- a/src/Sound/Tidal/UI.hs
+++ b/src/Sound/Tidal/UI.hs
@@ -1734,6 +1734,19 @@
 swap :: Eq a => [(a, b)] -> Pattern a -> Pattern b
 swap things p = filterJust $ (`lookup` things) <$> p
 
+{-
+  snowball |
+  snowball takes a function that can combine patterns (like '+'),
+  a function that transforms a pattern (like 'slow'),
+  a depth, and a starting pattern,
+  it will then transform the pattern and combine it with the last transformation until the depth is reached
+  this is like putting an effect (like a filter) in the feedback of a delay line
+  each echo is more effected
+  d1 $ note (scale "hexDorian" $ snowball (+) (slow 2 . rev) 8 "0 ~ . -1 . 5 3 4 . ~ -2") # s "gtr"
+-}
+snowball :: Int -> (Pattern a -> Pattern a -> Pattern a) -> (Pattern a -> Pattern a) -> Pattern a -> Pattern a
+snowball depth combinationFunction f pattern = cat $ take depth $ scanl combinationFunction pattern $ iterate f pattern
+
 {- @soak@ | 
     applies a function to a pattern and cats the resulting pattern,
     then continues applying the function until the depth is reached
diff --git a/src/Sound/Tidal/Version.hs b/src/Sound/Tidal/Version.hs
--- a/src/Sound/Tidal/Version.hs
+++ b/src/Sound/Tidal/Version.hs
@@ -1,4 +1,4 @@
 module Sound.Tidal.Version where
 
 tidal_version :: String
-tidal_version = "1.0.11"
+tidal_version = "1.0.12"
diff --git a/test/Sound/Tidal/UITest.hs b/test/Sound/Tidal/UITest.hs
--- a/test/Sound/Tidal/UITest.hs
+++ b/test/Sound/Tidal/UITest.hs
@@ -179,6 +179,13 @@
           (euclidFull 3 8 "bd" silence)
           ("bd(3,8)" :: Pattern String)
           
+    describe "snowball" $ do
+      let testPattern = ("1 2 3 4"::Pattern Int)
+      it "acummulates a transform version of a pattern and appends the result - addition" $ do
+        compareP (Arc 0 1)
+          (snowball 3 (+) (slow 2) (testPattern))
+          (cat [testPattern,(testPattern+(slow 2 testPattern)),((testPattern+(slow 2 testPattern))+slow 2 (testPattern+(slow 2 testPattern)))])
+
     describe "soak" $ do
       it "applies a transform and then appends the result -- addition" $ do
         compareP (Arc 0 3)
diff --git a/tidal.cabal b/tidal.cabal
--- a/tidal.cabal
+++ b/tidal.cabal
@@ -1,5 +1,5 @@
 name:                tidal
-version:             1.0.11
+version:             1.0.12
 synopsis:            Pattern language for improvised music
 -- description:
 homepage:            http://tidalcycles.org/
