diff --git a/src/de/bricked/game/levels/LevelPackHandler.java b/src/de/bricked/game/levels/LevelPackHandler.java
index cda1452988b77d6b8bcaa52d1708c9248fca84fe..216f162564bda1f268e2d28a0b8156855a3a84a8 100644
--- a/src/de/bricked/game/levels/LevelPackHandler.java
+++ b/src/de/bricked/game/levels/LevelPackHandler.java
@@ -6,7 +6,6 @@ import tools.PathUtils;
 import java.io.*;
 import java.nio.file.FileSystems;
 import java.nio.file.Files;
-import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
@@ -50,7 +49,7 @@ public class LevelPackHandler
         for(String currentFileContent : getFileContent())
         {
             LevelPackParser levelPackParser = new LevelPackParser(currentFileContent);
-            levelPacks.add(levelPackParser.read());
+            levelPacks.add(levelPackParser.getLevelPack());
         }
 
         return sort(levelPacks);
diff --git a/src/de/bricked/game/levels/LevelPackParser.java b/src/de/bricked/game/levels/LevelPackParser.java
index 324508766bfb2ca53b63e9ed085ff9b9cfe73bf8..b68aaa3a7930c51b0525a26b114f133ec4cc3418 100644
--- a/src/de/bricked/game/levels/LevelPackParser.java
+++ b/src/de/bricked/game/levels/LevelPackParser.java
@@ -14,10 +14,12 @@ public class LevelPackParser
 {
 
 	private String fileContents;
+    private LevelPack levelPack;
 
 	public LevelPackParser(String fileContents)
 	{
 		this.fileContents = fileContents;
+        read();
 	}
 
 	private ArrayList<Level> parseLevels(JsonArray levelPackArray)
@@ -71,21 +73,25 @@ public class LevelPackParser
 		return levels;
 	}
 
-	public LevelPack read()
+	private void read()
+    {
+        try
+        {
+            JsonObject root = new JsonParser().parse(fileContents).getAsJsonObject();
+            String packageName = root.get("name").getAsString();
+            String packageAuthor = root.get("author").getAsString();
+            String packageVersion = root.get("version").getAsString();
+            ArrayList<Level> levels = parseLevels(root.get("levelPack").getAsJsonArray());
+            levelPack = new LevelPack(packageName, packageAuthor, packageVersion, levels);
+        }
+        catch(Exception e)
+        {
+            Logger.log(LogLevel.ERROR, Logger.exceptionToString(e));
+        }
+    }
+
+	public LevelPack getLevelPack()
 	{
-		try
-		{
-			JsonObject root = new JsonParser().parse(fileContents).getAsJsonObject();
-			String packageName = root.get("name").getAsString();
-			String packageAuthor = root.get("author").getAsString();
-			String packageVersion = root.get("version").getAsString();
-			ArrayList<Level> levels = parseLevels(root.get("levelPack").getAsJsonArray());
-			return new LevelPack(packageName, packageAuthor, packageVersion, levels);
-		}
-		catch(Exception e)
-		{
-			Logger.log(LogLevel.ERROR, Logger.exceptionToString(e));
-		}
-		return null;
+        return levelPack;
 	}
 }
\ No newline at end of file
diff --git a/src/de/bricked/ui/LevelPackSelectController.java b/src/de/bricked/ui/LevelPackSelectController.java
index bc9214928a97266a61bdaaf473b6826b0b377a63..06873f00c9450d747ef23e27744e5503b803bd73 100644
--- a/src/de/bricked/ui/LevelPackSelectController.java
+++ b/src/de/bricked/ui/LevelPackSelectController.java
@@ -2,23 +2,23 @@ package de.bricked.ui;
 
 import java.io.IOException;
 import java.util.Locale;
+import java.util.Optional;
 import java.util.ResourceBundle;
 
 import de.bricked.game.Game;
 import de.bricked.game.levels.LevelPack;
 import de.bricked.game.levels.LevelPackHandler;
 import de.bricked.ui.cells.LevelPackCell;
+import de.bricked.utils.Downloader;
 import javafx.application.Platform;
 import javafx.collections.FXCollections;
+import javafx.event.ActionEvent;
 import javafx.event.EventHandler;
 import javafx.fxml.FXML;
 import javafx.fxml.FXMLLoader;
 import javafx.scene.Parent;
 import javafx.scene.Scene;
-import javafx.scene.control.Label;
-import javafx.scene.control.ListCell;
-import javafx.scene.control.ListView;
-import javafx.scene.control.ScrollPane;
+import javafx.scene.control.*;
 import javafx.scene.control.ScrollPane.ScrollBarPolicy;
 import javafx.scene.image.Image;
 import javafx.scene.input.KeyEvent;
