diff --git a/README.md b/README.md
index 598dad23262422ede79c41adc870c9c1dfd526f7..56995add3dc0b1628efdcfbcb11171c007de995a 100644
--- a/README.md
+++ b/README.md
@@ -4,14 +4,16 @@ Bibliothek zur Implementierung von vereinfachten Verschlüsselungen auf Arduino-
 Die Funktionalitaeten entsprechen dem Stand der Technik, die Umsetzung ist didaktisch reduziert.
 
 ## Download
+
 Start download with the button on the right side. Choose the right format and start the download.
 
-![](DownloadButton.png) 
+![](DownloadButton.png)
 
 After download install library:
 https://www.arduino.cc/en/guide/libraries section "Importing a .zip Library"
 
 # Symetrische Verschluesselung (XOR)
+
 Diese KLasse ermöglicht eine einfache symmetrische Verschlüsselung
 auf einem Arduino-Board mit 8-Bit-µController, wie z.B. dem Arduino Uno.
 Der Algorithmus nutzt eine Exklusiv-Oder-Verknüpfung als Verschlüsselung.
@@ -23,9 +25,10 @@ Der Algortihmus ist für den ASCII-Zeichensatz geeignet.
 - Für 7-Bit ASCII-Code geeignet
 
 ## Beispiele
-- symetric_minimal_.ino
 
-## Funktionen und Parameter 
+- symetric*minimal*.ino
+
+## Funktionen und Parameter
 
 ```cpp
 #Anlegen der Instanz
@@ -33,39 +36,76 @@ Der Algortihmus ist für den ASCII-Zeichensatz geeignet.
 // symEncrypt -> moeglicher Name für Objekt
 DidacticEncSymetric symEncrypt;
 
+
 #Setzen des Schluessels für die symetrische Verschluesselung
 int  symEncrypt.setKey(char*);
 // param1: Schluessel-string (char-Array mit '\0' am Ende) mit der Laenge LENGHT_KEY (default 8) + 1
-// return: ERROR-Wert: DE_ERROR_NO_ERROR, 
+// return: ERROR-Wert: DE_ERROR_NO_ERROR,
 //                     DE_ERROR_KEYLENGHT_LONG  -> Key zu lang
 //                     DE_ERROR_KEYLENGHT_SHORT -> Key zu kurz
 
-#Symetrisch ver- und entschluesseln
+
+
+#Symetrisch ver- und entschluesseln (BASIC -> nur XOR)
 void symEncrypt.crypt(char* messageIn, char* messageOut);
-// param1: Eingehende Nachricht (Lesbarer Text oder verschluesselter Text)
-// param2: Ausgehende Nachricht (Verschluesselter Text oder lesbarer Text)
+// param1: Eingehende Nachricht (lesbarer Text oder verschluesselter Text)
+// param2: Ausgehende Nachricht (verschluesselter Text oder lesbarer Text)
 //-> verwendet internen Key, welcher über setKey(char*) gesetzt wurde
 
 void symEncrypt.crypt(char* messageIn, char* messageOut, char* key);
 // param3: Key-string (char-Array mit '\0' am Ende)
 // -> ignoriert internen Key - sinvoll wenn verschiedene Keys in einem Programm verwendet werden sollen.
 
-void symEncrypt.crypt(char* messageIn,  int lenghtMessageIn, char* messageOut,  int lenghtMessageOur, char* key);
-// param2 + param 4: Laenge der uebergebenen Nachrichten -> verwenden wenn kein ’\0' am Ende steht
+void symEncrypt.crypt(char* messageIn,  int lenghtMessageIn, char* messageOut, char* key, int lengthKey);
+// param2 + param 4: Laenge der uebergebenen Nachrichte und des Keys -> verwenden wenn kein ’\0' am Ende steht
+
+
+
+#Symmetrisch ver- und entschluesseln (ADVANCED -> XOR + zweite Runde XOR mit Prüfsumme)
+void encrypt(char *messageIn, char *cypherOut);
+// param1: Eingehende Nachricht (lesbarer Text)
+// param2: Ausgehende Nachricht (verschluesselter Text)
+//-> verwendet internen Key, welcher über setKey(char*) gesetzt wurde
+
+void encrypt(char* messageIn, char* cypherOut, char* key);
+// param3: Key-string (char-Array mit '\0' am Ende)
+// -> ignoriert internen Key - sinvoll wenn verschiedene Keys in einem Programm verwendet werden sollen.
+
+void encrypt(char* messageIn, int lengthMessageIn, char* cypherOut, char* key, int lengthKey);
+// param2 + param 4: Laenge der uebergebenen Nachrichte und des Keys -> verwenden wenn kein ’\0' am Ende steht
+
+
+bool decrypt(char *, char *);
+// param1: Eingehende Nachricht (verschluesselter Text)
+// param2: Ausgehende Nachricht (lesbarer Text)
+//-> verwendet internen Key, welcher über setKey(char*) gesetzt wurde
+
+bool decrypt(char *, char *, char *);
+// param3: Key-string (char-Array mit '\0' am Ende)
+// -> ignoriert internen Key - sinvoll wenn verschiedene Keys in einem Programm verwendet werden sollen.
+
+bool decrypt(char *, int, char *, char *, int);
+// param2 + param 4: Laenge der uebergebenen Nachrichte und des Keys -> verwenden wenn kein ’\0' am Ende steht
+
 ```
