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.6
+Version:       0.2.0
 Cabal-Version: >= 1.6
 License:       BSD3
 License-file:  LICENSE
diff --git a/src/Csound/Dynamic/Build/Logic.hs b/src/Csound/Dynamic/Build/Logic.hs
--- a/src/Csound/Dynamic/Build/Logic.hs
+++ b/src/Csound/Dynamic/Build/Logic.hs
@@ -18,26 +18,26 @@
 ------------------------------------------------------
 -- imperative if-then-else
 
-when1 :: Monad m => E -> DepT m () -> DepT m ()
-when1 p body = do
-    ifBegin p
+when1 :: Monad m => Rate -> E -> DepT m () -> DepT m ()
+when1 rate p body = do
+    ifBegin rate p
     body
     ifEnd
 
-whens :: Monad m => [(E, DepT m ())] -> DepT m () -> DepT m ()
-whens bodies el = case bodies of
+whens :: Monad m => Rate -> [(E, DepT m ())] -> DepT m () -> DepT m ()
+whens rate bodies el = case bodies of
     []   -> el
     a:as -> do
-        ifBegin (fst a)
+        ifBegin rate (fst a)
         snd a
         elseIfs as
         elseBegin 
         el
         foldl1 (>>) $ replicate (1 + length as) ifEnd
-    where elseIfs = mapM_ (\(p, body) -> elseBegin >> ifBegin p >> body)
+    where elseIfs = mapM_ (\(p, body) -> elseBegin >> ifBegin rate p >> body)
 
-ifBegin :: Monad m => E -> DepT m ()
-ifBegin = withCond IfBegin
+ifBegin :: Monad m => Rate -> E -> DepT m ()
+ifBegin rate = withCond $ IfBegin rate
 
 elseBegin :: Monad m => DepT m ()
 elseBegin = stmtOnlyT ElseBegin
diff --git a/src/Csound/Dynamic/Render.hs b/src/Csound/Dynamic/Render.hs
--- a/src/Csound/Dynamic/Render.hs
+++ b/src/Csound/Dynamic/Render.hs
@@ -13,6 +13,7 @@
     (renderFlags $ csdFlags a)
     (renderOrc $ csdOrc a)
     (renderSco   $ csdSco a)
+    (csdPlugins a)
 
 renderFlags :: Flags -> Doc
 renderFlags = P.pretty
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
@@ -43,7 +43,7 @@
 getFrameInfo :: RatedExp a -> FrameInfo
 getFrameInfo x = case ratedExpExp x of
     -- Imperative If-then-else
-    IfBegin _     -> StartFrame
+    IfBegin _ _   -> StartFrame
 --     ElseIfBegin _ -> NextFrame
     ElseBegin     -> NextFrame 
     IfEnd         -> StopFrame
@@ -167,7 +167,7 @@
     WriteVar v a -> WriteVar v $ rec1 (varRate v) a
     InitVar v a -> InitVar v $ rec1 Ir a -- rec1 (varRate v) a
     ExpPrim p -> ExpPrim p
-    IfBegin _ -> rec2 condRate expr
+    IfBegin rootRate _ -> rec2 rootRate expr
     UntilBegin _ -> rec2 condRate expr
 --    ElseIfBegin _ -> rec2 condRate expr
     ElseBegin -> ElseBegin
diff --git a/src/Csound/Dynamic/Render/Pretty.hs b/src/Csound/Dynamic/Render/Pretty.hs
--- a/src/Csound/Dynamic/Render/Pretty.hs
+++ b/src/Csound/Dynamic/Render/Pretty.hs
@@ -27,13 +27,18 @@
 func :: String -> Doc -> Doc
 func op a = text op <> parens a
 
-ppCsdFile :: Doc -> Doc -> Doc -> Doc
-ppCsdFile flags orc sco = 
+ppCsdFile :: Doc -> Doc -> Doc -> [Plugin] -> Doc
+ppCsdFile flags orc sco plugins = 
     tag "CsoundSynthesizer" $ vcatSep [
         tag "CsOptions" flags,
         tag "CsInstruments" orc,
-        tag "CsScore" sco]    
+        tag "CsScore" sco,
+        ppPlugins plugins
+        ]   
 