@@ -36,6 +36,7 @@ public class LevelPackSelectController
 	@FXML private AnchorPane mainPane;
 	@FXML private ScrollPane pane;
 	@FXML private Label labelLevelPack;
+    @FXML private Button downloadLevelpackButton;
 
 	public Stage stage;
 	public Image icon = new Image("de/bricked/resources/icon.png");
@@ -76,6 +77,24 @@ public class LevelPackSelectController
 			}
 		});
 
+        downloadLevelpackButton.setOnAction(new EventHandler<ActionEvent>()
+        {
+            @Override
+            public void handle(ActionEvent event)
+            {
+                TextInputDialog textInputDialog = new TextInputDialog();
+                textInputDialog.setHeaderText(null);
+                textInputDialog.setContentText("URL of the raw levelpack");
+                Optional<String> result = textInputDialog.showAndWait();
+                if(result.isPresent())
+                {
+                    new Downloader().download(result.get());
+                    reload();
+                }
+
+            }
+        });
+
 		stage.setOnCloseRequest(new EventHandler<WindowEvent>()
 		{
 			@Override
diff --git a/src/de/bricked/ui/LevelPackSelectGUI.fxml b/src/de/bricked/ui/LevelPackSelectGUI.fxml
index 8c2377e952f1e617ac3a35befdeff135589a52d3..886a10633914b5a6ae76fb1feeb0df69f0a3e705 100644
--- a/src/de/bricked/ui/LevelPackSelectGUI.fxml
+++ b/src/de/bricked/ui/LevelPackSelectGUI.fxml
@@ -19,5 +19,10 @@
          </font>
       </Button>
       <ScrollPane fx:id="pane" layoutX="75.0" layoutY="126.0" maxHeight="549.0" maxWidth="500.0" prefHeight="549.0" prefWidth="500.0" />
+      <Button fx:id="downloadLevelpackButton" layoutX="434.0" layoutY="715.0" minHeight="42.0" minWidth="141.0" mnemonicParsing="false" prefHeight="42.0" prefWidth="141.0" text="Download" textAlignment="CENTER">
+         <font>
+            <Font name="System Bold" size="20.0" />
+         </font>
+      </Button>
    </children>
 </AnchorPane>
diff --git a/src/de/bricked/utils/Downloader.java b/src/de/bricked/utils/Downloader.java
new file mode 100644
index 0000000000000000000000000000000000000000..0c6f65c8cc87f2c0219b765d31147ae73c24310f
--- /dev/null
+++ b/src/de/bricked/utils/Downloader.java
@@ -0,0 +1,54 @@
+package de.bricked.utils;
+
+
+import de.bricked.game.levels.LevelPack;
+import de.bricked.game.levels.LevelPackParser;
+import tools.PathUtils;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.nio.file.Paths;
+
+public class Downloader
+{
+    private LevelPack levelPack;
+    private LevelPackParser levelPackParser;
+    private String downloadedString = "";
+    private String outDir;
+    private String dirname = "/deadspaghetti/bricked/levelpacks/";
+
+    public Downloader()
+    {
+        outDir = PathUtils.getOSindependentPath()+dirname;
+        PathUtils.checkFolder(new File(outDir));
+    }
+
+    public void download(String url)
+    {
+        downloadedString = FileUtils.getURLContent(url);
+        levelPackParser = new LevelPackParser(downloadedString);
+        levelPack = levelPackParser.getLevelPack();
+        save();
+    }
+
+    private void save()
+    {
+        try
+        {
+            FileWriter fileWriter = new FileWriter(outDir+getPackName()+".json");
+            fileWriter.write(downloadedString);
+            fileWriter.flush();
+            fileWriter.close();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+
+    }
+
+    private String getPackName()
+    {
+        return levelPack.getPackageName();
+    }
+}
diff --git a/src/de/bricked/utils/FileUtils.java b/src/de/bricked/utils/FileUtils.java
index 4aae5ac38919b376cbbec957365e5244943e3cc8..accdf3c1ba7054690f7da80a9f408e59c54ec252 100644
--- a/src/de/bricked/utils/FileUtils.java
+++ b/src/de/bricked/utils/FileUtils.java
@@ -44,7 +44,7 @@ public class FileUtils
         return null;
     }
 
-    public static String getURLContentFromJar(String urlString)
+    public static String getURLContent(String urlString)
     {
         try
         {