diff --git a/src/main/java/com/ardublock/translator/block/communication/SerialPrintBlock.java b/src/main/java/com/ardublock/translator/block/communication/SerialPrintBlock.java
index 99fde878d7f3c28c65997dc22f58516e1a90bbac..786385d017f5944f8a67d3dd7f736aaa816df429 100644
--- a/src/main/java/com/ardublock/translator/block/communication/SerialPrintBlock.java
+++ b/src/main/java/com/ardublock/translator/block/communication/SerialPrintBlock.java
@@ -2,9 +2,15 @@ package com.ardublock.translator.block.communication;
 
 import com.ardublock.translator.Translator;
 import com.ardublock.translator.block.TranslatorBlock;
+import com.ardublock.translator.block.exception.BlockException;
 import com.ardublock.translator.block.exception.SocketNullException;
 import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
 
+import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+import tec.letsgoing.ardublock.simulator.simcode.comm.CodeSerialPrint;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeString;
+
 public class SerialPrintBlock extends TranslatorBlock
 {
 	public SerialPrintBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
@@ -43,4 +49,14 @@ public class SerialPrintBlock extends TranslatorBlock
 
 		return ret;
 	}
+	
+	public SimCode toSim() throws BlockException, SocketNullException {
+		TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0); //Code
+		SimTypeString data=new SimTypeString(translatorBlock.toSim());
+		translatorBlock = this.getRequiredTranslatorBlockAtSocket(1); //newLine?
+		SimTypeBool newLine= new SimTypeBool(translatorBlock.toSim());
+		
+		return new CodeSerialPrint(data,newLine);
+	}
+	
 }
diff --git a/src/main/java/com/ardublock/translator/block/control/ElseBlock.java b/src/main/java/com/ardublock/translator/block/control/ElseBlock.java
index b5c867ffce9f103139fa41761cb8b0b9bb286c14..3ee39915cb9b90bd0c9685250be9b9ffcbbbb098 100644
--- a/src/main/java/com/ardublock/translator/block/control/ElseBlock.java
+++ b/src/main/java/com/ardublock/translator/block/control/ElseBlock.java
@@ -12,6 +12,7 @@ import tec.letsgoing.ardublock.simulator.simcode.SimCode;
 import tec.letsgoing.ardublock.simulator.simcode.control.CodeElse;
 import tec.letsgoing.ardublock.simulator.simcode.control.CodeElseIf;
 import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeIf;
 
 public class ElseBlock extends TranslatorBlock
 {
@@ -33,18 +34,25 @@ public class ElseBlock extends TranslatorBlock
 		ret = ret + "}\n";
 		return ret;
 	}
-	@Override
-	public SimCode toSim() throws BlockException, SocketNullException {
-		//FIXME In jedem Block wo mehrere Blöcke enthalten sind, ist eine Abfrage nach If Else nötig... Auslagerung?.
+	
+	public SimTypeIf toIfSim() throws BlockException, SocketNullException {
+		
 		
 		Vector<SimCode> vector = new Vector<SimCode>();
 		TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(0);
 		while (translatorBlock != null)
 		{
-			vector.add(translatorBlock.toSim());
+			if (translatorBlock.toSim()!=null) {
+				vector.add(translatorBlock.toSim());
+				}
 			translatorBlock = translatorBlock.nextTranslatorBlock();
 		}
 		
+		
 		return new CodeElse(vector); 
 	}
+	
+	public SimCode toSim() {
+		return null;
+	}
 }
