diff --git a/src/CppParser/Bindings/ParserGen.cs b/src/CppParser/Bindings/ParserGen.cs
index 889ce7c5..e48d22cb 100644
--- a/src/CppParser/Bindings/ParserGen.cs
+++ b/src/CppParser/Bindings/ParserGen.cs
@@ -218,7 +218,7 @@ namespace CppSharp
 
         private bool IsStdType(QualifiedType type)
         {
-            var typePrinter = new CppTypePrinter(Driver.TypeDatabase);
+            var typePrinter = new CppTypePrinter();
             var typeName = type.Visit(typePrinter);
 
             return typeName.Contains("std::");
diff --git a/src/Generator/Generators/CLI/CLIHeadersTemplate.cs b/src/Generator/Generators/CLI/CLIHeadersTemplate.cs
index 2738547a..27b08ead 100644
--- a/src/Generator/Generators/CLI/CLIHeadersTemplate.cs
+++ b/src/Generator/Generators/CLI/CLIHeadersTemplate.cs
@@ -468,7 +468,7 @@ namespace CppSharp.Generators.CLI
             {
                 if (!@event.IsGenerated) continue;
 
-                var cppTypePrinter = new CppTypePrinter(Driver.TypeDatabase);
+                var cppTypePrinter = new CppTypePrinter();
                 var cppArgs = cppTypePrinter.VisitParameters(@event.Parameters, hasNames: true);
 
                 WriteLine("private:");
diff --git a/src/Generator/Generators/CLI/CLIMarshal.cs b/src/Generator/Generators/CLI/CLIMarshal.cs
index a68837d0..e35b87c4 100644
--- a/src/Generator/Generators/CLI/CLIMarshal.cs
+++ b/src/Generator/Generators/CLI/CLIMarshal.cs
@@ -117,7 +117,7 @@ namespace CppSharp.Generators.CLI
                 var returnVarName = Context.ReturnVarName;
                 if (quals.IsConst != Context.ReturnType.Qualifiers.IsConst)
                 {
-                    var nativeTypePrinter = new CppTypePrinter(Context.Driver.TypeDatabase, false);
+                    var nativeTypePrinter = new CppTypePrinter(false);
                     var returnType = Context.ReturnType.Type.Desugar();
                     var constlessPointer = new PointerType()
                     {
@@ -137,7 +137,7 @@ namespace CppSharp.Generators.CLI
                         Modifier = pointer.Modifier,
                         QualifiedPointee = new QualifiedType(pointee)
                     };
-                    var nativeTypePrinter = new CppTypePrinter(Context.Driver.TypeDatabase);
+                    var nativeTypePrinter = new CppTypePrinter();
                     var nativeTypeName = desugaredPointer.Visit(nativeTypePrinter, quals);
                     Context.Return.Write("reinterpret_cast<{0}>({1})", nativeTypeName,
                         returnVarName);
@@ -516,7 +516,7 @@ namespace CppSharp.Generators.CLI
             {
                 var function = pointee as FunctionType;
 
-                var cppTypePrinter = new CppTypePrinter(Context.Driver.TypeDatabase);
+                var cppTypePrinter = new CppTypePrinter();
                 var cppTypeName = pointer.Visit(cppTypePrinter, quals);
 
                 return VisitDelegateType(function, cppTypeName);
@@ -545,7 +545,7 @@ namespace CppSharp.Generators.CLI
             var finalPointee = pointer.GetFinalPointee();
             if (finalPointee.IsPrimitiveType())
             {
-                var cppTypePrinter = new CppTypePrinter(Context.Driver.TypeDatabase);
+                var cppTypePrinter = new CppTypePrinter();
                 var cppTypeName = pointer.Visit(cppTypePrinter, quals);
 
                 Context.Return.Write("({0})", cppTypeName);
@@ -613,7 +613,7 @@ namespace CppSharp.Generators.CLI
                     cppTypeName = "::" + typedef.Declaration.QualifiedOriginalName;
                 else
                 {
-                    var cppTypePrinter = new CppTypePrinter(Context.Driver.TypeDatabase);
+                    var cppTypePrinter = new CppTypePrinter();
                     cppTypeName = decl.Type.Visit(cppTypePrinter, quals);
                 }
 
diff --git a/src/Generator/Generators/CLI/CLISourcesTemplate.cs b/src/Generator/Generators/CLI/CLISourcesTemplate.cs
index e4529b1b..0f52c032 100644
--- a/src/Generator/Generators/CLI/CLISourcesTemplate.cs
+++ b/src/Generator/Generators/CLI/CLISourcesTemplate.cs
@@ -547,7 +547,7 @@ namespace CppSharp.Generators.CLI
             WriteLine("if (!{0}Instance)", delegateName);
             WriteStartBraceIndent();
 
-            var typePrinter = new CppTypePrinter(Driver.TypeDatabase);
+            var typePrinter = new CppTypePrinter();
             var args = typePrinter.VisitParameters(@event.Parameters, hasNames: false);
 
             WriteLine("{0}Instance = gcnew {0}(this, &{1}::_{2}Raise);",
@@ -597,7 +597,7 @@ namespace CppSharp.Generators.CLI
 
         private void GenerateEventRaiseWrapper(Event @event, Class @class)
         {
-            var typePrinter = new CppTypePrinter(Driver.TypeDatabase);
+            var typePrinter = new CppTypePrinter();
             var args = typePrinter.VisitParameters(@event.Parameters, hasNames: true);
 
             WriteLine("void {0}::_{1}Raise({2})", QualifiedIdentifier(@class),
@@ -735,7 +735,7 @@ namespace CppSharp.Generators.CLI
 
                 // We cast the value to the base clas type since otherwise there
                 // could be ambiguous call to overloaded constructors.
-                var cppTypePrinter = new CppTypePrinter(Driver.TypeDatabase);
+                var cppTypePrinter = new CppTypePrinter();
                 var nativeTypeName = baseClass.Visit(cppTypePrinter);
                 Write("({0}*)", nativeTypeName);
 
@@ -985,7 +985,7 @@ namespace CppSharp.Generators.CLI
                 function.OperatorKind == CXXOperatorKind.ExplicitConversion)
             {
                 var method = function as Method;
-                var typePrinter = new CppTypePrinter(Driver.TypeDatabase);
+                var typePrinter = new CppTypePrinter();
                 var typeName = method.ConversionType.Visit(typePrinter);
                 WriteLine("({0}) {1};", typeName, @params[0].Name);
             }
@@ -1196,7 +1196,7 @@ namespace CppSharp.Generators.CLI
 
             if (isRef)
             {
-                var typePrinter = new CppTypePrinter(Driver.TypeDatabase);
+                var typePrinter = new CppTypePrinter();
                 var type = paramType.Visit(typePrinter);
 
                 if (param.IsInOut)
diff --git a/src/Generator/Passes/CheckIgnoredDecls.cs b/src/Generator/Passes/CheckIgnoredDecls.cs
index b4febadc..25e76cdb 100644
--- a/src/Generator/Passes/CheckIgnoredDecls.cs
+++ b/src/Generator/Passes/CheckIgnoredDecls.cs
@@ -72,7 +72,7 @@ namespace CppSharp.Passes
 
             var @class = (Class)field.Namespace;
 
-            var cppTypePrinter = new CppTypePrinter(Driver.TypeDatabase);
+            var cppTypePrinter = new CppTypePrinter();
             var typeName = type.Visit(cppTypePrinter);
 
             Log.Debug("Field '{0}::{1}' was ignored due to {2} type '{3}'",
diff --git a/src/Generator/Types/CppTypePrinter.cs b/src/Generator/Types/CppTypePrinter.cs
index 6e76f44b..5ed368b2 100644
--- a/src/Generator/Types/CppTypePrinter.cs
+++ b/src/Generator/Types/CppTypePrinter.cs
@@ -19,7 +19,7 @@ namespace CppSharp.Types
         public bool PrintLogicalNames;
         public bool PrintTypeQualifiers;
 
-        public CppTypePrinter(ITypeMapDatabase database, bool printTypeQualifiers = true)
+        public CppTypePrinter(bool printTypeQualifiers = true)
         {
             PrintScopeKind = CppTypePrintScopeKind.GlobalQualified;
             PrintTypeQualifiers = printTypeQualifiers;
diff --git a/src/Generator/Types/Std/Stdlib.cs b/src/Generator/Types/Std/Stdlib.cs
index 1d6728af..b594142c 100644
--- a/src/Generator/Types/Std/Stdlib.cs
+++ b/src/Generator/Types/Std/Stdlib.cs
@@ -135,7 +135,7 @@ namespace CppSharp.Types.Std
 
             var tmpVarName = "_tmp" + entryString;
 
-            var cppTypePrinter = new CppTypePrinter(ctx.Driver.TypeDatabase);
+            var cppTypePrinter = new CppTypePrinter();
             var nativeType = type.Type.Visit(cppTypePrinter);
 
             ctx.SupportBefore.WriteLine("auto {0} = std::vector<{1}>();",
diff --git a/src/Generator/Types/TypeMap.cs b/src/Generator/Types/TypeMap.cs
index c3576dec..a6965782 100644
--- a/src/Generator/Types/TypeMap.cs
+++ b/src/Generator/Types/TypeMap.cs
@@ -165,8 +165,8 @@ namespace CppSharp.Types
             // We try to find type maps from the most qualified to less qualified
             // types. Example: '::std::vector', 'std::vector' and 'vector'
 
-            var typePrinter = new CppTypePrinter(this)
-                {
+            var typePrinter = new CppTypePrinter()
+            {
                     PrintScopeKind = CppTypePrintScopeKind.GlobalQualified,
                     PrintLogicalNames = true
                 };
@@ -196,7 +196,7 @@ namespace CppSharp.Types
 
         public bool FindTypeMap(Type type, out TypeMap typeMap)
         {
-            var typePrinter = new CppTypePrinter(this);
+            var typePrinter = new CppTypePrinter();
 
             var template = type as TemplateSpecializationType;
             if (template != null)