diff --git a/czi-format/benchmark_results/16Bit-ZStack_c_1.jpg b/czi-format/benchmark_results/16_bit_z_stack/16Bit-ZStack_c_1.jpg
similarity index 100%
rename from czi-format/benchmark_results/16Bit-ZStack_c_1.jpg
rename to czi-format/benchmark_results/16_bit_z_stack/16Bit-ZStack_c_1.jpg
diff --git a/czi-format/benchmark_results/16Bit-ZStack_c_2.jpg b/czi-format/benchmark_results/16_bit_z_stack/16Bit-ZStack_c_2.jpg
similarity index 100%
rename from czi-format/benchmark_results/16Bit-ZStack_c_2.jpg
rename to czi-format/benchmark_results/16_bit_z_stack/16Bit-ZStack_c_2.jpg
diff --git a/czi-format/benchmark_results/16bit_z_stack.csv b/czi-format/benchmark_results/16_bit_z_stack/16bit_z_stack.csv
similarity index 100%
rename from czi-format/benchmark_results/16bit_z_stack.csv
rename to czi-format/benchmark_results/16_bit_z_stack/16bit_z_stack.csv
diff --git a/czi-format/benchmark_results/16bit_z_stack_continuous.csv b/czi-format/benchmark_results/16_bit_z_stack/16bit_z_stack_continuous.csv
similarity index 100%
rename from czi-format/benchmark_results/16bit_z_stack_continuous.csv
rename to czi-format/benchmark_results/16_bit_z_stack/16bit_z_stack_continuous.csv
diff --git a/czi-format/benchmark_results/16_bit_z_stack/cont2.csv b/czi-format/benchmark_results/16_bit_z_stack/cont2.csv
new file mode 100644
index 0000000000000000000000000000000000000000..be8bc4d2ab19bd9b9e881742439a3679411c73b7
--- /dev/null
+++ b/czi-format/benchmark_results/16_bit_z_stack/cont2.csv
@@ -0,0 +1,28 @@
+filename;subblock;pixel;width;height;compression;level;originalSize;compressedSize;compressedZ;compressionRatio;compressionRatioZ;compressionTime;compressionTimeZ
+16Bit-ZStack.czi;999;Gray16;0;0;GZIP;1;31457280;21706534;21415370;1.44921;1.46891;11678.00000;13538.00000
+16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;1;31457280;18234356;17989964;1.72517;1.74860;83573.00000;83512.00000
+16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;1;31457280;16811950;17070792;1.87113;1.84275;56895.00000;55434.00000
+16Bit-ZStack.czi;999;Gray16;0;0;GZIP;2;31457280;21591821;21323216;1.45691;1.47526;12449.00000;11485.00000
+16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;2;31457280;18204064;18028864;1.72804;1.74483;104041.00000;105380.00000
+16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;2;31457280;16651274;16889420;1.88918;1.86254;55824.00000;54975.00000
+16Bit-ZStack.czi;999;Gray16;0;0;GZIP;4;31457280;21596789;21318920;1.45657;1.47556;26670.00000;19498.00000
+16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;4;31457280;17228332;17036472;1.82590;1.84647;129261.00000;128921.00000
+16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;4;31457280;16562542;16762954;1.89930;1.87660;56634.00000;56815.00000
+16Bit-ZStack.czi;999;Gray16;0;0;GZIP;3;31457280;21442671;21217301;1.46704;1.48262;14582.00000;15215.00000
+16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;3;31457280;18188892;18055964;1.72948;1.74221;131293.00000;129141.00000
+16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;3;31457280;16592079;16803872;1.89592;1.87203;56129.00000;56221.00000
+16Bit-ZStack.czi;999;Gray16;0;0;GZIP;5;31457280;21534975;21269344;1.46075;1.47900;32021.00000;26092.00000
+16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;5;31457280;17217048;17049480;1.82710;1.84506;132761.00000;132771.00000
+16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;5;31457280;16528830;16719271;1.90318;1.88150;56316.00000;57042.00000
+16Bit-ZStack.czi;999;Gray16;0;0;GZIP;6;31457280;21320230;21074519;1.47547;1.49267;41487.00000;48189.00000
+16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;6;31457280;17216344;17046576;1.82718;1.84537;133741.00000;134992.00000
+16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;6;31457280;16505227;16698103;1.90590;1.88388;56457.00000;57019.00000
+16Bit-ZStack.czi;999;Gray16;0;0;GZIP;7;31457280;21313059;21067513;1.47596;1.49317;44391.00000;46510.00000
+16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;7;31457280;17217068;17058500;1.82710;1.84408;136071.00000;135122.00000
+16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;7;31457280;16482554;16672843;1.90852;1.88674;57403.00000;58249.00000
+16Bit-ZStack.czi;999;Gray16;0;0;GZIP;9;31457280;21313063;21067526;1.47596;1.49316;47200.00000;49093.00000
+16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;9;31457280;17217716;17057428;1.82703;1.84420;137389.00000;137355.00000
+16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;9;31457280;16456890;16645416;1.91150;1.88985;58076.00000;58180.00000
+16Bit-ZStack.czi;999;Gray16;0;0;GZIP;8;31457280;21313063;21067526;1.47596;1.49316;48028.00000;46358.00000
+16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;8;31457280;17217716;17057428;1.82703;1.84420;139170.00000;137580.00000
+16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;8;31457280;16466766;16661084;1.91035;1.88807;57603.00000;57905.00000
diff --git a/czi-format/benchmark_results/16bit_z_stack_continuous_sorted.csv b/czi-format/benchmark_results/16bit_z_stack_continuous_sorted.csv
deleted file mode 100644
index b21681d707a5730baff298f03ac8c1831dc6e996..0000000000000000000000000000000000000000
--- a/czi-format/benchmark_results/16bit_z_stack_continuous_sorted.csv
+++ /dev/null
@@ -1,4 +0,0 @@
-filename;subblock;pixel;width;height;compression;level;originalSize;compressedSize;compressedZ;compressionRatio;compressionRatioZ;compressionTime;compressionTimeZ
-16Bit-ZStack.czi;999;Gray16;0;0;GZIP;8;31457280;21313063;21067526;1.47596;1.49316;2014.00000;1985.00000
-16Bit-ZStack.czi;999;Gray16;0;0;LZMA2;8;31457280;17217716;17057428;1.82703;1.84420;15858.00000;21924.00000
-16Bit-ZStack.czi;999;Gray16;0;0;BZIP2;8;31457280;16466766;16661084;1.91035;1.88807;2958.00000;3136.00000
diff --git a/czi-format/benchmark_results/8bit_z_stack.csv b/czi-format/benchmark_results/8_bit_z_stack/8bit_z_stack.csv
similarity index 100%
rename from czi-format/benchmark_results/8bit_z_stack.csv
rename to czi-format/benchmark_results/8_bit_z_stack/8bit_z_stack.csv
diff --git a/czi-format/benchmark_results/8bit_z_stack_continuous.csv b/czi-format/benchmark_results/8_bit_z_stack/8bit_z_stack_continuous.csv
similarity index 100%
rename from czi-format/benchmark_results/8bit_z_stack_continuous.csv
rename to czi-format/benchmark_results/8_bit_z_stack/8bit_z_stack_continuous.csv
diff --git a/czi-format/benchmark_results/AxioZoom_Artemia_AT-1Ch-Z_sect.jpg b/czi-format/benchmark_results/AxioZoom_Artemia_AT-1Ch-Z_sect.jpg
deleted file mode 100644
index ecf763829e1226d8f97d2a3becadd4bdea83c6ad..0000000000000000000000000000000000000000
Binary files a/czi-format/benchmark_results/AxioZoom_Artemia_AT-1Ch-Z_sect.jpg and /dev/null differ
diff --git a/czi-format/benchmark_results/artemia_at_z_sect/AxioZoom_Artemia_AT-1Ch-Z_sect.jpg b/czi-format/benchmark_results/artemia_at_z_sect/AxioZoom_Artemia_AT-1Ch-Z_sect.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..e466a1408751f9f22470e4abd684c2fc1c723acb
Binary files /dev/null and b/czi-format/benchmark_results/artemia_at_z_sect/AxioZoom_Artemia_AT-1Ch-Z_sect.jpg differ
diff --git a/czi-format/benchmark_results/artemia_at_1ch_z_sect.csv b/czi-format/benchmark_results/artemia_at_z_sect/artemia_at_1ch_z_sect.csv
similarity index 100%
rename from czi-format/benchmark_results/artemia_at_1ch_z_sect.csv
rename to czi-format/benchmark_results/artemia_at_z_sect/artemia_at_1ch_z_sect.csv
diff --git a/czi-format/benchmark_results/artemia_at_1ch_z_sect_continuous.csv b/czi-format/benchmark_results/artemia_at_z_sect/artemia_at_1ch_z_sect_continuous.csv
similarity index 100%
rename from czi-format/benchmark_results/artemia_at_1ch_z_sect_continuous.csv
rename to czi-format/benchmark_results/artemia_at_z_sect/artemia_at_1ch_z_sect_continuous.csv
diff --git a/czi-format/benchmark_results/artemia_at_z_sect/cont2.csv b/czi-format/benchmark_results/artemia_at_z_sect/cont2.csv
new file mode 100644
index 0000000000000000000000000000000000000000..fd2f80b7b97395713a00a26683e5a8112da318d3
--- /dev/null
+++ b/czi-format/benchmark_results/artemia_at_z_sect/cont2.csv
@@ -0,0 +1,4 @@
+filename;subblock;pixel;width;height;compression;level;originalSize;compressedSize;compressedZ;compressionRatio;compressionRatioZ;compressionTime;compressionTimeZ
+AxioZoom_Artemia_AT-1Ch-Z_sect.czi;999;Gray16;0;0;GZIP;9;112594560;41693860;39222947;2.70051;2.87063;117712.00000;161881.00000
+AxioZoom_Artemia_AT-1Ch-Z_sect.czi;999;Gray16;0;0;LZMA2;9;112594560;31991164;31405776;3.51955;3.58515;205168.00000;199336.00000
+AxioZoom_Artemia_AT-1Ch-Z_sect.czi;999;Gray16;0;0;BZIP2;9;112594560;31016055;31077959;3.63020;3.62297;9036.00000;8966.00000
diff --git a/czi-format/benchmark_results/artemia_flash_z_sect/40x075_Artemia-Flash-AT-1Ch-Z-sect.jpg b/czi-format/benchmark_results/artemia_flash_z_sect/40x075_Artemia-Flash-AT-1Ch-Z-sect.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..09bfbcbfb445c593bde9ba9634f2150da8281b35
Binary files /dev/null and b/czi-format/benchmark_results/artemia_flash_z_sect/40x075_Artemia-Flash-AT-1Ch-Z-sect.jpg differ
diff --git a/czi-format/benchmark_results/artemia_flash.csv b/czi-format/benchmark_results/artemia_flash_z_sect/artemia_flash.csv
similarity index 100%
rename from czi-format/benchmark_results/artemia_flash.csv
rename to czi-format/benchmark_results/artemia_flash_z_sect/artemia_flash.csv
diff --git a/czi-format/benchmark_results/llc_emerald/llc_emarald_cherry_cont.csv b/czi-format/benchmark_results/llc_emerald/llc_emarald_cherry_cont.csv
index c98e53912ca6f5ce4d40f29529cde17aaab5d02d..b0c47e1ca8404c909f0479018d81c77532995edb 100644
--- a/czi-format/benchmark_results/llc_emerald/llc_emarald_cherry_cont.csv
+++ b/czi-format/benchmark_results/llc_emerald/llc_emarald_cherry_cont.csv
@@ -1,7 +1,14 @@
 filename;subblock;pixel;width;height;compression;level;originalSize;compressedSize;compressedZ;compressionRatio;compressionRatioZ;compressionTime;compressionTimeZ
+LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;GZIP;6;109051904;77916943;76868930;1.3996;1.4187;;
+LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;GZIP;8;109051904;77917145;76861800;1.3996;1.4188;;
+LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;GZIP;9;109051904;77917145;76861800;1.3996;1.4188;;
 LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;LZMA;5;109051904;66187466;65277759;1.64762;1.67060;59000;54000
 LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;LZMA;6;109051904;66179814;65281171;1.64780;1.67050;;
+LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;LZMA;9;109051904;66192740;65375130;1.6475;1.6681;;
 LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;BZIP2;5;109051904;64453164;64496632;1.692;1.6908;;
 LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;BZIP2;6;109051904;64442979;64488307;1.6922;1.691;;
 LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;BZIP2;8;109051904;64399634;64472449;1.6934;1.6914;;
-LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;BZIP2;8;109051904;64381885;64458062;1.6938;1.6918;;
+LLC-PK1_TubX-emerald_H2B-mCherry-2chZ(SD).czi;999;Gray16;0;0;BZIP2;9;109051904;64381885;64458062;1.6938;1.6918;;
+
+
+
diff --git a/czi-format/czi-parser/compression/benchmark.h b/czi-format/czi-parser/compression/benchmark.h
index 93c90e56165d6d82694643ebe9736fe92abc9670..28f673df16901b4d5a4467c92b69d89e70bffd9f 100644
--- a/czi-format/czi-parser/compression/benchmark.h
+++ b/czi-format/czi-parser/compression/benchmark.h
@@ -3,6 +3,7 @@
 #include "../czi_file.h"
 #include "../file_system.h"
 #include <iomanip>