+ppPlugins :: [Plugin] -> Doc
+ppPlugins plugins = vcatSep $ fmap (\(Plugin name body) -> tag name (text body)) plugins
+
 tag :: String -> Doc -> Doc
 tag name content = vcatSep [
     char '<' <> text name <> char '>', 
@@ -125,7 +130,7 @@
     InitVar v a                     -> tab $ ppOpc (ppVar v) "init" [a]
     ReadVar v                       -> tab $ res $= ppVar v
 
-    IfBegin a                       -> succTab          $ text "if "     <> ppCond a <> text " then"
+    IfBegin _ a                     -> succTab          $ text "if "     <> ppCond a <> text " then"
 --     ElseIfBegin a                   -> left >> (succTab $ text "elseif " <> ppCond a <> text " then")    
     ElseBegin                       -> left >> (succTab $ text "else")
     IfEnd                           -> left >> (tab     $ text "endif")
diff --git a/src/Csound/Dynamic/Types/CsdFile.hs b/src/Csound/Dynamic/Types/CsdFile.hs
--- a/src/Csound/Dynamic/Types/CsdFile.hs
+++ b/src/Csound/Dynamic/Types/CsdFile.hs
@@ -1,6 +1,6 @@
 -- | The Csound file
 module Csound.Dynamic.Types.CsdFile(            
-    Csd(..), Flags, Orc(..), Sco(..), Instr(..), InstrBody,
+    Csd(..), Flags, Orc(..), Sco(..), Plugin(..), Instr(..), InstrBody,
     CsdEvent, csdEventStart, csdEventDur, csdEventContent, csdEventTotalDur,
     intInstr, alwaysOn
 ) where
@@ -10,9 +10,10 @@
 import Csound.Dynamic.Types.Flags
 
 data Csd = Csd
-    { csdFlags  :: Flags
-    , csdOrc    :: Orc
-    , csdSco    :: Sco
+    { csdFlags   :: Flags
+    , csdOrc     :: Orc
+    , csdSco     :: Sco
+    , csdPlugins :: [Plugin]
     } 
 
 data Orc = Orc
@@ -31,6 +32,11 @@
     { scoTotalDur   :: Maybe Double
     , scoGens       :: [(Int, Gen)]
     , scoNotes      :: [(InstrId, [CsdEvent])]  }
+
+data Plugin = Plugin
+    { pluginName    :: String
+    , pluginContent :: String
+    }
 
 ----------------------------------------------------------------
 -- instruments
diff --git a/src/Csound/Dynamic/Types/Exp.hs b/src/Csound/Dynamic/Types/Exp.hs
--- a/src/Csound/Dynamic/Types/Exp.hs
+++ b/src/Csound/Dynamic/Types/Exp.hs
@@ -154,7 +154,7 @@
     | ReadVar Var
     | WriteVar Var a    
     -- | Imperative If-then-else
-    | IfBegin (CondInfo a)
+    | IfBegin Rate (CondInfo a)
 --  | ElseIfBegin (CondInfo a) -- It's expressed with nested if-else
     | ElseBegin
     | IfEnd
diff --git a/src/Csound/Dynamic/Types/Flags.hs b/src/Csound/Dynamic/Types/Flags.hs
--- a/src/Csound/Dynamic/Types/Flags.hs
+++ b/src/Csound/Dynamic/Types/Flags.hs
@@ -194,7 +194,7 @@
         , midiVelocityAmp   = midiVelocityAmp a <|> midiVelocityAmp b
         , midiOutDevice     = midiOutDevice a <|> midiOutDevice b }
 
-data Rtmidi = PortMidi | AlsaMidi | CoreMidi | MmeMidi | WinmmeMidi | VirtualMidi | NoRtmidi
+data Rtmidi = PortMidi | AlsaMidi | AlsaSeq | CoreMidi | MmeMidi | WinmmeMidi | VirtualMidi | NoRtmidi
 
 -- Display
 
@@ -374,7 +374,7 @@
         Jack name ins outs -> rt "jack" <+> jackFields name ins outs
         Mme -> rt "mme"
         Alsa  -> rt "alsa"
-        CoreAudio -> rt "CoreAudio"
+        CoreAudio -> rt "auhal"
         NoRtaudio   -> rt "0"
         where 
             rt = text . p3 "rtaudio"
@@ -413,6 +413,7 @@
         VirtualMidi -> "virtual"
         PortMidi    -> "PortMidi"
         AlsaMidi    -> "alsa"
+        AlsaSeq     -> "alsaseq"
         CoreMidi    -> "coremidi"
         MmeMidi     -> "mme"
         WinmmeMidi  -> "winmme"
