diff --git a/c/meterpreter/source/extensions/stdapi/server/sys/config/config.c b/c/meterpreter/source/extensions/stdapi/server/sys/config/config.c
index 04a84ad2..aefe26fb 100755
--- a/c/meterpreter/source/extensions/stdapi/server/sys/config/config.c
+++ b/c/meterpreter/source/extensions/stdapi/server/sys/config/config.c
@@ -3,6 +3,9 @@
 #ifdef _WIN32
 #include <Sddl.h>
 #include <Lm.h>
+
+typedef NTSTATUS(WINAPI *PRtlGetVersion)(LPOSVERSIONINFOEXW);
+
 #else
 #include <sys/utsname.h>
 #endif
@@ -437,6 +440,135 @@ DWORD request_sys_config_steal_token(Remote *remote, Packet *packet)
 	return dwResult;
 }
 
+#ifdef _WIN32
+DWORD add_windows_os_version(Packet** packet)
+{
+	DWORD dwResult = ERROR_SUCCESS;
+	CHAR buffer[512] = { 0 };
+
+	do
+	{
+		HMODULE hNtdll = GetModuleHandleA("ntdll");
+		if (hNtdll == NULL)
+		{
+			BREAK_ON_ERROR("[SYSINFO] Failed to load ntoskrnl");
+		}
+
+		PRtlGetVersion pRtlGetVersion = (PRtlGetVersion)GetProcAddress(hNtdll, "RtlGetVersion");
+		if (pRtlGetVersion == NULL)
+		{
+			BREAK_ON_ERROR("[SYSINFO] Couldn't find RtlGetVersion in ntoskrnl");
+		}
+
+		OSVERSIONINFOEXW v = { 0 };
+		v.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEXW);
+
+		if (0 != pRtlGetVersion(&v))
+		{
+			dwResult = ERROR_INVALID_DLL;
+			dprintf("[SYSINFO] Unable to get OS version with RtlGetVersion");
+			break;
+		}
+
+		dprintf("[VERSION] Major   : %u", v.dwMajorVersion);
+		dprintf("[VERSION] Minor   : %u", v.dwMinorVersion);
+		dprintf("[VERSION] Build   : %u", v.dwBuildNumber);
+		dprintf("[VERSION] Maint   : %S", v.szCSDVersion);
+		dprintf("[VERSION] Platform: %u", v.dwPlatformId);
+		dprintf("[VERSION] Type    : %hu", v.wProductType);
+		dprintf("[VERSION] SP Major: %hu", v.wServicePackMajor);
+		dprintf("[VERSION] SP Minor: %hu", v.wServicePackMinor);
+		dprintf("[VERSION] Suite   : %hu", v.wSuiteMask);
+
+		CHAR* osName = NULL;
+
+		if (v.dwMajorVersion == 3)
+		{
+			osName = "Windows NT 3.51";
+		}
+		else if (v.dwMajorVersion == 4)
+		{
+			if (v.dwMinorVersion == 0 && v.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
+			{
+				osName = "Windows 95";
+			}
+			else if (v.dwMinorVersion == 10)
+			{
+				osName = "Windows 98";
+			}
+			else if (v.dwMinorVersion == 90)
+			{
+				osName = "Windows ME";
+			}
+			else if (v.dwMinorVersion == 0 && v.dwPlatformId == VER_PLATFORM_WIN32_NT)
+			{
+				osName = "Windows NT 4.0";
+			}
+		}
+		else if (v.dwMajorVersion == 5)
+		{
+			if (v.dwMinorVersion == 0)
+			{
+				osName = "Windows 2000";
+			}
+			else if (v.dwMinorVersion == 1)
+			{
+				osName = "Windows XP";
+			}
+			else if (v.dwMinorVersion == 2)
+			{
+				osName = "Windows .NET Server";
+			}
+		}
+		else if (v.dwMajorVersion == 6)
+		{
+			if (v.dwMinorVersion == 0)
+			{
+				osName = v.wProductType == VER_NT_WORKSTATION ? "Windows Vista" : "Windows 2008";
+			}
+			else if (v.dwMinorVersion == 1)
+			{
+				osName = v.wProductType == VER_NT_WORKSTATION ? "Windows 7" : "Windows 2008 R2";
+			}
+			else if (v.dwMinorVersion == 2)
+			{
+				osName = v.wProductType == VER_NT_WORKSTATION ? "Windows 8" : "Windows 2012";
+			}
+			else if (v.dwMinorVersion == 3)
+			{
+				osName = v.wProductType == VER_NT_WORKSTATION ? "Windows 8.1" : "Windows 2012 R2";
+			}
+		}
+		else if (v.dwMajorVersion == 10)
+		{
+			if (v.dwMinorVersion == 0)
+			{
+				osName = v.wProductType == VER_NT_WORKSTATION ? "Windows 10" : "Windows 2016 Tech Preview";
+			}
+		}
+
+		if (!osName)
+		{
+			osName = "Unknown";
+		}
+
+		if (wcslen(v.szCSDVersion) > 0)
+		{
+			_snprintf(buffer, sizeof(buffer)-1, "%s (Build %lu, %S).", osName, v.dwBuildNumber, v.szCSDVersion);
+		}
+		else
+		{
+			_snprintf(buffer, sizeof(buffer)-1, "%s (Build %lu).", osName, v.dwBuildNumber);
+		}
+
+		dprintf("[VERSION] Version set to: %s", buffer);
+		packet_add_tlv_string(*packet, TLV_TYPE_OS_NAME, buffer);
+	} while (0);
+
+	return dwResult;
+}
+#endif
+
 /*
  * sys_sysinfo
  * ----------
@@ -447,18 +579,14 @@ DWORD request_sys_config_sysinfo(Remote *remote, Packet *packet)
 {
 	Packet *response = packet_create_response(packet);
 #ifdef _WIN32
-	CHAR computer[512], buf[512], *osName = NULL, * osArch = NULL, * osWow = NULL;
+	CHAR computer[512], buf[512], * osArch = NULL, * osWow = NULL;
 	DWORD res = ERROR_SUCCESS;
 	DWORD size = sizeof(computer);
-	OSVERSIONINFOEX v;
 	HMODULE hKernel32;
 
-	memset(&v, 0, sizeof(v));
 	memset(computer, 0, sizeof(computer));
 	memset(buf, 0, sizeof(buf));
 
-	v.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
-
 	do
 	{
 		// Get the computer name
@@ -469,113 +597,33 @@ DWORD request_sys_config_sysinfo(Remote *remote, Packet *packet)
 		}
 
 		packet_add_tlv_string(response, TLV_TYPE_COMPUTER_NAME, computer);
-
-		// Get the operating system version information
-		if (!GetVersionEx((LPOSVERSIONINFO)&v))
-		{
-			res = GetLastError();
-			break;
-		}
-
-		if (v.dwMajorVersion == 3)
-			osName = "Windows NT 3.51";
-		else if (v.dwMajorVersion == 4)
-		{
-			if (v.dwMinorVersion == 0 && v.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
-				osName = "Windows 95";
-			else if (v.dwMinorVersion == 10)
-				osName = "Windows 98";
-			else if (v.dwMinorVersion == 90)
-				osName = "Windows ME";
-			else if (v.dwMinorVersion == 0 && v.dwPlatformId == VER_PLATFORM_WIN32_NT)
-				osName = "Windows NT 4.0";
-		}
-		else if (v.dwMajorVersion == 5)
-		{
-			if (v.dwMinorVersion == 0)
-				osName = "Windows 2000";
-			else if (v.dwMinorVersion == 1)
-				osName = "Windows XP";
-			else if (v.dwMinorVersion == 2)
-				osName = "Windows .NET Server";
-		}
-		else if (v.dwMajorVersion == 6)
-		{
-			if (v.dwMinorVersion == 0)
-			{
-				if (v.wProductType == VER_NT_WORKSTATION)
-					osName = "Windows Vista";
-				else
-					osName = "Windows 2008";
-			}
-			else if (v.dwMinorVersion == 1)
-			{
-				if (v.wProductType == VER_NT_WORKSTATION)
-					osName = "Windows 7";
-				else
-					osName = "Windows 2008 R2";
-			}
-			else if (v.dwMinorVersion == 2)
-			{
-				if (v.wProductType == VER_NT_WORKSTATION)
-					osName = "Windows 8";
-				else
-					osName = "Windows 2012";
-			}
-			else if (v.dwMinorVersion == 3)
-			{
-				if (v.wProductType == VER_NT_WORKSTATION)
-					osName = "Windows 8.1";
-				else
-					osName = "Windows 2012 R2";
-			}
-		}
-		else if (v.dwMajorVersion == 10)
-		{
-			if (v.dwMinorVersion == 0)
-			{
-				if (v.wProductType == VER_NT_WORKSTATION)
-					osName = "Windows 10";
-				else
-					osName = "Windows Server Technical Preview";
-			}
-		}
-
-		if (!osName)
-			osName = "Unknown";
-
-		if (strlen(v.szCSDVersion) > 0)
-			_snprintf(buf, sizeof(buf) - 1, "%s (Build %lu, %s).", osName, v.dwBuildNumber, v.szCSDVersion);
-		else
-			_snprintf(buf, sizeof(buf) - 1, "%s (Build %lu).", osName, v.dwBuildNumber);
-
-		packet_add_tlv_string(response, TLV_TYPE_OS_NAME, buf);
+		add_windows_os_version(&response);
 
 		// sf: we dynamically retrieve GetNativeSystemInfo & IsWow64Process as NT and 2000 dont support it.
 		hKernel32 = LoadLibraryA("kernel32.dll");
 		if (hKernel32)
 		{
 			typedef void (WINAPI * GETNATIVESYSTEMINFO)(LPSYSTEM_INFO lpSystemInfo);
-			typedef BOOL (WINAPI * ISWOW64PROCESS)(HANDLE, PBOOL);
+			typedef BOOL(WINAPI * ISWOW64PROCESS)(HANDLE, PBOOL);
 			GETNATIVESYSTEMINFO pGetNativeSystemInfo = (GETNATIVESYSTEMINFO)GetProcAddress(hKernel32, "GetNativeSystemInfo");
 			ISWOW64PROCESS pIsWow64Process = (ISWOW64PROCESS)GetProcAddress(hKernel32, "IsWow64Process");
 			if (pGetNativeSystemInfo)
 			{
 				SYSTEM_INFO SystemInfo;
 				pGetNativeSystemInfo(&SystemInfo);
-				switch(SystemInfo.wProcessorArchitecture)
+				switch (SystemInfo.wProcessorArchitecture)
 				{
-					case PROCESSOR_ARCHITECTURE_AMD64:
-						osArch = "x64";
-						break;
-					case PROCESSOR_ARCHITECTURE_IA64:
-						osArch = "IA64";
-						break;
-					case PROCESSOR_ARCHITECTURE_INTEL:
-						osArch = "x86";
-						break;
-					default:
-						break;
+				case PROCESSOR_ARCHITECTURE_AMD64:
+					osArch = "x64";
+					break;
+				case PROCESSOR_ARCHITECTURE_IA64:
+					osArch = "IA64";
+					break;
+				case PROCESSOR_ARCHITECTURE_INTEL:
+					osArch = "x86";
+					break;
+				default:
+					break;
 				}
 			}
 			if (pIsWow64Process)
@@ -583,23 +631,30 @@ DWORD request_sys_config_sysinfo(Remote *remote, Packet *packet)
 				BOOL bIsWow64 = FALSE;
 				pIsWow64Process(GetCurrentProcess(), &bIsWow64);
 				if (bIsWow64)
+				{
 					osWow = " (Current Process is WOW64)";
+				}
 			}
 		}
 		// if we havnt set the arch it is probably because we are on NT/2000 which is x86
 		if (!osArch)
+		{
 			osArch = "x86";
+		}
 
 		if (!osWow)
+		{
 			osWow = "";
+		}
 
 		_snprintf(buf, sizeof(buf) - 1, "%s%s", osArch, osWow);
+		dprintf("[SYSINFO] Arch set to: %s", buf);
 		packet_add_tlv_string(response, TLV_TYPE_ARCHITECTURE, buf);
 
 		if (hKernel32)
 		{
-			char * ctryname = NULL, * langname = NULL;
-			typedef LANGID (WINAPI * GETSYSTEMDEFAULTLANGID)(VOID);
+			char * ctryname = NULL, *langname = NULL;
+			typedef LANGID(WINAPI * GETSYSTEMDEFAULTLANGID)(VOID);
 			GETSYSTEMDEFAULTLANGID pGetSystemDefaultLangID = (GETSYSTEMDEFAULTLANGID)GetProcAddress(hKernel32, "GetSystemDefaultLangID");
 			if (pGetSystemDefaultLangID)
 			{
@@ -621,22 +676,31 @@ DWORD request_sys_config_sysinfo(Remote *remote, Packet *packet)
 			}
 
 			if (!ctryname || !langname)
-				_snprintf(buf, sizeof(buf) - 1, "Unknown");
+			{
+				_snprintf(buf, sizeof(buf)-1, "Unknown");
+			}
 			else
-				_snprintf(buf, sizeof(buf) - 1, "%s_%s", langname, ctryname);
+			{
+				_snprintf(buf, sizeof(buf)-1, "%s_%s", langname, ctryname);
+			}
 
 			packet_add_tlv_string(response, TLV_TYPE_LANG_SYSTEM, buf);
 
 			if (ctryname)
+			{
 				free(ctryname);
+			}
 
 			if (langname)
+			{
 				free(langname);
+			}
 		}
 
 		LPWKSTA_INFO_102 localSysinfo = NULL;
 
-		if (NetWkstaGetInfo(NULL, 102, (LPBYTE *)&localSysinfo) == NERR_Success) {
+		if (NetWkstaGetInfo(NULL, 102, (LPBYTE *)&localSysinfo) == NERR_Success)
+		{
 			char *domainName = wchar_to_utf8(localSysinfo->wki102_langroup);
 			packet_add_tlv_string(response, TLV_TYPE_DOMAIN, (LPCSTR)domainName);
 			packet_add_tlv_uint(response, TLV_TYPE_LOGGED_ON_USER_COUNT, localSysinfo->wki102_logged_on_users);