diff -ruN uppsrc/ide/AutoSetup.cpp uppsrc/ide/AutoSetup.cpp
--- uppsrc/ide/AutoSetup.cpp	2013-07-02 21:25:18 +0400
+++ uppsrc/ide/AutoSetup.cpp	2013-07-05 09:49:00 +0400
@@ -54,6 +54,7 @@
 	CtrlLayoutOKCancel(dlg, "Ultimate++ methods auto-setup");
 	dlg.Sizeable().Zoomable().SetRect(Size(640, 480));
 
+	WithAutoSetupMSC12<ParentCtrl> msc12; CtrlLayout(msc12);
 	WithAutoSetupMSC11<ParentCtrl> msc11; CtrlLayout(msc11);
 	WithAutoSetupMSC10<ParentCtrl> msc10; CtrlLayout(msc10);
 	WithAutoSetupMSC9<ParentCtrl> msc9; CtrlLayout(msc9);
@@ -65,7 +66,8 @@
 
 	CtrlList msclist, mingwlist, owclist, otherlist;
 
-	msclist.AddLayout(msc11)
+	msclist.AddLayout(msc12)
+		.AddLayout(msc11)
 		.AddLayout(msc10)
 		.AddLayout(msc9)
 		.AddLayout(msc8)
@@ -214,6 +216,27 @@
 	msc11.method64 <<= "MSC11x64";
 
 
+	String sdk12 = NormalizePathNN(GetWinRegString("InstallationFolder",
+		                                       "SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v8.1",
+		                                       HKEY_LOCAL_MACHINE));
+	String bin12;
+	if(!IsNull(sdk12) && FileExists(AppendFileName(sdk12, "VC\\bin\\cl.exe")))
+		bin12 = sdk12;
+	else
+		ExistProgram(bin12, "Program Files (x86)\\Microsoft Visual Studio 12.0", "VC\\bin\\cl.exe")
+		|| ExistProgram(bin12, "Program Files\\Microsoft Visual Studio 12.0", "VC\\bin\\cl.exe");
+	msc12.sdk <<= sdk12;
+	msc12.dir <<= bin12;
+	msc12.method <<= "MSC12";
+	msc12.create <<= !IsNull(msc12.dir);
+	String vc12_64 = AppendFileName(bin12, "VC\\bin\\x64");
+	if(!FileExists(AppendFileName(vc12_64, "cl.exe")))
+		vc12_64 = AppendFileName(bin12, "VC\\bin\\x86_amd64");
+	if(bin12.GetLength() && FileExists(AppendFileName(vc12_64, "cl.exe")))
+		msc12.create64 = true;
+	msc12.method64 <<= "MSC12x64";
+
+
 	other.mysql <<= NormalizePathNN(GetWinRegString("Location", "SOFTWARE\\MySQL AB\\MySQL Server 4.1"));
 
 	String sdl = NormalizePathNN(ConfigFile("sdl"));
@@ -228,11 +251,13 @@
 	DirSel(msc9.dir, bd.Add());
 	DirSel(msc10.dir, bd.Add());
 	DirSel(msc11.dir, bd.Add());
+	DirSel(msc12.dir, bd.Add());
 	DirSel(msc7_1.sdk, bd.Add());
 	DirSel(msc8.sdk, bd.Add());
 	DirSel(msc9.sdk, bd.Add());
 	DirSel(msc10.sdk, bd.Add());
 	DirSel(msc11.sdk, bd.Add());
+	DirSel(msc12.sdk, bd.Add());
 	DirSel(other.sdl, bd.Add());
 	DirSel(other.mysql, bd.Add());
 	if(dlg.Run() != IDOK)
@@ -322,6 +347,98 @@
 		lib << ";" << AppendFileName(mysql, "lib");
 	}
 
