diff --git a/src/main/java/com/ardublock/translator/block/arrays/ArrayReferenceBlock.java b/src/main/java/com/ardublock/translator/block/arrays/ArrayReferenceBlock.java
new file mode 100644
index 0000000000000000000000000000000000000000..572cc511b84324b36304a93d422deec6debad28b
--- /dev/null
+++ b/src/main/java/com/ardublock/translator/block/arrays/ArrayReferenceBlock.java
@@ -0,0 +1,48 @@
+package com.ardublock.translator.block.arrays;
+
+
+import java.util.ResourceBundle;
+
+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 com.ardublock.translator.block.numbers.ConstantStringBlock;
+import com.ardublock.translator.block.numbers.LocalVariableStringBlock;
+import com.ardublock.translator.block.numbers.NumberBlock;
+import com.ardublock.translator.block.numbers.StringBlock;
+import com.ardublock.translator.block.numbers.VariableStringBlock;
+
+public class ArrayReferenceBlock extends TranslatorBlock
+{
+	private static ResourceBundle uiMessageBundle = ResourceBundle.getBundle("com/ardublock/block/ardublock");
+	
+	public ArrayReferenceBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
+	{
+		super(blockId, translator, codePrefix, codeSuffix, label);
+	}
+
+	@Override
+	public String toCode() throws SocketNullException, SubroutineNotDeclaredException
+	{
+		TranslatorBlock tb_name   = this.getRequiredTranslatorBlockAtSocket(0);
+		TranslatorBlock tb_offset = this.getRequiredTranslatorBlockAtSocket(1);
+
+		String arrayName       = tb_name.toCode();
+		String referenceOffset = tb_offset.toCode();
+
+
+		if ((tb_name instanceof StringBlock) || (tb_name instanceof NumberBlock)) {
+		      throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.var_slot"));
+		    }
+
+		String ret = "&"+arrayName+"[" + referenceOffset + "]";
+
+		return ret;
+	}
+
+}
+
+
+
diff --git a/src/main/resources/com/ardublock/block/ardublock.properties b/src/main/resources/com/ardublock/block/ardublock.properties
index b1364cb0600d0eac8016d07f32304ee3da7345bf..41f440ba529e806010f79812d7fe8dbd80711cb8 100644
--- a/src/main/resources/com/ardublock/block/ardublock.properties
+++ b/src/main/resources/com/ardublock/block/ardublock.properties
@@ -106,6 +106,7 @@ ardublock.error_msg.char_var_slot=Char variable slot must take a char variable n
 ardublock.error_msg.array_var_slot='Array variable' slot must take an 'array variable' name.\nHint: Look at the 'variable' socket on the highlighted block
 ardublock.error_msg.array_size_slot='Array size' slot must take a standard integer constant
 ardublock.error_msg.string_var_slot=String variable slot must take a String variable name.\nHint: Look at the 'variable' socket on the highlighted block
+ardublock.error_msg.var_slot= The slot must take an variable-block
 ardublock.error_msg.string_slot=String slot must take a String variable or a String variable name.\nHint: Look at the 'variable' socket on the highlighted block
 ardublock.error_msg.Digital_pin_slot=Pin# must be a valid digital pin number found on an Arduino Board
 ardublock.error_msg.Analog_pin_slot=Pin# must be a valid analog input pin number found on an Arduino Board
diff --git a/src/main/resources/com/ardublock/block/ardublock.xml b/src/main/resources/com/ardublock/block/ardublock.xml
index 979ca2c9c0bfc97ffe1404ca3d19511c4055e0f4..6b92bb4b04bff02016639c9932beeeeaf64742f0 100644
--- a/src/main/resources/com/ardublock/block/ardublock.xml
+++ b/src/main/resources/com/ardublock/block/ardublock.xml
@@ -2260,6 +2260,35 @@
 				</BlockConnector>
 			</BlockConnectors>
 		</BlockGenus>
+		<BlockGenus name="reference_string" kind="data" color="200 0 0" initlabel="bg.reference_string">
+			<description>
+				<text>reference_string</text>
+			</description>
+			<BlockConnectors>
+				<BlockConnector connector-type="string" connector-kind="plug" />
+				<BlockConnector connector-type="string" connector-kind="socket" label="bc.string">
+					<DefaultArg genus-name="variable_string" label="Name_der_Zeichenkette" />
+				</BlockConnector>
+				<BlockConnector connector-type="number" connector-kind="socket" label="offset">
+					<DefaultArg genus-name="number" label="0" />
+				</BlockConnector>
+			</BlockConnectors>
+		</BlockGenus>
+		<BlockGenus name="reference_number" kind="data" color="200 0 0" initlabel="bg.reference_number">
+			<description>
+				<text>reference_number</text>
+			</description>
+			<BlockConnectors>
+				<BlockConnector connector-type="number" connector-kind="plug" />
+				<BlockConnector connector-type="number" connector-kind="socket" label="bc.string">
+					<DefaultArg genus-name="variable_number" label="Name_der_Tabelle" />
+				</BlockConnector>
+				<BlockConnector connector-type="number" connector-kind="socket" label="offset">
+					<DefaultArg genus-name="number" label="0" />
+				</BlockConnector>
+			</BlockConnectors>
+		</BlockGenus>
+		
 	    
 		<!-- ******************** Communication *************** -->
 		<BlockGenus name="communicationDivider1" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider1" color="150 150 150" />
@@ -3450,6 +3479,8 @@
 				<BlockGenusMember>memcpy_string</BlockGenusMember>
 				<BlockGenusMember>memset_string</BlockGenusMember>
 				<BlockGenusMember>strcpy_string</BlockGenusMember>
