diff --git a/build/premake4.lua b/build/premake4.lua
index 7eaf81fb..5d58d31e 100644
--- a/build/premake4.lua
+++ b/build/premake4.lua
@@ -32,9 +32,9 @@ solution "Cxxi"
   group "Tests"
     IncludeTests()
   
-  group "Cxxi"
+  group "Libraries"
+    include (srcdir .. "/Cxxi/Cxxi.lua")
     include (srcdir .. "/Bridge/Bridge.lua")
     include (srcdir .. "/Generator/Generator.lua")
     include (srcdir .. "/Generator.Tests/Generator.Tests.lua")
     include (srcdir .. "/Parser/Parser.lua")
-
diff --git a/src/Cxxi/Cxxi.lua b/src/Cxxi/Cxxi.lua
new file mode 100644
index 00000000..8817f65f
--- /dev/null
+++ b/src/Cxxi/Cxxi.lua
@@ -0,0 +1,9 @@
+project "Cxxi"
+
+  kind "ConsoleApp"
+  language "C#"
+  location "."
+
+  files   { "**.cs" }
+  
+  links { "System", "System.Core", "Bridge", "Generator" }
diff --git a/src/Generator/Program.cs b/src/Cxxi/Program.cs
similarity index 91%
rename from src/Generator/Program.cs
rename to src/Cxxi/Program.cs
index 1577dfd2..2d9a8b50 100644
--- a/src/Generator/Program.cs
+++ b/src/Cxxi/Program.cs
@@ -1,11 +1,11 @@
-using System;
+using System;
 using System.IO;
 using System.Reflection;
 using Mono.Options;
 
 namespace Cxxi
 {
-    public class Program
+    internal class Program
     {
         static void ShowHelp(OptionSet options)
         {
@@ -115,7 +115,7 @@ namespace Cxxi
             return true;
         }
 
-        public static void Main(String[] args)
+        public static void Main(string[] args)
         {
             var options = new DriverOptions();
 
@@ -132,16 +132,5 @@ namespace Cxxi
             driver.ProcessCode();
             driver.GenerateCode();
         }
-
-        public static void Run(ILibrary library)
-        {
-            var options = new DriverOptions();
-
-            var driver = new Driver(options, library);
-            driver.Setup();
-            driver.ParseCode();
-            driver.ProcessCode();
-            driver.GenerateCode();
-        }
     }
-}
+}
\ No newline at end of file
diff --git a/src/Generator/Driver.cs b/src/Generator/Driver.cs
index 376c3a35..8c21ae25 100644
--- a/src/Generator/Driver.cs
+++ b/src/Generator/Driver.cs
@@ -122,6 +122,17 @@ namespace Cxxi
                 generator.Generate(unit);
             }
         }
+
+        public static void Run(ILibrary library)
+        {
+            var options = new DriverOptions();
+
+            var driver = new Driver(options, library);
+            driver.Setup();
+            driver.ParseCode();
+            driver.ProcessCode();
+            driver.GenerateCode();
+        }
     }
 
     public class DriverOptions
diff --git a/src/Generator/Generator.lua b/src/Generator/Generator.lua
index 19a6580d..934ad031 100644
--- a/src/Generator/Generator.lua
+++ b/src/Generator/Generator.lua
@@ -1,6 +1,6 @@
 project "Generator"
 
-  kind "ConsoleApp"
+  kind "SharedLib"
   language "C#"
   location "."
 
diff --git a/src/Generator/Utils/Utils.cs b/src/Generator/Utils/Utils.cs
index 28415bf3..c5f1bee0 100644
--- a/src/Generator/Utils/Utils.cs
+++ b/src/Generator/Utils/Utils.cs
@@ -160,12 +160,12 @@ namespace Cxxi
         }
     }
 
-    static class AssemblyHelpers
+    public static class AssemblyHelpers
     {
         public static IEnumerable<System.Type> FindDerivedTypes(this Assembly assembly,
                                                                 System.Type baseType)
         {
             return assembly.GetTypes().Where(baseType.IsAssignableFrom);
-        }        
+        }
     }
 }