diff --git a/src/Core/Silk.NET.BuildTools/Common/TypeMapper.cs b/src/Core/Silk.NET.BuildTools/Common/TypeMapper.cs
index 37c4af1d2..8f9b1ae89 100644
--- a/src/Core/Silk.NET.BuildTools/Common/TypeMapper.cs
+++ b/src/Core/Silk.NET.BuildTools/Common/TypeMapper.cs
@@ -25,6 +25,7 @@ namespace Silk.NET.BuildTools.Common
         {
             foreach (var function in functions)
             {
+                Console.WriteLine($"$$$$$ {function}");
                 Map(map, function, mapNative);
             }
         }
@@ -57,6 +58,7 @@ namespace Silk.NET.BuildTools.Common
             var type = og;
             if (map.TryGetValue(type.ToString(), out var mapped))
             {
+                Console.WriteLine($"CCCCCC {type.Name} : {mapped}");
                 type = ParseTypeSignature
                 (
                     mapped, type.OriginalName, type.OriginalGroup
@@ -64,10 +66,12 @@ namespace Silk.NET.BuildTools.Common
             }
             else if (map.TryGetValue(type.Name, out mapped))
             {
+                Console.WriteLine($"DDDDDD {type.Name} : {mapped}");
                 type.Name = mapped;
             }
             else if (mapNative && ogN != null && map.TryGetValue(ogN, out mapped)) 
             {
+                Console.WriteLine($"EEEEEE {type.Name} : {mapped}");
                 type.Name = mapped;
             }
 
@@ -167,6 +171,7 @@ namespace Silk.NET.BuildTools.Common
 
             foreach (var parameter in function.Parameters)
             {
+                Console.WriteLine($"BBBBBB {parameter.Type.Name} : {parameter.Type.OriginalName}");
                 parameter.Type = MapOne(map, parameter.Type, mapNative, parameter.Type.OriginalName);
             }
         }
@@ -291,6 +296,7 @@ namespace Silk.NET.BuildTools.Common
                 typeName = typeName.Remove(firstArrayIndex);
             }
 
+            Console.WriteLine($"WAAAAA {original} : {typeName}");
             return new Type
             {
                 Name = typeName,
diff --git a/src/Core/Silk.NET.BuildTools/Cpp/Clang.cs b/src/Core/Silk.NET.BuildTools/Cpp/Clang.cs
index d49fb1c77..6ef279a42 100644
--- a/src/Core/Silk.NET.BuildTools/Cpp/Clang.cs
+++ b/src/Core/Silk.NET.BuildTools/Cpp/Clang.cs
@@ -258,6 +258,7 @@ namespace Silk.NET.BuildTools.Cpp
             
             foreach (var map in task.TypeMaps)
             {
+                Console.WriteLine($"&&&&&& {map}");
                 TypeMapper.Map(map, project.Structs, mapNative);
                 TypeMapper.Map(map, @class.NativeApis[fileName].Functions, mapNative);
                 TypeMapper.Map(map, @class.Constants, mapNative);
@@ -280,7 +281,8 @@ namespace Silk.NET.BuildTools.Cpp
                 {
                     var ret = new Type
                     {
-                        Name = val.Name, OriginalName = "Pfn" + name,
+                        Name = val.Name, 
+                        OriginalName = "Pfn" + name,
                         FunctionPointerSignature = type.FunctionPointerSignature
                     };
                     ret.ForceNegativeIndirection(-1);
@@ -337,7 +339,8 @@ namespace Silk.NET.BuildTools.Cpp
 
                     var ret = new Type
                     {
-                        Name = s.Name, OriginalName = s.NativeName,
+                        Name = s.Name, 
+                        OriginalName = s.NativeName,
                         FunctionPointerSignature = type.FunctionPointerSignature
                     };
 
@@ -534,6 +537,7 @@ namespace Silk.NET.BuildTools.Cpp
 
             void VisitTypedefDecl(TypedefDecl tdDecl)
             {
+                Console.WriteLine($"((((( {tdDecl.Name} : {tdDecl.UnderlyingType}");
                 bool isPlain = false;
                 VisitTypedefDeclUnderlyingType(tdDecl.UnderlyingType, ref isPlain, out var anonName, out var decl);
                 if (decl is null || !string.IsNullOrWhiteSpace(((TagDecl) decl).Name))
@@ -626,8 +630,11 @@ namespace Silk.NET.BuildTools.Cpp
                 }
                 else if (type is ElaboratedType elaboratedType)
                 {
+                    Console.WriteLine($"%%%%%% {elaboratedType.NamedType} : {elaboratedType.PointeeType} : {elaboratedType.CanonicalType}");
+                    if(elaboratedType.NamedType.ToString() == "shaderc_compiler") 
+                        ;
                     VisitTypedefDeclUnderlyingType
-                        (elaboratedType.NamedType, ref isPlain, out anonymousName, out decl);
+                        (elaboratedType.CanonicalType, ref isPlain, out anonymousName, out decl);
                 }
                 else if (type is FunctionType functionType)
                 {
@@ -665,6 +672,7 @@ namespace Silk.NET.BuildTools.Cpp
                 }
                 else if (type is TypedefType typedefType)
                 {
+                    Console.WriteLine($"WAAAAA {typedefType.Decl.Name}");
                     // return...
                 }
             }
@@ -693,6 +701,8 @@ namespace Silk.NET.BuildTools.Cpp
                 }
                 else if (type is AttributedType attributedType)
                 {
+                    Console.WriteLine($"FOUND ATTRIBUTED TYPE {attributedType.ModifiedType}");
+
                     ret = GetType(attributedType.ModifiedType, out _, ref flow, out _);
                 }
                 else if (type is BuiltinType)
@@ -799,20 +809,40 @@ namespace Silk.NET.BuildTools.Cpp
                 }
                 else if (type is ElaboratedType elaboratedType)
                 {
-                    if (elaboratedType.NamedType.Handle.Declaration.IsAnonymous)
+                    Console.WriteLine($"FOUND ELABORATED TYPE {elaboratedType.NamedType} {elaboratedType.CanonicalType}");
+
+                    if (elaboratedType.CanonicalType.Handle.Declaration.IsAnonymous)
                     {
                         ret = new Type
                         {
                             Name = GetAnonymousName2
                             (
-                                elaboratedType.NamedType.Handle.Declaration,
-                                elaboratedType.NamedType.Handle.kind.ToString().Substring("CXType_".Length)
+                                elaboratedType.CanonicalType.Handle.Declaration,
+                                elaboratedType.CanonicalType.Handle.kind.ToString().Substring("CXType_".Length)
                             )
                         };
                     }
                     else
                     {
-                        ret = new Type { Name = elaboratedType.NamedType.AsString };
+                        if(elaboratedType.CanonicalType.IsPointerType) {
+                            // ret = new Type {
+                                // Name = elaboratedType.CanonicalType.PointeeType.AsString,
+                            // };
+                            // ret.IndirectionLevels++;
+
+                            var pointerType = elaboratedType.CanonicalType;
+                            if (pointerType.Handle.IsConstQualified || (pointerType.PointeeType.Handle.IsConstQualified && !pointerType.PointeeType.IsPointerType))
+                            {
+                                flow = FlowDirection.In;
+                            }
+
+                            ret = GetType(pointerType.PointeeType, out _, ref flow, out _);
+                            ret.IndirectionLevels++;
+                        } else 
+                            ret = new Type { 
+                                Name = elaboratedType.CanonicalType.AsString,
+                            };
+
                     }
                 }
                 else if (type is FunctionType functionType)
