diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectDirectory.java
index 8f96ef5f067597ce2f2638fbac7affed2a634e79..024bd15b038a9a317c3f2f48b076d490fe1e8972 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectDirectory.java
@@ -292,7 +292,20 @@ private void insertPack(final PackFile pf) {
 		PackList o, n;
 		do {
 			o = packList.get();
+
+			// If the pack in question is already present in the list
+			// (picked up by a concurrent thread that did a scan?) we
+			// do not want to insert it a second time.
+			//
 			final PackFile[] oldList = o.packs;
+			final String name = pf.getPackFile().getName();
+			for (PackFile p : oldList) {
+				if (PackFile.SORT.compare(pf, p) < 0)
+					break;
+				if (name.equals(p.getPackFile().getName()))
+					return;
+			}
+
 			final PackFile[] newList = new PackFile[1 + oldList.length];
 			newList[0] = pf;
 			System.arraycopy(oldList, 0, newList, 1, oldList.length);