diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnCallbackBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnCallbackBlock.java
index 3cf613c51727e025fc6d0f2769fd3cf655294762..8c733a8dc9dcc47d1522a3bff11df77bd65f98a3 100644
--- a/src/main/java/com/ardublock/translator/block/communication/PsnCallbackBlock.java
+++ b/src/main/java/com/ardublock/translator/block/communication/PsnCallbackBlock.java
@@ -46,6 +46,27 @@ public class PsnCallbackBlock extends TranslatorBlock
 		dataLenVar = tb_dataLenVar.toCode().replaceAll("\\s*_.new\\b\\s*", "");
 		
 		if (tb_topicVar instanceof LocalVariableStringBlock && tb_topicLenVar instanceof LocalVariableNumberBlock && tb_dataVar instanceof LocalVariableStringBlock && tb_dataLenVar instanceof LocalVariableNumberBlock) {
+			translator.addDefinitionCommand("void " + callbackName + "(char*, int, char*, int);\n");
+			ret += "void " + callbackName + "(char* "+ topicVar +", int "+ topicLenVar +", char* "+ dataVar +", int "+ dataLenVar +" ){\n";
+			
+			while (tb_code != null)
+			{
+				ret += tb_code.toCode();
+				tb_code = tb_code.nextTranslatorBlock();
+			}
+			ret += "}\n\n";
+		}
+		else{
+			throw new BlockException(blockId, uiMessageBundle.getString("ardublock.error_msg.local_var_slot"));
+		}
+
+		
+		return ret;
+	}
+}
+
+/*
+ * 		if (tb_topicVar instanceof LocalVariableStringBlock && tb_topicLenVar instanceof LocalVariableNumberBlock && tb_dataVar instanceof LocalVariableStringBlock && tb_dataLenVar instanceof LocalVariableNumberBlock) {
 			translator.addDefinitionCommand("void " + callbackName + "(char*, int, char*, int);\n");
 			ret += "void " + callbackName + "(char* _topic, int _topicLength, char* _data , int _dataLength ){\n";
 			ret += "char " + topicVar +"[_topicLength+1] = \"\";\n";
@@ -72,3 +93,4 @@ public class PsnCallbackBlock extends TranslatorBlock
 		return ret;
 	}
 }
+ * */
diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java
index f9908d605c5c6808295c44df48198239c0a5660a..61199585f4185054595148663a2af9e6376b3e53 100644
--- a/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java
+++ b/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java
@@ -16,10 +16,10 @@ public class PsnClientBlock extends TranslatorBlock
 	public String toCode() throws SocketNullException, SubroutineNotDeclaredException
 	{
 
-		String serialName = "psnSerial";
+		String serialName = "sSerial";
 		String pubSubName = "";
 		String callbackName = "";
-		String pubSubType = "simplePSNetClient";
+		String pubSubType = "didacticPSNetClient";
 		
 		
 		TranslatorBlock psnName = this.getRequiredTranslatorBlockAtSocket(0);//Name
@@ -30,16 +30,14 @@ public class PsnClientBlock extends TranslatorBlock
 		pubSubName = psnName.toCode().replaceAll("\\s*_.new\\b\\s*\"", "").replaceAll("\"", "");
 		callbackName = cbName.toCode().replaceAll("\\s*_.new\\b\\s*\"", "").replaceAll("\"", "");
 		
-		translator.addHeaderFile("simplePSNet.h");
+		translator.addHeaderFile("didacticNet.h");
 		translator.addHeaderFile("SoftwareSerial.h");
 		
 		translator.addDefinitionCommand(pubSubType + " " +pubSubName+";\n");
 		translator.addDefinitionCommand("SoftwareSerial " + serialName+"(" + rxPin.toCode().replaceAll("\\s*_.new\\b\\s*", "") + ", "+ txPin.toCode().replaceAll("\\s*_.new\\b\\s*", "") +");\n");
 		
 		translator.addSetupCommand(serialName+".begin(2400);");
-		translator.addSetupCommand(pubSubName + ".setStream(" + serialName + ");\n");
-		translator.addSetupCommand(pubSubName + ".setCallback(" + callbackName + ");\n");
-			
+		translator.addSetupCommand(pubSubName + ".begin(" + serialName +", "+ callbackName +");\n");		
 		return "";
 	}
 }
diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnPublishBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnPublishBlock.java
index f257518091917ae7f0725cb9c3dc13809c88d654..409005796185c56d0ff686598875427f7e8e666d 100644
--- a/src/main/java/com/ardublock/translator/block/communication/PsnPublishBlock.java
+++ b/src/main/java/com/ardublock/translator/block/communication/PsnPublishBlock.java
@@ -33,6 +33,6 @@ public class PsnPublishBlock extends TranslatorBlock
 			data = data.replaceAll("\"", "");
 		}
 		
-		return name + ".publish("+topic+", strlen("+topic+"), "+data+", strlen("+data+"));";
+		return name + ".publish("+topic+", "+data+");";
 	}
 }
diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnServerBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnServerBlock.java
index f9baf388d53bf953c253f3810f3f1f0bba010b3b..4e2f95737321199205bfb80d8c90687a46ea099f 100644
--- a/src/main/java/com/ardublock/translator/block/communication/PsnServerBlock.java
+++ b/src/main/java/com/ardublock/translator/block/communication/PsnServerBlock.java
@@ -15,9 +15,9 @@ public class PsnServerBlock extends TranslatorBlock
 	@Override
 	public String toCode() throws SocketNullException, SubroutineNotDeclaredException
 	{
-		String serialName = "psnSerial";
+		String serialName = "sSerial";
 		String pubSubName = "";
-		String pubSubType = "simplePSNetServer";
+		String pubSubType = "didacticPSNetBroker";
 		
 		TranslatorBlock psnName = this.getRequiredTranslatorBlockAtSocket(0);//Name
 		TranslatorBlock rxPin = this.getRequiredTranslatorBlockAtSocket(1);//Pin Rx
@@ -25,14 +25,14 @@ public class PsnServerBlock extends TranslatorBlock
 		
 		pubSubName = psnName.toCode().replaceAll("\\s*_.new\\b\\s*", "").replaceAll("\"", "");
 		
-		translator.addHeaderFile("simplePSNet.h");
+		translator.addHeaderFile("didacticNet.h");
 		translator.addHeaderFile("SoftwareSerial.h");
 		
 		translator.addDefinitionCommand(pubSubType + " " +pubSubName+";\n");
 		translator.addDefinitionCommand("SoftwareSerial " + serialName+"(" + rxPin.toCode().replaceAll("\\s*_.new\\b\\s*", "") + ", "+ txPin.toCode().replaceAll("\\s*_.new\\b\\s*", "") +");\n");
 		
 		translator.addSetupCommand(serialName+".begin(2400);");
-		translator.addSetupCommand(pubSubName + ".setStream(" + serialName + ");\n");
+		translator.addSetupCommand(pubSubName + ".begin(" + serialName + ");\n");
 			
 		return "";
 	}
diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnSubscribeBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnSubscribeBlock.java
index e60193cb62c57e27173c6d226727fd9acdb3de17..5358773b3760dc46a7d20aad5dd568e7fcc9d595 100644
--- a/src/main/java/com/ardublock/translator/block/communication/PsnSubscribeBlock.java
+++ b/src/main/java/com/ardublock/translator/block/communication/PsnSubscribeBlock.java
@@ -26,6 +26,6 @@ public class PsnSubscribeBlock extends TranslatorBlock
 			topic = topic.replaceAll("\"", "");
 		}
 		
-		return name + ".subscribe("+topic+", strlen("+topic+"));";
+		return name + ".subscribe("+topic+");";
 	}
 }
diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnUnsubscribeBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnUnsubscribeBlock.java
new file mode 100644
index 0000000000000000000000000000000000000000..ea939ac5f1b104dee23822dcba324c664009dd15
--- /dev/null
+++ b/src/main/java/com/ardublock/translator/block/communication/PsnUnsubscribeBlock.java
@@ -0,0 +1,31 @@
+package com.ardublock.translator.block.communication;
+
+import com.ardublock.translator.Translator;
+import com.ardublock.translator.block.TranslatorBlock;
+import com.ardublock.translator.block.exception.SocketNullException;
+import com.ardublock.translator.block.exception.SubroutineNotDeclaredException;
+import com.ardublock.translator.block.numbers.StringBlock;
+
+public class PsnUnsubscribeBlock extends TranslatorBlock
+{
+	public PsnUnsubscribeBlock(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 = getRequiredTranslatorBlockAtSocket(0);
+		TranslatorBlock tb_topic = getRequiredTranslatorBlockAtSocket(1);
+		
+		String name = tb_name.toCode().replaceAll("\\s*_.new\\b\\s*\"", "").replaceAll("\"", "");
+		String topic = tb_topic.toCode().replaceAll("\\s*_.new\\b\\s*", "");
+		
+		if(!(tb_topic instanceof StringBlock)) {
+			topic = topic.replaceAll("\"", "");
+		}
+		
+		return name + ".unsubscribe("+topic+");";
+	}
+}
diff --git a/src/main/resources/com/ardublock/block/ardublock.properties b/src/main/resources/com/ardublock/block/ardublock.properties
index 21c2e3e1257f80a226c97c10be989b3fad4d8dbe..1cfd35c4379796848023d6cec36fdd92ac0618cd 100644
--- a/src/main/resources/com/ardublock/block/ardublock.properties
+++ b/src/main/resources/com/ardublock/block/ardublock.properties
@@ -695,13 +695,14 @@ bg.tele_read_data_frame=read from Frame
 bg.mqtt_set_frame=set MQTT Frame
 bg.mqtt_read_frame=read MQTT Frame
 
-bg.psn_server=PubSub Server
+bg.psn_server=PubSub Broker
 bg.psn_client=PubSub Client
-bg.psn_callback=PubSub_Callback
+bg.psn_callback=psnClientCallback
 bg.psn_handle_network=PubSub handleNetwork
 bg.psn_data_to_send=PubSub isDataToSend?
 bg.psn_publish=PubSub publish
 bg.psn_subscribe=PubSub subscribe
+bg.psn_unsubscribe=PubSub unsubscribe
 
 
 bg.serial_write.description=Send message via Serial
@@ -737,6 +738,7 @@ bg.psn_handle_network.description=PubSub handleNetwork
 bg.psn_data_to_send.description=PubSub isDataToSend?
 bg.psn_publish.description=PubSub publish
 bg.psn_subscribe.description=PubSub subscribe
+bg.psn_unsubscribe.description=PubSub unsubscribe
 
 bc.ps_name=name
 bc.callback=callback
diff --git a/src/main/resources/com/ardublock/block/ardublock.xml b/src/main/resources/com/ardublock/block/ardublock.xml
index f5f503f7d17642238e2eef70dec63ac158437804..0af77276a0f96d6558002754978379334575a0a5 100644
--- a/src/main/resources/com/ardublock/block/ardublock.xml
+++ b/src/main/resources/com/ardublock/block/ardublock.xml
@@ -1861,7 +1861,7 @@
 	        </text>
 	      </description>
 	      <BlockConnectors>
-	        <BlockConnector connector-type="string-list" connector-kind="plug" position-type="mirror" />
+	        <BlockConnector connector-type="string-inv" connector-kind="plug" position-type="mirror" />
 	      </BlockConnectors>
 	    </BlockGenus>
 		<BlockGenus name="local_variable_file" kind="data" initlabel="bg.local_variable_file" editable-label="yes" is-label-value="yes" color="174 0 72">
@@ -1871,7 +1871,7 @@
 	        </text>
 	      </description>
 	      <BlockConnectors>
-	        <BlockConnector connector-type="string-list" connector-kind="plug" position-type="mirror" />
+	        <BlockConnector connector-type="string-inv" connector-kind="plug" position-type="mirror" />
 	      </BlockConnectors>
 	    </BlockGenus>
 	    
@@ -2311,11 +2311,11 @@
 		
 		<BlockGenus name="psn_server" kind="command" color="165 42 42"	initlabel="bg.psn_server">
 			<description>
-				<text>create PubSub Server</text>
+				<text>create PubSub Broker</text>
 			</description>
 			<BlockConnectors>
 				<BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name">
-					<DefaultArg genus-name="string" label="PubSubServer" />
+					<DefaultArg genus-name="string" label="psnBroker" />
 				</BlockConnector>
 				<BlockConnector connector-type="number"	connector-kind="socket" label="bc.rx_pin_number">
 					<DefaultArg genus-name="number" label="10" />
@@ -2331,7 +2331,7 @@
 			</description>
 			<BlockConnectors>
 				<BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name">
-					<DefaultArg genus-name="string" label="PubSubClient" />
+					<DefaultArg genus-name="string" label="psnClient" />
 				</BlockConnector>
 				<BlockConnector connector-type="number"	connector-kind="socket" label="bc.rx_pin_number">
 					<DefaultArg genus-name="number" label="10" />
