diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java
index 574abd9..40b2e01 100644
--- a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java
+++ b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.equinox.p2.internal.repository.tools;
 
-import org.eclipse.equinox.p2.metadata.VersionRange;
-
 import java.io.File;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -25,8 +23,7 @@
 import org.eclipse.equinox.internal.p2.repository.helpers.RepositoryHelper;
 import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.internal.repository.mirroring.*;
-import org.eclipse.equinox.p2.metadata.IArtifactKey;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.*;
 import org.eclipse.equinox.p2.metadata.query.InstallableUnitQuery;
 import org.eclipse.equinox.p2.query.IQueryResult;
 import org.eclipse.equinox.p2.query.IQueryable;
@@ -197,7 +194,7 @@
 		return mirrorStatus;
 	}
 
-	private IStatus mirrorArtifacts(IQueryable<IInstallableUnit> slice, IProgressMonitor monitor) throws ProvisionException {
+	private IStatus mirrorArtifacts(IQueryable<IInstallableUnit> slice, IProgressMonitor monitor) {
 		// Obtain ArtifactKeys from IUs
 		IQueryResult<IInstallableUnit> ius = slice.query(InstallableUnitQuery.ANY, monitor);
 		ArrayList<IArtifactKey> keys = new ArrayList<IArtifactKey>();
@@ -228,10 +225,16 @@
 		return result;
 	}
 
-	private IArtifactRepository initializeBaseline() throws ProvisionException {
+	private IArtifactRepository initializeBaseline() {
 		if (baseline == null)
 			return null;
-		return addRepository(getArtifactRepositoryManager(), baseline, 0, null);
+		try {
+			return addRepository(getArtifactRepositoryManager(), baseline, 0, null);
+		} catch (ProvisionException e) {
+			if (mirrorLog != null && e.getStatus() != null)
+				mirrorLog.log(e.getStatus());
+			return null;
+		}
 	}
 
 	private void mirrorMetadata(IQueryable<IInstallableUnit> slice, IProgressMonitor monitor) {
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ant/MirrorTaskTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ant/MirrorTaskTest.java
index 23af940..fd244eb 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ant/MirrorTaskTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/ant/MirrorTaskTest.java
@@ -10,8 +10,6 @@
  *******************************************************************************/
 package org.eclipse.equinox.p2.tests.ant;
 
-import org.eclipse.equinox.p2.metadata.Version;
-
 import java.io.*;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -23,8 +21,7 @@
 import org.eclipse.equinox.internal.p2.metadata.InstallableUnit;
 import org.eclipse.equinox.p2.core.ProvisionException;
 import org.eclipse.equinox.p2.internal.repository.comparator.MD5ArtifactComparator;
-import org.eclipse.equinox.p2.metadata.IArtifactKey;
-import org.eclipse.equinox.p2.metadata.IInstallableUnit;
+import org.eclipse.equinox.p2.metadata.*;
 import org.eclipse.equinox.p2.metadata.query.InstallableUnitQuery;
 import org.eclipse.equinox.p2.query.*;
 import org.eclipse.equinox.p2.repository.artifact.*;
@@ -89,6 +86,23 @@
 		assertEquals("Different number of IUs", getIUCount(sourceRepo2), getIUCount(destinationRepo));
 	}
 
+	public void testMirrorEmptyBaseline() throws Exception {
+		File folder = getTestFolder("MirrorEmptyBaseline");
+		String baseline = "file:" + new File(folder, "base").getAbsolutePath();
+		String dest = "file:" + new File(folder, "destination").getAbsolutePath();
+		String logFile = new File(folder, "log.txt").getAbsolutePath();
+
+		AntTaskElement mirror = new AntTaskElement("p2.artifact.mirror");
+		mirror.addAttribute("source", URIUtil.toUnencodedString(sourceRepo2));
+		mirror.addAttribute("baseline", baseline);
+		mirror.addAttribute("comparatorId", "org.eclipse.equinox.p2.repository.tools.jar.comparator");
+		mirror.addAttribute("destination", dest);
+		mirror.addAttribute("log", logFile);
+		addTask(mirror);
+		runAntTask();
+		assertLogContainsLine(new File(folder, "log.txt"), "No repository found at " + URIUtil.toUnencodedString(URIUtil.fromString(baseline)));
+	}
+
 	/*
 	 * Test we can mirror from a zipped repository
 	 */
