diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,9 +1,13 @@
 # TidalCycles log of changes
 
+## 1.0.13 - 🐝⌛️🦋 #2
+
+* Simplify espgrid support - @yaxu
+
 ## 1.0.12 - 🐝⌛️🦋
 
 * Fix ESPGrid support - @dktr0
-* Add 'snowbal'' function - @XiNNiW
+* Add 'snowball' function - @XiNNiW
 
 ## 1.0.11 - Cros Bríde
 
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
@@ -1,12 +1,14 @@
 {-# LANGUAGE ScopedTypeVariables #-}
 
-module Sound.Tidal.EspGrid (tidalEspGridLink,cpsEsp) where
+module Sound.Tidal.EspGrid (tidalEspGridLink,cpsEsp,espgrid) where
 
 import Control.Concurrent.MVar
 import Control.Concurrent (forkIO,threadDelay)
 import Control.Monad (forever)
+import Control.Exception
 import Sound.OSC.FD
 import Sound.Tidal.Tempo
+import Sound.Tidal.Stream (Stream, sTempoMV)
 
 parseEspTempo :: [Datum] -> Maybe (Tempo -> Tempo)
 parseEspTempo d = do
@@ -25,22 +27,25 @@
 
 changeTempo :: MVar Tempo -> Packet -> IO ()
 changeTempo t (Packet_Message msg) =
-    case parseEspTempo (messageDatum msg) of
-      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"
+  case parseEspTempo (messageDatum msg) of
+    Just f -> modifyMVarMasked_ t $ \t0 -> return (f t0)
+    Nothing -> putStrLn "Warning: Unable to parse message from EspGrid as Tempo"
 changeTempo _ _ = putStrLn "Serious error: Can only process Packet_Message"
 
 tidalEspGridLink :: MVar Tempo -> IO ()
-tidalEspGridLink t = do
+tidalEspGridLink _ = putStrLn "Function no longer supported, please use 'espgrid tidal' to connect to ESPgrid instead."
+
+espgrid :: Stream -> IO ()
+espgrid st = do
+  let t = sTempoMV st
   socket <- openUDP "127.0.0.1" 5510
   _ <- forkIO $ forever $ do
-    _ <- sendMessage socket $ Message "/esp/tempo/q" []
-    response <- waitAddress socket "/esp/tempo/r"
-    Sound.Tidal.EspGrid.changeTempo t response
-    threadDelay 200000
+    (do
+      sendMessage socket $ Message "/esp/tempo/q" []
+      response <- waitAddress socket "/esp/tempo/r"
+      Sound.Tidal.EspGrid.changeTempo t response
+      threadDelay 200000)
+      `catch` (\e -> putStrLn $ "exception caught in tidalEspGridLink: " ++ show (e :: SomeException))
   return ()
 
 cpsEsp :: Real t => t -> IO ()
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.12"
+tidal_version = "1.0.13"
diff --git a/tidal.cabal b/tidal.cabal
--- a/tidal.cabal
+++ b/tidal.cabal
@@ -1,5 +1,5 @@
 name:                tidal
-version:             1.0.12
+version:             1.0.13
 synopsis:            Pattern language for improvised music
 -- description:
 homepage:            http://tidalcycles.org/
