diff --git a/README.md b/README.md
index 6254c88fe2ccd177ab05707c873c668409d82f18..bfffaaafc82e9b92365a5cd4d52d8aa60560952b 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# didacticNetwork
+# DidacticNetwork
 
 Bibliothek zur Implementierung von vereinfachten Netzwerken auf Arduino-Boards.
 Die Funktionalitaeten entsprechen dem Stand der Technik, die Umsetzung ist didaktisch reduziert.
@@ -59,6 +59,17 @@ int psnClient.subscribe(char* topic, int length);
 // return ERROR-Wert: DN_ERROR_NO_ERROR, 
 //                    DN_ERROR_TOPIC_LEN (Topic zu lang - wird abgeschnitten)
 
+#Anzahl der aboonierten Topics ausgeben
+int getMaxNrTopics();
+// return: Anzahl der abbonierten Topics
+
+#Bezeichnung eines abonnierten Topics ausgeben
+int getSubscribedTopic(char*, int);
+// param1: char-Array in das die Topic-Bezeichnung eingetragen wird
+// param2: Nummer welches Topic ausgegeben werden soll (0 - getMaxNrTopics())
+// return ERROR-WERT: DN_ERROR_NO_ERROR,
+//                    DN_ERROR_NO_TOPIC (Topic unter der angegebenen Nummer nicht verfügbar)
+
 #Topic eines anderen Clients entfernen
 bool psnClient.unsubscribe(char* topic);            
 // param: Topic String/char-Array
@@ -120,6 +131,11 @@ int psnClient.publishOnChange(char* topic, int payload, int threshold);
 
 #Callback-Funktion (wird bei neuen Daten aufgerufen)
 //Bezeichnung muss mit der in psnClient.begin(...) übereinstimmen
+void newData(char* topic, char* payload){...}
+// param1: Topic der Nachricht
+// param2: Nutdaten der Nachricht
+
+// mit "#define CALLBACK_W_LENGTH" kann auf folgende Callback-Struktur umgestellt werden:
 void newData(char* topic, int topicLength, char* payload, int payloadLength){...}
 // param1: Topic der Nachricht
 // param2: Lange des Topics
@@ -217,6 +233,7 @@ DN_PUBLISH_SUCCESSULL 1
 DN_ERROR_NO_ERROR     0
 DN_ERROR_TOPIC_LEN   -1
 DN_ERROR_PAYLOAD_LEN -2
+DN_ERROR_NO_TOPIC    -3
 
 #Frame
 MSG_PRELIMITER '<'
@@ -228,6 +245,9 @@ MSG_PUBLISH     '@'
 MSG_SUBSCRIBE   '?'
 MSG_UPDATE      '#'
 MSG_TOPIC_MULTI '*'