diff --git a/src/main/java/com/ardublock/translator/block/control/ElseIfBlock.java b/src/main/java/com/ardublock/translator/block/control/ElseIfBlock.java
index 97ae3f76a0ce368b89c33fcb0e941b222c24d1ac..dd8ab538cc4117a902c74c37809e0da9de1b5a74 100644
--- a/src/main/java/com/ardublock/translator/block/control/ElseIfBlock.java
+++ b/src/main/java/com/ardublock/translator/block/control/ElseIfBlock.java
@@ -12,6 +12,7 @@ import tec.letsgoing.ardublock.simulator.simcode.SimCode;
 import tec.letsgoing.ardublock.simulator.simcode.control.CodeElseIf;
 import tec.letsgoing.ardublock.simulator.simcode.control.CodeIf;
 import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeIf;
 
 public class ElseIfBlock extends TranslatorBlock
 {
@@ -39,16 +40,32 @@ public class ElseIfBlock extends TranslatorBlock
 	
 	@Override
 	public SimCode toSim() throws BlockException, SocketNullException {
-		//FIXME In jedem Block wo mehrere Blöcke enthalten sind, ist eine Abfrage nach If Else nötig... Auslagerung?.
-		SimTypeBool condition=new SimTypeBool(this.getRequiredTranslatorBlockAtSocket(0).toSim());
-		Vector<SimCode> vector = new Vector<SimCode>();
-		TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(1);
-		while (translatorBlock != null)
-		{
-			vector.add(translatorBlock.toSim());
-			translatorBlock = translatorBlock.nextTranslatorBlock();
-		}
+		return null;
+	}
+	
+	public SimTypeIf toIfSim() throws BlockException, SocketNullException {
 		
-		return new CodeElseIf(condition,vector); 
+				SimTypeBool condition=new SimTypeBool(this.getRequiredTranslatorBlockAtSocket(0).toSim());
+				Vector<SimCode> vector = new Vector<SimCode>();
+				TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(1);
+				while (translatorBlock != null)
+				{
+					if (translatorBlock.toSim()!=null) {
+						vector.add(translatorBlock.toSim());
+						}
+					translatorBlock = translatorBlock.nextTranslatorBlock();
+				}
+				SimTypeIf followCode=null;
+				TranslatorBlock followBlock=this.nextTranslatorBlock();
+				if (followBlock instanceof ElseIfBlock) {
+					followCode=((ElseIfBlock)followBlock).toIfSim();
+				} else if (followBlock instanceof ElseBlock) {
+					followCode=((ElseBlock)followBlock).toIfSim();
+
+				}
+
+				
+				return new CodeElseIf(followCode,condition,vector); 
 	}
+	
 }
diff --git a/src/main/java/com/ardublock/translator/block/control/IfBlock.java b/src/main/java/com/ardublock/translator/block/control/IfBlock.java
index afe074c082863210f0d995f162ee9595dad67a26..b2e1e72e0b0fd7d831fbf567d275ed107612e7c5 100644
--- a/src/main/java/com/ardublock/translator/block/control/IfBlock.java
+++ b/src/main/java/com/ardublock/translator/block/control/IfBlock.java
@@ -9,8 +9,11 @@ import com.ardublock.translator.block.exception.SocketNullException;
 import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
 
 import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+import tec.letsgoing.ardublock.simulator.simcode.control.CodeElse;
+import tec.letsgoing.ardublock.simulator.simcode.control.CodeElseIf;
 import tec.letsgoing.ardublock.simulator.simcode.control.CodeIf;
 import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeIf;
 
 
 public class IfBlock extends TranslatorBlock
@@ -39,17 +42,26 @@ public class IfBlock extends TranslatorBlock
 	
 	@Override
 	public SimCode toSim() throws BlockException, SocketNullException {
-		//FIXME In jedem Block wo mehrere Blöcke enthalten sind, ist eine Abfrage nach If Else nötig... Auslagerung?.
 		SimTypeBool condition=new SimTypeBool(this.getRequiredTranslatorBlockAtSocket(0).toSim());
 		Vector<SimCode> vector = new Vector<SimCode>();
 		TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(1);
 		while (translatorBlock != null)
 		{
+			if (translatorBlock.toSim()!=null) {
 			vector.add(translatorBlock.toSim());
+			}
 			translatorBlock = translatorBlock.nextTranslatorBlock();
 		}
-		
-		return new CodeIf(condition,vector); 
+		SimTypeIf followCode=null;
+		TranslatorBlock followBlock=this.nextTranslatorBlock();
+		if (followBlock instanceof ElseIfBlock) {
+			followCode=((ElseIfBlock)followBlock).toIfSim();
+		} else if (followBlock instanceof ElseBlock) {
+			followCode=((ElseBlock)followBlock).toIfSim();
+
+		}
+
+		return new CodeIf(followCode,condition,vector); 
 	}
 	
 	
