diff --git a/maud_macros/src/lib.rs b/maud_macros/src/lib.rs
index cd5b3de..8a450eb 100644
--- a/maud_macros/src/lib.rs
+++ b/maud_macros/src/lib.rs
@@ -1,6 +1,6 @@
 #![crate_type = "dylib"]
 #![feature(plugin_registrar, quote)]
-#![feature(collections, core, rustc_private)]
+#![feature(collections, rustc_private)]
 
 extern crate syntax;
 extern crate rustc;
diff --git a/maud_macros/src/parse.rs b/maud_macros/src/parse.rs
index 84d674e..261ec3a 100644
--- a/maud_macros/src/parse.rs
+++ b/maud_macros/src/parse.rs
@@ -1,3 +1,4 @@
+use std::mem;
 use syntax::ast::{Expr, ExprParen, Lit, Stmt, TokenTree, TtDelimited, TtToken};
 use syntax::codemap::Span;
 use syntax::ext::base::ExtCtxt;
@@ -193,10 +194,10 @@ impl<'cx, 's, 'i> Parser<'cx, 's, 'i> {
                 self.render.attribute_start(name.as_str());
                 {
                     // Parse a value under an attribute context
-                    let old_in_attr = self.in_attr;
-                    self.in_attr = true;
+                    let in_attr = true;
+                    mem::swap(&mut self.in_attr, &mut in_attr);
                     self.markup();
-                    self.in_attr = old_in_attr;
+                    mem::swap(&mut self.in_attr, &mut in_attr);
                 }
                 self.render.attribute_end();
             },
@@ -229,7 +230,7 @@ impl<'cx, 's, 'i> Parser<'cx, 's, 'i> {
             in_attr: self.in_attr,
             input: tts,
             span: sp,
-            render: Renderer::new(self.render.cx),
+            render: self.render.fork(),
         };
         parse.markups();
         parse.into_render().into_stmts()