diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ResetCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ResetCommandTest.java
index 3b0e7bd..dd6fc67 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ResetCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/ResetCommandTest.java
@@ -257,6 +257,36 @@ public void testMixedResetRetainsSizeAndModifiedTime() throws Exception {
 	}
 
 	@Test
+	public void testMixedResetWithUnmerged() throws Exception {
+		git = new Git(db);
+
+		String file = "a.txt";
+		writeTrashFile(file, "data");
+		String file2 = "b.txt";
+		writeTrashFile(file2, "data");
+
+		git.add().addFilepattern(file).addFilepattern(file2).call();
+		git.commit().setMessage("commit").call();
+
+		DirCache index = db.lockDirCache();
+		DirCacheBuilder builder = index.builder();
+		builder.add(createEntry(file, FileMode.REGULAR_FILE, 1, ""));
+		builder.add(createEntry(file, FileMode.REGULAR_FILE, 2, ""));
+		builder.add(createEntry(file, FileMode.REGULAR_FILE, 3, ""));
+		assertTrue(builder.commit());
+
+		assertEquals("[a.txt, mode:100644, stage:1]"
+				+ "[a.txt, mode:100644, stage:2]"
+				+ "[a.txt, mode:100644, stage:3]",
+				indexState(0));
+
+		git.reset().setMode(ResetType.MIXED).call();
+
+		assertEquals("[a.txt, mode:100644]" + "[b.txt, mode:100644]",
+				indexState(0));
+	}
+
+	@Test
 	public void testPathsReset() throws Exception {
 		setupRepository();
 
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/ResetCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/ResetCommand.java
index 7f5eb02..36c3334 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/ResetCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/ResetCommand.java
@@ -54,9 +54,6 @@
 import org.eclipse.jgit.dircache.DirCacheBuildIterator;
 import org.eclipse.jgit.dircache.DirCacheBuilder;
 import org.eclipse.jgit.dircache.DirCacheCheckout;
-import org.eclipse.jgit.dircache.DirCacheEditor;
-import org.eclipse.jgit.dircache.DirCacheEditor.DeletePath;
-import org.eclipse.jgit.dircache.DirCacheEditor.PathEdit;
 import org.eclipse.jgit.dircache.DirCacheEntry;
 import org.eclipse.jgit.dircache.DirCacheIterator;
 import org.eclipse.jgit.internal.JGitText;
@@ -313,7 +310,7 @@ private void resetIndex(RevCommit commit) throws IOException {
 		DirCache dc = repo.lockDirCache();
 		TreeWalk walk = null;
 		try {
-			DirCacheEditor editor = dc.editor();
+			DirCacheBuilder builder = dc.builder();
 
 			walk = new TreeWalk(repo);
 			walk.addTree(commit.getTree());
@@ -324,7 +321,7 @@ private void resetIndex(RevCommit commit) throws IOException {
 				AbstractTreeIterator cIter = walk.getTree(0,
 						AbstractTreeIterator.class);
 				if (cIter == null) {
-					editor.add(new DeletePath(walk.getPathString()));
+					// Not in commit, don't add to new index
 					continue;
 				}
 
@@ -340,16 +337,10 @@ private void resetIndex(RevCommit commit) throws IOException {
 					entry.setLength(indexEntry.getLength());
 				}
 
-				editor.add(new PathEdit(entry) {
-
-					@Override
-					public void apply(DirCacheEntry ent) {
-						ent.copyMetaData(entry);
-					}
-				});
+				builder.add(entry);
 			}
 
-			editor.commit();
+			builder.commit();
 		} finally {
 			dc.unlock();
 			if (walk != null)
