diff --git a/apidiff/report.go b/apidiff/report.go
index 2917d98..454ff35 100644
--- a/apidiff/report.go
+++ b/apidiff/report.go
@@ -20,32 +20,31 @@
 }
 
 func (r Report) Text(w io.Writer) error {
-	var err error
+	if err := r.TextIncompatible(w); err != nil {
+		return err
+	}
+	return r.TextCompatible(w)
+}
 
-	write := func(s string) {
-		if err == nil {
-			_, err = io.WriteString(w, s)
+func (r Report) TextIncompatible(w io.Writer) error {
+	return r.writeMessages(w, "Incompatible changes:", r.Incompatible)
+}
+
+func (r Report) TextCompatible(w io.Writer) error {
+	return r.writeMessages(w, "Compatible changes:", r.Compatible)
+}
+
+func (r Report) writeMessages(w io.Writer, header string, msgs []string) error {
+	if len(msgs) == 0 {
+		return nil
+	}
+	if _, err := fmt.Fprintf(w, "%s\n", header); err != nil {
+		return err
+	}
+	for _, m := range msgs {
+		if _, err := fmt.Fprintf(w, "- %s\n", m); err != nil {
+			return err
 		}
 	}
-
-	writeslice := func(ss []string) {
-		for _, s := range ss {
-			write("- ")
-			write(s)
-			write("\n")
-		}
-	}
-
-	if len(r.Incompatible) > 0 {
-		write("Incompatible changes:\n")
-		writeslice(r.Incompatible)
-	}
-	if len(r.Compatible) > 0 {
-		if len(r.Incompatible) > 0 {
-			write("\n")
-		}
-		write("Compatible changes:\n")
-		writeslice(r.Compatible)
-	}
-	return err
+	return nil
 }
diff --git a/cmd/apidiff/main.go b/cmd/apidiff/main.go
index 5243e03..724881d 100644
--- a/cmd/apidiff/main.go
+++ b/cmd/apidiff/main.go
@@ -12,7 +12,10 @@
 	"golang.org/x/tools/go/packages"
 )
 
-var exportDataOutfile = flag.String("w", "", "file for export data")
+var (
+	exportDataOutfile = flag.String("w", "", "file for export data")
+	incompatibleOnly  = flag.Bool("incompatible", false, "display only incompatible changes")
+)
 
 func main() {
 	flag.Usage = func() {
@@ -43,7 +46,13 @@
 		newpkg := mustLoadOrRead(flag.Arg(1))
 
 		report := apidiff.Changes(oldpkg, newpkg)
-		if err := report.Text(os.Stdout); err != nil {
+		var err error
+		if *incompatibleOnly {
+			err = report.TextIncompatible(os.Stdout)
+		} else {
+			err = report.Text(os.Stdout)
+		}
+		if err != nil {
 			die("writing report: %v", err)
 		}
 	}
