diff --git a/docs/Reactor.md b/docs/Reactor.md
index 682052f..7085cc8 100644
--- a/docs/Reactor.md
+++ b/docs/Reactor.md
@@ -61,7 +61,7 @@
 The Routine is obtained and materialized by "calling" the ```Function<>``` object to give it a name:
 
 ```C++
-Routine *routine = function(L"one");
+Routine *routine = function("one");
 ```
 
 Finally, we can obtain the function pointer to the entry point of the routine, and call it:
diff --git a/src/Device/Blitter.cpp b/src/Device/Blitter.cpp
index d8ee246..a082020 100644
--- a/src/Device/Blitter.cpp
+++ b/src/Device/Blitter.cpp
@@ -1625,7 +1625,7 @@
 			}
 		}
 
-		return function(L"BlitRoutine");
+		return function("BlitRoutine");
 	}
 
 	bool Blitter::blitReactor(Surface *source, const SliceRectF &sourceRect, Surface *dest, const SliceRect &destRect, const Blitter::Options &options)
diff --git a/src/Device/PixelProcessor.cpp b/src/Device/PixelProcessor.cpp
index 683eda2..b606a78 100644
--- a/src/Device/PixelProcessor.cpp
+++ b/src/Device/PixelProcessor.cpp
@@ -774,7 +774,7 @@
 			const bool integerPipeline = (context->pixelShaderModel() <= 0x0104);
 			QuadRasterizer *generator = new PixelProgram(state, context->pixelShader);
 			generator->generate();
-			routine = (*generator)(L"PixelRoutine_%0.8X", state.shaderID);
+			routine = (*generator)("PixelRoutine_%0.8X", state.shaderID);
 			delete generator;
 
 			routineCache->add(state, routine);
diff --git a/src/Device/VertexProcessor.cpp b/src/Device/VertexProcessor.cpp
index 7f7d265..c6cc68a 100644
--- a/src/Device/VertexProcessor.cpp
+++ b/src/Device/VertexProcessor.cpp
@@ -447,7 +447,7 @@
 		{
 			VertexRoutine *generator = new VertexProgram(state, context->vertexShader);
 			generator->generate();
-			routine = (*generator)(L"VertexRoutine_%0.8X", state.shaderID);
+			routine = (*generator)("VertexRoutine_%0.8X", state.shaderID);
 			delete generator;
 
 			routineCache->add(state, routine);
diff --git a/src/Main/FrameBuffer.cpp b/src/Main/FrameBuffer.cpp
index 7a8ddc1..7d2e6a0 100644
--- a/src/Main/FrameBuffer.cpp
+++ b/src/Main/FrameBuffer.cpp
@@ -531,7 +531,7 @@
 			}
 		}
 
-		return function(L"FrameBuffer");
+		return function("FrameBuffer");
 	}
 
 	void FrameBuffer::blend(const BlitState &state, const Pointer<Byte> &d, const Pointer<Byte> &s, const Pointer<Byte> &c)
diff --git a/src/Pipeline/SetupRoutine.cpp b/src/Pipeline/SetupRoutine.cpp
index b5b31cd..d3fd5c3 100644
--- a/src/Pipeline/SetupRoutine.cpp
+++ b/src/Pipeline/SetupRoutine.cpp
@@ -469,7 +469,7 @@
 			Return(true);
 		}
 
-		routine = function(L"SetupRoutine");
+		routine = function("SetupRoutine");
 	}
 
 	void SetupRoutine::setupGradient(Pointer<Byte> &primitive, Pointer<Byte> &triangle, Float4 &w012, Float4 (&m)[3], Pointer<Byte> &v0, Pointer<Byte> &v1, Pointer<Byte> &v2, int attribute, int planeEquation, bool flat, bool sprite, bool perspective, bool wrap, int component)
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index c760081..8b4dcc0 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -95,15 +95,6 @@
 }
 #endif
 
-#if defined(_WIN32)
-extern "C"
-{
-	bool (*CodeAnalystInitialize)() = 0;
-	void (*CodeAnalystCompleteJITLog)() = 0;
-	bool (*CodeAnalystLogJITCode)(const void *jitCodeStartAddr, unsigned int jitCodeSize, const wchar_t *functionName) = 0;
-}
-#endif
-
 #if REACTOR_LLVM_VERSION < 7
 namespace llvm
 {
@@ -887,18 +878,6 @@
 		if(!::builder)
 		{
 			::builder = new llvm::IRBuilder<>(*::context);
-
-			#if defined(_WIN32) && REACTOR_LLVM_VERSION < 7
-				HMODULE CodeAnalyst = LoadLibrary("CAJitNtfyLib.dll");
-				if(CodeAnalyst)
-				{
-					CodeAnalystInitialize = (bool(*)())GetProcAddress(CodeAnalyst, "CAJIT_Initialize");
-					CodeAnalystCompleteJITLog = (void(*)())GetProcAddress(CodeAnalyst, "CAJIT_CompleteJITLog");
-					CodeAnalystLogJITCode = (bool(*)(const void*, unsigned int, const wchar_t*))GetProcAddress(CodeAnalyst, "CAJIT_LogJITCode");
-
-					CodeAnalystInitialize();
-				}
-			#endif
 		}
 	}
 
