diff --git a/src/main/java/com/ardublock/core/Context.java b/src/main/java/com/ardublock/core/Context.java
index 7701446e4a61257ab857bff283936f019f28e089..8b84cdc2a462dab6b01896e7f15ed645167e3b51 100644
--- a/src/main/java/com/ardublock/core/Context.java
+++ b/src/main/java/com/ardublock/core/Context.java
@@ -6,6 +6,8 @@ import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -42,6 +44,8 @@ public class Context
 	//TODO change AppName? by letsgoING
 	final public static String APP_NAME = "ArduBlock";
 	
+	//TODO: ADD saveDefaultArdublockProgram()
+	
 	private Editor editor;
 	
 	public enum OsType
@@ -122,28 +126,41 @@ public class Context
 	
 	private void loadDefaultArdublockProgram()
 	{
+		
 		workspaceController.resetWorkspace();
-
-	    try {
-	    	InputStream is = getClass().getResourceAsStream(DEFAULT_ARDUBLOCK_PROGRAM_PATH);
-		    InputStreamReader isr = new InputStreamReader(is);
-		    BufferedReader br = new BufferedReader(isr);
-		    String defaultFileString = new String();
-		    
-		    String line = null;
-		    while ((line = br.readLine()) != null) {
-		    	defaultFileString += line;
-		    }
-		    
-	    	br.close();
-	 	    isr.close();
-			is.close();
+		String loadPath = "";
 		
-			workspaceController.loadProject(defaultFileString, null , "default");
-			
-		} catch (IOException e) {
+		try {
+			//TODO: set defaultFileName in ardublock.properties
+			loadPath = new File(URLDecoder.decode(getClass().getProtectionDomain().getCodeSource().getLocation().getFile(), "UTF-8")).getParentFile().getPath()+ File.separator +"defaultProgram.abp";
+		} catch (UnsupportedEncodingException e2) {
 			// TODO Auto-generated catch block
-			e.printStackTrace();
+			e2.printStackTrace();
+		}
+		try {
+			workspaceController.loadProjectFromPath(loadPath);
+		} catch (IOException e1) {
+			try {
+		    	InputStream is = getClass().getResourceAsStream(DEFAULT_ARDUBLOCK_PROGRAM_PATH);
+			    InputStreamReader isr = new InputStreamReader(is);
+			    BufferedReader br = new BufferedReader(isr);
+			    String defaultFileString = new String();
+			    
+			    String line = null;
+			    while ((line = br.readLine()) != null) {
+			    	defaultFileString += line;
+			    }
+			    
+		    	br.close();
+		 	    isr.close();
+				is.close();
+			
+				workspaceController.loadProject(defaultFileString, null , "default");
+				
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
 		}
 	}
 	
diff --git a/src/main/java/com/ardublock/ui/OpenblocksFrame.java b/src/main/java/com/ardublock/ui/OpenblocksFrame.java
index a5a082a7a2b597629426d6705e271b3cfd342e7c..71ef11579359eb20b95fd83f56046bdc5bc4fe7a 100644
--- a/src/main/java/com/ardublock/ui/OpenblocksFrame.java
+++ b/src/main/java/com/ardublock/ui/OpenblocksFrame.java
@@ -9,8 +9,13 @@ import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyEvent;
 import java.io.File;
+import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.UnsupportedEncodingException;
+import java.net.URISyntaxException;
 import java.net.URL;
+import java.net.URLDecoder;
 import java.util.ResourceBundle;
 
 import javax.swing.Box;
@@ -36,6 +41,7 @@ import com.ardublock.ui.listener.OpenblocksFrameListener;
 import com.ardublock.ui.listener.PasteButtonListener;
 import com.ardublock.ui.listener.SaveAsButtonListener;
 import com.ardublock.ui.listener.SaveButtonListener;
+import com.ardublock.ui.listener.SaveDefaultButtonListener;
 import com.ardublock.ui.listener.SaveImageButtonListener;
 //import com.ardublock.ui.listener.ZoomInButtonListener;
 //import com.ardublock.ui.listener.ZoomOutButtonListener;
@@ -200,7 +206,7 @@ public class OpenblocksFrame extends JFrame
 		
 		topPanel.add(newButton);
 		topPanel.add(saveButton);
-		topPanel.add(saveAsButton);
+		topPanel.add(saveAsButton);	
 		topPanel.add(openButton);
 		topPanel.add(Box.createRigidArea(new Dimension(15, 0))); //std value 30,0
 		topPanel.add(generateButton);
@@ -342,6 +348,19 @@ public class OpenblocksFrame extends JFrame
 		modeButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.modeButton.mode.tooltip"));*/
 		//*****************************************
 		
+		
+		
+		//TODO: TEST SAVE DEFAULT
+		//Save new default program
+		//*************************
+		JButton saveDefaultButton = new JButton(uiMessageBundle.getString("ardublock.ui.saveDefaultProgram"));
+		ActionListener saveDefaultButtonListener = new SaveDefaultButtonListener(this);	
+		saveDefaultButton.addActionListener(saveDefaultButtonListener);
+		//KeyStroke ctrlshiftsKeyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.SHIFT_MASK);
+		//saveAsButton.registerKeyboardAction(saveAsButtonListener, ctrlshiftsKeyStroke, JComponent.WHEN_FOCUSED);
+		saveDefaultButton.setToolTipText(uiMessageBundle.getString("ardublock.ui.saveDefaultProgram.tooltip"));
+		
+		
 		//SWITCH BLOCK MENU BASIC/PRO/SIM
 		//*****************************************
 		//Workspace: BASIC
@@ -495,6 +514,10 @@ public class OpenblocksFrame extends JFrame
 		//bottomPanel.add(blockreferenceButton);
 		bottomPanel.add(Box.createRigidArea(new Dimension(10, 0))); //std value 30,0
 		bottomPanel.add(saveImageButton);
+		
+		//TODO: TEST
+		bottomPanel.add(saveDefaultButton);
+		
 		bottomPanel.add(Box.createRigidArea(new Dimension(10, 0))); //std value 30,0
 		bottomPanel.add(zoomSlider);
 		//bottomPanel.add(zoomInButton);
@@ -611,6 +634,29 @@ public class OpenblocksFrame extends JFrame
 		}
 	}
 	