@@ -884,6 +914,7 @@ namespace Silk.NET.BuildTools.Cpp
                 }
                 else if (type is TypedefType typedefType)
                 {
+                    Console.WriteLine($"FOUND TYPEDEF {typedefType.Decl.Name}");
                     // We check remapped names here so that types that have variable sizes
                     // can be treated correctly. Otherwise, they will resolve to a particular
                     // platform size, based on whatever parameters were passed into clang.
@@ -931,7 +962,8 @@ namespace Silk.NET.BuildTools.Cpp
                     Console.WriteLine("To yield a successful mapping despite this, use this type via a typedef.");
                 }
 
-                ret.OriginalName = type.AsString.Replace("\\", "\\\\");
+                ret.OriginalName = ret.Name.Replace("\\", "\\\\");
+                // ret.OriginalName = type.AsString.Replace("\\", "\\\\");
                 return ret;
             }
 
@@ -1011,7 +1043,10 @@ namespace Silk.NET.BuildTools.Cpp
                                 Name = Naming.TranslateLite
                                     (Naming.TrimName(name, task), task.FunctionPrefix),
                                 NativeName = $"anonymous{nestedRecordFieldCount}",
-                                Type = new Type { Name = nestedName, OriginalName = nestedName },
+                                Type = new Type { 
+                                    Name = nestedName, 
+                                    OriginalName = nestedName 
+                                },
                                 NativeType = nestedRecordDecl.Spelling.Replace("\\", "\\\\"),
                                 Attributes = recordDecl.IsUnion
                                     ? new List<Attribute>
diff --git a/src/Core/Silk.NET.BuildTools/Program.cs b/src/Core/Silk.NET.BuildTools/Program.cs
index add9995da..c62472564 100644
--- a/src/Core/Silk.NET.BuildTools/Program.cs
+++ b/src/Core/Silk.NET.BuildTools/Program.cs
@@ -20,6 +20,8 @@ namespace Silk.NET.BuildTools
     {
         public static int Main(string[] args)
         {
+            args = new[] { "C:\\Users\\Administrator\\Silk.NET\\generator.json", "--profile=shaderc", "--no-parallel" };
+
             Console.WriteLine("Silk.NET Build Tools");
             Console.WriteLine("Copyright (C) .NET Foundation and Contributors");
             Console.WriteLine();
diff --git a/src/Core/Silk.NET.BuildTools/Silk.NET.BuildTools.csproj b/src/Core/Silk.NET.BuildTools/Silk.NET.BuildTools.csproj
index c95ff6368..e394b843f 100644
--- a/src/Core/Silk.NET.BuildTools/Silk.NET.BuildTools.csproj
+++ b/src/Core/Silk.NET.BuildTools/Silk.NET.BuildTools.csproj
@@ -21,7 +21,7 @@
       <PackageReference Include="Microsoft.VisualStudio.Setup.Configuration.Interop" Version="3.7.2175" />
       <PackageReference Include="morelinq" Version="3.4.2" />
       <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
-      <PackageReference Include="ClangSharp" Version="15.0.2" />
+      <PackageReference Include="ClangSharp" Version="16.0.0" />
     </ItemGroup>
 
     <ItemGroup>
