diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java
index 356966a..fd7fd44 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java
@@ -49,6 +49,7 @@
 
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.text.MessageFormat;
 
 import org.eclipse.jgit.lib.Constants;
 import org.eclipse.jgit.lib.ObjectId;
@@ -104,16 +105,19 @@
 			else if (0 <= cr)
 				s = cr;
 			else {
-				writer.format(CLIText.get().remoteMessage, pkt);
+				writer.print(MessageFormat.format(CLIText.get().remoteMessage,
+						pkt));
 				writer.println();
 				break;
 			}
 
 			if (pkt.charAt(s) == '\r') {
-				writer.format(CLIText.get().remoteMessage, pkt.substring(0, s));
+				writer.print(MessageFormat.format(CLIText.get().remoteMessage,
+						pkt.substring(0, s)));
 				writer.print('\r');
 			} else {
-				writer.format(CLIText.get().remoteMessage, pkt.substring(0, s));
+				writer.print(MessageFormat.format(CLIText.get().remoteMessage,
+						pkt.substring(0, s)));
 				writer.println();
 			}
 
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java
index 1b1a8c2..1b04989 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java
@@ -114,7 +114,9 @@
 		dst.getConfig().save();
 		db = dst;
 
-		out.format(CLIText.get().initializedEmptyGitRepositoryIn, gitdir.getAbsolutePath());
+		out.print(MessageFormat.format(
+				CLIText.get().initializedEmptyGitRepositoryIn, gitdir
+						.getAbsolutePath()));
 		out.println();
 		out.flush();
 
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/CachedObjectDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/CachedObjectDirectory.java
index f0159f6..a5762b6 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/CachedObjectDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/CachedObjectDirectory.java
@@ -213,8 +213,22 @@
 	}
 
 	@Override
-	boolean insertUnpackedObject(File tmp, ObjectId objectId, boolean force) {
-		return wrapped.insertUnpackedObject(tmp, objectId, force);
+	InsertLooseObjectResult insertUnpackedObject(File tmp, ObjectId objectId,
+			boolean createDuplicate) {
+		InsertLooseObjectResult result = wrapped.insertUnpackedObject(tmp,
+				objectId, createDuplicate);
+		switch (result) {
+		case INSERTED:
+		case EXISTS_LOOSE:
+			if (!unpackedObjects.contains(objectId))
+				unpackedObjects.add(objectId);
+			break;
+
+		case EXISTS_PACKED:
+		case FAILURE:
+			break;
+		}
+		return result;
 	}
 
 	@Override
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileObjectDatabase.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileObjectDatabase.java
index 29c7a25..8bd3751 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileObjectDatabase.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileObjectDatabase.java
@@ -57,6 +57,10 @@
 import org.eclipse.jgit.storage.pack.PackWriter;
 
 abstract class FileObjectDatabase extends ObjectDatabase {
+	static enum InsertLooseObjectResult {
+		INSERTED, EXISTS_PACKED, EXISTS_LOOSE, FAILURE;
+	}
+
 	@Override
 	public ObjectReader newReader() {
 		return new WindowCursor(this);
@@ -249,7 +253,8 @@
 	abstract long getObjectSize2(WindowCursor curs, String objectName,
 			AnyObjectId objectId) throws IOException;
 
-	abstract boolean insertUnpackedObject(File tmp, ObjectId id, boolean force);
+	abstract InsertLooseObjectResult insertUnpackedObject(File tmp,
+			ObjectId id, boolean createDuplicate);
 
 	abstract FileObjectDatabase newCachedFileObjectDatabase();
 
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectory.java
index 372a978..e7ccba0 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectory.java
@@ -455,23 +455,33 @@
 	}
 
 	@Override
-	boolean insertUnpackedObject(File tmp, ObjectId id, boolean force) {
-		if (!force && has(id)) {
-			// Object is already in the repository, remove temporary file.
-			//
+	InsertLooseObjectResult insertUnpackedObject(File tmp, ObjectId id,
+			boolean createDuplicate) {
+		// If the object is already in the repository, remove temporary file.
+		//
+		if (unpackedObjectCache.isUnpacked(id)) {
 			tmp.delete();
-			return true;
+			return InsertLooseObjectResult.EXISTS_LOOSE;
 		}
+		if (!createDuplicate && has(id)) {
+			tmp.delete();
+			return InsertLooseObjectResult.EXISTS_PACKED;
+		}
+
 		tmp.setReadOnly();
 
 		final File dst = fileFor(id);
-		if (force && dst.exists()) {
+		if (dst.exists()) {
+			// We want to be extra careful and avoid replacing an object
+			// that already exists. We can't be sure renameTo() would
+			// fail on all platforms if dst exists, so we check first.
+			//
 			tmp.delete();
-			return true;
+			return InsertLooseObjectResult.EXISTS_LOOSE;
 		}
 		if (tmp.renameTo(dst)) {
 			unpackedObjectCache.add(id);
-			return true;
+			return InsertLooseObjectResult.INSERTED;
 		}
 
 		// Maybe the directory doesn't exist yet as the object
@@ -481,12 +491,12 @@
 		dst.getParentFile().mkdir();
 		if (tmp.renameTo(dst)) {
 			unpackedObjectCache.add(id);
-			return true;
+			return InsertLooseObjectResult.INSERTED;
 		}
 
-		if (!force && has(id)) {
+		if (!createDuplicate && has(id)) {
 			tmp.delete();
-			return true;
+			return InsertLooseObjectResult.EXISTS_PACKED;
 		}
 
 		// The object failed to be renamed into its proper
@@ -495,7 +505,7 @@
 		// fail.
 		//
 		tmp.delete();
-		return false;
+		return InsertLooseObjectResult.FAILURE;
 	}
 
 	boolean tryAgain1() {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectoryInserter.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectoryInserter.java
index d92285d..074ebb9 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectoryInserter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectoryInserter.java
@@ -83,9 +83,18 @@
 		final MessageDigest md = digest();
 		final File tmp = toTemp(md, type, len, is);
 		final ObjectId id = ObjectId.fromRaw(md.digest());
-		if (db.insertUnpackedObject(tmp, id, false /* no duplicate */))
+
+		switch (db.insertUnpackedObject(tmp, id, false /* no duplicate */)) {
+		case INSERTED:
+		case EXISTS_PACKED:
+		case EXISTS_LOOSE:
 			return id;
 
+		case FAILURE:
+		default:
+			break;
+		}
+
 		final File dst = db.fileFor(id);
 		throw new ObjectWritingException("Unable to create new object: " + dst);
 	}