+	//TODO: TEST safe new defaultProgram
+	public void doSaveDefaultArduBlockFile()
+	{
+		if(askUserOverwriteDefaultFile()){
+			String saveString = getArduBlockString();	
+			String savePath = "";
+			try {
+				savePath = new File(URLDecoder.decode(getClass().getProtectionDomain().getCodeSource().getLocation().getFile(), "UTF-8")).getParentFile().getPath();
+			} catch (UnsupportedEncodingException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			//TODO: set defaultFileName in ardublock.properties
+			File saveFile = checkFileSuffix(new File (savePath+ File.separator +"defaultProgram.abp"));
+			try {
+				saveArduBlockToFile(saveString, saveFile);
+			} catch (IOException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		}
+	}
+	
 	public void doSaveAsArduBlockFile()
 	{
 		if (context.isWorkspaceEmpty())
@@ -679,6 +725,12 @@ public class OpenblocksFrame extends JFrame
 		return (optionValue == JOptionPane.YES_OPTION);
 	}
 	
+	private boolean askUserOverwriteDefaultFile()
+	{
+		int optionValue = JOptionPane.showOptionDialog(this, uiMessageBundle.getString("message.content.overwriteDefault"), uiMessageBundle.getString("message.title.question"), JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, JOptionPane.YES_OPTION);
+		return (optionValue == JOptionPane.YES_OPTION);
+	}
+	
 	private void saveArduBlockToFile(String ardublockString, File saveFile) throws IOException
 	{
 		context.saveArduBlockFile(saveFile, ardublockString);
diff --git a/src/main/resources/com/ardublock/block/SimHelp.png b/src/main/resources/com/ardublock/block/SimHelp.png
index 7af0afdf9a7f03227ae04fdd427f0a3a54eaeac6..54ec5a57a0f4acdd700367bf56d3b9e2f465b43f 100644
Binary files a/src/main/resources/com/ardublock/block/SimHelp.png and b/src/main/resources/com/ardublock/block/SimHelp.png differ
diff --git a/src/main/resources/com/ardublock/block/ardublock.properties b/src/main/resources/com/ardublock/block/ardublock.properties
index 591bb2d9f70e3dcfdec96e8801eaa1f9cd3a41cf..38417d1cd89bb96e04641c7b9bf6fc182d755a87 100644
--- a/src/main/resources/com/ardublock/block/ardublock.properties
+++ b/src/main/resources/com/ardublock/block/ardublock.properties
@@ -49,6 +49,8 @@ ardublock.ui.redo=Redo
 ardublock.ui.redo.tooltip=redo Ctrl-Y
 ardublock.ui.saveImage=Save as image
 ardublock.ui.saveImage.tooltip=save current program as image... Ctrl-P
+ardublock.ui.saveDefaultProgram=save as default
+ardublock.ui.saveDefaultProgram.tooltip=saves current program as default program
 ardublock.ui.zoomIn=+
 ardublock.ui.zoomIn.tooltip=zoom in Ctrl-Plus
 ardublock.ui.zoomOut=-
@@ -114,7 +116,8 @@ ardublock.translator.exception.subroutineNotDeclared=subroutine not declared
 message.title.error=Error
 message.title.question=Question
 message.content.open_unsaved=Ardublock program has changed, do you want to save?
-message.content.overwrite=Do you want overwrite existing file?
+message.content.overwrite=Do you want to overwrite existing file?
+message.content.overwriteDefault=Do you want to overwrite default file?
 message.file_not_found=File Not Found or Permission Denied
 message.question.newfile_on_workspace_changed=The program has changed, do you want to create a new Ardublock file?
 
diff --git a/src/main/resources/com/ardublock/block/ardublock_de.properties b/src/main/resources/com/ardublock/block/ardublock_de.properties
index 708019b8236a8a197a5209cb57cee4247d0d43d2..f69a36720c3a4f2e12481eaa473b48647c0f43e8 100644
--- a/src/main/resources/com/ardublock/block/ardublock_de.properties
+++ b/src/main/resources/com/ardublock/block/ardublock_de.properties
@@ -51,6 +51,8 @@ ardublock.ui.redo=Redo
 ardublock.ui.redo.tooltip=Wiederherstellen Ctrl-Y
 ardublock.ui.saveImage=Bild speichern
 ardublock.ui.saveImage.tooltip=Speichert ein Bild des aktuellen Programms  Strg-P
+ardublock.ui.saveDefaultProgram=Als Vorlage speichern
+ardublock.ui.saveDefaultProgram.tooltip=Speichert aktuelles Programm als Vorlage für neue Programme
 ardublock.ui.zoomIn=+
 ardublock.ui.zoomIn.tooltip=vergrößere Programm Strg-Plus
 ardublock.ui.zoomOut=-
@@ -117,6 +119,7 @@ message.title.error=Fehler
 message.title.question=Frage
 message.content.open_unsaved=Das Ardublock-Programm hat sich geändert, soll es gespeichert werden?
 message.content.overwrite=Soll das vorhandene Programm überschrieben werden?
+message.content.overwriteDefault=Soll die Programmvorlage überschrieben werden?
 message.file_not_found=Datei wurde nicht gefunden oder der Zugriff wurde verweigert.
 message.question.newfile_on_workspace_changed=Das Programm hat sich geändert, soll eine neue Ardublock-Datei erstellt werden?