diff --git a/src/main/java/org/apache/creadur/tentacles/Configuration.java b/src/main/java/org/apache/creadur/tentacles/Configuration.java
index d6c8551..e2d7f4c 100644
--- a/src/main/java/org/apache/creadur/tentacles/Configuration.java
+++ b/src/main/java/org/apache/creadur/tentacles/Configuration.java
@@ -41,12 +41,12 @@
         return uri;
     }
 
-    private final URI staging;
+    private final URI stagingRepositoryURI;
     private final String rootDirectoryForLocalOutput;
     private final String fileRepositoryPathNameFilter;
 
     public Configuration(final String... args) throws URISyntaxException {
-        this.staging = toURI(args[ARGUMENT_INDEX_FOR_URI_CONFIGURATION]);
+        this.stagingRepositoryURI = toURI(args[ARGUMENT_INDEX_FOR_URI_CONFIGURATION]);
         this.rootDirectoryForLocalOutput = rootDirectoryForLocalOutput(args);
         this.fileRepositoryPathNameFilter =
                 System.getProperty(
@@ -58,8 +58,8 @@
         return this.fileRepositoryPathNameFilter;
     }
 
-    public URI getStaging() {
-        return this.staging;
+    public URI getStagingRepositoryURI() {
+        return this.stagingRepositoryURI;
     }
 
     public String getRootDirectoryForLocalOutput() {
@@ -72,7 +72,7 @@
             rootDirectoryForLocal =
                     args[ARGUMENT_INDEX_FOR_LOCAL_ROOT_DIRECTORY];
         } else {
-            rootDirectoryForLocal = new File(this.staging.getPath()).getName();
+            rootDirectoryForLocal = new File(this.stagingRepositoryURI.getPath()).getName();
         }
         return rootDirectoryForLocal;
     }
diff --git a/src/main/java/org/apache/creadur/tentacles/Main.java b/src/main/java/org/apache/creadur/tentacles/Main.java
index 5988e5c..5bafc86 100644
--- a/src/main/java/org/apache/creadur/tentacles/Main.java
+++ b/src/main/java/org/apache/creadur/tentacles/Main.java
@@ -82,8 +82,9 @@
         Files.mkdirs(this.repository);
         Files.mkdirs(this.content);
 
-        log.info("Repo: " + this.configuration.getStaging());
-        log.info("Local: " + this.local);
+        log.info("Remote repository: "
+                + this.configuration.getStagingRepositoryURI());
+        log.info("Local root directory: " + this.local);
 
         this.reports = new Reports();
 
@@ -327,9 +328,11 @@
     private void prepare() throws URISyntaxException, IOException {
         final Set<File> files = new HashSet<File>();
 
-        if (this.configuration.getStaging().toString().startsWith("http")) {
+        if (this.configuration.getStagingRepositoryURI().toString()
+                .startsWith("http")) {
             final Set<URI> resources =
-                    this.client.crawl(this.configuration.getStaging());
+                    this.client.crawl(this.configuration
+                            .getStagingRepositoryURI());
 
             for (final URI uri : resources) {
                 if (!uri.getPath().matches(".*(war|jar|zip)")) {
@@ -337,14 +340,16 @@
                 }
                 files.add(download(uri));
             }
-        } else if (this.configuration.getStaging().toString()
+        } else if (this.configuration.getStagingRepositoryURI().toString()
                 .startsWith("file:")) {
-            final File file = new File(this.configuration.getStaging());
+            final File file =
+                    new File(this.configuration.getStagingRepositoryURI());
             final List<File> collect = Files.collect(file, new FileFilter() {
                 @Override
                 public boolean accept(final File pathname) {
                     final String path = pathname.getAbsolutePath();
-                    return path.matches(Main.this.configuration.getFileRepositoryPathNameFilter())
+                    return path.matches(Main.this.configuration
+                            .getFileRepositoryPathNameFilter())
                             && isValidArchive(path);
                 }
             });
@@ -782,8 +787,9 @@
     private File getFile(final URI uri) {
         final String name =
                 uri.toString()
-                        .replace(this.configuration.getStaging().toString(), "")
-                        .replaceFirst("^/", "");
+                        .replace(
+                                this.configuration.getStagingRepositoryURI()
+                                        .toString(), "").replaceFirst("^/", "");
         return new File(this.repository, name);
     }
 
