diff --git a/.gitignore b/.gitignore
index 2e737e408a044a2d475f86e247ac778244348a2e..49d6dc29fd463fac2ef694d69dfbe665ca621088 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,2 @@
-*.class
+*.class
 !.gitignore
\ No newline at end of file
diff --git a/VL04-02/moduletest_lib/.gitignore b/VL04-02/moduletest_lib/.gitignore
deleted file mode 100644
index ae3c1726048cd06b9a143e0376ed46dd9b9a8d53..0000000000000000000000000000000000000000
--- a/VL04-02/moduletest_lib/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/bin/
diff --git a/VL04-02/moduletest_lib/.settings/org.eclipse.jdt.core.prefs b/VL04-02/moduletest_lib/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 71f736ff9f8e994ec235e235d5e752a16a3386ac..0000000000000000000000000000000000000000
--- a/VL04-02/moduletest_lib/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,14 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=12
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=12
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
-org.eclipse.jdt.core.compiler.release=enabled
-org.eclipse.jdt.core.compiler.source=12
diff --git a/VL04-02/moduletest_lib/src/de/hsrt/inf/meti/inf3vl/moduletest_lib/BlablaMachine.java b/VL04-02/moduletest_lib/src/de/hsrt/inf/meti/inf3vl/moduletest_lib/BlablaMachine.java
deleted file mode 100644
index 058dcdcadf2f559f61cb41b43914999bb6f76827..0000000000000000000000000000000000000000
--- a/VL04-02/moduletest_lib/src/de/hsrt/inf/meti/inf3vl/moduletest_lib/BlablaMachine.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package de.hsrt.inf.meti.inf3vl.moduletest_lib;
-import static java.lang.System.out;
-public class BlablaMachine {
-	private static int blablaCounter = 0;
-	private BlablaMachine() {
-		//Konstruktor private --> factory Methode erforderlich
-	}	
-	public static BlablaMachine blablaMachineFactory() {
-		if (blablaCounter == 0) {
-			blablaCounter++;
-			return new BlablaMachine();
-		}
-		else {
-			return null;
-		}
-	}
-	public void makeBlabla(String nonsens) {
-		out.println("can't stop my " + nonsens + " blabla");
-	}
-}
diff --git a/VL04-02/moduletest_main/.classpath b/VL04-02/moduletest_main/.classpath
deleted file mode 100644
index 858650447fa87aafbd50840d5ecb3b3167ec4079..0000000000000000000000000000000000000000
--- a/VL04-02/moduletest_main/.classpath
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk-13">
-		<attributes>
-			<attribute name="module" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry combineaccessrules="false" kind="src" path="/moduletest_lib"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
diff --git a/VL04-02/moduletest_main/.gitignore b/VL04-02/moduletest_main/.gitignore
deleted file mode 100644
index ae3c1726048cd06b9a143e0376ed46dd9b9a8d53..0000000000000000000000000000000000000000
--- a/VL04-02/moduletest_main/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/bin/
diff --git a/VL04-02/moduletest_main/.project b/VL04-02/moduletest_main/.project
deleted file mode 100644
index 86eec252c8e2485796fe853d840cfb1545f6d346..0000000000000000000000000000000000000000
--- a/VL04-02/moduletest_main/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>moduletest_main</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
diff --git a/VL04-02/moduletest_main/src/de/hsrt/inf/meti/inf3vl/moduletest_main/Mainclass.java b/VL04-02/moduletest_main/src/de/hsrt/inf/meti/inf3vl/moduletest_main/Mainclass.java
deleted file mode 100644
index 17a2713267a723ffa3a82721494f9dca6ad7601d..0000000000000000000000000000000000000000
--- a/VL04-02/moduletest_main/src/de/hsrt/inf/meti/inf3vl/moduletest_main/Mainclass.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package de.hsrt.inf.meti.inf3vl.moduletest_main;
-import de.hsrt.inf.meti.inf3vl.moduletest_lib.BlablaMachine;
-
-public class Mainclass {
-	public static void main(String[] args) {
-		BlablaMachine.blablaMachineFactory().makeBlabla("brrrchrr");
-	}
-}
diff --git a/VL04-02/moduletest_lib/.classpath b/VL04_04/Typecasting-C/.classpath
similarity index 61%
rename from VL04-02/moduletest_lib/.classpath
rename to VL04_04/Typecasting-C/.classpath
index d691827ba145edaacc1a12df884a2e45e1f5d9f1..074ff99ef475dae26696d620c7d5ad1548e6fbe6 100644
--- a/VL04-02/moduletest_lib/.classpath
+++ b/VL04_04/Typecasting-C/.classpath
@@ -1,10 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/jdk-13">
-		<attributes>
-			<attribute name="module" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="bin"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry excluding="*Loesung.java" kind="src" path="src"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/VL04-02/moduletest_lib/.project b/VL04_04/Typecasting-C/.project
similarity index 88%
rename from VL04-02/moduletest_lib/.project
rename to VL04_04/Typecasting-C/.project
index 505d28489272b1148edde17c9e39840ccc9802cd..8e1709ac298fa1336ebc98d8dbdbe0da210817a9 100644
--- a/VL04-02/moduletest_lib/.project
+++ b/VL04_04/Typecasting-C/.project
@@ -1,17 +1,17 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<projectDescription>
-	<name>moduletest_lib</name>
-	<comment></comment>
-	<projects>
-	</projects>
-	<buildSpec>
-		<buildCommand>
-			<name>org.eclipse.jdt.core.javabuilder</name>
-			<arguments>
-			</arguments>
-		</buildCommand>
-	</buildSpec>
-	<natures>
-		<nature>org.eclipse.jdt.core.javanature</nature>
-	</natures>
-</projectDescription>
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>Typecasting-C</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/VL04-02/moduletest_main/.settings/org.eclipse.jdt.core.prefs b/VL04_04/Typecasting-C/.settings/org.eclipse.jdt.core.prefs
similarity index 57%
rename from VL04-02/moduletest_main/.settings/org.eclipse.jdt.core.prefs
rename to VL04_04/Typecasting-C/.settings/org.eclipse.jdt.core.prefs
index 71f736ff9f8e994ec235e235d5e752a16a3386ac..bb35fa0a87b032ee9d0b128004c1edbd464f07bf 100644
--- a/VL04-02/moduletest_main/.settings/org.eclipse.jdt.core.prefs
+++ b/VL04_04/Typecasting-C/.settings/org.eclipse.jdt.core.prefs
@@ -1,14 +1,11 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=12
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=12
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
-org.eclipse.jdt.core.compiler.release=enabled
-org.eclipse.jdt.core.compiler.source=12
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/VL04_04/Typecasting-C/src/TypeCasting-Loesung.java b/VL04_04/Typecasting-C/src/TypeCasting-Loesung.java
new file mode 100644
index 0000000000000000000000000000000000000000..5eee675c15f1088493f1c75aee8918476b2ea7f1
--- /dev/null
+++ b/VL04_04/Typecasting-C/src/TypeCasting-Loesung.java
@@ -0,0 +1,105 @@
+/** 2014-11-03 (Steddin)
+* Das Programm dient zur Demonstration der Eigenschaften von Integerzahlen, insbesondere 
+* der Vorzeichenarithmetik, sowohl bei Zahlenoperationen (dividieren, shift) als auch beim 
+* Typecasting. <p>
+* 
+* Damit sich das Projekt übersetzten lässt, muss die kommentierte Version im Ordner \temp
+* vom build-path ausgescholossen werden.
+*  
+* @author Steddin
+* @version 1.00, 2016-11-22
+ *
+ */
+public class TypeCasting {
+
+	public static void main(String[] args) {
+		// TODO Auto-generated method stub
+		
+		int int32_A, int32_B, int32_Res;
+		short int16_A, int16_B, int16_Res;
+		float float_A, float_B;
+		double double_A, double_B;
+		char char_A, char_B;
+		byte byte_A, byte_B;
+		
+		int32_A = 0x7FFFFFFF;
+		int32_A = 2_147_483_647;	//Zahlenliterale können bei Java mit Leerzeichen 
+									//erweitert werden, um die Lesbarkeit zu erhöhen
+		
+		int32_Res = int32_A * 2;	// = -2 :  = 0xFFFF FFFE  /auf Zahlenkreis demonstrieren!
+		int32_Res = int32_A * 4;	// = -4 :  = 0xFFFF FFFC  /im LSB wird 0 nachgezogen
+		//--> keine Warnung vor Überlauf! Aus der positiven Zahl wird eine negative Zahl!
+		
+		int32_Res = (int32_A * 2) / 2;	// = -1  : Durch Multipl. entsteht Überlauf (neg. Zahl)
+										//         Bei Division bleibt Vorzeichen erhalten
+		int32_Res = (int32_A / 2) * 2;	// = 2147483646 (0x7FFFFFFE) :
+										//         nicht mal das haut hin! ... wegen Rundung bei Division
+		
+		//--> obwohl die Operationen scheinbar neutral: Ergebnis ist Überraschung (... nicht für den Binärexperte)
+		// Besondere Bedeutung: Klammerung bei Ausdrücken --> 
+		// Praxistipp: viele Klammerebenen (sinnvoll!) verwenden bzw. nur wenige Operationen pro Zeile (auf diese 
+		// Weise können die Zwischenergebnisse mit dem debugger überprüft werden.
+		// Assoziativgesetz so anwenden, dass möglichst keine Unterläufe oder Überläufe auftreten!
+		// Beispiel:
+		
+		int32_A = 1;
+		int32_B = 4;
+		//Auswertung von Links nach rechts:
+		int32_Res = int32_A * 12 + int32_B / 12 * 3;		//schlecht: Unterlauf 4/12 --> 0: res somit = 12 statt 13
+		int32_Res = int32_A * 12 + int32_B * 3 / 12;		//besser: Reihenfolge der Operationen so gewählt, dass kein Unterlauf auftritt
+															//Ergebnis erwartungsgemäß = 12	
+		int32_Res = (int32_A * 12) + ((int32_B * 3) / 12);	//übertrieben: jedoch direkt erkennbar, welche Zwischenergebnisse auftreten werden
+		
+		//Zerlegung in Zwischenschritte: 
+		//- Vorteil: 	mit Debugger können Zwischenergebnisse geprüft werden
+		//- Nachteil: 	Rechenvorschrift nicht mehr direkt erkennbar
+		int32_Res = int32_B * 3;
+		int32_Res /= 12;
+		int int32_Res_Temp = int32_A * 12;
+		int32_Res += int32_Res_Temp;
+ 
+		
+		
+		int32_A = 0x7FFFFFFF;
+		int32_B = 0xFFFFFFFF;				    // = - 1
+		int16_Res = (short)int32_A;	// = -1 --> Vorzeichen (+) wird nicht erhalten: 
+									//			Bei positiver Zahl wird nur das LSByte übernommen --> negativ!
+									//			Soll das Vorzeichen erhalten bleiben --> vorher Shift Operation durchführen,
+									//          dann wird allerdings das MSB übernommen und nicht das LSB!
+									//			--> auch expliziter Typecast ist gefährlich!
+		int16_Res = (short)int32_B;	// = -1 --> Vorzeichen Bit bleibt beim Abschneiden des MSByte erhalten
+		
+	
+		//Was passiert bei shift-Operationen mit dem Vorzeichenbit?
+		int32_Res = int32_A >> 16;	// = 0x0000 7FFF = 2^15 --> es werden von links 0 nachgezogen: entspricht Division durch 2^16
+		int32_Res = int32_B >> 16;	// = 0xFFFF FFFF = -1 --> es werden von links 1 nachgezogen: entspricht ceil(-0.000...1) : Abrundung
+		int32_Res = int32_B / 0x00010000; 	// entspr.  int32_B / 2^16  = 0; Division kommt im Gegensatz zum Shift zu betragsmäßig 
+											// gerundetem Ergebnis: entspricht Aufrundung (hin zum größeren Wert).
+ 	
+		//Merke: Solange bei der SHR-Operation kein Unterlauf auftritt, funktioniert die "Ersatzdivision" auch bei 
+		//       negativen Zahlen, da vom MSB her 1er nachgezogen werden --> Zahl im Zweierkomplement korrekt 
+		//		 Sobald der Unterlauf auftritt bleibt eine -1 stehen, da es eine -0 in Der Repräsentation des 
+		//		 Zweierkomplements nicht gibt. 
+		
+		//Division negativer Zahlen mit SHR funktioniert!
+		int32_A = 0xFFFF0000;		// = -(2^16) = -65536
+		int32_Res = int32_A >> 4; 	// = 0xFFFF F000 = -4096	
+		
+		
+		//Was wird nun eigentlich abgeschnitten: die MSBytes?
+		int32_A = 0x7F7F0001;
+		int32_B = 0x80000001;
+		
+		int16_Res = (short)int32_A;		// = 1	--> es wird also das MSB abgeschnitten
+		int16_Res = (short)int32_B;		// = 1	// Vorsicht bei den impliziten Typecasts : Vorzeichen bleibt u.U. nicht erhalten
+		
+		
+		int32_A = 0x00008001;
+		int16_Res = (short)int32_A;		// = -32767 (0x8001) --> Zahl wird durch Abschneiden der MSB auf einmal negativ!
+		
+		int32_A = 0xFFFFFFFF;			// == -1
+		int32_Res = int32_A >>> 1;		// == 0x7FFFFFFF = +2^15 (logical shift)
+		int32_Res = int32_A >> 1;		// == 0xFFFFFFFF --> unerwarteterweise wieder -1 (arithmetic shift)	
+		int32_Res = int32_A / 2;		// == 0
+	}
+}
diff --git a/VL04_04/Typecasting-C/src/TypeCasting.java b/VL04_04/Typecasting-C/src/TypeCasting.java
new file mode 100644
index 0000000000000000000000000000000000000000..6bad6ba2742573947d03598030e8577cb75fde40
--- /dev/null
+++ b/VL04_04/Typecasting-C/src/TypeCasting.java
@@ -0,0 +1,55 @@
+/** 
+* Typecasting.java
+* 
+* Das Programm verdeutlicht Effekte, die bei der Durchführung des expliziten
+* Typecasting auftreten. Die Ermittlung der Ergebnisse setzt die Kenntnis
+* der Bildung von negativen Zahlen über das Zweierkomplement voraus.
+*
+* @author Steddin
+* @version 1.00, 2016-11-22
+*/
+public class TypeCasting {
+
+	public static void main(String[] args) {
+		
+		int int32_A, int32_B, int32_Res;
+		short int16_A, int16_B, int16_Res;
+		
+		int32_A = 0x7FFFFFFF;
+		int32_A = 2_147_483_647;	
+		
+		int32_Res = int32_A * 2;	
+		int32_Res = int32_A * 4;	
+		
+		int32_Res = (int32_A * 2) / 2;	
+		int32_Res = (int32_A / 2) * 2;	
+		
+		int32_A = 0x7FFFFFFF;
+		int32_B = -1;				
+		int16_Res = (short)int32_A;	
+		int16_Res = (short)int32_B;	
+		
+		int32_Res = int32_A >> 16;	
+		int32_Res = int32_B >> 16;	
+		int32_Res = int32_B / 0x10000; 	
+	
+		int32_A = 0xFFFF0000;
+		int32_Res = int32_A >> 4;
+		
+		int32_A = 0x7F7F0001;
+		int32_B = 0x80000001;
+		
+		int16_Res = (short)int32_A;
+		int16_Res = (short)int32_B;
+		
+		int32_A = 0x00008001;
+		int16_Res = (short)int32_A;	
+		
+		int32_A = 0xFFFFFFFF;			// == -1
+		int32_Res = int32_A >>> 1;		// (logical shift)
+		int32_Res = int32_A >> 1;		// (arithmetic shift)	
+		int32_Res = int32_A / 2;		// Division
+	}
+}
+
+