+
 ### Konstanten
+
 Konstanten aus der Library die fuer die Programmierung genutzt werden und angepasst werden koennen.
 
 ```cpp
 #Laenge Key und Daten
-DE_LENGHT_KEY	    default: 8
-MAX_LEN_CYPHERTEXT	default: DE_LENGHT_KEY*4
-MAX_LEN_PLAINTEXT	default: DE_LENGHT_KEY*4
+MIN_LEN_KEY default: 5
+MAX_LEN_KEY default: 20
+MAX_LEN_PLAINTEXT default: 19
+MAX_LEN_CYPHERTEXT default: 20
 
 #Errors (nicht veraendern!)
 DE_ERROR_NOERROR          1
 DE_ERROR_KEYLENGHT_LONG  -1
 DE_ERROR_KEYLENGHT_SHORT -2
+DE_CS_CORRECT   true
+DE_CS_INCORRECT false
 ```
 
 # Asymetrische Verschluesselung (angelehnt an RSA)
@@ -82,12 +122,13 @@ Der Algortihmus ist (nur) für den ASCII-Zeichensatz geeignet.
 - RSA ohne gängige zusätzliche Sicherheitsfeatures
 - Keine Primzahlgenerierung
 - Nur für Werte bis 127 geeignet -> 7-Bit ASCII-Code
-- Verschlüsselte Daten werden als long-Zahlen in ASCII-Darstellung ausgegeben bzw. eingelesen 
+- Verschlüsselte Daten werden als long-Zahlen in ASCII-Darstellung ausgegeben bzw. eingelesen
 
 ## Beispiele
-- asymetric_minimal_.ino
 
-## Funktionen und Parameter 
+- asymetric*minimal*.ino
+
+## Funktionen und Parameter
 
 ```cpp
 #Anlegen der Instanz
@@ -135,6 +176,7 @@ void asymEncrypt.setRandomSeedPin(int);
 ### Konstanten
 
 Konstanten aus der Library die fuer die Programmierung genutzt werden und angepasst werden koennen.
+
 ```cpp
 #ASCII Trennzeichen zwischen Cypher-Werten
 CYPHER_SEPARATOR   default:";"
@@ -142,7 +184,7 @@ CYPHER_SEPARATOR   default:";"
 #Maximale Laenge der verschluesselten Nachricht
 MAX_LEN_CYPHERTEXT default: 250
 
-#Primes 
+#Primes
 MAX_NR_OF_PRIMES    48  (nicht veraendern)
 MAX_PRIME_OFFSET    3
 ```