+
+#Callback-Struktur
+CALLBACK_W_LENGTH not defined
 ```
 
 # Bestellung bei Aisler
diff --git a/examples/sPSN_Broker/sPSN_Broker.ino b/examples/sPSN_Broker/sPSN_Broker.ino
index b9034ba410feea254aaabc8febd9dc7c4c741cf3..c8b3c1771772e112222f98b6e2c87fac30760b59 100644
--- a/examples/sPSN_Broker/sPSN_Broker.ino
+++ b/examples/sPSN_Broker/sPSN_Broker.ino
@@ -28,7 +28,7 @@
  */
 #include <Arduino.h>
 #include "SoftwareSerial.h"
-#include "didacticNet.h"
+#include "DidacticNet.h"
 
 //lege Geschwindigkeit für serielle Schnittstellen fest
 #define SERIAL_BAUD 2400
diff --git a/examples/sPSN_Chat/sPSN_Chat.ino b/examples/sPSN_Chat/sPSN_Chat.ino
index bc309b4f0aa7a42513b147af06811129aace185c..da9efdffa3f86f58be809f80f66f8a347d443a38 100644
--- a/examples/sPSN_Chat/sPSN_Chat.ino
+++ b/examples/sPSN_Chat/sPSN_Chat.ino
@@ -26,7 +26,7 @@
 */
 #include <Arduino.h>
 #include "SoftwareSerial.h"
-#include "didacticNet.h"
+#include "DidacticNet.h"
 
 #define SERIAL_BAUD 2400                         //lege Geschwindigkeit für serielle Schnittstellen fest
 
@@ -36,10 +36,11 @@ char topicSub[MAX_LEN_TOPICS] = {""};           //Array für neues Empfangs-Topi
 char topicPub[MAX_LEN_TOPICS] = {""};           //Array für eigenes Sende-Topic
 
 //Callback-Funktion wird bei neuen Daten automatisch aufgerufen
-void newData(char* mTopic, int mToLength, char* mData, int mDaLength) {
-  Serial.print(mTopic);
+void newData(char* topic, char* payload) {
+  //Ausgabe-> "Chatname":   "geschriebene Nachricht"
+  Serial.print(topic);      //topic entspricht im Chat dem NAmen des Chatpartners
   Serial.print(":\t");
-  Serial.println(mData);
+  Serial.println(payload);  //payload enthält die geschriebene Nachricht
 }
 
 SoftwareSerial sSerial(10, 11); // SoftwareSerial an Rx = Pin10 -> Empfänger | Tx = Pin11 -> Sender
@@ -58,55 +59,57 @@ void setup() {
   sReader.begin(Serial);
 
   //AUSGABE INFOTEXT
-  Serial.print("Bitte den eigenen Namen mit einem # eingeben\nund mit Enter bestaetigen. -> ");
+  Serial.print("1. Den eigenen Namen mit einem # eingeben\nund mit Enter bestaetigen. -> ");
   Serial.println("#DeinName");
-  Serial.print("Gebe dann die Namen deiner Chatpartner mit einem @ ein. -> ");
-  Serial.println("@ChatPartner");
-  Serial.println("Anschließend kannst du mit ihnen schreiben.");
+  Serial.print("2. Die Namen deiner Chatpartner*innen mit einem @ eingeben -> ");
+  Serial.println("@ChatPartner*in \t (mehrfach moeglich)");
+  Serial.print("3. Chatten: ");
   Serial.println("Pro Nachricht duerfen maximal 20 Zeichen eingegeben werden!");
   Serial.println();
   Serial.println("HINWEIS:");
-  Serial.println("Stelle das Zeilenende im SerialMonitor auf \"Zeilenumbruch (CR)\"");
+  Serial.println("Stelle das Zeilenende im SerialMonitor auf \"ZEILENUMBRUCH (CR)\"");
   Serial.println("*********************************************************************\n");
 }
 
 void loop() {
 
-  psnClient.handleNetwork();  //Verarbeiten der Daten, prüfen ob Netzwerk frei und versenden der Daten
+  psnClient.handleNetwork();                                     //Verarbeiten der Daten, prüfen ob Netzwerk frei und versenden der Daten
 
   int nrOfAscii = sReader.readSerialData(readData, DN_ASCII_CR); //Einlesen der Nutzereingabe am SerialMonitor (Rueckgabewert = Anzahl der gelesenen Zeichen)
 
-  if (nrOfAscii > 0) { //Wenn Daten fertig eingelesen wurden
+  if (nrOfAscii > 0) {                   //Wenn Daten fertig eingelesen wurden
 
-    if (readData[0] == '@') {         //Wenn '@' vorne steht, dann neuer Chatpartner anlegen (neues Topic abonnieren)
-      strcpy(readData, &readData[1]); //verschiebe um ein Zeichen (entferne '@')
-      psnClient.subscribe(readData);  //Lege fest zu welchem Topic Daten empfangen werden sollen (den Namen des Chatpartners)
+    //NEUEM CHATPARTNER FOLGEN
+    if (readData[0] == '@') {            //Wenn '@' vorne steht, dann neuer Chatpartner anlegen (neues Topic abonnieren)
+      strcpy(readData, &readData[1]);    //verschiebe um ein Zeichen (entferne '@')
+      psnClient.subscribe(readData);     //Lege fest zu welchem Topic Daten empfangen werden sollen (den Namen des Chatpartners)
 
-      Serial.print("Nachrichten von "); //Ausgabe welches Topic abonniert wurde
+      Serial.print("Nachrichten von ");  //Ausgabe welches Topic abonniert wurde
       Serial.print(readData);
       Serial.println(" abonniert.");
     }
-    else if (readData[0] == '!') {         //Wenn '@' vorne steht, dann neuer Chatpartner anlegen (neues Topic abonnieren)
-      strcpy(readData, &readData[1]); //verschiebe um ein Zeichen (entferne '!')
-      psnClient.unsubscribe(readData);  //Lege fest zu welchem Topic Daten empfangen werden sollen (den Namen des Chatpartners)
+    //CHATPARTNER ENTFOLGEN
+    else if (readData[0] == '!') {       //Wenn '@' vorne steht, dann neuer Chatpartner anlegen (neues Topic abonnieren)
+      strcpy(readData, &readData[1]);    //verschiebe um ein Zeichen (entferne '!')
+      psnClient.unsubscribe(readData);   //Lege fest zu welchem Topic Daten empfangen werden sollen (den Namen des Chatpartners)
 
-      Serial.print("Nachrichten von "); //Ausgabe welches Topic abonniert wurde
+      Serial.print("Nachrichten von ");  //Ausgabe welches Topic abonniert wurde
       Serial.print(readData);
       Serial.println(" nicht mehr abonniert.");
     }
-
-    else if (readData[0] == '#') {    //Wenn '#' vorne steht, dann neuer eigener Name (neues Topic unter dem gesendet wird)
-      //strcpy(topicPub, readData + 1); //kopiere das neue Topic (deinen neuen Namen) in das passende Array (+ 1 = entferne '#')
-      strcpy(topicPub, &readData[1]); //kopiere das neue Topic (deinen neuen Namen) in das passende Array (+ 1 = entferne '#')
+    //EIGENEN NAMEN ANLEGEN
+    else if (readData[0] == '#') {      //Wenn '#' vorne steht, dann neuer eigener Name (neues Topic unter dem gesendet wird)
+      strcpy(topicPub, &readData[1]);   //kopiere das neue Topic (deinen neuen Namen) in das passende Array (+ 1 = entferne '#')
+      //strcpy(topicPub, readData + 1); //-> Alternative zur Zeile oberhalb
       
-      Serial.print("Dein Name:\t");   //Ausgabe unter welchem Topic veröffentlicht wird
+      Serial.print("Dein Name:\t");     //Ausgabe unter welchem Topic veröffentlicht wird
       Serial.println(topicPub);
     }
-
-    else { //Wenn "normale" Nachrichten eingegeben wurden, dann Daten unter eigenem Topic versenden
+    //NACHRICHT VERSCHICKEN (unter eigenem Namen)
+    else {                                    //Wenn "normale" Nachrichten eingegeben wurden, dann Daten unter eigenem Topic versenden
       psnClient.publish(topicPub, readData);  //Bereite eingegebene Daten zum Senden vor
       
-      Serial.print("Ich:\t");   //Ausgabe was unter deinem Topic veröffentlicht wird
+      Serial.print("Ich:\t");                 //Ausgabe was unter deinem Topic veröffentlicht wird
       Serial.println(readData);
     }
   }
diff --git a/examples/sPSN_Client1/sPSN_Client1.ino b/examples/sPSN_Client1/sPSN_Client1.ino
index 116aa540bfa463764ee267ec15b0ff0edc27ec3c..5230231c626056447068c1acf52db73e9bccf36a 100644
--- a/examples/sPSN_Client1/sPSN_Client1.ino
+++ b/examples/sPSN_Client1/sPSN_Client1.ino
@@ -22,7 +22,7 @@
  */
 #include <Arduino.h>
 #include "SoftwareSerial.h"
-#include "didacticNet.h"
+#include "DidacticNet.h"
 
 #define SERIAL_BAUD 2400 //lege Geschwindigkeit für serielle Schnittstellen fest
 
@@ -34,24 +34,22 @@
 char topicPublish[MAX_LEN_TOPICS]   = "potiVal";  //Topic unter dem (eigene) Daten veröffentlicht werden
 char topicSubscribe[MAX_LEN_TOPICS] = "btnState"; //Topic (von anderem TN) das abboniert werden soll
 
-char payload[MAX_LEN_PAYLOAD] = {0};
-
 SoftwareSerial sSerial(10, 11); //Erzeuge SoftwareSerial-Instanz mit Rx = Pin10 -> Empfänger | Tx = Pin11 -> Sender
 
 DidacticPSNetClient psnClient;  //Erzeuge PubSub-Client-Instanz
 
 
 //Callback-Funktion - wird beim Empfang neuer Daten aufgerufen
-void newData(char* mTopic, int mToLength, char* mData, int mDaLength) {
-  Serial.print("CB: ");
-  Serial.print(mTopic);
-  Serial.print(" | ");
-  Serial.println(mData);
+void newData(char* topic, char* payload) {
+  Serial.print("New data from topic ");
+  Serial.print(topic);
+  Serial.print(": ");
+  Serial.println(payload);
 
   boolean static stateLED = false;
   
   //Wechsle Zustand der Variable "stateLED" wenn Taster beim Sender gedrueckt wurde
-  if(bool(atoi(mData)) == true){
+  if(payload[0] == '1'){
     stateLED = !stateLED;
     digitalWrite(LED_PIN, stateLED);              //Setze Ausgang entsprechend dem empfangenen Wert
   }        
@@ -66,7 +64,6 @@ void setup() {
   pinMode(LED_PIN,OUTPUT);
 
   psnClient.begin(sSerial, newData); //Starte PubSub Client an SoftwareSerial Schnittstelle
-  //psnClient.begin(Serial, clientCallback); //Starte PubSub Client an Serial Schnittstelle
 
   psnClient.subscribe(topicSubscribe); //Lege fest zu welchem Topic Daten empfangen werden sollen
 }
diff --git a/examples/sPSN_Client2/sPSN_Client2.ino b/examples/sPSN_Client2/sPSN_Client2.ino
index 98193ecbafcc23988ff68e1b0b224938de9f546b..d7cde74b8cda0b5f75dbb95dc84dbbd15e19bf6b 100644
--- a/examples/sPSN_Client2/sPSN_Client2.ino
+++ b/examples/sPSN_Client2/sPSN_Client2.ino
@@ -19,38 +19,33 @@
 
 #include <Arduino.h>
 #include "SoftwareSerial.h"
-#include "didacticNet.h"
+#include "DidacticNet.h"
 
 #define SERIAL_BAUD 2400 //lege Geschwindigkeit für serielle Schnittstellen fest
 
 #define LED_PIN    5
-#define LED2_PIN    6
+#define LED2_PIN   6
 #define BUTTON_PIN 2
 
 char topicPublish[MAX_LEN_TOPICS]   = "btnState";   //Topic unter dem (eigene) Daten veröffentlicht werden
 char topicSubscribe[MAX_LEN_TOPICS] = "potiVal";    //Topic (von anderem TN) das abboniert werden soll
 
-char payload[MAX_LEN_PAYLOAD] = {0};
-boolean newData  = false;
-boolean ledState = false;
-
 SoftwareSerial sSerial(10, 11); //Erzeuge SoftwareSerial-Instanz mit Rx = Pin10 -> Empfänger | Tx = Pin11 -> Sender
 
 DidacticPSNetClient psnClient;  //Erzeuge PubSub-Client-Instanz
-UnblockingTimer uTimer;
-
 
 //Callback-Funktion - wird beim Empfang neuer Daten aufgerufen
-void newData(char* mTopic, int mToLength, char* mData, int mDaLength) {
-  Serial.print("CB: ");
-  Serial.print(mTopic);
-  Serial.print(" | ");
-  Serial.println(mData);
+void newData(char* topic, char* payload) {
+  Serial.print("New data from topic ");
+  Serial.print(topic);
+  Serial.print(": ");
+  Serial.println(payload);
 
-  int valuePoti = atoi(mData);  //wandle ASCII-Zeichen in Wert
+  int valuePoti = atoi(payload);  //wandle ASCII-Zeichen in Wert
   //Alternativ: sscanf(mData, "%d", &stateLED); //wandle ASCII-Zeichen in Wert
 
-  int valueLED = constrain(map(valuePoti, 0, 1023, 0, 255), 0, 255); //passe analogRead-Wert für analogWrite an
+  int mappedValue = map(valuePoti, 0, 1023, 0, 255);
+  int valueLED = constrain(mappedValue, 0, 255); //passe analogRead-Wert (0-1023) für analogWrite (0-255) an und begrenze
   
   analogWrite(LED_PIN, valueLED);        //Setze Ausgang entsprechend dem empfangenen Wert
   analogWrite(LED2_PIN, 255-valueLED);   //Setze Ausgang invertiert zum empfangenen Wert
@@ -63,8 +58,7 @@ void setup() {
   sSerial.begin(SERIAL_BAUD);   //Starte SoftwareSerielle Schnittstelle (zu IR-Link-Modulen)
 
   psnClient.begin(sSerial, newData); //Starte PubSub Client an SoftwareSerial Schnittstelle
-  //psnClient.begin(Serial, clientCallback); //Starte PubSub Client an Serial Schnittstelle
-
+  
   psnClient.subscribe(topicSubscribe); //Lege fest zu welchem Topic Daten empfangen werden sollen
 }
 
diff --git a/examples/sPSN_ClientMinimal/sPSN_ClientMinimal.ino b/examples/sPSN_ClientMinimal/sPSN_ClientMinimal.ino
index dfd3f235d0f52776292da8809e4449705ac7ccd7..b9cb74ec467b93f9d6f089cbab72fc75cef23f7f 100644
--- a/examples/sPSN_ClientMinimal/sPSN_ClientMinimal.ino
+++ b/examples/sPSN_ClientMinimal/sPSN_ClientMinimal.ino
@@ -22,18 +22,18 @@
 #include <Arduino.h>
 
 #include "SoftwareSerial.h"
-#include "didacticNet.h"
+#include "DidacticNet.h"
 
 SoftwareSerial sSerial(10, 11); //Erzeuge SoftwareSerial-Instanz mit Rx = Pin10 -> Empfänger | Tx = Pin11 -> Sender
 
 DidacticPSNetClient psnClient;  //Erzeuge PubSub-Client-Instanz
 
 //Callback-Funktion - wird beim Empfang neuer Daten aufgerufen
-void newData(char* mTopic, int mToLength, char* mPayload, int mPayloadLength) {
-  Serial.print("Nachricht von: ");
-  Serial.print(mTopic);
-  Serial.print(" - ");
-  Serial.println(mPayload);
+void newData(char* topic, char* payload) {
+  Serial.print("Topic: ");
+  Serial.print(topic);
+  Serial.print("   Nutzdaten: ");
+  Serial.println(payload);
 }
 
 
diff --git a/examples/sPSN_PingTest/sPSN_PingTest.ino b/examples/sPSN_PingTest/sPSN_PingTest.ino
index fb9f90c9c0802e35832143d071e72018b2e5708f..4bb09a1373fd646919ffbbe8ff022b66f869c12b 100644
--- a/examples/sPSN_PingTest/sPSN_PingTest.ino
+++ b/examples/sPSN_PingTest/sPSN_PingTest.ino
@@ -12,13 +12,13 @@
  * 
  * Arduino3: sPSN_PingTest.ino -> reagiert auf PongTester
  * 
- *date:  01.12.2021
+ *date:  04.07.2022
  */
 
 #include "Arduino.h"
 
 #include "SoftwareSerial.h"
-#include "didacticNet.h"
+#include "DidacticNet.h"
 
 //lege Geschwindigkeit für serielle Schnittstellen fest
 #define SERIAL_BAUD 2400
@@ -50,8 +50,14 @@ char payloadSend[] = "Ping";
 
 bool ledState = true;
 
-void newData(char* mTopic, int mToLength, char* mData, int mDaLength) {
-  Serial.println(mData);
+void newData(char* topic, char* payload) {
+  if (!strcmp(payload, "Ping")){
+    Serial.print(payload);
+    Serial.print(" -> ");
+  } else{
+    Serial.print(payload);
+    Serial.println(" :-D");
+  } 
   digitalWrite(LED_BUILTIN, HIGH);
 }
 
@@ -61,6 +67,8 @@ void setup() {
   Serial.begin(SERIAL_BAUD);
   delay(2000);
 
+  //Verwende eigene Nummer als Sende- und Empfangstopic 
+  //(2-stellig mit führender 0)
   sprintf(topicPub, "%02d", MY_NUMBER);
   sprintf(topicSub, "%02d", MY_NUMBER);
 
diff --git a/examples/sPSN_PlotTopics/sPSN_PlotTopics.ino b/examples/sPSN_PlotTopics/sPSN_PlotTopics.ino
new file mode 100644
index 0000000000000000000000000000000000000000..c39af3423a9eb0d353a65981eed4162dd9adeaf3
--- /dev/null
+++ b/examples/sPSN_PlotTopics/sPSN_PlotTopics.ino
@@ -0,0 +1,60 @@
+/**
+ *file:  sPSN_PlotTopics
+ *author:  letsgoING -> info@letsgoing.de
+ *
+ *description:
+ * Dieses Programm abboniert Beispiel-Topics und gibt diese auf dem SerialMonitor aus.
+ *
+ * parameter:
+ *  MAX_LEN_PAYLOAD = 20 Zeichen (didacticNet.h)
+ *  MAX_LEN_TOPICS = 10 Zeichen (didacticNet.h)
+ * 
+ *date:  15.07.2022
+ */
+#include <Arduino.h>
+#include "SoftwareSerial.h"
+#include "DidacticNet.h"
+
+#define SERIAL_BAUD 2400 //lege Geschwindigkeit für serielle Schnittstellen fest
+
+SoftwareSerial sSerial(10, 11); //Erzeuge SoftwareSerial-Instanz mit Rx = Pin10 -> Empfänger | Tx = Pin11 -> Sender
+
+DidacticPSNetClient psnClient;  //Erzeuge PubSub-Client-Instanz
+
+
+//Callback-Funktion - in diesem Beispiel nicht verwendet
+void newData(char* topic, char* payload) {}
+
+
+void setup() {
+  
+  Serial.begin(SERIAL_BAUD);    //Starte Serielle Schnittstelle (zum PC)
+  sSerial.begin(SERIAL_BAUD);   //Starte SoftwareSerielle Schnittstelle (zu IR-Link-Modulen)
+
+  psnClient.begin(sSerial, newData); //Starte PubSub Client an SoftwareSerial Schnittstelle
+
+  //Beliebige Beispiel-Topics abbonieren -> zusätzliche Topics hinzufügen
+  psnClient.subscribe("temp1");
+  psnClient.subscribe("temp2");
+  psnClient.subscribe("light1");
+  psnClient.subscribe("poti");
+
+  //lese Anzahl der abbonierten Topics aus
+  int countTopics =  psnClient.getMaxNrTopics();
+  Serial.print("Anzahl Topics: ");
+  Serial.println(countTopics);
+
+  //Gebe alle Topics nacheinander aus
+  for(int i = 0; i < countTopics; i++){
+    char topic[MAX_LEN_TOPICS];
+    psnClient.getSubscribedTopic(topic, i);
+    
+    Serial.print("Topic ");
+    Serial.print(i);
+    Serial.print(": ");
+    Serial.println(topic);
+  }
+}
+
+void loop() {
+}
diff --git a/examples/sPSN_PongTester/sPSN_PongTester.ino b/examples/sPSN_PongTester/sPSN_PongTester.ino
index 2ed1ca12d21260985245e302b1fce15b3b96446b..c991eecb479214aba1853df276560481ecda007b 100644
--- a/examples/sPSN_PongTester/sPSN_PongTester.ino
+++ b/examples/sPSN_PongTester/sPSN_PongTester.ino
@@ -13,13 +13,13 @@
  * 
  * Arduino3: sPSN_PingTest.ino -> reagiert auf PongTester
  * 
- *date:  01.12.2021
+ *date:  04.07.2022
  */
 
 #include "Arduino.h"
 
 #include "SoftwareSerial.h"
-#include "didacticNet.h"
+#include "DidacticNet.h"
 
 //lege Geschwindigkeit für serielle Schnittstellen fest
 #define SERIAL_BAUD 2400
@@ -36,22 +36,14 @@ SoftwareSerial sSerial(10, 11);
 //Erzeuge Client-Instanz
 DidacticPSNetClient psnClient;
 
-//Arrays für Empfangs- und Sende Topic
-char topicSub[MAX_LEN_TOPICS] = "";
-char topicPub[MAX_LEN_TOPICS] = "";
+bool recievedPings[MAX_NR_CLIENTS+1] = {false}; //+1 ermöglicht Start bei Client0 oder Client1 
+bool newPing = false;
 
-char payloadSend[] = "Pong";
-
-bool ledState = true;
-
-void newData(char* mTopic, int mToLength, char* mData, int mDaLength) {
-  Serial.println(mTopic);
-  //reply pong
-  strcpy(topicPub, mTopic);
-  if (!strcmp(mData, "Ping")) { //Empfangene Nachricht == Ping
-    Serial.print(" ");
-    Serial.print(mTopic);
-    psnClient.publish(topicPub, payloadSend);
+void newData(char* topic, char* payload) {
+  if (!strcmp(payload, "Ping") && (atoi(topic) < MAX_NR_CLIENTS+1)) { //Empfangene Nachricht == Ping
+    recievedPings[atoi(topic)] = true;
+    newPing = true;
+    psnClient.publish(topic, "Pong");
   }
 }
 
@@ -77,9 +69,23 @@ void setup() {
 
   Serial.println("\n\nReady for Clients...");
 
+  
+
 }
 
 void loop() {
   //Verarbeiten der Daten, prüfen ob Netzwerk frei und versenden der Daten
   psnClient.handleNetwork();
+
+  if(newPing){
+    newPing = false;
+    Serial.print("Empfangene Clients: ");
+    for(int i = 0; i < MAX_NR_CLIENTS+1; i++){
+      if(recievedPings[i]){
+        Serial.print(i);
+        Serial.print(" | ");
+      }
+    }
+    Serial.println();
+  }
 }
diff --git a/keywords.txt b/keywords.txt
index 542b41df93aae8db0b8510a1d1aca8d2970ec1eb..c9c84529f72a1a94ef443e511d959b4723edcb33 100644
--- a/keywords.txt
+++ b/keywords.txt
@@ -27,6 +27,9 @@ publishOnChange	KEYWORD2
 subscribe	KEYWORD2
 unsubscribe	KEYWORD2
 
+getMaxNrTopic	KEYWORD2
+getSubscribedTopic	KEYWORD2
+
 timeElapsed	KEYWORD2
 readSerialData	KEYWORD2
 
@@ -53,4 +56,4 @@ DN_ASCII_NL	LITERAL1
 DN_PUBLISH_SUCCESSULL	LITERAL1
 DN_ERROR_NO_ERROR	LITERAL1
 DN_ERROR_TOPIC_LEN	LITERAL1
-DN_ERROR_PAYLOAD_LEN	LITERAL1
\ No newline at end of file
+DN_ERROR_PAYLOAD_LEN	LITERAL1
diff --git a/library.properties b/library.properties
index 1333af140fa1c79bf7ca58beab746abef135e8c1..0d0626ef15b6997eb0a736cf211a9bd4d8b0bda4 100644
--- a/library.properties
+++ b/library.properties
@@ -1,9 +1,9 @@
-name=didacticNetwork
-version=0.9
+name=DidacticNetwork
+version=1.0
 author=letsgoING
 maintainer=letsgoING <https://letsgoing.org>
 sentence=Library for implementing didactic reduced networks on Arduino boards.
 category=Communication
 paragraph=Library for implementing networks on Arduino boards. The functionalities correspond to state of the art technologies, which are didactically reduced.
 url=https://gitlab.reutlingen-university.de/letsgoing/libraries/didacticnetwork
-includes=didacticNet.h
+includes=DidacticNet.h
diff --git a/src/didacticNet.cpp b/src/DidacticNet.cpp
similarity index 96%
rename from src/didacticNet.cpp
rename to src/DidacticNet.cpp
index 80a9f5d3c63849e5d552e052b0ffd9f9af3ac228..361ab839dbadd3c73b0d91c79884ec550914a451 100644
--- a/src/didacticNet.cpp
+++ b/src/DidacticNet.cpp
@@ -1,12 +1,12 @@
 /**************************************************************************/
 /*!
-    @file     didacticNet.cpp
+    @file     DidacticNet.cpp
     @author   anian buehler @ letsgoING.org
 */
 /**************************************************************************/
 
 #include "Arduino.h"
-#include "didacticNet.h"
+#include "DidacticNet.h"
 
 //**************************************************************************
 //ROOT
@@ -268,7 +268,6 @@ int DidacticPSNetClient::subscribe(char* topic, int topicLength){
 	return error;
 }
 
-
 bool DidacticPSNetClient::unsubscribe(char* topic){
   return unsubscribe(topic, strlen(topic));
 }
@@ -302,7 +301,12 @@ bool DidacticPSNetClient::handleData(){
     if( currentTopicNr >= 0){
       savePayload( _bufferPayload, currentTopicNr);
       //callback(_topic[currentTopicNr], topicLength, _payload[currentTopicNr], payloadLength);
-      callback(_bufferTopic, topicLength, _bufferPayload, payloadLength);
+      #ifdef CALLBACK_W_LENGTH	 
+        callback(_bufferTopic, topicLength, _bufferPayload, payloadLength);
+      #else
+        callback(_bufferTopic, _bufferPayload);
+      #endif
+      
     }
   }
   return true;
@@ -326,6 +330,18 @@ int DidacticPSNetClient::getFreeTopicNr() {
   return -1;
 }
 
+int DidacticPSNetClient::getSubscribedTopic(char* topic, int number){
+  if(number > 0 && number < getMaxNrTopics()){
+    strcpy(topic, _topic[number]);
+    return DN_ERROR_NO_ERROR;
+  }
+  return DN_ERROR_NO_TOPIC;
+}
+
+int DidacticPSNetClient::getMaxNrTopics(){
+  return getFreeTopicNr();
+}
+
 
 //**************************************************************************
 //Broker
diff --git a/src/didacticNet.h b/src/DidacticNet.h
similarity index 91%
rename from src/didacticNet.h
rename to src/DidacticNet.h
index 41aac4c9419efd6e05adb4e4020877690ff3e36c..3480fe81241491c7548a2aa2e4f9c43c95488e80 100644
--- a/src/didacticNet.h
+++ b/src/DidacticNet.h
@@ -1,5 +1,5 @@
 /**************************************************************************
-    @file     didacticNet.h
+    @file     DidacticNet.h
     @author   anian buehler @ letsgoING
 **************************************************************************/
 
@@ -8,8 +8,14 @@
 #define _DIDACTICNET_
 
 #include "Arduino.h"
-//callback(topic, topicLength, data, dataLength)
-#define PSNET_CALLBACK_SIGNATURE void (*callback)(char*, int, char*, int)
+
+#ifdef CALLBACK_W_LENGTH	 
+	//callback(topic, topicLength, payload, payloadLength)
+	#define PSNET_CALLBACK_SIGNATURE void (*callback)(char*, int, char*, int)
+#else
+	//callback(topic, payload)
+	#define PSNET_CALLBACK_SIGNATURE void (*callback)(char*, char*)
+#endif
 
 #define MSG_PRELIMITER '<'
 #define MSG_DELIMITER  '>'
@@ -43,6 +49,7 @@
 #define DN_ERROR_NO_ERROR     0
 #define DN_ERROR_TOPIC_LEN   -1
 #define DN_ERROR_PAYLOAD_LEN -2
+#define DN_ERROR_NO_TOPIC    -3
 
 
 //little helpers
@@ -117,6 +124,7 @@ class DidacticPSNet
 		int _currentPayloadLength  = 0;
 
 		DidacticPSNet& setCallback(PSNET_CALLBACK_SIGNATURE);
+
 		void setStream(Stream& _port);
 
 		int checkData();
@@ -136,6 +144,7 @@ class DidacticPSNet
 
 		void begin(Stream& _port);
 		void begin(Stream& _port, PSNET_CALLBACK_SIGNATURE);
+
 		bool handleNetwork();
 		bool isDataToSend();
 
@@ -165,6 +174,10 @@ class DidacticPSNetClient : public  DidacticPSNet
 	DidacticPSNetClient();
 	~DidacticPSNetClient();
 
+	int getMaxNrTopics();
+	int getSubscribedTopic(char*, int);
+	
+
 	int publish(char*, char*);
 	int publish(char*, int, char*, int);
 	int publish(char*, int);