+#include <thread>
 
 struct BenchmarkRecord
 {
@@ -69,29 +70,77 @@ void write_report(const std::vector<BenchmarkRecord> &results, const std::string
     }
 }
 
+static void compression_thread_work(const ByteArray &data, CompressionMethod method, int compressionLevel, CompressionResult &result, const char *info)
+{
+    auto compResult = test_compression_method(data, method, compressionLevel);
+    result = compResult;
+    printf("Completed: %s\n", info);
+}
+
 static std::vector<BenchmarkRecord> benchmark_continuos_compression_one_level(const ByteArray &data, const ByteArray &zOrderedData, int compressionLevel)
 {
+    // // CompressionMethod_GZIP
+    // CompressionResult gzipResult = test_compression_method(data, CompressionMethod_GZIP, compressionLevel);
+    // CompressionResult gzipZResult = test_compression_method(zOrderedData, CompressionMethod_GZIP, compressionLevel);
+
+    // BenchmarkRecord gzipRecord(gzipResult, gzipZResult);
+    // gzipRecord.compressionLevel = compressionLevel;
+    // gzipRecord.compressionMethod = GZIP_NAME;
+
+    // // CompressionMethod_LZMA
+    // CompressionResult lzmaResult = test_compression_method(data, CompressionMethod_LZMA, compressionLevel);
+    // CompressionResult lzmaZResult = test_compression_method(zOrderedData, CompressionMethod_LZMA, compressionLevel);
+
+    // BenchmarkRecord lzmaRecord(lzmaResult, lzmaZResult);
+    // lzmaRecord.compressionLevel = compressionLevel;
+    // lzmaRecord.compressionMethod = LZMA2_NAME;
+
+    // // CompressionMethod_BZIP2
+    // CompressionResult bzip2Result = test_compression_method(data, CompressionMethod_BZIP2, compressionLevel);
+    // CompressionResult bzip2ZResult = test_compression_method(zOrderedData, CompressionMethod_BZIP2, compressionLevel);
+
+    // BenchmarkRecord bzip2Record(bzip2Result, bzip2ZResult);
+    // bzip2Record.compressionLevel = compressionLevel;
+    // bzip2Record.compressionMethod = BZIP2_NAME;
 
     // CompressionMethod_GZIP
-    CompressionResult gzipResult = test_compression_method(data, CompressionMethod_GZIP, compressionLevel);
-    CompressionResult gzipZResult = test_compression_method(zOrderedData, CompressionMethod_GZIP, compressionLevel);
+    CompressionResult gzipResult = {};
+    CompressionResult gzipZResult = {};
+
+    // CompressionMethod_LZMA
+    CompressionResult lzmaResult = {};
+    CompressionResult lzmaZResult = {};
+
+    // CompressionMethod_BZIP2
+    CompressionResult bzip2Result = {};
+    CompressionResult bzip2ZResult = {};
+
+    std::vector<std::thread> workers;
+    workers.resize(6);
+    // We know that lzma is slowest, let's run all three in threads.
+    workers[0] = std::thread(compression_thread_work, std::ref(data), CompressionMethod_GZIP, compressionLevel, std::ref(gzipResult), "Gzip normal order");
+    workers[1] = std::thread(compression_thread_work, std::ref(zOrderedData), CompressionMethod_GZIP, compressionLevel, std::ref(gzipZResult), "Gzip Z order");
+
+    workers[2] = std::thread(compression_thread_work, std::ref(data), CompressionMethod_LZMA, compressionLevel, std::ref(lzmaResult), "LZMA normal order");
+    workers[3] = std::thread(compression_thread_work, std::ref(zOrderedData), CompressionMethod_LZMA, compressionLevel, std::ref(lzmaZResult), "LZMA Z order");
+
+    workers[4] = std::thread(compression_thread_work, std::ref(data), CompressionMethod_BZIP2, compressionLevel, std::ref(bzip2Result), "Bzip2 normal order");
+    workers[5] = std::thread(compression_thread_work, std::ref(zOrderedData), CompressionMethod_BZIP2, compressionLevel, std::ref(bzip2ZResult), "Bzip2 Z order");
+
+    for (size_t i = 0; i < workers.size(); i++)
+    {
+        workers[i].join();
+    }
+    printf("All threads completed.\n");
 
     BenchmarkRecord gzipRecord(gzipResult, gzipZResult);
     gzipRecord.compressionLevel = compressionLevel;
     gzipRecord.compressionMethod = GZIP_NAME;
 
-    // CompressionMethod_LZMA
-    CompressionResult lzmaResult = test_compression_method(data, CompressionMethod_LZMA, compressionLevel);
-    CompressionResult lzmaZResult = test_compression_method(zOrderedData, CompressionMethod_LZMA, compressionLevel);
-
     BenchmarkRecord lzmaRecord(lzmaResult, lzmaZResult);
     lzmaRecord.compressionLevel = compressionLevel;
     lzmaRecord.compressionMethod = LZMA2_NAME;
 
-    // CompressionMethod_BZIP2
-    CompressionResult bzip2Result = test_compression_method(data, CompressionMethod_BZIP2, compressionLevel);
-    CompressionResult bzip2ZResult = test_compression_method(zOrderedData, CompressionMethod_BZIP2, compressionLevel);
-
     BenchmarkRecord bzip2Record(bzip2Result, bzip2ZResult);
     bzip2Record.compressionLevel = compressionLevel;
     bzip2Record.compressionMethod = BZIP2_NAME;
diff --git a/czi-format/czi-parser/czi_file.cpp b/czi-format/czi-parser/czi_file.cpp
index 2d0b8971036dae6689f0c15b741d49edf36f730e..0e4d065515f2d826a6e36ebc17bca4da66e9d11b 100644
--- a/czi-format/czi-parser/czi_file.cpp
+++ b/czi-format/czi-parser/czi_file.cpp
@@ -365,7 +365,8 @@ ByteArray CziFile::get_continuous_image_data(const bool ZCurveOrdered) const
     size_t bufferEnd = 0;
 
     // Rather than simply putting images one after the other, order them by channels.
-#if 1
+    // Compression ratios aren't better, so we won't waste time with sorting right now.
+#if 0
     int loaded = 0;
     for (size_t channel = 0; channel < subBlockDirectory.channelCount; channel++)
     {
diff --git a/czi-format/czi-parser/main.cpp b/czi-format/czi-parser/main.cpp
index 95667376be721cb54fbb909d24588cec3e55775b..5372f053a30e0edfcefacebd41565232ef8c5bb0 100644
--- a/czi-format/czi-parser/main.cpp
+++ b/czi-format/czi-parser/main.cpp
@@ -18,6 +18,7 @@ int main(int argc, char **argv)
     args::HelpFlag helpMethod(mainMethodGroup, "help", "Print help", {'h', "help"});
     args::Flag reportMethod(mainMethodGroup, "report", "Basic information about CZI file. [verbose]", {"report"});
     args::Flag compressionTestMethod(mainMethodGroup, "compression-test", "Compress subblocks and output compression ratios <compression method>", {"compression-test"});
+    args::Flag versionMethod(mainMethodGroup, "Version test", "Check version", {"version", 'V'});
     args::Flag benchmarkMethod(mainMethodGroup, "Compression benchmark", "Start compression benchmark for selected CZI file. <report-file> [continuos] [verbose].", {"benchmark"});
     args::Flag exportDataMethod(mainMethodGroup, "Export binary dat", "Export raw image data <folder> [continuos]", {"dump-data"});
     args::Flag exportImagesMethod(mainMethodGroup, "Export images", "Export images to ppm files <folder>", {"dump-images"});
@@ -54,6 +55,16 @@ int main(int argc, char **argv)
         return 1;
     }
 
+    if (versionMethod)
+    {
+#if DEBUG
+        printf("DEBUG\n");
+#else
+        printf("RELEASE\n");
+#endif
+        return 0;
+    }
+
     CziParser parser(dontParseMetadataOption.Get());
     auto parsedFile = parser.parse_czi_file(cziFile.Get());