diff --git a/csound-expression-dynamic.cabal b/csound-expression-dynamic.cabal
--- a/csound-expression-dynamic.cabal
+++ b/csound-expression-dynamic.cabal
@@ -1,5 +1,5 @@
 Name:          csound-expression-dynamic
-Version:       0.1.0
+Version:       0.1.1
 Cabal-Version: >= 1.6
 License:       BSD3
 License-file:  LICENSE
@@ -25,7 +25,7 @@
   Ghc-Options:    -Wall
   Build-Depends:
         base >= 4, base < 5, data-default, containers, array, transformers >= 0.3, wl-pprint, 
-        Boolean >= 0.1.0, data-fix, data-fix-cse
+        Boolean >= 0.1.0, data-fix, data-fix-cse >= 0.0.2
   Hs-Source-Dirs:      src/
   Exposed-Modules:
     Csound.Dynamic
diff --git a/src/Csound/Dynamic/Render/Instr.hs b/src/Csound/Dynamic/Render/Instr.hs
--- a/src/Csound/Dynamic/Render/Instr.hs
+++ b/src/Csound/Dynamic/Render/Instr.hs
@@ -9,7 +9,7 @@
 
 import Data.Maybe(fromJust)
 import Data.Fix(Fix(..), cata)
-import Data.Fix.Cse(fromDag, cse)
+import Data.Fix.Cse(fromDag, cseFramed, FrameInfo(..))
 
 import qualified Text.PrettyPrint.Leijen as P
 
@@ -38,7 +38,20 @@
 -- E -> Dag
 
 toDag :: E -> Dag RatedExp 
-toDag expr = filterDepCases $ fromDag $ cse $ trimByArgLength expr
+toDag expr = filterDepCases $ fromDag $ cseFramed getFrameInfo $ trimByArgLength expr
+
+getFrameInfo :: RatedExp a -> FrameInfo
+getFrameInfo x = case ratedExpExp x of
+    -- | Imperative If-then-else
+    IfBegin _     -> StartFrame
+    ElseIfBegin _ -> NextFrame
+    ElseBegin     -> NextFrame 
+    IfEnd         -> StopFrame
+    -- | looping constructions
+    UntilBegin _ -> StartFrame
+    UntilEnd     -> StopFrame
+    _            -> NoFrame
+
 
 trimByArgLength :: E -> E
 trimByArgLength = cata $ \x -> Fix x{ ratedExpExp = phi $ ratedExpExp x }