@@ -2340,7 +2340,7 @@
 					<DefaultArg genus-name="number" label="11" />
 				</BlockConnector>
 				<BlockConnector connector-type="string" connector-kind="socket" label="bc.callback">
-					<DefaultArg genus-name="string" label="PubSub_Callback" />
+					<DefaultArg genus-name="string" label="clientCallback" />
 				</BlockConnector>
 			</BlockConnectors>
 		</BlockGenus>	
@@ -2356,13 +2356,13 @@
 					<DefaultArg genus-name="local_variable_string" label="topic" />
 				</BlockConnector>
 				<BlockConnector connector-type="number" connector-kind="socket" label="bc.topicLengthVar">
-					<DefaultArg genus-name="local_variable_number" label="topic_length" />
+					<DefaultArg genus-name="local_variable_number" label="topicLength" />
 				</BlockConnector>
 				<BlockConnector connector-type="string" connector-kind="socket" label="bc.payloadVar">
 					<DefaultArg genus-name="local_variable_string" label="data" />
 				</BlockConnector>
 				<BlockConnector connector-type="number" connector-kind="socket" label="bc.payloadLengthVar">
-					<DefaultArg genus-name="local_variable_number" label="data_length" />
+					<DefaultArg genus-name="local_variable_number" label="dataLength" />
 				</BlockConnector>
 				<BlockConnector label="bc.commands" connector-type="cmd" connector-kind="socket" />
 			</BlockConnectors>
@@ -2370,34 +2370,44 @@
 		<BlockGenus name="psn_handle_network" kind="command" color="165 42 42" initlabel="bg.psn_handle_network" >
 			<BlockConnectors>
 				<BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name">
-					<DefaultArg genus-name="string" label="PubSubName" />
+					<DefaultArg genus-name="string" label="psnName" />
 				</BlockConnector>	
 			</BlockConnectors>
 		</BlockGenus>
 		<BlockGenus name="psn_data_to_send" kind="command" color="165 42 42" initlabel="bg.psn_data_to_send" >
 			<BlockConnectors>
 				<BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name">
-					<DefaultArg genus-name="string" label="PubSubName" />
+					<DefaultArg genus-name="string" label="psnName" />
 				</BlockConnector>	
 			</BlockConnectors>
 		</BlockGenus>
 		<BlockGenus name="psn_subscribe" kind="command" color="165 42 42" initlabel="bg.psn_subscribe" >
 			<BlockConnectors>
 				<BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name">
-					<DefaultArg genus-name="string" label="PubSubName" />
+					<DefaultArg genus-name="string" label="psnName" />
 				</BlockConnector>
 				<BlockConnector connector-type="string" connector-kind="socket" label="bc.topic">
-					<DefaultArg genus-name="string" label="PubSubTopic" />
+					<DefaultArg genus-name="string" label="subscribeTopic" />
+				</BlockConnector>	
+			</BlockConnectors>
+		</BlockGenus>
+		<BlockGenus name="psn_unsubscribe" kind="command" color="165 42 42" initlabel="bg.psn_unsubscribe" >
+			<BlockConnectors>
+				<BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name">
+					<DefaultArg genus-name="string" label="psnName" />
+				</BlockConnector>
+				<BlockConnector connector-type="string" connector-kind="socket" label="bc.topic">
+					<DefaultArg genus-name="string" label="unsubscribeTopic" />
 				</BlockConnector>	
 			</BlockConnectors>
 		</BlockGenus>
 		<BlockGenus name="psn_publish" kind="command" color="165 42 42" initlabel="bg.psn_publish" >
 			<BlockConnectors>
 				<BlockConnector connector-type="string" connector-kind="socket" label="bc.ps_name">
-					<DefaultArg genus-name="string" label="PubSubName" />
+					<DefaultArg genus-name="string" label="psnName" />
 				</BlockConnector>
 				<BlockConnector connector-type="string" connector-kind="socket" label="bc.topic">
-					<DefaultArg genus-name="string" label="PubSubTopic" />
+					<DefaultArg genus-name="string" label="publishTopic" />
 				</BlockConnector>
 				<BlockConnector connector-type="string" connector-kind="socket" label="bc.payload">
 				</BlockConnector>	
