     ###
     for Name, interfaces of config.systems
       name = Name[0].toLowerCase()+Name[1...]
-      sb.push ""
-      sb.push "type #{Name}(world) ="
+      sy = sys[Name] = []
+      sy.push "namespace #{config.namespace}"
+      sy.push ""
+      sy.push "(**"
+      sy.push " * Entitas Generated Systems for #{config.namespace}"
+      sy.push " *"
+      sy.push " *)"
+      sy.push ""
+      sy.push "open Entitas"
+      sy.push "open System"
+      sy.push "open System.Collections.Generic"
+      sy.push ""
+      sy.push "type #{Name}(world) ="
       
       found = false
       for iface in interfaces
 
         if 'IExecuteSystem' is iface
-          sb.push "    interface IExecuteSystem with"
-          sb.push "        member this.Execute() ="
-          sb.push "            ()"
+          sy.push "    interface IExecuteSystem with"
+          sy.push "        member this.Execute() ="
+          sy.push "            ()"
           found = true
           
         if 'IInitializeSystem' is iface
-          sb.push "    interface IInitializeSystem with"
-          sb.push "        member this.Initialize() ="
-          sb.push "            ()"
+          sy.push "    interface IInitializeSystem with"
+          sy.push "        member this.Initialize() ="
+          sy.push "            ()"
           found = true
 
-      sb.push "    class end" unless found 
-    sb.push ""
+      sy.push "    class end" unless found 
+    sy.push ""
                
     ###
      * Entity Extensions

          ex.push "          | _ -> this._#{name}ComponentPool.Pop()"
          for p in properties
            ex.push "        c.#{p.split(':')[0]} <- #{p.split(':')[0]};"
          ex.push "        this.AddComponent(int ComponentId.#{Name}, c)"
          ex.push ""
          ex.push "    member this.Replace#{Name}(#{params(properties)}) ="
          ex.push "        let previousComponent = if this.has#{Name} then this.#{name} else null"


    sb = []
    ex = []
    sys = {}
    
    sb.push "namespace #{config.namespace}"
    sb.push ""
    sb.push "(**"
    sb.push " * Entitas Generated Components for #{config.namespace}"
    sb.push " *"
    sb.push " * do not edit this file"
    sb.push " *)"
    sb.push ""
    sb.push "open Entitas"
    sb.push "open System"
    sb.push "open System.Collections.Generic"
    
    ex.push "module #{config.namespace}Extensions"
    ex.push ""
    ex.push "(**"
    ex.push " * Entitas Generated Extensions for #{config.namespace}"
    ex.push " *"
    ex.push " * do not edit this file"
    ex.push " *)"
    ex.push ""
    ex.push "open Entitas"
    ex.push "open #{config.namespace}"
    ex.push "open System"
    ex.push "open System.Collections.Generic"

    ###
     * Components Type Definitions
