diff --git a/src/CFG/C.hs b/src/CFG/C.hs
index 5e476664200f244567ea72e6e2d905a4d869d097..bc87ec4d24c125dc76931afa0dff4bf716dbe1bd 100644
--- a/src/CFG/C.hs
+++ b/src/CFG/C.hs
@@ -44,7 +44,7 @@ include = "#include <mockup_prelude.cc>\n\n"
 
 compileToC :: Maybe IntSet -> Function [Instr] -> DecisionM Text
 compileToC interrupts fun = do
-  instrs <- instrsToC interrupts $ extract fun
+  instrs <- instrsToC interrupts (funKind fun) $ extract fun
   let header KindSubtask = "TASK(" <> funName fun <> ")"
       header KindFunction = "void " <> funName fun <> "()"
       header KindISR = "ISR2(" <> funName fun <> ")"
@@ -111,27 +111,30 @@ triggerInterrupts (Just ints) = do
             <> "    Machine::trigger_interrupt_from_user(" <> T.pack (show int) <> ");\n"
             <> "  }\n"
 
-instrsToC :: Maybe IntSet -> [Instr] -> DecisionM Text
-instrsToC interrupts = fmap ((<> "\n") . mconcat . intersperse "\n") . mapM (instrToC interrupts)
+instrsToC :: Maybe IntSet -> FunctionKind -> [Instr] -> DecisionM Text
+instrsToC interrupts kind = fmap ((<> "\n") . mconcat . intersperse "\n") . mapM (instrToC interrupts kind)
 
-instrToC :: Maybe IntSet -> Instr -> DecisionM Text
-instrToC _ (Goto ident) = return $ "goto " <> ident <> ";"
-instrToC _ (Label ident) = return $ ident <> ":"
-instrToC _ (IfThanElse left right) = do
+instrToC :: Maybe IntSet -> FunctionKind -> Instr -> DecisionM Text
+instrToC _ _ (Goto ident) = return $ "goto " <> ident <> ";"
+instrToC _ _ (Label ident) = return $ ident <> ":"
+instrToC _ _ (IfThanElse left right) = do
   decision <- decisionNumber
   return $
     "if (_decisionMaker(" <> T.pack (show decision) <> "))\n" <>
     "  goto " <> left <> ";\n" <>
     "else\n" <>
     "  goto " <> right <> ";"
-instrToC _ (Call ident False) = return $ ident <> "();"
-instrToC interrupts (Call ident True)  = do
-  ints <- triggerInterrupts interrupts
+instrToC _ _ (Call ident False) = return $ ident <> "();"
+instrToC interrupts kind (Call ident True)  = do
+  ints <-
+    if kind /= KindISR
+      then triggerInterrupts interrupts
+      else return mempty
   return $
     ints
     <> "_print_os_state(\"" <> ident <> "\", __LINE__);\n"
     <> ident <> "();"
-instrToC _ Return = return "return;"
+instrToC _ _ Return = return "return;"
 
 indent :: Text -> Text
 indent = T.unlines . map ("  " <>) . T.lines