@@ -3196,6 +3206,7 @@
 				<BlockGenusMember>psn_publish</BlockGenusMember>
 				<BlockGenusMember>psn_data_to_send</BlockGenusMember>
 				<BlockGenusMember>psn_subscribe</BlockGenusMember>
+				<BlockGenusMember>psn_unsubscribe</BlockGenusMember>
 				<BlockGenusMember>psn_callback</BlockGenusMember>
 		
 				<!--<BlockGenusMember>tele_set_frame</BlockGenusMember>
diff --git a/src/main/resources/com/ardublock/block/ardublock_de.properties b/src/main/resources/com/ardublock/block/ardublock_de.properties
index 6e723da5d16ccddd4d22e34d801dcfe9319493f7..47e2f864ccc206aa4865562a71af756e7aec6bed 100644
--- a/src/main/resources/com/ardublock/block/ardublock_de.properties
+++ b/src/main/resources/com/ardublock/block/ardublock_de.properties
@@ -692,13 +692,14 @@ bg.tele_read_data_frame=lese Daten aus Frame
 bg.mqtt_set_frame=erstelle MQTT Frame
 bg.mqtt_read_frame=lese aus MQTT Frame
 
-bg.psn_server=PubSub Server
+bg.psn_server=PubSub Broker
 bg.psn_client=PubSub Client
-bg.psn_callback=PubSub_Callback
+bg.psn_callback=psnClientCallback
 bg.psn_handle_network=PubSub handleNetwork
 bg.psn_data_to_send=PubSub isDataToSend?
 bg.psn_publish=PubSub publish
 bg.psn_subscribe=PubSub subscribe
+bg.psn_unsubscribe=PubSub unsubscribe
 
 bg.serial_write.description=Sende Nachricht via Serial
 bg.serial_print.description=Sende Nachricht via Serial
@@ -726,13 +727,14 @@ bg.tele_read_data_frame.description=lese Daten aus dem Telegramm-Rahmen\n HINWEI
 bg.mqtt_set_frame.description=schreibe Daten in MQTT-Rahmen\n(letsgoING-IOT-Modul)
 bg.mqtt_read_frame.description=lese Daten aus MQTT-Rahmen\n(letsgoING-IOT-Modul)
 
-bg.psn_server.description=PubSub Server
-bg.psn_client.description=PubSub Client
-bg.psn_callback.description=PubSub_Callback
-bg.psn_handle_network.description=PubSub handleNetwork
-bg.psn_data_to_send.description=PubSub isDataToSend?
-bg.psn_publish.description=PubSub publish
-bg.psn_subscribe.description=PubSub subscribe
+bg.psn_server.description=Broker fuer PubSub Netzwerk erzeugen
+bg.psn_client.description=Client fuer PubSub Netzwerk erzeugen
+bg.psn_callback.description=Funktion wird automatisch aufgefufen wenn neue Daten empfangen werden
+bg.psn_handle_network.description=Empfaengt Daten, ueberprueft ob gesendet werden kann und versendet Daten
+bg.psn_data_to_send.description=Gibt zurück ob Daten zum Versenden bereit sind
+bg.psn_publish.description=Daten zu Topic veroeffentlichen
+bg.psn_subscribe.description=Topic abonnieren
+bg.psn_unsubscribe.description=Topic nicht mehr abonnieren
 
 bc.ps_name=Name
 bc.callback=Uebergabefunktion
diff --git a/src/main/resources/com/ardublock/block/block-mapping.properties b/src/main/resources/com/ardublock/block/block-mapping.properties
index f644df699b4b3f7d7479c080a287c653c861826a..0bc2224d6c3f3839587ff20a88b546b789d2f51b 100644
--- a/src/main/resources/com/ardublock/block/block-mapping.properties
+++ b/src/main/resources/com/ardublock/block/block-mapping.properties
@@ -255,6 +255,7 @@ psn_handle_network=com.ardublock.translator.block.communication.PsnHandleNetBloc
 psn_data_to_send=com.ardublock.translator.block.communication.PsnDataToSendBlock
 psn_publish=com.ardublock.translator.block.communication.PsnPublishBlock
 psn_subscribe=com.ardublock.translator.block.communication.PsnSubscribeBlock
+psn_unsubscribe=com.ardublock.translator.block.communication.PsnUnsubscribeBlock
 
 #STORAGE
 #****************************