diff --git a/src/main/java/de/uni_hamburg/corpora/gui/GUI.java b/src/main/java/de/uni_hamburg/corpora/gui/GUI.java
index 184f7537f3d3c5431100b48b8e97b1eb46eaa628..9ec27ad4288fa3a6140667677a270c4f4ea3ac9c 100644
--- a/src/main/java/de/uni_hamburg/corpora/gui/GUI.java
+++ b/src/main/java/de/uni_hamburg/corpora/gui/GUI.java
@@ -70,9 +70,12 @@ public class GUI {
         JPanel buttonPanel = new JPanel(new GridLayout(1,4));
         JButton checkButton = new JButton("Check corpus");
         buttonPanel.add(checkButton);
-        JButton reportButton = new JButton("Show report");
-        reportButton.setEnabled(false);
-        buttonPanel.add(reportButton);
+        JButton showReportButton = new JButton("Show report");
+        showReportButton.setEnabled(false);
+        buttonPanel.add(showReportButton);
+        JButton saveReportButton = new JButton("Save report");
+        saveReportButton.setEnabled(false);
+        buttonPanel.add(saveReportButton);
         JButton updateButton = new JButton("Update corpus services");
         buttonPanel.add(updateButton);
         JButton exitButton = new JButton("Exit");
@@ -82,7 +85,8 @@ public class GUI {
         Function<String, Void> callback =
                 (outFile) -> {
             reportFile = outFile;
-            reportButton.setEnabled(true);
+            showReportButton.setEnabled(true);
+            saveReportButton.setEnabled(true);
             JOptionPane.showMessageDialog(window,
                             "Checks executed successfully. You can now check the report.",
                             "Success",
@@ -93,14 +97,14 @@ public class GUI {
         };
         checkButton.addActionListener(actionEvent -> {
             checkButton.setEnabled(false);
-            reportButton.setEnabled(false);
+            showReportButton.setEnabled(false);
             updateButton.setEnabled(false);
             // Do the checking
             try {
                 Config config = Config.read(configPath.getText());
                 JOptionPane.showMessageDialog(window,
                         "Starting checks now. Depending on the corpus and the checks selected this can take" +
-                                "a while",
+                                " a while",
                         "Info",
                         JOptionPane.INFORMATION_MESSAGE);
                 CorpusThread worker = new CorpusThread(
@@ -163,7 +167,7 @@ public class GUI {
             updateButton.setEnabled(true);
             exitButton.setEnabled(true);
         });
-        reportButton.addActionListener(actionEvent -> {
+        showReportButton.addActionListener(actionEvent -> {
             Desktop dt = Desktop.getDesktop();
             try {
                 dt.open(new File(reportFile));
@@ -174,6 +178,40 @@ public class GUI {
                         JOptionPane.ERROR_MESSAGE);
             }
         });
+        saveReportButton.addActionListener(actionEvent -> {
+            JFileChooser chooser = new JFileChooser();
+            chooser.setFileFilter(new FileNameExtensionFilter(
+                    "HTML file", "html", "htm"));
+            chooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
+            chooser.setSelectedFile(new File(reportFile));
+            int result = chooser.showSaveDialog(configButton);
+            if (result == JFileChooser.APPROVE_OPTION) {
+                if (!(chooser.getSelectedFile().toString().toLowerCase().endsWith("htm") ||
+                        chooser.getSelectedFile().toString().toLowerCase().endsWith("html")))
+                    chooser.setSelectedFile(new File(chooser.getSelectedFile().toString() + ".html"));
+                boolean overwrite = true;
+                if (chooser.getSelectedFile().exists()) {
+                    int overwriteResp =
+                            JOptionPane.showConfirmDialog(window, "File " + chooser.getSelectedFile() +
+                            "  already exists. Do you want to overwrite?","Overwrite",JOptionPane.YES_NO_OPTION);
+                    if (overwriteResp == JOptionPane.NO_OPTION) {
+                        overwrite = false;
+                    }
+                }
+                try {
+                    if (overwrite) {
+                        new BufferedInputStream(new FileInputStream(reportFile))
+                                .transferTo(new BufferedOutputStream(new FileOutputStream(chooser.getSelectedFile())));
+                    }
+                }
+                catch (IOException e) {
+                    JOptionPane.showMessageDialog(window,
+                            "Error saving report to " + chooser.getSelectedFile().getPath() + ". Reason: " + e,
+                            "Error", JOptionPane.ERROR_MESSAGE);
+                }
+
+            }
+        });
         // Handle exit
         exitButton.addActionListener(actionEvent -> {
             // Close window