diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnBrokerBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnBrokerBlock.java
index d450435bb9fc77135d100640b934ffcef29e0408..7a361a40b6959ca8490ad55874d0c85a96874a85 100644
--- a/src/main/java/com/ardublock/translator/block/communication/PsnBrokerBlock.java
+++ b/src/main/java/com/ardublock/translator/block/communication/PsnBrokerBlock.java
@@ -17,7 +17,7 @@ public class PsnBrokerBlock extends TranslatorBlock
 	{
 		String serialName = "sSerial";
 		//String pubSubName = "";
-		String pubSubType = "didacticPSNetBroker";
+		String pubSubType = "DidacticPSNetBroker";
 		
 		//Label autoText set in edu.mit.blocks.renderable.BlockLabel -> generateLabelText()
 		String pubSubName = label.trim();
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 62afc2b586e2623291fee45f0a35e875b038e9dd..68b708ac41c6ac2ce23aeb97edd8d47280100a36 100644
--- a/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java
+++ b/src/main/java/com/ardublock/translator/block/communication/PsnClientBlock.java
@@ -18,7 +18,7 @@ public class PsnClientBlock extends TranslatorBlock
 		String serialName = "sSerial";
 		//String pubSubName = "";
 		String callbackName = "";
-		String pubSubType = "didacticPSNetClient";
+		String pubSubType = "DidacticPSNetClient";
 		
 		//Label autoText set in edu.mit.blocks.renderable.BlockLabel -> generateLabelText()
 		String pubSubName = label.trim();
diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnPublishOnChangeBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnPublishOnChangeBlock.java
new file mode 100644
index 0000000000000000000000000000000000000000..cbdebbf4d9cc40d32fb153b5a0c45faaa702f0e0
--- /dev/null
+++ b/src/main/java/com/ardublock/translator/block/communication/PsnPublishOnChangeBlock.java
@@ -0,0 +1,46 @@
+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 PsnPublishOnChangeBlock extends TranslatorBlock
+{
+	public PsnPublishOnChangeBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
+	{
+		super(blockId, translator, codePrefix, codeSuffix, label);
+	}
+
+	@Override
+	public String toCode() throws SocketNullException, SubroutineNotDeclaredException
+	{
+		
+		//Label autoText set in edu.mit.blocks.renderable.BlockLabel -> generateLabelText()
+		//TODO: add OnChange to autolabel
+		String name = label.trim();
+		if(name.contains(" ")) {
+			name = name.substring(0, name.indexOf(" "));
+		}
+		//TranslatorBlock tb_name = getRequiredTranslatorBlockAtSocket(0);
+		TranslatorBlock tb_topic = getRequiredTranslatorBlockAtSocket(0);
+		TranslatorBlock tb_data = getRequiredTranslatorBlockAtSocket(1);
+		TranslatorBlock tb_threshold = getRequiredTranslatorBlockAtSocket(2);
+		
+		//String name = tb_name.toCode().replaceAll("\\s*_.new\\b\\s*\"", "").replaceAll("\"", "");
+		String topic = tb_topic.toCode().replaceAll("\\s*_.new\\b\\s*", "");
+		String data = tb_data.toCode().replaceAll("\\s*_.new\\b\\s*", "");
+		
+		//TODO: test f check for VarBlock is needed
+		if(!(tb_topic instanceof StringBlock)) {
+			topic = topic.replaceAll("\"", "");
+		}
+		if(!(tb_data instanceof StringBlock)) {
+			data = data.replaceAll("\"", "");
+		}
+		
+		return name + ".publishOnChange("+topic+", "+data+", "+tb_threshold+");";
+	}
+}
diff --git a/src/main/java/com/ardublock/translator/block/communication/PsnPublishOnChangeBoolBlock.java b/src/main/java/com/ardublock/translator/block/communication/PsnPublishOnChangeBoolBlock.java
new file mode 100644
index 0000000000000000000000000000000000000000..75c772e64612384e2bc5334bd33706cfc9e61d61
--- /dev/null
+++ b/src/main/java/com/ardublock/translator/block/communication/PsnPublishOnChangeBoolBlock.java
@@ -0,0 +1,45 @@
+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 PsnPublishOnChangeBoolBlock extends TranslatorBlock
+{
+	public PsnPublishOnChangeBoolBlock(Long blockId, Translator translator, String codePrefix, String codeSuffix, String label)
+	{
+		super(blockId, translator, codePrefix, codeSuffix, label);
+	}
+
+	@Override
+	public String toCode() throws SocketNullException, SubroutineNotDeclaredException
+	{
+		
+		//Label autoText set in edu.mit.blocks.renderable.BlockLabel -> generateLabelText()
+		//TODO: add OnChange to autolabel
+		String name = label.trim();
+		if(name.contains(" ")) {
+			name = name.substring(0, name.indexOf(" "));
+		}
+		//TranslatorBlock tb_name = getRequiredTranslatorBlockAtSocket(0);
+		TranslatorBlock tb_topic = getRequiredTranslatorBlockAtSocket(0);
+		TranslatorBlock tb_data = getRequiredTranslatorBlockAtSocket(1);
+		
+		//String name = tb_name.toCode().replaceAll("\\s*_.new\\b\\s*\"", "").replaceAll("\"", "");
+		String topic = tb_topic.toCode().replaceAll("\\s*_.new\\b\\s*", "");
+		String data = tb_data.toCode().replaceAll("\\s*_.new\\b\\s*", "");
+		
+		//TODO: test f check for VarBlock is needed
+		if(!(tb_topic instanceof StringBlock)) {
+			topic = topic.replaceAll("\"", "");
+		}
+		if(!(tb_data instanceof StringBlock)) {
+			data = data.replaceAll("\"", "");
+		}
+		
+		return name + ".publishOnChange("+topic+", "+data+");";
+	}
+}
diff --git a/src/main/resources/com/ardublock/block/ardublock.properties b/src/main/resources/com/ardublock/block/ardublock.properties
index 6010e18bfba12065516df8b45faedb08906be80e..e76eb6b35bcd6191734ff5f959b6da8ee35891bd 100644
--- a/src/main/resources/com/ardublock/block/ardublock.properties
+++ b/src/main/resources/com/ardublock/block/ardublock.properties
@@ -678,11 +678,16 @@ bc.number_chars=number of characters
 #COMMUNICATION
 #****************************
 bd.communication=Communication
+bd.didacticnetwork = Didactic Network
 
 bg.communicationDivider1=|       serial      |
 bg.communicationDivider2=|       software serial      |
 bg.communicationDivider3=|       serial connectors      |
+
 bg.communicationDivider4=|       PubSub Network      |
+bg.communicationDivider5=|       PubSub publish      |
+bg.communicationDivider6=|       PubSub subscribe      |
+bg.communicationDivider7=|       PubSub callback      |
 
 bg.glue_poly=connect
 bg.glue_msg=connect
@@ -716,6 +721,10 @@ bg.psn_callback=psnClientCallback
 bg.psn_handle_network=PubSub handleNetwork
 bg.psn_data_to_send=PubSub isDataToSend?
 bg.psn_publish=PubSub publish
+bg.psn_publish=psnName publish
+bg.psn_publish_analog=psnName publish
+bg.psn_publish_onchange=psnName publishOnChange
+bg.psn_publish_onchange_bool=psnName publishOnChange
 bg.psn_subscribe=PubSub subscribe
 bg.psn_unsubscribe=PubSub unsubscribe
 
@@ -751,7 +760,11 @@ 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_publish.description=publish Char-Array
+bg.psn_publish_analog.description=publish int-Data
+bg.psn_publish_digital.description=publish boolean-Data
+bg.psn_publish_onchange.description=publish value on change (depending on threshold)
+bg.psn_publish_onchange_bool.description=publish boolean state on change
 bg.psn_subscribe.description=PubSub subscribe
 bg.psn_unsubscribe.description=PubSub unsubscribe
 
@@ -775,6 +788,7 @@ bc.recFrame=received Frame
 bc.recChars=received characters
 bc.payload=payload
 bc.payloadLength=payload length
+bc.threshold=threshold
 bc.topic=topic
 bc.topicLength=topic length
 bc.command=command type
diff --git a/src/main/resources/com/ardublock/block/ardublock.xml b/src/main/resources/com/ardublock/block/ardublock.xml
index 3025d584aafcb67379459daee246e62d5eba2d5c..5acbac8b154ab751d6c2ed75503e6d481c5607fe 100644
--- a/src/main/resources/com/ardublock/block/ardublock.xml
+++ b/src/main/resources/com/ardublock/block/ardublock.xml
@@ -2058,6 +2058,10 @@
 		<BlockGenus name="communicationDivider2" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider2" color="150 150 150" />
 		<BlockGenus name="communicationDivider3" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider3" color="150 150 150" />
 		<BlockGenus name="communicationDivider4" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider4" color="150 150 150" />
+		<BlockGenus name="communicationDivider5" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider5" color="150 150 150" />
+		<BlockGenus name="communicationDivider6" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider6" color="150 150 150" />
+		<BlockGenus name="communicationDivider7" kind="command" is-starter="yes" is-terminator="yes" initlabel="bg.communicationDivider7" color="150 150 150" />
+		
 		
 		<BlockGenus name="serial_read" kind="data" color="165 42 42" initlabel="bg.serial_read">
 			<BlockConnectors>
@@ -2427,6 +2431,49 @@
 				</BlockConnector>	
 			</BlockConnectors>
 		</BlockGenus>
+		<BlockGenus name="psn_publish_analog" kind="command" color="165 42 42" initlabel="bg.psn_publish" editable-label="yes">
+			<BlockConnectors>
+				<BlockConnector connector-type="string" connector-kind="socket" label="bc.topic">
+					<DefaultArg genus-name="string" label="publishTopic" />
+				</BlockConnector>
+				<BlockConnector connector-type="number" connector-kind="socket" label="bc.payload">
+				</BlockConnector>	
+			</BlockConnectors>
+		</BlockGenus>
+		<BlockGenus name="psn_publish_digital" kind="command" color="165 42 42" initlabel="bg.psn_publish" editable-label="yes">
+			<BlockConnectors>
+				<BlockConnector connector-type="string" connector-kind="socket" label="bc.topic">
+					<DefaultArg genus-name="string" label="publishTopic" />
+				</BlockConnector>
+				<BlockConnector connector-type="boolean" connector-kind="socket" label="bc.payload">
+				</BlockConnector>	
+			</BlockConnectors>
+		</BlockGenus>
+		<!-- TODO: add publishOnChange to autoname fcn-->
+		<BlockGenus name="psn_publish_onchange_bool" kind="command" color="165 42 42" initlabel="bg.psn_publish_onchange" editable-label="yes">
+			<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="publishTopic" />
+				</BlockConnector>
+				<BlockConnector connector-type="boolean" connector-kind="socket" label="bc.payload">
+				</BlockConnector>	
+			</BlockConnectors>
+		</BlockGenus>
+		<BlockGenus name="psn_publish_onchange" kind="command" color="165 42 42" initlabel="bg.psn_publish_onchange" editable-label="yes">
+			<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="publishTopic" />
+				</BlockConnector>
+				<BlockConnector connector-type="number" connector-kind="socket" label="bc.payload"></BlockConnector>	
+				<BlockConnector connector-type="number" connector-kind="socket" label="bc.threshold"></BlockConnector>
+			</BlockConnectors>
+		</BlockGenus>
 		
 		
 		<!-- ******************** Storage *************** -->
@@ -3215,15 +3262,20 @@
 				<BlockGenusMember>glue_char</BlockGenusMember>
 				<BlockGenusMember>glue_string</BlockGenusMember>
 				
+				<!--
 				<BlockGenusMember>communicationDivider4</BlockGenusMember>
 				<BlockGenusMember>psn_broker</BlockGenusMember>
 				<BlockGenusMember>psn_client</BlockGenusMember>
 				<BlockGenusMember>psn_handle_network</BlockGenusMember>
 				<BlockGenusMember>psn_publish</BlockGenusMember>
+				<BlockGenusMember>psn_publish_analog</BlockGenusMember>
+				<BlockGenusMember>psn_publish_digital</BlockGenusMember>
+				<BlockGenusMember>psn_publish_onchange</BlockGenusMember>
+				<BlockGenusMember>psn_publish_onchange_bool</BlockGenusMember>
 				<BlockGenusMember>psn_data_to_send</BlockGenusMember>
 				<BlockGenusMember>psn_subscribe</BlockGenusMember>
 				<BlockGenusMember>psn_unsubscribe</BlockGenusMember>
-				<BlockGenusMember>psn_callback</BlockGenusMember>
+				<BlockGenusMember>psn_callback</BlockGenusMember>-->
 		
 				<!--<BlockGenusMember>tele_set_frame</BlockGenusMember>
 				<BlockGenusMember>tele_read_frame</BlockGenusMember>
@@ -3242,6 +3294,28 @@
 				<BlockGenusMember>glue_string</BlockGenusMember>
 			</BlockDrawer>
 			
+			<BlockDrawer button-color="165 42 42" name="bd.didacticnetwork" type="custom">
+				<BlockGenusMember>communicationDivider4</BlockGenusMember>
+				<BlockGenusMember>psn_broker</BlockGenusMember>
+				<BlockGenusMember>psn_client</BlockGenusMember>
+				<BlockGenusMember>psn_handle_network</BlockGenusMember>
+				<BlockGenusMember>psn_data_to_send</BlockGenusMember>
+				
+				<BlockGenusMember>communicationDivider5</BlockGenusMember>
+				<BlockGenusMember>psn_publish</BlockGenusMember>
+				<BlockGenusMember>psn_publish_analog</BlockGenusMember>
+				<BlockGenusMember>psn_publish_digital</BlockGenusMember>
+				<BlockGenusMember>psn_publish_onchange</BlockGenusMember>
+				<BlockGenusMember>psn_publish_onchange_bool</BlockGenusMember>
+				
+				<BlockGenusMember>communicationDivider6</BlockGenusMember>
+				<BlockGenusMember>psn_subscribe</BlockGenusMember>
+				<BlockGenusMember>psn_unsubscribe</BlockGenusMember>
+				
+				<BlockGenusMember>communicationDivider7</BlockGenusMember>
+				<BlockGenusMember>psn_callback</BlockGenusMember>
+			</BlockDrawer>
+			
 			<BlockDrawer button-color="0 32 96" name="bd.storage" type="custom">
 				<BlockGenusMember>storageDivider1</BlockGenusMember>
 				<BlockGenusMember>eeprom_read</BlockGenusMember>
diff --git a/src/main/resources/com/ardublock/block/ardublock_de.properties b/src/main/resources/com/ardublock/block/ardublock_de.properties
index 9147bfeeb250f0483e6071ee37f5ba774e910b3f..0d284ea5202049546e97f9c7811f9276fa8d7022 100644
--- a/src/main/resources/com/ardublock/block/ardublock_de.properties
+++ b/src/main/resources/com/ardublock/block/ardublock_de.properties
@@ -675,11 +675,15 @@ bc.number_chars=Anzahl Zeichen
 #COMMUNICATION
 #****************************
 bd.communication=Kommunikation
+bd.didacticnetwork = Didaktik Netzwerk
 
 bg.communicationDivider1=|       Seriell      |
 bg.communicationDivider2=|       Software Seriell      |
 bg.communicationDivider3=|       Verbinder      |
 bg.communicationDivider4=|       PubSub Netzwerk      |
+bg.communicationDivider5=|       PubSub publish      |
+bg.communicationDivider6=|       PubSub subscribe      |
+bg.communicationDivider7=|       PubSub callback      |
 
 bg.glue_poly=verbinde
 bg.glue_msg=verbinde
@@ -713,6 +717,10 @@ bg.psn_callback=psnClientCallback
 bg.psn_handle_network=psnName handleNetwork
 bg.psn_data_to_send=psnName isDataToSend?
 bg.psn_publish=psnName publish
+bg.psn_publish_analog=psnName publish
+bg.psn_publish_digital=psnName publish
+bg.psn_publish_onchange=psnName publishOnChange
+bg.psn_publish_onchange_bool=psnName publishOnChange
 bg.psn_subscribe=psnName subscribe
 bg.psn_unsubscribe=psnName unsubscribe
 
@@ -747,7 +755,11 @@ 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_publish.description=Zeichenkette (char[]) zu Topic veroeffentlichen
+bg.psn_publish_analog.description=Analoge (int) Daten zu Topic veroeffentlichen
+bg.psn_publish_digital.description=Digitale (bool) Daten zu Topic veroeffentlichen
+bg.psn_publish_onchange.description=Analoge (int) Daten bei Wertänderung zu Topic veroeffentlichen
+bg.psn_publish_onchange_bool.description=Digitale (bool) Daten bei Änderung zu Topic veroeffentlichen
 bg.psn_subscribe.description=Topic abonnieren
 bg.psn_unsubscribe.description=Topic nicht mehr abonnieren
 
@@ -771,6 +783,7 @@ bc.recBuffer=Empfangspuffer
 bc.recChars=Anz. empfangene Zeichen 
 bc.payload=Nutzdaten
 bc.payloadLength=Länge Nutzdaten
+bc.threshold=Schwellwert
 bc.topic=Topic
 bc.topicLength=Länge Topic
 bc.command=Befehlsart
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 a867dd0abc0030f5dc3e0d16a9c53c916ce7bc5a..4dbf20034b081e11bef3a4619dfcece14050abdf 100644
--- a/src/main/resources/com/ardublock/block/ardublock_en_GB.properties
+++ b/src/main/resources/com/ardublock/block/ardublock_en_GB.properties
@@ -675,11 +675,16 @@ bc.number_chars=Anzahl Zeichen
 #COMMUNICATION
 #****************************
 bd.communication=Kommunikation
+bd.didacticnetwork = Didaktik Netzwerk
 
 bg.communicationDivider1=|       Seriell      |
 bg.communicationDivider2=|       Software Seriell      |
 bg.communicationDivider3=|       Verbinder      |
+
 bg.communicationDivider4=|       PubSub Netzwerk      |
+bg.communicationDivider5=|       PubSub publish      |
+bg.communicationDivider6=|       PubSub subscribe      |
+bg.communicationDivider7=|       PubSub callback      |
 
 bg.glue_poly=verbinde
 bg.glue_msg=verbinde
@@ -713,6 +718,10 @@ bg.psn_callback=psnClientCallback
 bg.psn_handle_network=psnName handleNetwork
 bg.psn_data_to_send=psnName isDataToSend?
 bg.psn_publish=psnName publish
+bg.psn_publish_analog=psnName publish
+bg.psn_publish_digital=psnName publish
+bg.psn_publish_onchange=psnName publishOnChange
+bg.psn_publish_onchange_bool=psnName publishOnChange
 bg.psn_subscribe=psnName subscribe
 bg.psn_unsubscribe=psnName unsubscribe
 
@@ -747,7 +756,11 @@ 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_publish.description=Zeichenkette (char[]) zu Topic veroeffentlichen
+bg.psn_publish_analog.description=Analoge (int) Daten zu Topic veroeffentlichen
+bg.psn_publish_digital.description=Digitale (bool) Daten zu Topic veroeffentlichen
+bg.psn_publish_onchange.description=Analoge (int) Daten bei Wertänderung zu Topic veroeffentlichen
+bg.psn_publish_onchange_bool.description=Digitale (bool) Daten bei Änderung zu Topic veroeffentlichen
 bg.psn_subscribe.description=Topic abonnieren
 bg.psn_unsubscribe.description=Topic nicht mehr abonnieren
 
@@ -771,6 +784,7 @@ bc.recBuffer=Empfangspuffer
 bc.recChars=Anz. empfangene Zeichen 
 bc.payload=Nutzdaten
 bc.payloadLength=Länge Nutzdaten
+bc.threshold=Schwellwert
 bc.topic=Topic
 bc.topicLength=Länge Topic
 bc.command=Befehlsart
diff --git a/src/main/resources/com/ardublock/block/block-mapping.properties b/src/main/resources/com/ardublock/block/block-mapping.properties
index a34b5b1e6466cf7a92c9ab4ee06628bffc5b3e56..381d417e77576251fb2cdcdf9dba70bce3076029 100644
--- a/src/main/resources/com/ardublock/block/block-mapping.properties
+++ b/src/main/resources/com/ardublock/block/block-mapping.properties
@@ -254,6 +254,10 @@ psn_callback=com.ardublock.translator.block.communication.PsnCallbackBlock
 psn_handle_network=com.ardublock.translator.block.communication.PsnHandleNetBlock
 psn_data_to_send=com.ardublock.translator.block.communication.PsnDataToSendBlock
 psn_publish=com.ardublock.translator.block.communication.PsnPublishBlock
+psn_publish_analog=com.ardublock.translator.block.communication.PsnPublishBlock
+psn_publish_digital=com.ardublock.translator.block.communication.PsnPublishBlock
+psn_publish_onchange=com.ardublock.translator.block.communication.PsnPublishOnChangeBlock
+psn_publish_onchange_bool=com.ardublock.translator.block.communication.PsnPublishOnChangeBoolBlock
 psn_subscribe=com.ardublock.translator.block.communication.PsnSubscribeBlock
 psn_unsubscribe=com.ardublock.translator.block.communication.PsnUnsubscribeBlock