+	String vs12 = ~msc12.dir;
+	if(!IsNull(vs12) && msc12.create64) {
+		String vc = AppendFileName(vs12, "VC");
+		String m = ~msc12.method64;
+		String sdk = ~msc12.sdk;
+		if(IsNull(sdk))
+			sdk = AppendFileName(vc, "PlatformSDK");
+		String vc_lib = AppendFileName(vc, "lib\\x64");
+		if(!DirectoryExists(vc_lib))
+			vc_lib = AppendFileName(vc, "lib\\amd64");
+		SaveFile(
+			AppendFileName(dir, m + ".bm"),
+			"BUILDER = \"MSC12X64\";\n"
+			"DEBUG_INFO = \"2\";\n"
+			"DEBUG_BLITZ = \"1\";\n"
+			"DEBUG_LINKMODE = \"0\";\n"
+			"DEBUG_OPTIONS = \"-Od\";\n"
+			"RELEASE_BLITZ = \"0\";\n"
+			"RELEASE_LINKMODE = \"0\";\n"
+			"RELEASE_OPTIONS = \"-O1 -GS-\";\n"
+			"RELEASE_SIZE_OPTIONS = \"-O1 -GS-\";\n"
+			"DEBUGGER = \"\";\n"
+			"REMOTE_HOST = \"\";\n"
+			"REMOTE_OS = \"\";\n"
+			"REMOTE_TRANSFER = \"\";\n"
+			"REMOTE_MAP = \"\";\n"
+			"PATH = " + AsCString(
+			                AppendFileName(vs12, "Common7\\IDE") + ';' +
+							vc12_64 + ';' +
+							AppendFileName(sdk, "bin\\x64") +
+							exe
+						) + ";\n"
+			"INCLUDE = " + AsCString(
+							AppendFileName(vc, "include") + ';' +
+							AppendFileName(sdk, "Include\\um") + ';' +
+							AppendFileName(sdk, "Include\\shared") + ';' +
+							AppendFileName(sdk, "Include\\winrt") +
+							include
+						   ) + ";\n"
+			"LIB = " + AsCString(
+							vc_lib + ';' +
+							AppendFileName(sdk, "Lib\\winv6.3\\um\\x64") +
+							lib
+			           ) + ";\n"
+		);
+		SaveFile(AppendFileName(dir, "default_method"), m);
+	}
+
+	if(!IsNull(vs12) && msc12.create) {
+		String vc = AppendFileName(vs12, "VC");
+		String m = ~msc12.method;
+		String sdk = ~msc12.sdk;
+		if(IsNull(sdk))
+			sdk = AppendFileName(vc, "PlatformSDK");
+		SaveFile(
+			AppendFileName(dir, m + ".bm"),
+			"BUILDER = \"MSC12\";\n"
+			"DEBUG_INFO = \"2\";\n"
+			"DEBUG_BLITZ = \"1\";\n"
+			"DEBUG_LINKMODE = \"0\";\n"
+			"DEBUG_OPTIONS = \"-Od\";\n"
+			"RELEASE_BLITZ = \"0\";\n"
+			"RELEASE_LINKMODE = \"0\";\n"
+			"RELEASE_OPTIONS = \"-O2 -GS-\";\n"
+			"RELEASE_SIZE_OPTIONS = \"-O1 -GS-\";\n"
+			"DEBUGGER = \"\";\n"
+			"REMOTE_HOST = \"\";\n"
+			"REMOTE_OS = \"\";\n"
+			"REMOTE_TRANSFER = \"\";\n"
+			"REMOTE_MAP = \"\";\n"
+			"PATH = " + AsCString(
+			                AppendFileName(vs12, "Common7\\IDE") + ';' +
+							AppendFileName(vc, "bin") + ';' +
+							AppendFileName(sdk, "bin\\x86") +
+							exe
+						) + ";\n"
+			"INCLUDE = " + AsCString(
+							AppendFileName(vc, "include") + ';' +
+							AppendFileName(sdk, "Include\\um") + ';' +
+							AppendFileName(sdk, "Include\\shared") + ';' +
+							AppendFileName(sdk, "Include\\winrt") +
+							include
+						   ) + ";\n"
+			"LIB = " + AsCString(
+							AppendFileName(vc, "lib") + ';' +
+							AppendFileName(sdk, "Lib\\winv6.3\\um\\x86") +
+							lib
+			           ) + ";\n"
+		);
+		SaveFile(AppendFileName(dir, "default_method"), m);
+	}
+
 	String vs11 = ~msc11.dir;
 	if(!IsNull(vs11) && msc11.create64) {
 		String vc = AppendFileName(vs11, "VC");
diff -ruN uppsrc/ide/Builders/MscBuilder.icpp uppsrc/ide/Builders/MscBuilder.icpp
--- uppsrc/ide/Builders/MscBuilder.icpp	2013-05-28 11:12:25 +0400
+++ uppsrc/ide/Builders/MscBuilder.icpp	2013-07-05 09:39:19 +0400
@@ -103,7 +103,8 @@
 
 bool MscBuilder::IsMsc86() const
 {
-	return HasFlag("MSC8") || HasFlag("MSC9") || HasFlag("MSC10") || HasFlag("MSC11");
+	return HasFlag("MSC8") || HasFlag("MSC9") || HasFlag("MSC10") || HasFlag("MSC11")
+		|| HasFlag("MSC12");
 }
 
 bool MscBuilder::IsMscArm() const
@@ -113,7 +114,8 @@
 
 bool MscBuilder::IsMsc64() const
 {
-	return HasFlag("MSC8X64") || HasFlag("MSC9X64") || HasFlag("MSC10X64") || HasFlag("MSC11X64");
+	return HasFlag("MSC8X64") || HasFlag("MSC9X64") || HasFlag("MSC10X64") || HasFlag("MSC11X64")
+		|| HasFlag("MSC12X64");
 }
 
 String MscBuilder::LinkerName() const
@@ -372,7 +374,8 @@
 			IdeConsoleEndGroup();
 			return false;
 		}
