diff --git a/.travis.yml b/.travis.yml
index 73a0e4b..b67e5f7 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,3 +1,3 @@
 language: rust
 script:
-  - ( cd maud_macros && cargo test --features print-expansion --verbose )
+  - ( cd maud_macros && cargo test --verbose )
diff --git a/maud_macros/Cargo.toml b/maud_macros/Cargo.toml
index 4f50219..e682a62 100644
--- a/maud_macros/Cargo.toml
+++ b/maud_macros/Cargo.toml
@@ -12,9 +12,6 @@ description = """
 Compile-time HTML templates.
 """
 
-[features]
-print-expansion = []
-
 [dependencies.maud]
 path = "../maud"
 version = "=0.4.0"
diff --git a/maud_macros/src/lib.rs b/maud_macros/src/lib.rs
index 49ecf90..2f27d9b 100644
--- a/maud_macros/src/lib.rs
+++ b/maud_macros/src/lib.rs
@@ -16,15 +16,26 @@ use rustc::plugin::Registry;
 mod parse;
 mod render;
 
-fn expand_html<'cx>(cx: &'cx mut ExtCtxt, sp: Span, args: &[TokenTree]) -> Box<MacResult + 'cx> {
+fn expand_html_common<'cx>(cx: &'cx mut ExtCtxt, sp: Span, args: &[TokenTree],
+                           debug: bool) -> Box<MacResult + 'cx> {
     let expr = parse::parse(cx, args, sp);
-    if cfg!(feature = "print-expansion") {
-        println!("{}", pprust::expr_to_string(&expr));
+    if debug {
+        cx.span_note(sp, &format!("expansion:\n{}",
+                                  pprust::expr_to_string(&expr)));
     }
     MacEager::expr(expr)
 }
 
+fn expand_html<'cx>(cx: &'cx mut ExtCtxt, sp: Span, args: &[TokenTree]) -> Box<MacResult + 'cx> {
+    expand_html_common(cx, sp, args, false)
+}
+
+fn expand_html_debug<'cx>(cx: &'cx mut ExtCtxt, sp: Span, args: &[TokenTree]) -> Box<MacResult + 'cx> {
+    expand_html_common(cx, sp, args, true)
+}
+
 #[plugin_registrar]
 pub fn plugin_registrar(reg: &mut Registry) {
     reg.register_macro("html", expand_html);
+    reg.register_macro("html_debug", expand_html_debug);
 }