diff --git jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/PersistenceCopier.java jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/PersistenceCopier.java
index 152bf70f6..138c78463 100644
--- jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/PersistenceCopier.java
+++ jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/PersistenceCopier.java
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.core.persistence;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Arrays;
 import java.util.HashSet;
 import java.util.Set;
 
@@ -150,6 +151,7 @@ public class PersistenceCopier {
                 targetState.setType(sourceState.getType());
                 targetState.setMultiValued(sourceState.isMultiValued());
                 InternalValue[] values = sourceState.getValues();
+                values = Arrays.copyOf(values, values.length);
                 if (sourceState.getType() == PropertyType.BINARY) {
                     for (int i = 0; i < values.length; i++) {
                         InputStream stream = values[i].getStream();
diff --git jackrabbit-core/src/test/java/org/apache/jackrabbit/core/RepositoryCopierTest.java jackrabbit-core/src/test/java/org/apache/jackrabbit/core/RepositoryCopierTest.java
index f4b7dfb94..e82793fee 100644
--- jackrabbit-core/src/test/java/org/apache/jackrabbit/core/RepositoryCopierTest.java
+++ jackrabbit-core/src/test/java/org/apache/jackrabbit/core/RepositoryCopierTest.java
@@ -18,6 +18,7 @@ package org.apache.jackrabbit.core;
 
 import java.io.ByteArrayInputStream;
 import java.io.File;
+import java.io.IOException;
 import java.io.InputStream;
 import java.math.BigDecimal;
 import java.util.Calendar;
@@ -49,7 +50,8 @@ public class RepositoryCopierTest extends TestCase {
 
     private static final File SOURCE = new File(BASE, "source");
 
-    private static final File TARGET = new File(BASE, "target");
+    private static final File TARGET1 = new File(BASE, "target1");
+    private static final File TARGET2 = new File(BASE, "target2");
 
     private static final Calendar DATE = Calendar.getInstance();
 
@@ -61,7 +63,8 @@ public class RepositoryCopierTest extends TestCase {
 
     private String identifier;
 
-    protected void setUp() {
+    protected void setUp() throws IOException {
+        FileUtils.deleteDirectory(BASE);
         BASE.mkdirs();
     }
 
@@ -70,80 +73,97 @@ public class RepositoryCopierTest extends TestCase {
     }
 
     public void testRepositoryCopy() throws Exception {
-        createSourceRepository();
-        RepositoryCopier.copy(SOURCE, TARGET);
-        verifyTargetRepository();
+        RepositoryImpl repository = createSourceRepository();
+        repository.shutdown();
+
+        RepositoryCopier.copy(SOURCE, TARGET1);
+        verifyTargetRepository(TARGET1);
+    }
+
+    public void testRepositoryCopyWithDeleteTarget() throws Exception {
+        RepositoryImpl repository = createSourceRepository();
+
+        try {
+            RepositoryCopier.copy(repository, TARGET1);
+            verifyTargetRepository(TARGET1);
+
+            FileUtils.deleteDirectory(TARGET1);
+
+            RepositoryCopier.copy(repository, TARGET2);
+            verifyTargetRepository(TARGET2);
+        }finally {
+            repository.shutdown();
+        }
     }
 
-    private void createSourceRepository() throws Exception {
+
+    private RepositoryImpl createSourceRepository() throws Exception {
         RepositoryImpl repository = RepositoryImpl.create(
                 RepositoryConfig.install(SOURCE));
+
+        Session session = repository.login(CREDENTIALS);
         try {
-            Session session = repository.login(CREDENTIALS);
+            NamespaceRegistry registry =
+                session.getWorkspace().getNamespaceRegistry();
+            registry.registerNamespace("test", "http://www.example.org/");
+
+            NodeTypeManager manager =
+                session.getWorkspace().getNodeTypeManager();
+            NodeTypeTemplate template = manager.createNodeTypeTemplate();
+            template.setName("test:unstructured");
+            template.setDeclaredSuperTypeNames(
+                    new String[] { "nt:unstructured" });
+            manager.registerNodeType(template, false);
+
+            Node root = session.getRootNode();
+
+            Node referenceable =
+                root.addNode("referenceable", "test:unstructured");
+            referenceable.addMixin(NodeType.MIX_REFERENCEABLE);
+            session.save();
+            identifier = referenceable.getIdentifier();
+
+            Node properties = root.addNode("properties", "test:unstructured");
+            properties.setProperty("boolean", true);
+            Binary binary = session.getValueFactory().createBinary(
+                    new ByteArrayInputStream(BINARY));
             try {
-                NamespaceRegistry registry =
-                    session.getWorkspace().getNamespaceRegistry();
-                registry.registerNamespace("test", "http://www.example.org/");
+                properties.setProperty("binary", binary);
+            } finally {
+                binary.dispose();
+            }
+            properties.setProperty("date", DATE);
+            properties.setProperty("decimal", new BigDecimal(123));
+            properties.setProperty("double", Math.PI);
+            properties.setProperty("long", 9876543210L);
+            properties.setProperty("reference", referenceable);
+            properties.setProperty("string", "test");
+            properties.setProperty("multiple", "a,b,c".split(","));
+            session.save();
 
-                NodeTypeManager manager =
-                    session.getWorkspace().getNodeTypeManager();
-                NodeTypeTemplate template = manager.createNodeTypeTemplate();
-                template.setName("test:unstructured");
-                template.setDeclaredSuperTypeNames(
-                        new String[] { "nt:unstructured" });
-                manager.registerNodeType(template, false);
-
-                Node root = session.getRootNode();
-
-                Node referenceable =
-                    root.addNode("referenceable", "test:unstructured");
-                referenceable.addMixin(NodeType.MIX_REFERENCEABLE);
-                session.save();
-                identifier = referenceable.getIdentifier();
-
-                Node properties = root.addNode("properties", "test:unstructured");
-                properties.setProperty("boolean", true);
-                Binary binary = session.getValueFactory().createBinary(
-                        new ByteArrayInputStream(BINARY));
-                try {
-                    properties.setProperty("binary", binary);
-                } finally {
-                    binary.dispose();
-                }
-                properties.setProperty("date", DATE);
-                properties.setProperty("decimal", new BigDecimal(123));
-                properties.setProperty("double", Math.PI);
-                properties.setProperty("long", 9876543210L);
-                properties.setProperty("reference", referenceable);
-                properties.setProperty("string", "test");
-                properties.setProperty("multiple", "a,b,c".split(","));
-                session.save();
-
-                binary = properties.getProperty("binary").getBinary();
+            binary = properties.getProperty("binary").getBinary();
+            try {
+                InputStream stream = binary.getStream();
                 try {
-                    InputStream stream = binary.getStream();
-                    try {
-                        for (int i = 0; i < BINARY.length; i++) {
-                            assertEquals(BINARY[i], (byte) stream.read());
-                        }
-                        assertEquals(-1, stream.read());
-                    } finally {
-                        stream.close();
+                    for (int i = 0; i < BINARY.length; i++) {
+                        assertEquals(BINARY[i], (byte) stream.read());
                     }
+                    assertEquals(-1, stream.read());
                 } finally {
-                    binary.dispose();
+                    stream.close();
                 }
             } finally {
-                session.logout();
+                binary.dispose();
             }
         } finally {
-            repository.shutdown();
+            session.logout();
         }
+        return repository;
     }
 
-    private void verifyTargetRepository() throws Exception {
+    private void verifyTargetRepository(File target) throws Exception {
         RepositoryImpl repository = RepositoryImpl.create(
-                RepositoryConfig.create(TARGET));
+                RepositoryConfig.create(target));
         try {
             Session session = repository.login(CREDENTIALS);
             try {
