diff --git a/src/main/java/Enums/VisualizerMethods.java b/src/main/java/Enums/VisualizerMethods.java
index 30b14737a58affa1559912bf83de6ebcc29de16e..9bb67731d50c36d5fa8b88f9af46f6cebc33b00b 100644
--- a/src/main/java/Enums/VisualizerMethods.java
+++ b/src/main/java/Enums/VisualizerMethods.java
@@ -3,5 +3,6 @@ package Enums;
 public enum VisualizerMethods {
     Console,
     Image,
-    Video
+    Video,
+    Log
 }
diff --git a/src/main/java/MainClasses/Config.java b/src/main/java/MainClasses/Config.java
index 7cbaee3f9c8c23d7eba9229fadb66105b36c20b7..adebb9c55d3020977199ece05247c60b1b597c46 100644
--- a/src/main/java/MainClasses/Config.java
+++ b/src/main/java/MainClasses/Config.java
@@ -173,6 +173,9 @@ public class Config {
                 case "video":
                     visualizers[i] = VisualizerMethods.Video;
                     break;
+                case "log":
+                    visualizers[i] = VisualizerMethods.Log;
+                    break;
             }
         }
 
diff --git a/src/main/java/MainClasses/GeneticAlgorithm.java b/src/main/java/MainClasses/GeneticAlgorithm.java
index 13be23837ba320743ff1163238862d57ef5ec387..b483b43a141f25d17dbe1632178c87e08c8e813d 100644
--- a/src/main/java/MainClasses/GeneticAlgorithm.java
+++ b/src/main/java/MainClasses/GeneticAlgorithm.java
@@ -14,6 +14,7 @@ import Selectors.Tournament;
 import Visualization.Visualizers.BestFoldingToConsole;
 import Visualization.Visualizers.BestFoldingToImage;
 
+import Visualization.Visualizers.GenerationProgressToLog;
 import java.io.IOException;
 import java.nio.file.Files;
 import java.nio.file.Paths;