diff --git a/src/main/java/com/ardublock/translator/block/control/LoopBlock.java b/src/main/java/com/ardublock/translator/block/control/LoopBlock.java
index a32c136503b53b666b24f5c8d73d35feddd9524e..c307cf6bf1e4556224be27d9aff73d28a979c570 100644
--- a/src/main/java/com/ardublock/translator/block/control/LoopBlock.java
+++ b/src/main/java/com/ardublock/translator/block/control/LoopBlock.java
@@ -42,20 +42,15 @@ public class LoopBlock extends TranslatorBlock
 	public SimCode toSim() throws BlockException, SocketNullException {
 		Vector<SimCode> vec =new Vector<SimCode>();
 		TranslatorBlock translatorBlock = getTranslatorBlockAtSocket(0);
-		SimCode prevSimCode=null;
 		while (translatorBlock != null)
 		{
 			SimCode newSimCode = translatorBlock.toSim();
-			
 			translatorBlock = translatorBlock.nextTranslatorBlock();
-			if (newSimCode instanceof CodeElseIf ||  newSimCode instanceof CodeElse) {
-				((SimTypeIf)prevSimCode).setFollowBlock((SimTypeIf) newSimCode);
-			} else {
+			if (newSimCode != null) {
 				vec.add(newSimCode);
 			}
-			if (newSimCode instanceof SimTypeIf) {
-				prevSimCode=newSimCode;
-			}
+			
+			
 		}
 		SimCodeFunction loop =new SimCodeFunction("loop",vec);
 		return loop;
diff --git a/src/main/java/com/ardublock/translator/block/control/RepeatBlock.java b/src/main/java/com/ardublock/translator/block/control/RepeatBlock.java
index 23416ad483f2fe0eef6b1299c7a2faa104a44d89..1b0a469effcc59342b1f2bbe0a47bb0c3bddbfa6 100644
--- a/src/main/java/com/ardublock/translator/block/control/RepeatBlock.java
+++ b/src/main/java/com/ardublock/translator/block/control/RepeatBlock.java
@@ -11,6 +11,9 @@ import com.ardublock.translator.block.numbers.LocalVariableNumberBlock;
 import com.ardublock.translator.block.numbers.NumberBlock;
 import com.ardublock.translator.block.numbers.VariableNumberBlock;
 
+import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+import tec.letsgoing.ardublock.simulator.simcode.control.CodeWhile;
+
 public class RepeatBlock extends TranslatorBlock
 {
 
@@ -78,5 +81,7 @@ public class RepeatBlock extends TranslatorBlock
 		ret = ret + "}\n";
 		return ret;
 	}
+	
+	
 
 }
diff --git a/src/main/java/com/ardublock/translator/block/control/RepeatTimesBlock.java b/src/main/java/com/ardublock/translator/block/control/RepeatTimesBlock.java
index df84ffe7b62cdb4c8ba4344b4e05437aaed079ee..a5fe5244ada8a0aaf03213c398ee34f9cdb5d403 100644
--- a/src/main/java/com/ardublock/translator/block/control/RepeatTimesBlock.java
+++ b/src/main/java/com/ardublock/translator/block/control/RepeatTimesBlock.java
@@ -1,10 +1,17 @@
 package com.ardublock.translator.block.control;
 
+import java.util.Vector;
+
 import com.ardublock.translator.Translator;
 import com.ardublock.translator.block.TranslatorBlock;
+import com.ardublock.translator.block.exception.BlockException;
 import com.ardublock.translator.block.exception.SocketNullException;
 import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
 
+import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+import tec.letsgoing.ardublock.simulator.simcode.control.CodeFor;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeInt;
+
 public class RepeatTimesBlock extends TranslatorBlock
 {
 
@@ -32,5 +39,22 @@ public class RepeatTimesBlock extends TranslatorBlock
 		ret = ret + "}\n";
 		return ret;
 	}
+	
+	public SimCode toSim() throws BlockException, SocketNullException {
+		TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0);
+		SimTypeInt times=new SimTypeInt(translatorBlock.toSim());
+		translatorBlock = getTranslatorBlockAtSocket(1);
+		Vector<SimCode> vector= new Vector<SimCode>();
+		while (translatorBlock != null)
+		{
+			SimCode block=translatorBlock.toSim();
+			if (block!=null) {
+				vector.add(block);
+			}
+			translatorBlock = translatorBlock.nextTranslatorBlock();
+		}
+		
+		return new CodeFor(times,vector);
+	}
 
 }
