diff --git a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-handlers/xwiki-platform-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/DefaultDocumentMergeImporter.java b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-handlers/xwiki-platform-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/DefaultDocumentMergeImporter.java
index 72627eb3270b9ea0f737d5404ff1a99adc1f5e29..7828424db40b4facf37de05e1a67a4a51aa6f99d 100644
--- a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-handlers/xwiki-platform-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/DefaultDocumentMergeImporter.java
+++ b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-handlers/xwiki-platform-extension-handler-xar/src/main/java/org/xwiki/extension/xar/internal/handler/packager/DefaultDocumentMergeImporter.java
@@ -272,7 +272,7 @@ private void saveDocument(XWikiDocument document, String comment, boolean setCre
                 if (document.isNew()) {
                     currentDocument.apply(document);
                     if (setCreator) {
-                        currentDocument.setAuthorReference(document.getCreatorReference());
+                        currentDocument.setCreatorReference(document.getCreatorReference());
                     }
                     currentDocument.setAuthorReference(document.getAuthorReference());
                     currentDocument.setContentAuthorReference(document.getContentAuthorReference());
diff --git a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-handlers/xwiki-platform-extension-handler-xar/src/test/java/org/xwiki/extension/xar/XarExtensionHandlerTest.java b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-handlers/xwiki-platform-extension-handler-xar/src/test/java/org/xwiki/extension/xar/XarExtensionHandlerTest.java
index 351a1a73e5a2c69d8aad5845ae2d50322583346c..074305addbb6b1d1a0c39e72744c543d3ccfaf25 100644
--- a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-handlers/xwiki-platform-extension-handler-xar/src/test/java/org/xwiki/extension/xar/XarExtensionHandlerTest.java
+++ b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-handlers/xwiki-platform-extension-handler-xar/src/test/java/org/xwiki/extension/xar/XarExtensionHandlerTest.java
@@ -284,16 +284,20 @@ public Object invoke(org.jmock.api.Invocation invocation) throws Throwable
             "RegisterMacrosOnImportListener");
     }
 
-    private XarInstalledExtension install(ExtensionId extensionId, String wiki) throws Throwable
+    private XarInstalledExtension install(ExtensionId extensionId, String wiki, DocumentReference user)
+        throws Throwable
     {
-        return installOnNamespace(extensionId, wiki != null ? "wiki:" + wiki : null);
+        return installOnNamespace(extensionId, wiki != null ? "wiki:" + wiki : null, user);
     }
 
