diff --git a/helpers_test.go b/helpers_test.go
index 3175dd1..e492a4e 100644
--- a/helpers_test.go
+++ b/helpers_test.go
@@ -103,7 +103,7 @@
 		})
 }
 
-func (s *HelpersS) TestCheckFailWithExpectedAndBugInfo(c *gocheck.C) {
+func (s *HelpersS) TestCheckFailWithExpectedAndComment(c *gocheck.C) {
 	checker := &MyChecker{result: false}
 	log := "(?s)helpers_test\\.go:[0-9]+:.*\nhelpers_test\\.go:[0-9]+:\n" +
 		"    return c\\.Check\\(1, checker, 2, myComment\\(\"Hello world!\"\\)\\)\n" +
@@ -116,6 +116,20 @@
 		})
 }
 
+func (s *HelpersS) TestCheckFailWithExpectedAndStaticComment(c *gocheck.C) {
+	checker := &MyChecker{result: false}
+	log := "(?s)helpers_test\\.go:[0-9]+:.*\nhelpers_test\\.go:[0-9]+:\n" +
+		"    // Nice leading comment\\.\n" +
+		"    return c\\.Check\\(1, checker, 2\\) // Hello there\n" +
+		"\\.+ myobtained int = 1\n" +
+		"\\.+ myexpected int = 2\n\n"
+	testHelperFailure(c, "Check(1, checker, 2, msg)", false, false, log,
+		func() interface{} {
+			// Nice leading comment.
+			return c.Check(1, checker, 2)  // Hello there
+		})
+}
+
 func (s *HelpersS) TestCheckFailWithoutExpected(c *gocheck.C) {
 	checker := &MyChecker{result: false, info: &gocheck.CheckerInfo{Params: []string{"myvalue"}}}
 	log := "(?s)helpers_test\\.go:[0-9]+:.*\nhelpers_test\\.go:[0-9]+:\n" +
diff --git a/printer.go b/printer.go
index 995b422..103ab14 100644
--- a/printer.go
+++ b/printer.go
@@ -60,23 +60,34 @@
 func (lp *linePrinter) emit() bool {
 	if lp.stmt != nil {
 		lp.trim(lp.stmt)
-		lp.config.Fprint(&lp.output, lp.fset, lp.commentedNode(lp.stmt))
+		lp.printWithComments(lp.stmt)
 		lp.stmt = nil
 		return true
 	}
 	return false
 }
 
-func (lp *linePrinter) commentedNode(n ast.Node) *printer.CommentedNode {
-	first := lp.fset.Position(n.Pos()).Line
-	last := lp.fset.Position(n.End()).Line
+func (lp *linePrinter) printWithComments(n ast.Node) {
+	nfirst := lp.fset.Position(n.Pos()).Line
+	nlast := lp.fset.Position(n.End()).Line
 	for _, g := range lp.fnode.Comments {
-		line := lp.fset.Position(g.Pos()).Line
-		if line >= first && line <= last && n.End() <= g.List[0].Slash {
+		cfirst := lp.fset.Position(g.Pos()).Line
+		clast := lp.fset.Position(g.End()).Line
+		if clast == nfirst-1 && lp.fset.Position(n.Pos()).Column == lp.fset.Position(g.Pos()).Column {
+			for _, c := range g.List {
+				lp.output.WriteString(c.Text)
+				lp.output.WriteByte('\n')
+			}
+		}
+		if cfirst >= nfirst && cfirst <= nlast && n.End() <= g.List[0].Slash {
+			// The printer will not include the comment if it starts past
+			// the node itself. Trick it into printing by overlapping the
+			// slash with the end of the statement.
 			g.List[0].Slash = n.End() - 1
 		}
 	}
-	return &printer.CommentedNode{n, lp.fnode.Comments}
+	node := &printer.CommentedNode{n, lp.fnode.Comments}
+	lp.config.Fprint(&lp.output, lp.fset, node)
 }
 
 func (lp *linePrinter) Visit(n ast.Node) (w ast.Visitor) {
diff --git a/printer_test.go b/printer_test.go
index 48266dc..547a92d 100644
--- a/printer_test.go
+++ b/printer_test.go
@@ -45,6 +45,9 @@
     println(24, func() {
         println(25)
     })
+    // Leading comment
+    // with multiple lines.
+    println(29)  // Comment29
 }
 
 var printLineTests = []struct {
@@ -70,6 +73,7 @@
     {24, "println(24, func() {\n    println(25)\n})"},
     {25, "println(25)"},
     {26, "println(24, func() {\n    println(25)\n})"},
+    {29, "// Leading comment\n// with multiple lines.\nprintln(29) // Comment29"},
 }
 
 func (s *PrinterS) TestPrintLine(c *C) {