@@ -909,7 +888,7 @@
 		::codegenMutex.unlock();
 	}
 
-	Routine *Nucleus::acquireRoutine(const wchar_t *name, bool runOptimizations)
+	Routine *Nucleus::acquireRoutine(const char *name, bool runOptimizations)
 	{
 		if(::builder->GetInsertBlock()->empty() || !::builder->GetInsertBlock()->back().isTerminator())
 		{
@@ -954,13 +933,6 @@
 
 		LLVMRoutine *routine = ::reactorJIT->acquireRoutine(::function);
 
-#if defined(_WIN32) && REACTOR_LLVM_VERSION < 7
-		if(CodeAnalystLogJITCode)
-		{
-			CodeAnalystLogJITCode(routine->getEntry(), routine->getCodeSize(), name);
-		}
-#endif
-
 		return routine;
 	}
 
diff --git a/src/Reactor/Nucleus.hpp b/src/Reactor/Nucleus.hpp
index 7f63b96..ef695c5 100644
--- a/src/Reactor/Nucleus.hpp
+++ b/src/Reactor/Nucleus.hpp
@@ -53,7 +53,7 @@
 
 		virtual ~Nucleus();
 
-		Routine *acquireRoutine(const wchar_t *name, bool runOptimizations = true);
+		Routine *acquireRoutine(const char *name, bool runOptimizations = true);
 
 		static Value *allocateStackVariable(Type *type, int arraySize = 0);
 		static BasicBlock *createBasicBlock();
diff --git a/src/Reactor/Reactor.hpp b/src/Reactor/Reactor.hpp
index fe4cf1d..db4d5f8 100644
--- a/src/Reactor/Reactor.hpp
+++ b/src/Reactor/Reactor.hpp
@@ -20,7 +20,7 @@
 
 #include <cassert>
 #include <cstddef>
-#include <cwchar>
+#include <cstdio>
 #undef Bool
 
 namespace rr
@@ -2257,7 +2257,7 @@
 			return Argument<typename ArgI<index, Arguments...>::Type>(arg);
 		}
 
-		Routine *operator()(const wchar_t *name, ...);
+		Routine *operator()(const char *name, ...);
 
 	protected:
 		Nucleus *core;
@@ -2757,13 +2757,13 @@
 	}
 
 	template<typename Return, typename... Arguments>
-	Routine *Function<Return(Arguments...)>::operator()(const wchar_t *name, ...)
+	Routine *Function<Return(Arguments...)>::operator()(const char *name, ...)
 	{
-		wchar_t fullName[1024 + 1];
+		char fullName[1024 + 1];
 
 		va_list vararg;
 		va_start(vararg, name);
-		vswprintf(fullName, 1024, name, vararg);
+		vsnprintf(fullName, 1024, name, vararg);
 		va_end(vararg);
 
 		return core->acquireRoutine(fullName, true);
diff --git a/src/Reactor/ReactorUnitTests.cpp b/src/Reactor/ReactorUnitTests.cpp
index f6484f4..7cbde5d 100644
--- a/src/Reactor/ReactorUnitTests.cpp
+++ b/src/Reactor/ReactorUnitTests.cpp
@@ -59,7 +59,7 @@
 			Return(sum);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -97,7 +97,7 @@
 			Return(a + z + q + c);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -129,7 +129,7 @@
 			Return(0);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -187,7 +187,7 @@
 			Return(0);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -234,7 +234,7 @@
 			Return(0);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -303,7 +303,7 @@
 			Return(0);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -440,7 +440,7 @@
 			Return(x);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -479,7 +479,7 @@
 			Return(0);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -569,7 +569,7 @@
 			Return(0);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -650,7 +650,7 @@
 			Return(0);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -747,7 +747,7 @@
 			Return(0);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -826,7 +826,7 @@
 			Return(0);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -880,7 +880,7 @@
 			Return(0);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -934,7 +934,7 @@
 			Return(0);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
@@ -973,7 +973,7 @@
 			Return(0);
 		}
 
