diff --git a/src/main/java/org/ids_mannheim/TotalNGrams.java b/src/main/java/org/ids_mannheim/TotalNGrams.java
index ba1a40d..236791e 100644
--- a/src/main/java/org/ids_mannheim/TotalNGrams.java
+++ b/src/main/java/org/ids_mannheim/TotalNGrams.java
@@ -76,6 +76,11 @@
             "--fold"}, description = "current folds (default: ${DEFAULT-VALUE})")
     int fold = 1;
 
+    @SuppressWarnings("CanBeFinal")
+    @CommandLine.Option(names = {"-S",
+            "--sort"}, description = "Toggle output sorting (default: ${DEFAULT-VALUE})")
+    boolean sort = true;
+
     private Progressbar etaPrinter;
 
     public TotalNGrams() {
@@ -158,18 +163,23 @@
         es.shutdown();
         boolean finished = es.awaitTermination(120, TimeUnit.HOURS);
         etaPrinter.finish();
-        logger.info("Sorting and writing frequency table.");
-        System.err.println("Sorting and writing frequency table.");
-        map.entrySet().parallelStream()
-                .sorted((a, b) -> {
-                    int cmp1 = Integer.compareUnsigned(b.getValue().get(), a.getValue().get());
-                    if (cmp1 != 0) {
-                        return cmp1;
-                    } else {
-                        return a.getKey().compareTo(b.getKey());
-                    }
-                })
-                .forEachOrdered(entry -> output_stream.println(entry.getKey() + "\t" + entry.getValue().toString()));
+        if (!sort) {
+            map.entrySet()
+                    .forEach(entry -> output_stream.println(entry.getKey() + "\t" + entry.getValue().toString()));
+        } else {
+            logger.info("Sorting and writing frequency table.");
+            System.err.println("Sorting and writing frequency table.");
+            map.entrySet().parallelStream()
+                    .sorted((a, b) -> {
+                        int cmp1 = Integer.compareUnsigned(b.getValue().get(), a.getValue().get());
+                        if (cmp1 != 0) {
+                            return cmp1;
+                        } else {
+                            return a.getKey().compareTo(b.getKey());
+                        }
+                    })
+                    .forEachOrdered(entry -> output_stream.println(entry.getKey() + "\t" + entry.getValue().toString()));
+        }
         logger.info("Finished.");
         output_stream.close();
         return null;