diff --git a/src/main/java/com/ardublock/translator/block/control/WhileBlock.java b/src/main/java/com/ardublock/translator/block/control/WhileBlock.java
index c3b71c59a8e25423c22836b72956ab984dc490f5..e0feaefaa24a58a4611c518c67cbdb224b1e56d8 100644
--- a/src/main/java/com/ardublock/translator/block/control/WhileBlock.java
+++ b/src/main/java/com/ardublock/translator/block/control/WhileBlock.java
@@ -1,10 +1,17 @@
 package com.ardublock.translator.block.control;
 
+import java.util.Vector;
+
 import com.ardublock.translator.Translator;
 import com.ardublock.translator.block.TranslatorBlock;
+import com.ardublock.translator.block.exception.BlockException;
 import com.ardublock.translator.block.exception.SocketNullException;
 import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
 
+import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+import tec.letsgoing.ardublock.simulator.simcode.control.CodeWhile;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
+
 public class WhileBlock extends TranslatorBlock
 {
 
@@ -29,5 +36,21 @@ public class WhileBlock extends TranslatorBlock
 		ret = ret + "}\n";
 		return ret;
 	}
+	
+	public SimCode toSim() throws BlockException, SocketNullException {
+		TranslatorBlock translatorBlock = this.getRequiredTranslatorBlockAtSocket(0);
+		SimTypeBool condition=new SimTypeBool(translatorBlock.toSim());
+		translatorBlock = getTranslatorBlockAtSocket(1);
+		Vector<SimCode> vector= new Vector<SimCode>();
+		while (translatorBlock != null)
+		{
+			SimCode block=translatorBlock.toSim();
+			if (block!=null) {
+				vector.add(block);
+			}
+			translatorBlock = translatorBlock.nextTranslatorBlock();
+		}
+		return new CodeWhile(condition,vector);
+	}
 
 }
diff --git a/src/main/java/com/ardublock/translator/block/numbers/FalseBlock.java b/src/main/java/com/ardublock/translator/block/numbers/FalseBlock.java
index e97c4aae2661a4d6e2b1c44a54d31dd8659c5e80..6ee30c30a01202492c785d46dcc3c5708809f478 100644
--- a/src/main/java/com/ardublock/translator/block/numbers/FalseBlock.java
+++ b/src/main/java/com/ardublock/translator/block/numbers/FalseBlock.java
@@ -3,6 +3,9 @@ package com.ardublock.translator.block.numbers;
 import com.ardublock.translator.Translator;
 import com.ardublock.translator.block.ConstBlock;
 
+import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
+
 public class FalseBlock extends ConstBlock
 {
 	public FalseBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
@@ -10,4 +13,7 @@ public class FalseBlock extends ConstBlock
 		super(blockId, translator, codePrefix, codeSuffix, label);
 		this.setCode("false");
 	}
+	public SimCode toSim() {
+		return new SimTypeBool(false);
+	}
 }
diff --git a/src/main/java/com/ardublock/translator/block/numbers/SetterVariableDigitalBlock.java b/src/main/java/com/ardublock/translator/block/numbers/SetterVariableDigitalBlock.java
index 4942c9cb5191feb81efb1b9f658e0ffb5c544f9b..79971962cb9887fead5d5b77e21ef2fb58d0e325 100644
--- a/src/main/java/com/ardublock/translator/block/numbers/SetterVariableDigitalBlock.java
+++ b/src/main/java/com/ardublock/translator/block/numbers/SetterVariableDigitalBlock.java
@@ -8,6 +8,8 @@ import com.ardublock.translator.block.exception.BlockException;
 import com.ardublock.translator.block.exception.SocketNullException;
 import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
 
