diff --git a/build.sbt b/build.sbt
index 1a8f8b72660c0880925086accef44965ba20a410..269d091ede86aacf69e20a4d9cd144cc665cffb3 100644
--- a/build.sbt
+++ b/build.sbt
@@ -9,6 +9,7 @@ scalaVersion := "2.12.6"
 
 libraryDependencies ++= Seq(
   "org.scala-lang" % "scala-reflect" % scalaVersion.value,
+  "org.scala-lang" % "scala-compiler" % scalaVersion.value,
   "org.eclipse.emf" % "org.eclipse.emf.common" % emfcommonVersion,
   "org.eclipse.emf" % "org.eclipse.emf.ecore" % emfecoreVersion
 )
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/io/SClassWriterTest.scala b/src/main/scala/org/rosi_project/model_sync/generator/io/SClassWriterTest.scala
index 1ca144bf28dc1d4d96be23820c5b2c4f9ed90b33..418f9453b43273477baa505fd45edbc310c79b9c 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/io/SClassWriterTest.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/io/SClassWriterTest.scala
@@ -1,7 +1,7 @@
 package org.rosi_project.model_sync.generator.io
 
 import org.rosi_project.model_sync.generator.acr._
-import org.rosi_project.model_sync.generator.sync_model.{GetterSetterGeneratingVisitor, SyncNotificationGeneratingVisitor}
+import org.rosi_project.model_sync.generator.sync_model.{GetterSetterGeneratingVisitor, SyncEnhancingVisitor}
 
 /**
   * @author Rico Bergmann
@@ -16,7 +16,7 @@ object SClassWriterTest extends App {
   val getterSetterVisitor = new GetterSetterGeneratingVisitor
   modelClass.accept(getterSetterVisitor)
 
-  val syncNotificationVisitor = new SyncNotificationGeneratingVisitor
+  val syncNotificationVisitor = new SyncEnhancingVisitor
   modelClass.accept(syncNotificationVisitor)
 
   val writer = new SClassWriter(modelClass)
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/io/SModelFSWriter.scala b/src/main/scala/org/rosi_project/model_sync/generator/io/SModelFSWriter.scala
index b75e03f5e491f443b8d447faece050639d031c17..efc448700ecd7d589138be58150a7b219cd2d6ad 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/io/SModelFSWriter.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/io/SModelFSWriter.scala
@@ -1,21 +1,45 @@
 package org.rosi_project.model_sync.generator.io
 
+import java.nio.file.Files
+
 import org.rosi_project.model_sync.generator.acr.{SAttribute, SClass, SMethod, SType}
 import org.rosi_project.model_sync.generator.sync_model.{SModel, SModelVisitor}
 
 import scala.reflect.io.{File, Path}
+import scala.tools.nsc.Main
 
 /**
   * @author Rico Bergmann
   */
 class SModelFSWriter extends SModelVisitor {
 
-  private val baseOutputDir: File = null
-  private var sFilesToWrite: List[File] = List.empty
+  private val baseOutputDir: File = File(Files.createTempDirectory("model").toFile)
+  private var sFilesToCompile: List[File] = List.empty
+
+  println(s"... Temp dir (sources) is $baseOutputDir")
+
+  override def visit(sModel: SModel): Unit = {
+    println(s"... Wrote files (sources) $sFilesToCompile")
+    println("... Starting compilation")
+    val compiler = Main.newCompiler()
+    
 
-  override def visit(sModel: SModel): Unit = ??? // TODO compile all the written files and put them into a jar
 
-  override def visit(sClass: SClass): Unit = ??? // TODO write the sClass
+    println("... Compilation done")
+    println("... Cleaning up")
+    println("... Generating JAR")
+
+    println("... Done")
+  }
+
+  override def visit(sClass: SClass): Unit = {
+    val classNameWithPath = baseOutputDir.toAbsolute.toString() + pckg2Path(sClass.getPackage) + File.separator + s"${sClass.name}.scala"
+    val writer = new SClassWriter(sClass)
+    val classFile = File(classNameWithPath)
+
+    classFile.writeAll(writer.stringify)
+    sFilesToCompile ::= classFile
+  }
 
   override def visit(sAttr: SAttribute): Unit = {
     // pass
@@ -29,4 +53,6 @@ class SModelFSWriter extends SModelVisitor {
     // pass
   }
 
+  private def pckg2Path(pckg: String): Path = Path(pckg.replace(".", File.separator))
+
 }
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/io/SModelFSWriterTest.scala b/src/main/scala/org/rosi_project/model_sync/generator/io/SModelFSWriterTest.scala
new file mode 100644
index 0000000000000000000000000000000000000000..774f0789cb665568feb444da736e87c8795cf438
--- /dev/null
+++ b/src/main/scala/org/rosi_project/model_sync/generator/io/SModelFSWriterTest.scala
@@ -0,0 +1,27 @@
+package org.rosi_project.model_sync.generator.io
+
+import org.rosi_project.model_sync.generator.acr._
+import org.rosi_project.model_sync.generator.sync_model.{GetterSetterGeneratingVisitor, SimpleSModel, SyncEnhancingVisitor}
+
+/**
+  * @author Rico Bergmann
+  */
+object SModelFSWriterTest extends App {
+
+  val model = new SimpleSModel("org.foo")
+
+  val stringType = SType("String")
+
+  val personAttrs = Seq(SAttribute("name", stringType))
+  val personSayHelloMethod = new SMethod("sayHello", stringType, Seq.empty, Seq(SMethodStatement("s\"Hello $name\"")))
+  val personClass = new SClass("Person", personAttrs, methods = Seq(personSayHelloMethod))
+
+  val getterSetterVisitor = new GetterSetterGeneratingVisitor
+  val syncNotificationVisitor = new SyncEnhancingVisitor
+
+  model.addModelClass(personClass)
+
+  model.accept(getterSetterVisitor)
+  model.accept(syncNotificationVisitor)
+  model.accept(new SModelFSWriter)
+}
diff --git a/src/main/scala/org/rosi_project/model_sync/generator/sync_model/SyncNotificationGeneratingVisitor.scala b/src/main/scala/org/rosi_project/model_sync/generator/sync_model/SyncEnhancingVisitor.scala
similarity index 79%
rename from src/main/scala/org/rosi_project/model_sync/generator/sync_model/SyncNotificationGeneratingVisitor.scala
rename to src/main/scala/org/rosi_project/model_sync/generator/sync_model/SyncEnhancingVisitor.scala
index b5fa535ba4a6ecfe7cdb38538ce47813fa1ccd70..7bcadd2ca51fd937c8bb94abe5daae108ec09006 100644
--- a/src/main/scala/org/rosi_project/model_sync/generator/sync_model/SyncNotificationGeneratingVisitor.scala
+++ b/src/main/scala/org/rosi_project/model_sync/generator/sync_model/SyncEnhancingVisitor.scala
@@ -4,14 +4,14 @@ import org.rosi_project.model_sync.generator.acr._
 /**
   * @author Rico Bergmann
   */
-class SyncNotificationGeneratingVisitor extends SModelVisitor {
+class SyncEnhancingVisitor extends SModelVisitor {
 
   override def visit(sModel: SModel): Unit = {
     // pass
   }
 
   override def visit(sClass: SClass): Unit = {
-    // pass
+    // TODO extend PlayerSync and call setup method in constructor
   }
 
   override def visit(sAttr: SAttribute): Unit = {
@@ -28,7 +28,7 @@ class SyncNotificationGeneratingVisitor extends SModelVisitor {
 
   private def extractSetterAttr(sMethod: SMethod): Option[String] = {
     sMethod.name match {
-      case SyncNotificationGeneratingVisitor.SetterRegex(attrName) =>
+      case SyncEnhancingVisitor.SetterRegex(attrName) =>
         Option(attrName)
       case _ =>
         None
@@ -38,7 +38,7 @@ class SyncNotificationGeneratingVisitor extends SModelVisitor {
 
 }
 
-object SyncNotificationGeneratingVisitor {
+object SyncEnhancingVisitor {
 
   private val SetterRegex = """set([A-Z][a-zA-z0-9]*)""".r