-		bool isgemsc10 = HasFlag("MSC10") || HasFlag("MSC10X64") || HasFlag("MSC11") || HasFlag("MSC11X64");
+		bool isgemsc10 = HasFlag("MSC10") || HasFlag("MSC10X64") || HasFlag("MSC11")
+			|| HasFlag("MSC11X64") || HasFlag("MSC12X64");
 		Vector<Host::FileInfo> objinfo = host->GetFileInfo(obj);
 		for(int i = 0; i < obj.GetCount(); i++)
 			if(objinfo[i] > producttime) {
@@ -517,7 +520,8 @@
 	int time = GetTickCount();
 	if(!Wait())
 		return false;
-	bool isgemsc10 = HasFlag("MSC10") || HasFlag("MSC10X64") || HasFlag("MSC11") || HasFlag("MSC11X64");
+	bool isgemsc10 = HasFlag("MSC10") || HasFlag("MSC10X64") || HasFlag("MSC11")
+		|| HasFlag("MSC11X64") || HasFlag("MSC12X64");
 	for(int i = 0; i < linkfile.GetCount(); i++)
 		if(GetFileTime(linkfile[i]) >= targettime) {
 			String link;
@@ -605,11 +609,13 @@
 	RegisterBuilder("MSC8ARM", CreateMscBuilder);
 	RegisterBuilder("MSC9", CreateMscBuilder);
 	RegisterBuilder("MSC9X64", CreateMscBuilder);
+	RegisterBuilder("MSC9ARM", CreateMscBuilder);
 	RegisterBuilder("MSC10", CreateMscBuilder);
 	RegisterBuilder("MSC10X64", CreateMscBuilder);
 	RegisterBuilder("MSC11", CreateMscBuilder);
 	RegisterBuilder("MSC11X64", CreateMscBuilder);
-	RegisterBuilder("MSC9ARM", CreateMscBuilder);
+	RegisterBuilder("MSC12", CreateMscBuilder);
+	RegisterBuilder("MSC12X64", CreateMscBuilder);
 	RegisterBuilder("EVC_ARM", CreateMscBuilder);
 	RegisterBuilder("EVC_MIPS", CreateMscBuilder);
 	RegisterBuilder("EVC_SH3", CreateMscBuilder);
diff -ruN uppsrc/ide/ide.lay uppsrc/ide/ide.lay
--- uppsrc/ide/ide.lay	2013-05-28 11:12:25 +0400
+++ uppsrc/ide/ide.lay	2013-07-05 09:32:44 +0400
@@ -271,6 +271,17 @@
 	ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 56).BottomPosZ(4, 20))
 END_LAYOUT
 
+LAYOUT(AutoSetupMSC12, 276, 132)
+	ITEM(Option, create, SetLabel(t_("Create Visual C++ 12.0 build method")).LeftPosZ(0, 200).TopPosZ(4, 15))
+	ITEM(EditString, method, HSizePosZ(204, 0).TopPosZ(2, 19))
+	ITEM(Option, create64, SetLabel(t_("Create VC++ 12.0 x64 build method")).LeftPosZ(0, 200).TopPosZ(28, 15))
+	ITEM(EditString, method64, HSizePosZ(204, 0).TopPosZ(26, 19))
+	ITEM(Label, dv___4, SetLabel(t_("Visual C++ 12.0 directory")).LeftPosZ(0, 276).TopPosZ(48, 19))
+	ITEM(EditString, dir, HSizePosZ(0, 0).TopPosZ(68, 19))
+	ITEM(Label, dv___6, SetLabel(t_("Win32 SDK for Visual C++ 12.0 directory")).LeftPosZ(0, 276).TopPosZ(92, 19))
+	ITEM(EditString, sdk, HSizePosZ(0, 0).TopPosZ(112, 19))
+END_LAYOUT
+
 LAYOUT(AutoSetupMSC11, 276, 132)
 	ITEM(Option, create, SetLabel(t_("Create Visual C++ 11.0 build method")).LeftPosZ(0, 200).TopPosZ(4, 15))
 	ITEM(EditString, method, HSizePosZ(204, 0).TopPosZ(2, 19))