+import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+
 public class SetterVariableDigitalBlock extends TranslatorBlock
 {
 	private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock");
@@ -70,5 +72,9 @@ public class SetterVariableDigitalBlock extends TranslatorBlock
 		
 		return variableName + " = " + value + suffix + ";\n";
 	}
+	public SimCode toSim() {
+		
+		return null;
+	}
 
 }
diff --git a/src/main/java/com/ardublock/translator/block/numbers/StringBlock.java b/src/main/java/com/ardublock/translator/block/numbers/StringBlock.java
index 4cf6c122b3328e6fab653ecd020d04dc85070306..f8e4b25fa023e63400dfe0bc5eba1540a9b73014 100644
--- a/src/main/java/com/ardublock/translator/block/numbers/StringBlock.java
+++ b/src/main/java/com/ardublock/translator/block/numbers/StringBlock.java
@@ -5,6 +5,10 @@ import com.ardublock.translator.block.TranslatorBlock;
 import com.ardublock.translator.block.exception.SocketNullException;
 import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
 
+import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeString;
+
 public class StringBlock extends TranslatorBlock
 {
 	public StringBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
@@ -32,4 +36,8 @@ public class StringBlock extends TranslatorBlock
 		return codePrefix + "\"" + label + "\"" + codeSuffix;
 		
 	}
+	
+	public SimCode toSim() {
+		return new SimTypeString(label);
+	}
 }
\ No newline at end of file
diff --git a/src/main/java/com/ardublock/translator/block/numbers/TrueBlock.java b/src/main/java/com/ardublock/translator/block/numbers/TrueBlock.java
index 269e6176925667b8ac5d4d806ac54c836460833a..512a4c57703a3ff2e3278c4e48406f1189ac4f8f 100644
--- a/src/main/java/com/ardublock/translator/block/numbers/TrueBlock.java
+++ b/src/main/java/com/ardublock/translator/block/numbers/TrueBlock.java
@@ -3,6 +3,9 @@ package com.ardublock.translator.block.numbers;
 import com.ardublock.translator.Translator;
 import com.ardublock.translator.block.ConstBlock;
 
+import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeBool;
+
 public class TrueBlock extends ConstBlock
 {
 	public TrueBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
@@ -10,4 +13,8 @@ public class TrueBlock extends ConstBlock
 		super(blockId, translator, codePrefix, codeSuffix, label);
 		this.setCode("true");
 	}
+	
+	public SimCode toSim() {
+		return new SimTypeBool(true);
+	}
 }
diff --git a/src/main/java/com/ardublock/translator/block/numbers/VariableDigitalBlock.java b/src/main/java/com/ardublock/translator/block/numbers/VariableDigitalBlock.java
index 5eb6f33f203a1e2e0bdd640815f730dd3b9991a1..c18e4f33acafc40bdffd941b57f9758371bd5cd9 100644
--- a/src/main/java/com/ardublock/translator/block/numbers/VariableDigitalBlock.java
+++ b/src/main/java/com/ardublock/translator/block/numbers/VariableDigitalBlock.java
@@ -3,6 +3,10 @@ package com.ardublock.translator.block.numbers;
 import com.ardublock.translator.Translator;
 import com.ardublock.translator.block.TranslatorBlock;
 
+import tec.letsgoing.ardublock.simulator.simcode.SimCode;
+import tec.letsgoing.ardublock.simulator.simcode.datatypes.SimTypeString;
+import tec.letsgoing.ardublock.simulator.simcode.vars.CodeBoolGet;
+
 public class VariableDigitalBlock extends TranslatorBlock
 {
 	public VariableDigitalBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
@@ -26,4 +30,13 @@ public class VariableDigitalBlock extends TranslatorBlock
 		return codePrefix + newInternalName + codeSuffix;
 	}
 
+	
+	public String toString() {
+		return label;
+	}
+	
+	public SimCode toSim() {
+		return new CodeBoolGet(new SimTypeString(label));
+		//FIXME Setter has to decide if it is new. Add here to Label and Setter makes set or 
+	}
 }