diff --git a/inc/parser/handler.php b/inc/parser/handler.php
index 0b8b79254fdb6bf0584270ade1ccdaf8f7cb5af4..acca3f5a189d82be70e16bdf86b0962317075035 100644
--- a/inc/parser/handler.php
+++ b/inc/parser/handler.php
@@ -1543,14 +1543,12 @@ class Doku_Handler_Block {
             // Process blocks which are stack like... (contain linefeeds)
             if ( in_array($cname,$this->stackOpen ) && (!$plugin || $plugin_open) ) {
 
-                $this->calls[] = $call;
-
                 // Hack - footnotes shouldn't immediately contain a p_open
-                if ( $cname != 'footnote_open' ) {
-                    $this->addToStack();
-                } else {
-                    $this->addToStack(false);
+                if ($this->addToStack($cname != 'footnote_open')) {
+                    $this->closeParagraph($call[2]);
                 }
+                $this->calls[] = $call;
+
                 continue;
             }
 
@@ -1560,7 +1558,9 @@ class Doku_Handler_Block {
                     $this->closeParagraph($call[2]);
                 }
                 $this->calls[] = $call;
-                $this->removeFromStack();
+                if ($this->removeFromStack()) {
+                    $this->calls[] = array('p_open',array(), $call[2]);
+                }
                 continue;
             }
 
@@ -1676,16 +1676,25 @@ class Doku_Handler_Block {
         return $this->calls;
     }
 
+    /**
+     *
+     * @return   bool    true when a p_close() is required
+     */
     function addToStack($newStart = true) {
+        $ret = $this->inParagraph;
         $this->blockStack[] = array($this->atStart, $this->inParagraph);
         $this->atStart = $newStart;
         $this->inParagraph = false;
+
+        return $ret;
     }
 
     function removeFromStack() {
         $state = array_pop($this->blockStack);
         $this->atStart = $state[0];
         $this->inParagraph = $state[1];
+
+        return $this->inParagraph;
     }
 
     function addCall($call) {