+				<BlockGenusMember>reference_string</BlockGenusMember>
+				<BlockGenusMember>reference_number</BlockGenusMember>
 			</BlockDrawer>
 			
 			<BlockDrawer button-color="165 42 42" name="bd.communication" type="default">
diff --git a/src/main/resources/com/ardublock/block/ardublock_de.properties b/src/main/resources/com/ardublock/block/ardublock_de.properties
index ae404af96eb9d4691ac4536c23540f2824f1613f..02ef6e920af06e87141648c6d58e59b4c9166163 100644
--- a/src/main/resources/com/ardublock/block/ardublock_de.properties
+++ b/src/main/resources/com/ardublock/block/ardublock_de.properties
@@ -109,6 +109,7 @@ ardublock.error_msg.array_var_slot=Der 'Variable'-Sockel ben
 ardublock.error_msg.array_size_slot=Der 'Größe' Slot muss einen analogen Wert enthalten
 ardublock.error_msg.string_var_slot=Der 'Variable'-Slot benötigt einen 'Name_der_String_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.string_slot= Der 'Wert'-Slot benötigt einen 'String_Variable'-Block oder einen 'Name_der_String_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
+ardublock.error_msg.var_slot= Der Slot benötigt einen 'Variable'-Block
 ardublock.error_msg.local_var_slot=Der 'Variable'-Sockel benötigt einen 'lokale_X_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.var_value_slot=Der Sockel benötigt einen 'Variable' oder 'Wert'-Block.\nTIPP: Schaue an dem hervorgehobenen Block!
 ardublock.error_msg.var_value_slot=Es ist nur ein Rueckgabeparameter pro Unterprogramm erlaubt!
@@ -719,6 +720,10 @@ bg.memset_string=setze Wert in Tabelle
 bg.memset_string.description=kopiere ein Zeichen/Wert wiederholt in einer Zeichenkette oder Tabelle
 bg.strcpy_string=kopiere Zeichenkette
 bg.strcpy_string.description=kopiere eine Zeichenkette in eine andere
+bg.reference_string=Start der Zeichenkette verschieben
+bg.reference_string.description=Verschiebt die Startposition ab der die Zeichenkette verwendet wird
+bg.reference_number=Start der Tabelle verschieben
+bg.reference_number.description=Verschiebt die Startposition ab der die Tabelle verwendet wird
 
 bc.string=Zeichenkette
 bc.position=Stelle
diff --git a/src/main/resources/com/ardublock/block/ardublock_en_GB.properties b/src/main/resources/com/ardublock/block/ardublock_en_GB.properties
index 58c032b12d494bc7288ca84ec57e22cd4443beb2..381420d3004f3708d27d68bf5f2d82348defb1bc 100644
--- a/src/main/resources/com/ardublock/block/ardublock_en_GB.properties
+++ b/src/main/resources/com/ardublock/block/ardublock_en_GB.properties
@@ -109,6 +109,7 @@ ardublock.error_msg.array_var_slot=Der 'Variable'-Sockel ben
 ardublock.error_msg.number_const_write=
 ardublock.error_msg.array_size_slot=Der 'Größe' Slot muss einen analogen Wert enthalten
 ardublock.error_msg.string_var_slot=Der 'Variable'-Slot benötigt einen 'Name_der_String_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
+ardublock.error_msg.var_slot= Der Slot benötigt einen 'Variable'-Block
 ardublock.error_msg.string_slot= Der 'Wert'-Slot benötigt einen 'String_Variable'-Block oder einen 'Name_der_String_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.local_var_slot=Der 'Variable'-Sockel benötigt einen 'lokale_X_Variable'-Block.\nTIPP: Schaue an dem 'Variable' Sockel an dem hervorgehobenen Block!
 ardublock.error_msg.var_value_slot=Der Sockel benötigt einen 'Variable' oder 'Wert'-Block.\nTIPP: Schaue an dem hervorgehobenen Block!
@@ -718,6 +719,10 @@ bg.memset_string=memset
 bg.memset_string.description=kopiere ein Zeichen/Wert wiederholt in einer Zeichenkette oder Tabelle
 bg.strcpy_string=strcpy
 bg.strcpy_string.description=kopiere eine Zeichenkette in eine andere
+bg.reference_string=Referenz erzeugen
+bg.reference_string.description=Verschiebt die Startposition ab der das char-Array verwendet wird
+bg.reference_number=Referenz erzeugen
+bg.reference_number.description=Verschiebt die Startposition ab der das Array verwendet wird
 
 bc.string=char-Array
 bc.position=Stelle
diff --git a/src/main/resources/com/ardublock/block/block-mapping.properties b/src/main/resources/com/ardublock/block/block-mapping.properties
index cf5ef858ed6aa667fb7054c14e8d6f8b28bb0536..898a55759ff4784c7543cfa185b24b11b836d181 100644
--- a/src/main/resources/com/ardublock/block/block-mapping.properties
+++ b/src/main/resources/com/ardublock/block/block-mapping.properties
@@ -241,6 +241,8 @@ setter_char_array=com.ardublock.translator.block.arrays.SetterCharArrayBlock
 memcpy_string=com.ardublock.translator.block.arrays.MemcpyBlock
 memset_string=com.ardublock.translator.block.arrays.MemsetBlock
 strcpy_string=com.ardublock.translator.block.arrays.StrcpyBlock
+reference_string=com.ardublock.translator.block.arrays.ArrayReferenceBlock
+reference_number=com.ardublock.translator.block.arrays.ArrayReferenceBlock
 
 #COMMUNICATION
 #****************************