@@ -50,7 +51,6 @@ public class GeneticAlgorithm {
         this.config = config;
 
         this.initializeSettings();
-        this.clearLog();
 
         this.population = this.initialGenCreator.initializeDirections(config.getPopulationSize(), this.isHydrophobic.length);
         this.totalFitness = 0;
@@ -70,12 +70,12 @@ public class GeneticAlgorithm {
         // Settings that are dependant on encoding
         if (config.getEncodingVariant().equals("NESW")) {
             int nullCount = 0;
-            for (int i = 0; i < config.getVisualizers().length; i++) {
+            /*for (int i = 0; i < config.getVisualizers().length; i++) {
                 if (!config.getVisualizers()[i].equals(VisualizerMethods.Console)
                         && !config.getVisualizers()[i].equals(VisualizerMethods.Image)) {
                     nullCount++;
                 }
-            }
+            }*/
             this.visualizers = new Visualizer[config.getVisualizers().length - nullCount];
             int j = 0;
             for (VisualizerMethods vm : config.getVisualizers()) {
@@ -85,6 +85,9 @@ public class GeneticAlgorithm {
                 } else if (vm.equals(VisualizerMethods.Image)) {
                     this.visualizers[j] = new BestFoldingToImage(isHydrophobic, config);
                     j++;
+                }else if (vm.equals(VisualizerMethods.Log)) {
+                    this.visualizers[j] = new GenerationProgressToLog(isHydrophobic, config);
+                    j++;
                 }
             }
 
@@ -123,19 +126,6 @@ public class GeneticAlgorithm {
         }
     }
 
-    private void clearLog() {
-        String content = "Generation\tAverage Fitness\tBest Fitness\tOverall Best Fitness\tBonds\tOverlaps\n";
-        try {
-            //TODO This does not belong here
-            Files.createDirectories(Paths.get(config.getLogfileDirectory()));
-            String logfilePath = config.getLogfileDirectory() + "/" + config.getJobName() + ".txt";
-            Files.write(Paths.get(logfilePath), content.getBytes());
-
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
-
     public void simulateGenerations() {
         for (int gen = 0; gen < config.getTotalGenerations()-1; gen++) {
             //TODO Remove with the new Generation class
@@ -186,19 +176,6 @@ public class GeneticAlgorithm {
         }
 
         double averageFitness = this.totalFitness / config.getPopulationSize();
-        String log = String.format("%d\t%.4f\t%.4f\t%.4f\t %d\t%d\n",
-                gen, averageFitness, bestFitness,
-                this.overallBest.getFitness(),
-                -1,
-                -1);
-
-        try {
-            String logfilePath = config.getLogfileDirectory() + "/" + config.getJobName() + ".txt";
-            Files.write(Paths.get(logfilePath), log.getBytes(), StandardOpenOption.APPEND);
-
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
 
         return bestIndex;
     }
diff --git a/src/main/java/Visualization/Visualizers/GenerationProgressToLog.java b/src/main/java/Visualization/Visualizers/GenerationProgressToLog.java
new file mode 100644
index 0000000000000000000000000000000000000000..8feb05324f72f3212c68d9f4f0901c2ff7dfe760
--- /dev/null
+++ b/src/main/java/Visualization/Visualizers/GenerationProgressToLog.java
@@ -0,0 +1,83 @@
+package Visualization.Visualizers;
+
+import Evaluators.EvaluatorNESW;
+import Interfaces.Visualizer;
+import MainClasses.Candidate;
+import MainClasses.Config;
+import MainClasses.GeneticAlgorithm;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+
+public class GenerationProgressToLog implements Visualizer {
+  Path logfilePath;
+  final int[] isHydrophobic;
+  Config config;
+
+  //TODO Make sure this is initialized or prepare for bugs
+  Candidate overallBestCandidate;
+  EvaluatorNESW bondsOverlapsEvaluator;
+
+  public GenerationProgressToLog(int[] isHydrophobic, Config config) {
+    this.isHydrophobic = isHydrophobic;
+    this.config = config;
+    String filename = config.getLogfileDirectory() + "/" + config.getJobName() + ".txt";
+    logfilePath = Paths.get(filename);
+    bondsOverlapsEvaluator = new EvaluatorNESW(1,isHydrophobic);
+
+    //Initialize the logfile
+    initializeLogfile();
+  }
+
+  @Override
+  public void drawProtein(Candidate[] generation, GeneticAlgorithm geneticAlgorithm) {
+    //TODO This should be done in the new Generation class
+    double averageFitness = 0.0;
+    Candidate bestCandidateOfGeneration = generation[0];
+    for(Candidate candidate: generation){
+      averageFitness += candidate.getFitness();
+      if(candidate.getFitness() > bestCandidateOfGeneration.getFitness()){
+        bestCandidateOfGeneration = candidate;
+      }
+    }
+    averageFitness /= generation.length;
+
+    //Find overall best Candidate
+    if(geneticAlgorithm.generation == 0) {
+      overallBestCandidate = bestCandidateOfGeneration;
+    }else if(bestCandidateOfGeneration.getFitness() > overallBestCandidate.getFitness()){
+      overallBestCandidate = bestCandidateOfGeneration;
+    }
+
+    int bonds = bondsOverlapsEvaluator.evaluateBonds(bestCandidateOfGeneration);
+    int overlaps = bondsOverlapsEvaluator.evaluateBonds(bestCandidateOfGeneration);
+
+    String log = String.format("%d\t%.4f\t%.4f\t%.4f\t %d\t%d\n",
+        geneticAlgorithm.generation,
+        averageFitness,
+        bestCandidateOfGeneration.getFitness(),
+        overallBestCandidate.getFitness(),
+        bonds,
+        overlaps);
+
+    try {
+      String logfilePath = config.getLogfileDirectory() + "/" + config.getJobName() + ".txt";
+      Files.write(Paths.get(logfilePath), log.getBytes(), StandardOpenOption.APPEND);
+
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+  }
+
+  private void initializeLogfile() {
+    String content = "Generation\tAverage Fitness\tBest Fitness\tOverall Best Fitness\tBonds\tOverlaps\n";
+    try {
+      Files.createDirectories(Paths.get(config.getLogfileDirectory()));
+      Files.write(logfilePath, content.getBytes());
+    } catch (IOException e) {
+      e.printStackTrace();
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/main/resources/genetic.properties b/src/main/resources/genetic.properties
index 9044afaa3d4d2c9341cd18a97359fbb9f5c5565c..27f864e487ab1ff31515f4f3679c908063816eee 100644
--- a/src/main/resources/genetic.properties
+++ b/src/main/resources/genetic.properties
@@ -43,7 +43,7 @@
 
 ### Output settings
     # Type(s) of visualization to enable, separated with comma [console / image / video]
-        visualizerType = image,video
+        visualizerType = log
     # Name of the job, filenames will be based on this name. If left empty a timestamp is used
         jobName = example1
     # Directory for the image sequence