diff --git a/status-printer/src/main/java/org/apache/felix/status/PrinterMode.java b/status-printer/src/main/java/org/apache/felix/status/PrinterMode.java
index 40250f2..164faa1 100644
--- a/status-printer/src/main/java/org/apache/felix/status/PrinterMode.java
+++ b/status-printer/src/main/java/org/apache/felix/status/PrinterMode.java
@@ -23,8 +23,9 @@
  */
 public enum PrinterMode {
 
-    TEXT,       // plain text
-    HTML_BODY,  // HTML which can be placed inside a HTML body element (no external references)
-    JSON,       // JSON output
-    ZIP_FILE    // file content for a zip
+    TEXT,          // plain text
+    HTML_BODY,     // HTML which can be placed inside a HTML body element (no external references)
+    JSON,          // JSON output
+    ZIP_FILE_BIN,  // file content for a zip
+    ZIP_FILE_JSON  // json file content for a zip
 }
diff --git a/status-printer/src/main/java/org/apache/felix/status/ZipAttachmentProvider.java b/status-printer/src/main/java/org/apache/felix/status/ZipAttachmentProvider.java
index 37cb6b8..b78243b 100644
--- a/status-printer/src/main/java/org/apache/felix/status/ZipAttachmentProvider.java
+++ b/status-printer/src/main/java/org/apache/felix/status/ZipAttachmentProvider.java
@@ -29,7 +29,9 @@
  *
  * A service implementing this method must still register itself
  * as a {@link StatusPrinter} but not as a
- * {@link ZipAttachmentProvider} service.
+ * {@link ZipAttachmentProvider} service and the provider
+ * should either support {@link PrinterMode.ZIP_FILE_JSON}
+ * or {@link PrinterMode.ZIP_FILE_BIN}
  */
 public interface ZipAttachmentProvider extends StatusPrinter {
 
diff --git a/status-printer/src/main/java/org/apache/felix/status/impl/AbstractWebConsolePlugin.java b/status-printer/src/main/java/org/apache/felix/status/impl/AbstractWebConsolePlugin.java
index 3b62da8..5f88bb4 100644
--- a/status-printer/src/main/java/org/apache/felix/status/impl/AbstractWebConsolePlugin.java
+++ b/status-printer/src/main/java/org/apache/felix/status/impl/AbstractWebConsolePlugin.java
@@ -141,7 +141,9 @@
             zip.closeEntry();
 
             final ZipConfigurationWriter pw = new ZipConfigurationWriter( zip );
-            printConfigurationStatus( pw, PrinterMode.ZIP_FILE, handler );
+            printConfigurationStatus( pw, PrinterMode.ZIP_FILE_BIN, handler );
+            pw.counter = 0;
+            printConfigurationStatus( pw, PrinterMode.ZIP_FILE_JSON, handler );
 
             zip.finish();
         } else if ( request.getPathInfo().endsWith( ".nfo" ) ) {
@@ -204,7 +206,7 @@
             pw.print("<button type=\"button\" class=\"downloadFullZip\" style=\"float: right; margin-right: 30px; margin-top: 5px;\">Download Full Zip</button>");
             pw.print("<button type=\"button\" class=\"downloadFullTxt\" style=\"float: right; margin-right: 30px; margin-top: 5px;\">Download Full Text</button>");
 
-            if ( handler.supports(PrinterMode.ZIP_FILE) ) {
+            if ( handler.supports(PrinterMode.ZIP_FILE_BIN) || handler.supports(PrinterMode.ZIP_FILE_JSON) ) {
                 pw.print("<button type=\"button\" class=\"downloadZip\" style=\"float: right; margin-right: 30px; margin-top: 5px;\">Download As Zip</button>");
             }
             if ( handler.supports(PrinterMode.TEXT ) ) {
@@ -429,18 +431,23 @@
                 final PrinterMode mode,
                 final StatusPrinterHandler handler)
         throws IOException {
-            super.printStatus(mode, handler);
             final String title = getFormattedTitle(handler.getTitle());
-            handler.addAttachments(title.concat("/"), this.zip);
-            if ( handler.supports(PrinterMode.JSON) ) {
+            if ( mode == PrinterMode.ZIP_FILE_BIN ) {
+                super.printStatus(mode, handler);
+                handler.addAttachments(title.concat("/"), this.zip);
+            } else {
+                counter++;
                 final String name = "json/".concat(title).concat(".json");
 
                 final ZipEntry entry = new ZipEntry( name );
                 zip.putNextEntry( entry );
-                handler.print(PrinterMode.JSON, this);
+                handler.print(PrinterMode.ZIP_FILE_JSON, this);
                 flush();
 
                 zip.closeEntry();
+                if ( !handler.supports(PrinterMode.ZIP_FILE_BIN) ) {
+                    handler.addAttachments(title.concat("/"), this.zip);
+                }
             }
         }
     }
diff --git a/status-printer/src/main/java/org/apache/felix/status/impl/Activator.java b/status-printer/src/main/java/org/apache/felix/status/impl/Activator.java
index d43210d..feabdd1 100644
--- a/status-printer/src/main/java/org/apache/felix/status/impl/Activator.java
+++ b/status-printer/src/main/java/org/apache/felix/status/impl/Activator.java
@@ -49,8 +49,7 @@
         this.managerRegistration = context.registerService(
                 StatusPrinterManager.class.getName(),
                 this.printerManager, props);
-
-    }
+}
 
     /**
      * @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
diff --git a/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/ConfigurationPrinterAdapter.java b/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/ConfigurationPrinterAdapter.java
index 54e3262..071689d 100644
--- a/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/ConfigurationPrinterAdapter.java
+++ b/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/ConfigurationPrinterAdapter.java
@@ -183,7 +183,7 @@
     public String[] getPrinterModes() {
         final Set<String> list = new HashSet<String>();
         if ( this.match(ConsoleConstants.MODE_TXT) || this.match(ConsoleConstants.MODE_ZIP) ) {
-            list.add(PrinterMode.ZIP_FILE.name());
+            list.add(PrinterMode.ZIP_FILE_BIN.name());
         }
         if ( this.match(ConsoleConstants.MODE_WEB) ) {
             if ( !escapeHtml ) {
diff --git a/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/WebConsoleAdapter.java b/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/WebConsoleAdapter.java
index ddab251..b5e0dac 100644
--- a/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/WebConsoleAdapter.java
+++ b/status-printer/src/main/java/org/apache/felix/status/impl/webconsole/WebConsoleAdapter.java
@@ -113,7 +113,7 @@
                         m = ConsoleConstants.MODE_WEB;
                     } else if ( mode == PrinterMode.TEXT ) {
                         m = ConsoleConstants.MODE_TXT;
-                    } else if ( mode == PrinterMode.ZIP_FILE ) {
+                    } else if ( mode == PrinterMode.ZIP_FILE_BIN ) {
                         m = ConsoleConstants.MODE_ZIP;
                     } else {
                         m = null;
