Index: gtkdoc-mkdb.in
===================================================================
--- gtkdoc-mkdb.in	(revision 434)
+++ gtkdoc-mkdb.in	(working copy)
@@ -2809,7 +2809,8 @@
     my $in_comment_block = 0;
     my $symbol;
     my ($in_description, $in_return, $in_since, $in_stability, $in_deprecated);
-    my ($description, $return_desc, $return_start, $since_desc, $stability_desc, $deprecated_desc);
+    my ($description, $return_desc, $return_start, $return_style);
+    my ($since_desc, $stability_desc, $deprecated_desc);
     my $current_param;
     my $ignore_returns;
     my @params;
@@ -2831,6 +2832,7 @@
 		$in_deprecated = 0;
 		$description = "";
 		$return_desc = "";
+		$return_style = "";
 		$since_desc = "";
 		$stability_desc = "";
 		$in_stability = 0;
@@ -2939,10 +2947,21 @@
 	if ($in_return) {
 	    # If we find another valid returns line, we assume that the first
 	    # one was really part of the description.
-	    if (m%^\s*(returns:|return\s+value:|returns\s*)%i) {
+	    if (m%^\s*(returns:|return\s+value:)%i) {
 		$description .= $return_start . $return_desc;
 		$return_start = $1;
+		if ($return_style eq 'sane') {
+		    print <<EOF
+WARNING: Multiple Returns for $symbol
+EOF
+		}
+		$return_style = 'sane';
 		$return_desc = $';
+	    } elsif ($return_style ne 'sane' and m%^\s*(returns\b\s*)%i) {
+		$description .= $return_start . $return_desc;
+		$return_start = $1;
+		$return_style = 'broken';
+		$return_desc = $';
 	    } elsif (m%^\s*since:%i) {
 		$since_desc = $';
 		$in_since = 1;
@@ -2962,9 +2981,10 @@
 	}
 
 	if ($in_since) {
-	    if (m%^\s*(returns:|return\s+value:|returns\s*)%i) {
+	    if (m%^\s*(returns:|return\s+value:|returns\b\s*)%i) {
 		$description .= $return_start . $return_desc;
 		$return_start = $1;
+		$return_style = substr($1, -1) eq ':' ? 'sane' : 'broken';
 		$return_desc = $';
 		$in_return = 1;
 		$in_since = 0;
@@ -2983,9 +3003,10 @@
 	}
 
 	if ($in_stability) {
-	    if (m%^\s*(returns:|return\s+value:|returns\s*)%i) {
+	    if (m%^\s*(returns:|return\s+value:|returns\b\s*)%i) {
 		$description .= $return_start . $return_desc;
 		$return_start = $1;
+		$return_style = substr($1, -1) eq ':' ? 'sane' : 'broken';
 		$return_desc = $';
 		$in_return = 1;
 		$in_stability = 0;
@@ -3004,9 +3025,10 @@
 	}
 
 	if ($in_deprecated) {
-	    if (m%^\s*(returns:|return\s+value:|returns\s*)%i) {
+	    if (m%^\s*(returns:|return\s+value:|returns\b\s*)%i) {
 		$description .= $return_start . $return_desc;
 		$return_start = $1;
+		$return_style = substr($1, -1) eq ':' ? 'sane' : 'broken';
 		$return_desc = $';
 		$in_return = 1;
 		$in_deprecated = 0;
@@ -3030,12 +3052,27 @@
 	    # Get rid of 'Description:'
 	    s%^\s*Description:%%;
 
-	    if (!$ignore_returns && m%^\s*(returns:|return\s+value:|returns\s*)%i) {
+	    if (!$ignore_returns && m%^\s*(returns:|return\s+value:)%i) {
 		$return_start = $1;
+		if ($return_style eq 'sane') {
+		    print <<EOF
+WARNING: Multiple Returns for $symbol
+EOF
+		}
+		$return_style = 'sane';
 		$return_desc = $';
 		$in_return = 1;
 		next;
 	    }
+	    elsif (!$ignore_returns
+		   && $return_style ne 'sane'
+		   && m%^\s*(returns\b\s*)%i) {
+		$return_start = $1;
+		$return_style = 'broken';
+		$return_desc = $';
+		$in_return = 1;
+		next;
+	    }
 	    elsif (m%^\s*since:%i) {
 		$since_desc = $';
 		$in_since = 1;