-    private XarInstalledExtension installOnNamespace(ExtensionId extensionId, String namespace) throws Throwable
+    private XarInstalledExtension installOnNamespace(ExtensionId extensionId, String namespace, DocumentReference user)
+        throws Throwable
     {
         InstallRequest installRequest = new InstallRequest();
-        installRequest.setProperty("user.reference", getContext().getUserReference());
-        installRequest.setProperty("checkrights", true);
+        if (user != null) {
+            installRequest.setProperty("user.reference", getContext().getUserReference());
+            installRequest.setProperty("checkrights", true);
+        }
         installRequest.addExtension(extensionId);
         if (namespace != null) {
             installRequest.addNamespace(namespace);
@@ -348,7 +352,7 @@ public void testInstallOnWiki() throws Throwable
 
         // install
 
-        install(this.localXarExtensiontId1, "wiki");
+        install(this.localXarExtensiontId1, "wiki", this.contextUser);
 
         // validate
 
@@ -449,6 +453,123 @@ public void testInstallOnWiki() throws Throwable
         Assert.assertTrue("Document is not hidden", hiddenpage.isHidden());
     }
 
+    @Test
+    public void testInstallOnWikiWithoutAuthor() throws Throwable
+    {
+        XWikiDocument existingDocument = new XWikiDocument(new DocumentReference("wiki", "space", "page"));
+        BaseObject object = new BaseObject();
+        object.setXClassReference(new DocumentReference("wiki", "space", "class"));
+        existingDocument.addXObject(object);
+        existingDocument.setCreatorReference(new DocumentReference("wiki", "space", "existingcreator"));
+        this.mockXWiki.saveDocument(existingDocument, "", getContext());
+
+        // install
+
+        install(this.localXarExtensiontId1, "wiki", null);
+
+        // validate
+        
+        DocumentReference authorReference = new DocumentReference("wiki", "XWiki", "author");
+        DocumentReference creatorReference = new DocumentReference("wiki", "XWiki", "creator");
+        DocumentReference contentAuthorReference = new DocumentReference("wiki", "XWiki", "contentAuthor");
+
+        // space.page
+        XWikiDocument page = this.mockXWiki.getDocument(existingDocument.getDocumentReference(), getContext());
+
+        Assert.assertFalse("Document wiki:space.page has not been saved in the database", page.isNew());
+
+        Assert.assertNull(page.getXObject(object.getXClassReference()));
+
+        Assert.assertEquals("Wrong content", "content", page.getContent());
+        Assert.assertEquals("Wrong creator", new DocumentReference("wiki", "space", "existingcreator"),
+            page.getCreatorReference());
+        Assert.assertEquals("Wrong author", authorReference, page.getAuthorReference());
+        Assert.assertEquals("Wrong content author", contentAuthorReference, page.getContentAuthorReference());
+        Assert.assertEquals("Wrong version", "2.1", page.getVersion());
+        Assert.assertFalse("Document is hidden", page.isHidden());
+
+        BaseClass baseClass = page.getXClass();
+        Assert.assertNotNull(baseClass.getField("property"));
+        Assert.assertEquals("property", baseClass.getField("property").getName());
+        Assert.assertSame(NumberClass.class, baseClass.getField("property").getClass());
+
+        // space.pagewithattachment
+
+        XWikiDocument pagewithattachment =
+            this.mockXWiki.getDocument(new DocumentReference("wiki", "space", "pagewithattachment"), getContext());
+        Assert.assertFalse(pagewithattachment.isNew());
+        Assert.assertEquals("Wrong version", "2.1", pagewithattachment.getVersion());
+        Assert.assertEquals("Wrong creator", creatorReference, pagewithattachment.getCreatorReference());
+        Assert.assertEquals("Wrong author", authorReference, pagewithattachment.getAuthorReference());
+        Assert.assertEquals("Wrong content author", contentAuthorReference, pagewithattachment.getContentAuthorReference());
+
+        XWikiAttachment attachment = pagewithattachment.getAttachment("attachment.txt");
+        Assert.assertNotNull(attachment);
+        Assert.assertEquals("attachment.txt", attachment.getFilename());
+        Assert.assertEquals(18, attachment.getContentSize(getContext()));
+        Assert.assertEquals("attachment content", IOUtils.toString(attachment.getContentInputStream(getContext())));
+
+        // space1.page1
+
+        XWikiDocument page1 =
+            this.mockXWiki.getDocument(new DocumentReference("wiki", "space1", "page1"), getContext());
+
+        Assert.assertFalse("Document wiki:space1.page1 has not been saved in the database", page1.isNew());
+
+        // translated.translated
+        DocumentReference translatedReference = new DocumentReference("wiki", "translated", "translated");
+        XWikiDocument defaultTranslated = this.mockXWiki.getDocument(translatedReference, getContext());
+
+        Assert.assertNotNull("Document wiki:translated.translated has not been saved in the database",
+            defaultTranslated);
+        Assert.assertFalse("Document wiki:translated.translated has not been saved in the database",
+            defaultTranslated.isNew());
+
+        Assert.assertEquals("Wrong content", "default content", defaultTranslated.getContent());
+        Assert.assertEquals("Wrong creator", creatorReference, defaultTranslated.getCreatorReference());
+        Assert.assertEquals("Wrong author", authorReference, defaultTranslated.getAuthorReference());
+        Assert.assertEquals("Wrong content author", contentAuthorReference, defaultTranslated.getContentAuthorReference());
+        Assert.assertEquals("Wrong version", "1.1", defaultTranslated.getVersion());
+
+        // translated.translated.tr
+        XWikiDocument translated = this.documents.get(translatedReference).get("tr");
+
+        Assert.assertNotNull("Document wiki:translated.translated in langauge tr has not been saved in the database",
+            translated);
+        Assert.assertFalse("Document wiki:translated.translated in langauge tr has not been saved in the database",
+            translated.isNew());
+
+        Assert.assertEquals("Wrong content", "tr content", translated.getContent());
+        Assert.assertEquals("Wrong creator", creatorReference, translated.getCreatorReference());
+        Assert.assertEquals("Wrong author", authorReference, translated.getAuthorReference());
+        Assert.assertEquals("Wrong content author", contentAuthorReference, translated.getContentAuthorReference());
+        Assert.assertEquals("Wrong version", "1.1", translated.getVersion());
+
+        // translated.translated.fr
+        XWikiDocument translated2 = this.documents.get(translatedReference).get("fr");
+
+        Assert.assertNotNull("Document wiki:translated.translated in language fr has not been saved in the database",
+            translated2);
+        Assert.assertFalse("Document wiki:translated.translated in langauge fr has not been saved in the database",
+            translated2.isNew());
+
+        Assert.assertEquals("Wrong content", "fr content", translated2.getContent());
+        Assert.assertEquals("Wrong creator", creatorReference, translated2.getCreatorReference());
+        Assert.assertEquals("Wrong author", authorReference, translated2.getAuthorReference());
+        Assert.assertEquals("Wrong content author", contentAuthorReference, translated2.getContentAuthorReference());
+        Assert.assertEquals("Wrong version", "1.1", translated2.getVersion());
+
+        // space.hiddenpage
+
+        XWikiDocument hiddenpage =
+            this.mockXWiki.getDocument(new DocumentReference("wiki", "space", "hiddenpage"), getContext());
+
+        Assert.assertNotNull("Document wiki:space.hiddenpage has not been saved in the database", hiddenpage);
+        Assert.assertFalse("Document wiki:space.hiddenpage has not been saved in the database", hiddenpage.isNew());
+
+        Assert.assertTrue("Document is not hidden", hiddenpage.isHidden());
+    }
+
     @Test
     public void testUpgradeOnWiki() throws Throwable
     {
@@ -462,11 +583,11 @@ public void testUpgradeOnWiki() throws Throwable
             }
         });
 