-		routine = function(L"one");
+		routine = function("one");
 
 		if(routine)
 		{
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp
index 083576e..7048640 100644
--- a/src/Reactor/SubzeroReactor.cpp
+++ b/src/Reactor/SubzeroReactor.cpp
@@ -578,16 +578,14 @@
 		::codegenMutex.unlock();
 	}
 
-	Routine *Nucleus::acquireRoutine(const wchar_t *name, bool runOptimizations)
+	Routine *Nucleus::acquireRoutine(const char *name, bool runOptimizations)
 	{
 		if(basicBlock->getInsts().empty() || basicBlock->getInsts().back().getKind() != Ice::Inst::Ret)
 		{
 			createRetVoid();
 		}
 
-		std::wstring wideName(name);
-		std::string asciiName(wideName.begin(), wideName.end());
-		::function->setFunctionName(Ice::GlobalString::createWithString(::context, asciiName));
+		::function->setFunctionName(Ice::GlobalString::createWithString(::context, name));
 
 		optimize();
 
diff --git a/src/Renderer/Blitter.cpp b/src/Renderer/Blitter.cpp
index f8ce48c..8f88d9d 100644
--- a/src/Renderer/Blitter.cpp
+++ b/src/Renderer/Blitter.cpp
@@ -1385,7 +1385,7 @@
 			}
 		}
 
-		return function(L"BlitRoutine");
+		return function("BlitRoutine");
 	}
 
 	bool Blitter::blitReactor(Surface *source, const SliceRectF &sourceRect, Surface *dest, const SliceRect &destRect, const Blitter::Options &options)
diff --git a/src/Renderer/PixelProcessor.cpp b/src/Renderer/PixelProcessor.cpp
index a1cafde..1a158a7 100644
--- a/src/Renderer/PixelProcessor.cpp
+++ b/src/Renderer/PixelProcessor.cpp
@@ -1201,7 +1201,7 @@
 			}
 
 			generator->generate();
-			routine = (*generator)(L"PixelRoutine_%0.8X", state.shaderID);
+			routine = (*generator)("PixelRoutine_%0.8X", state.shaderID);
 			delete generator;
 
 			routineCache->add(state, routine);
diff --git a/src/Renderer/VertexProcessor.cpp b/src/Renderer/VertexProcessor.cpp
index 976ea2b..50c5a32 100644
--- a/src/Renderer/VertexProcessor.cpp
+++ b/src/Renderer/VertexProcessor.cpp
@@ -1107,7 +1107,7 @@
 			}
 
 			generator->generate();
-			routine = (*generator)(L"VertexRoutine_%0.8X", state.shaderID);
+			routine = (*generator)("VertexRoutine_%0.8X", state.shaderID);
 			delete generator;
 
 			routineCache->add(state, routine);
diff --git a/src/Shader/SetupRoutine.cpp b/src/Shader/SetupRoutine.cpp
index d733c2d..e5bd7fd 100644
--- a/src/Shader/SetupRoutine.cpp
+++ b/src/Shader/SetupRoutine.cpp
@@ -476,7 +476,7 @@
 			Return(true);
 		}
 
-		routine = function(L"SetupRoutine");
+		routine = function("SetupRoutine");
 	}
 
 	void SetupRoutine::setupGradient(Pointer<Byte> &primitive, Pointer<Byte> &triangle, Float4 &w012, Float4 (&m)[3], Pointer<Byte> &v0, Pointer<Byte> &v1, Pointer<Byte> &v2, int attribute, int planeEquation, bool flat, bool sprite, bool perspective, bool wrap, int component)
diff --git a/src/WSI/FrameBuffer.cpp b/src/WSI/FrameBuffer.cpp
index 4b408c1..04ab0fa 100644
--- a/src/WSI/FrameBuffer.cpp
+++ b/src/WSI/FrameBuffer.cpp
@@ -476,7 +476,7 @@
 			}
 		}
 
-		return function(L"FrameBuffer");
+		return function("FrameBuffer");
 	}
 
 	void FrameBuffer::blend(const BlitState &state, const Pointer<Byte> &d, const Pointer<Byte> &s, const Pointer<Byte> &c)
diff --git a/tests/fuzzers/VertexRoutineFuzzer.cpp b/tests/fuzzers/VertexRoutineFuzzer.cpp
index 8f005dc..dd82b65 100644
--- a/tests/fuzzers/VertexRoutineFuzzer.cpp
+++ b/tests/fuzzers/VertexRoutineFuzzer.cpp
@@ -203,7 +203,7 @@
 	sw::VertexProgram program(state, bytecodeShader.get());
 	program.generate();
 
-	sw::Routine *routine = program(L"VertexRoutine");
+	sw::Routine *routine = program("VertexRoutine");
 	assert(routine);
 	const void *entry = routine->getEntry();
 	assert(entry); (void)entry;
