GIT 1.1.3
diff --git a/commit.c b/commit.c
index 56efc69..b8bf35e 100644
--- a/commit.c
+++ b/commit.c
@@ -359,8 +359,10 @@
 	parents = commit->parents;
 	commit->object.flags &= ~mark;
 	while (parents) {
-		if (parents->item && parents->item->object.parsed)
-			clear_commit_marks(parents->item, mark);
+		struct commit *parent = parents->item;
+		if (parent && parent->object.parsed &&
+		    (parent->object.flags & mark))
+			clear_commit_marks(parent, mark);
 		parents = parents->next;
 	}
 }
diff --git a/describe.c b/describe.c
index 5548a16..cc95eb0 100644
--- a/describe.c
+++ b/describe.c
@@ -98,7 +98,7 @@
 	return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1;
 }
 
-static void describe(struct commit *cmit)
+static void describe(struct commit *cmit, int last_one)
 {
 	struct commit_list *list;
 	static int initialized = 0;
@@ -124,7 +124,8 @@
 		if (n) {
 			printf("%s-g%s\n", n->path,
 			       find_unique_abbrev(cmit->object.sha1, abbrev));
-			clear_commit_marks(cmit, SEEN);
+			if (!last_one)
+				clear_commit_marks(cmit, SEEN);
 			return;
 		}
 	}
@@ -159,7 +160,7 @@
 		cmit = lookup_commit_reference(sha1);
 		if (!cmit)
 			usage(describe_usage);
-		describe(cmit);
+		describe(cmit, i == argc - 1);
 	}
 	return 0;
 }
diff --git a/diffcore.h b/diffcore.h
index a38acb1..12cd816 100644
--- a/diffcore.h
+++ b/diffcore.h
@@ -15,7 +15,7 @@
  * passed around in one int (high 16-bit for merge and low 16-bit
  * for break).
  */
-#define MAX_SCORE 60000
+#define MAX_SCORE 60000.0
 #define DEFAULT_RENAME_SCORE 30000 /* rename/copy similarity minimum (50%) */
 #define DEFAULT_BREAK_SCORE  30000 /* minimum for break to happen (50%)*/
 #define DEFAULT_MERGE_SCORE  48000 /* maximum for break-merge to happen (80%)*/