-        install(this.localXarExtensiontId1, "wiki");
+        install(this.localXarExtensiontId1, "wiki", this.contextUser);
 
         // upgrade
 
-        install(this.localXarExtensiontId2, "wiki");
+        install(this.localXarExtensiontId2, "wiki", this.contextUser);
 
         // validate
 
@@ -513,7 +634,7 @@ public void testUninstallFromWiki() throws Throwable
             }
         });
 
-        install(this.localXarExtensiontId1, "wiki");
+        install(this.localXarExtensiontId1, "wiki", this.contextUser);
 
         // uninstall
 
@@ -557,7 +678,7 @@ public void testInstallOnRoot() throws Throwable
 
         // install
 
-        install(this.localXarExtensiontId1, null);
+        install(this.localXarExtensiontId1, null, this.contextUser);
 
         // validate
 
@@ -682,7 +803,7 @@ public void testInstallOnRootWithoutAdminRights() throws Throwable
             }
         });
 
-        install(this.localXarExtensiontId1, null);
+        install(this.localXarExtensiontId1, null, this.contextUser);
     }
 
     // uninstall
@@ -699,13 +820,13 @@ public void testInstallOnWikiWithoutAdminRights() throws Throwable
             }
         });
 
-        install(this.localXarExtensiontId1, "wiki");
+        install(this.localXarExtensiontId1, "wiki", this.contextUser);
     }
 
     @Test(expected = InstallException.class)
     public void testInstallOnUnsupportedNamespace() throws Throwable
     {
-        installOnNamespace(this.localXarExtensiontId1, "unsupportednamespace");
+        installOnNamespace(this.localXarExtensiontId1, "unsupportednamespace", this.contextUser);
     }
 
     // uninstall
@@ -725,7 +846,7 @@ public void testUninstallOnRootWithoutAdminRights() throws Throwable
             }
         });
 
-        install(this.localXarExtensiontId1, null);
+        install(this.localXarExtensiontId1, null, this.contextUser);
 
         getMockery().checking(new Expectations()
         {
@@ -751,7 +872,7 @@ public void testUninstallOnWikiWithoutAdminRights() throws Throwable
             }
         });
 
-        install(this.localXarExtensiontId1, "wiki");
+        install(this.localXarExtensiontId1, "wiki", this.contextUser);
 
         getMockery().checking(new Expectations()
         {