diff -ruN uppsrc/ide/AutoSetup.cpp uppsrc/ide/AutoSetup.cpp
--- uppsrc/ide/AutoSetup.cpp	2012-07-31 23:10:27 +0400
+++ uppsrc/ide/AutoSetup.cpp	2013-05-27 13:21:51 +0400
@@ -32,38 +32,81 @@
 	return false;
 }
 
+class CtrlList : public ArrayCtrl {
+public:
+	typedef CtrlList CLASSNAME;
+	CtrlList() { AutoHideSb().NoGrid().NoHeader(); AddColumn(String()); }
+
+	template <class T>
+	CtrlList& AddLayout(T& ctrl) {
+		Add();
+		int index = GetCount() - 1;
+		DisableLine(index);
+		SetCtrl(index, 0, ctrl.SizePos());
+		SetLineCy(index, ctrl.GetLayoutSize().cy);
+		return *this;
+	}
+};
+
 void AutoSetup()
 {
 	WithAutoSetupLayout<TopWindow> dlg;
 	CtrlLayoutOKCancel(dlg, "Ultimate++ methods auto-setup");
+	dlg.Sizeable().Zoomable().SetRect(Size(640, 480));
+
+	WithAutoSetupMSC11<ParentCtrl> msc11; CtrlLayout(msc11);
+	WithAutoSetupMSC10<ParentCtrl> msc10; CtrlLayout(msc10);
+	WithAutoSetupMSC9<ParentCtrl> msc9; CtrlLayout(msc9);
+	WithAutoSetupMSC8<ParentCtrl> msc8; CtrlLayout(msc8);
+	WithAutoSetupMSC7_1<ParentCtrl> msc7_1; CtrlLayout(msc7_1);
+	WithAutoSetupMinGW<ParentCtrl> mingw; CtrlLayout(mingw);
+	WithAutoSetupOWC<ParentCtrl> owc; CtrlLayout(owc);
+	WithAutoSetupOther<ParentCtrl> other; CtrlLayout(other);
+
+	CtrlList msclist, mingwlist, owclist, otherlist;
+
+	msclist.AddLayout(msc11)
+		.AddLayout(msc10)
+		.AddLayout(msc9)
+		.AddLayout(msc8)
+		.AddLayout(msc7_1);
+
+	mingwlist.AddLayout(mingw);
+	owclist.AddLayout(owc);
+	otherlist.AddLayout(other);
+
+	dlg.tab.Add(msclist.SizePos(), "Visual C++");
+	dlg.tab.Add(mingwlist.SizePos(), "MinGW GCC");
+	dlg.tab.Add(owclist.SizePos(), "Open Watcom");
+	dlg.tab.Add(otherlist.SizePos(), "Other");
+
 	String mw = GetExeDirFile("mingw");
 	FindFile ff(mw);
 	if(ff && ff.IsDirectory())
-		dlg.mingw <<= mw;
+		mingw.dir <<= mw;
 	else
-		dlg.mingw <<=
+		mingw.dir <<=
 			NormalizePathNN(GetWinRegString("Inno Setup: App Path",
 		       "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\MinGW_is1"));
-	if (IsNull(dlg.mingw))
-		dlg.mingw <<= NormalizePathNN(GetWinRegString("InstallLocation",
+	if (IsNull(mingw.dir))
+		mingw.dir <<= NormalizePathNN(GetWinRegString("InstallLocation",
 						"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\TDM-GCC" ));
-	dlg.mingwmethod <<= "MINGW";
-	dlg.domingw <<= !IsNull(dlg.mingw);
-
+	mingw.method <<= "MINGW";
+	mingw.create <<= !IsNull(mingw.dir);
 
 	String owcdir = GetEnv("WATCOM");
 	if(owcdir.IsEmpty())
 		owcdir = "C:\\WATCOM";
 
 	if(DirectoryExists(owcdir))
-		dlg.owc <<= owcdir;
+		owc.dir <<= owcdir;
 
-	dlg.owcmethod <<= "OWC";
-	dlg.doowc <<= !IsNull(dlg.owc);	
+	owc.method <<= "OWC";
+	owc.create <<= !IsNull(owc.dir);	
 
 
 	String vs = GetWinRegString("ProductDir", "SOFTWARE\\Microsoft\\VisualStudio\\7.1\\Setup\\VC");
-	dlg.visualcpp71 <<=
+	msc7_1.dir <<=
 		NormalizePathNN(
 			Nvl(
 				GetWinRegString("InstallLocation",
@@ -71,8 +114,8 @@
 	                            "{362882AE-E40A-4435-B214-6420634C401F}"),
 	            vs)
 	    );
-	dlg.visualcppmethod71 <<= "MSC71";
-	dlg.dovisualcpp71 <<= !IsNull(dlg.visualcpp71);
+	msc7_1.method <<= "MSC71";
+	msc7_1.create <<= !IsNull(msc7_1.dir);
 
 	String sdk8 = GetWinRegString("InstallationFolder",
 	                             "Software\\Microsoft\\Microsoft SDKs\\Windows\\v6.0",
@@ -80,22 +123,22 @@
 	String bin8;
 	if(!IsNull(sdk8)) {
 		sdk8 = NormalizePath(sdk8);
-		dlg.sdk8 <<= sdk8;
-		dlg.sdk71 <<= sdk8;
-		dlg.visualcpp8 <<= bin8 = sdk8;
+		msc8.sdk <<= sdk8;
+		msc7_1.sdk <<= sdk8;
+		msc8.dir <<= bin8 = sdk8;
 	}
 	else {
-		dlg.visualcpp8 <<= bin8 = NormalizePathNN(
+		msc8.dir <<= bin8 = NormalizePathNN(
 			GetWinRegString("8.0", "SOFTWARE\\Microsoft\\VisualStudio\\SxS\\VS7")
 		);
-		dlg.sdk8 <<= NormalizePathNN(GetWinRegString("Install Dir", "SOFTWARE\\Microsoft\\MicrosoftSDK\\InstalledSDKs\\8F9E5EF3-A9A5-491B-A889-C58EFFECE8B3"));
+		msc8.sdk <<= NormalizePathNN(GetWinRegString("Install Dir", "SOFTWARE\\Microsoft\\MicrosoftSDK\\InstalledSDKs\\8F9E5EF3-A9A5-491B-A889-C58EFFECE8B3"));
 	}
-	dlg.visualcppmethod8 <<= "MSC8";
-	dlg.dovisualcpp8 <<= !IsNull(dlg.visualcpp8);
+	msc8.method <<= "MSC8";
+	msc8.create <<= !IsNull(msc8.dir);
 	if(bin8.GetLength() && FileExists(AppendFileName(bin8, "VC\\Bin\\x64\\cl.exe"))) {
-		dlg.dovisualcpp8x64 = true;
+		msc8.create64 = true;
 	}
-	dlg.visualcppmethod8x64 <<= "MSC8x64";
+	msc8.method64 <<= "MSC8x64";
 	String sdk9 = NormalizePathNN(GetWinRegString("InstallationFolder",
 		                                       "SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.0",
 		                                       HKEY_LOCAL_MACHINE));  
@@ -113,22 +156,22 @@
 	else
 		ExistProgram(bin9, "Program Files (x86)\\Microsoft Visual Studio 9.0", "VC\\Bin\\cl.exe")
 		|| ExistProgram(bin9, "Program Files\\Microsoft Visual Studio 9.0", "VC\\Bin\\cl.exe");
-	dlg.sdk9 <<= sdk9;
-	dlg.visualcpp9 <<= bin9;
-	dlg.visualcppmethod9 <<= "MSC9";
-	dlg.dovisualcpp9 <<= !IsNull(dlg.visualcpp9);
+	msc9.sdk <<= sdk9;
+	msc9.dir <<= bin9;
+	msc9.method <<= "MSC9";
+	msc9.create <<= !IsNull(msc9.dir);
 	String vc9_64 = AppendFileName(bin9, "VC\\Bin\\x64");
 	if(!FileExists(AppendFileName(vc9_64, "cl.exe")))
 		vc9_64 = AppendFileName(bin9, "VC\\Bin\\amd64");
 	if(bin9.GetLength() && FileExists(AppendFileName(vc9_64, "cl.exe")))
-		dlg.dovisualcpp9x64 = true;
-	dlg.visualcppmethod9x64 <<= "MSC9x64";
+		msc8.create64 = true;
+	msc9.method64 <<= "MSC9x64";
 
 
 	String sdk10 = NormalizePathNN(GetWinRegString("InstallationFolder",
 		                                       "SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.1",
 		                                       HKEY_LOCAL_MACHINE));
-	if (IsNull (sdk10))
+	if (IsNull(sdk10))
 		sdk10 = NormalizePathNN(GetWinRegString("InstallationFolder",
 		                                        "SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v7.0A",
 		                                        HKEY_LOCAL_MACHINE));
@@ -138,36 +181,60 @@
 	else
 		ExistProgram(bin10, "Program Files (x86)\\Microsoft Visual Studio 10.0", "VC\\Bin\\cl.exe")
 		|| ExistProgram(bin10, "Program Files\\Microsoft Visual Studio 10.0", "VC\\Bin\\cl.exe");
-	dlg.sdk10 <<= sdk10;
-	dlg.visualcpp10 <<= bin10;
-	dlg.visualcppmethod10 <<= "MSC10";
-	dlg.dovisualcpp10 <<= !IsNull(dlg.visualcpp10);
+	msc10.sdk <<= sdk10;
+	msc10.dir <<= bin10;
+	msc10.method <<= "MSC10";
+	msc10.create <<= !IsNull(msc10.dir);
 	String vc10_64 = AppendFileName(bin10, "VC\\Bin\\x64");
 	if(!FileExists(AppendFileName(vc10_64, "cl.exe")))
 		vc10_64 = AppendFileName(bin10, "VC\\Bin\\amd64");
 	if(bin10.GetLength() && FileExists(AppendFileName(vc10_64, "cl.exe")))
-		dlg.dovisualcpp10x64 = true;
-	dlg.visualcppmethod10x64 <<= "MSC10x64";
+		msc10.create64 = true;
+	msc10.method64 <<= "MSC10x64";
 
-	dlg.mysql <<= NormalizePathNN(GetWinRegString("Location", "SOFTWARE\\MySQL AB\\MySQL Server 4.1"));
+
+	String sdk11 = NormalizePathNN(GetWinRegString("InstallationFolder",
+		                                       "SOFTWARE\\Microsoft\\Microsoft SDKs\\Windows\\v8.0",
+		                                       HKEY_LOCAL_MACHINE));
+	String bin11;
+	if(!IsNull(sdk11) && FileExists(AppendFileName(sdk11, "VC\\Bin\\cl.exe")))
+		bin11 = sdk11;
+	else
+		ExistProgram(bin11, "Program Files (x86)\\Microsoft Visual Studio 11.0", "VC\\Bin\\cl.exe")
+		|| ExistProgram(bin11, "Program Files\\Microsoft Visual Studio 11.0", "VC\\Bin\\cl.exe");
+	msc11.sdk <<= sdk11;
+	msc11.dir <<= bin11;
+	msc11.method <<= "MSC11";
+	msc11.create <<= !IsNull(msc11.dir);
+	String vc11_64 = AppendFileName(bin11, "VC\\Bin\\x64");
+	if(!FileExists(AppendFileName(vc11_64, "cl.exe")))
+		vc11_64 = AppendFileName(bin11, "VC\\Bin\\x86_amd64");
+	if(bin11.GetLength() && FileExists(AppendFileName(vc11_64, "cl.exe")))
+		msc11.create64 = true;
+	msc11.method64 <<= "MSC11x64";
+
+
+	other.mysql <<= NormalizePathNN(GetWinRegString("Location", "SOFTWARE\\MySQL AB\\MySQL Server 4.1"));
 
 	String sdl = NormalizePathNN(ConfigFile("sdl"));
 	if(DirectoryExists(sdl))
-		dlg.sdl <<= sdl;
+		other.sdl <<= sdl;
 
 	Array< FrameRight<Button> > bd;
-	DirSel(dlg.mingw, bd.Add());
-	DirSel(dlg.owc, bd.Add());
-	DirSel(dlg.visualcpp71, bd.Add());
-	DirSel(dlg.visualcpp8, bd.Add());
-	DirSel(dlg.visualcpp9, bd.Add());
-	DirSel(dlg.visualcpp10, bd.Add());
-	DirSel(dlg.sdk71, bd.Add());
-	DirSel(dlg.sdk8, bd.Add());
-	DirSel(dlg.sdk9, bd.Add());
-	DirSel(dlg.sdk10, bd.Add());
-	DirSel(dlg.sdl, bd.Add());
-	DirSel(dlg.mysql, bd.Add());
+	DirSel(mingw.dir, bd.Add());
+	DirSel(owc.dir, bd.Add());
+	DirSel(msc7_1.dir, bd.Add());
+	DirSel(msc8.dir, bd.Add());
+	DirSel(msc9.dir, bd.Add());
+	DirSel(msc10.dir, bd.Add());
+	DirSel(msc11.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(other.sdl, bd.Add());
+	DirSel(other.mysql, bd.Add());
 	if(dlg.Run() != IDOK)
 		return;
 
@@ -177,14 +244,14 @@
 	String include;
 	String lib;
 
-	sdl = ~dlg.sdl;
+	sdl = ~other.sdl;
 	if(!IsNull(sdl)) {
 		exe << ";" << AppendFileName(sdl, "lib");
 		include << ";" << AppendFileName(sdl, "include");
 		lib << ";" << AppendFileName(sdl, "lib");
 	}
 
-	String mysql = ~dlg.mysql;
+	String mysql = ~other.mysql;
 	String mlib;
 	if(!IsNull(mysql)) {
 		exe << ";" << AppendFileName(mysql, "bin");
@@ -192,9 +259,9 @@
 		mlib << ";" << AppendFileName(mysql, "bin");
 	}
 
-	String mingw = ~dlg.mingw;
-	if(!IsNull(mingw) && dlg.domingw) {
-		String m = ~dlg.mingwmethod;
+	String mingwdir = ~mingw.dir;
+	if(!IsNull(mingwdir) && mingw.create) {
+		String m = ~mingw.method;
 		SaveFile(
 			AppendFileName(dir, m + ".bm"),
 			"BUILDER = \"GCC\";\n"
@@ -211,16 +278,16 @@
 			"REMOTE_OS = \"\";\n"
 			"REMOTE_TRANSFER = \"\";\n"
 			"REMOTE_MAP = \"\";\n"
-			"PATH = " + AsCString(AppendFileName(~dlg.mingw, "bin") + exe) + ";\n"
-			"INCLUDE = " + AsCString(AppendFileName(~dlg.mingw, "include") + include) + ";\n"
-			"LIB = " + AsCString(AppendFileName(~dlg.mingw, "lib") + lib + mlib) + ";\n"
+			"PATH = " + AsCString(AppendFileName(mingwdir, "bin") + exe) + ";\n"
+			"INCLUDE = " + AsCString(AppendFileName(mingwdir, "include") + include) + ";\n"
+			"LIB = " + AsCString(AppendFileName(mingwdir, "lib") + lib + mlib) + ";\n"
 		);
 		SaveFile(AppendFileName(dir, "default_method"), m);
 	}
 
-	String owc = ~dlg.owc;
-	if(!IsNull(owc) && dlg.doowc) {
-		String m = ~dlg.owcmethod;
+	owcdir = ~owc.dir;
+	if(!IsNull(owcdir) && owc.create) {
+		String m = ~owc.method;
 		SaveFile(
 			AppendFileName(dir, m + ".bm"),
 			"BUILDER = \"OWC\";\n"
@@ -238,14 +305,14 @@
 			"REMOTE_TRANSFER = \"\";\n"
 			"REMOTE_MAP = \"\";\n"
 			"PATH = " + AsCString(
-				AppendFileName(owc, "binnt") + ';' +
-				AppendFileName(owc, "binw") +
+				AppendFileName(owcdir, "binnt") + ';' +
+				AppendFileName(owcdir, "binw") +
 				exe) + ";\n"
-			"INCLUDE = " + AsCString(AppendFileName(owc, "h") + ';' +
-				AppendFileName(owc, "h\\nt") +
+			"INCLUDE = " + AsCString(AppendFileName(owcdir, "h") + ';' +
+				AppendFileName(owcdir, "h\\nt") +
 				include) + ";\n"
-			"LIB = " + AsCString(AppendFileName(owc, "lib386") + ';' +
-				AppendFileName(owc, "lib386\\nt") +
+			"LIB = " + AsCString(AppendFileName(owcdir, "lib386") + ';' +
+				AppendFileName(owcdir, "lib386\\nt") +
 				lib + mlib) + ";\n"
 		);
 		SaveFile(AppendFileName(dir, "default_method"), m);
@@ -255,11 +322,99 @@
 		lib << ";" << AppendFileName(mysql, "lib");
 	}
 
-	String vs10 = ~dlg.visualcpp10;
-	if(!IsNull(vs10) && dlg.dovisualcpp10x64) {
+	String vs11 = ~msc11.dir;
+	if(!IsNull(vs11) && msc11.create64) {
+		String vc = AppendFileName(vs11, "Vc");
+		String m = ~msc11.method64;
+		String sdk = ~msc11.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 = \"MSC11X64\";\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(vs11, "Common7\\Ide") + ';' +
+							vc11_64 + ';' +
+							AppendFileName(sdk, "Bin") +
+							exe
+						) + ";\n"
+			"INCLUDE = " + AsCString(
+							AppendFileName(vc, "Include") + ';' +
+							AppendFileName(sdk, "Include") +
+							include
+						   ) + ";\n"
+			"LIB = " + AsCString(
+							vc_lib + ';' +
+							AppendFileName(sdk, "Lib\\x64") +
+							lib
+			           ) + ";\n"
+		);
+		SaveFile(AppendFileName(dir, "default_method"), m);
+	}
+
+	if(!IsNull(vs11) && msc11.create) {
+		String vc = AppendFileName(vs11, "Vc");
+		String m = ~msc11.method;
+		String sdk = ~msc11.sdk;
+		if(IsNull(sdk))
+			sdk = AppendFileName(vc, "PlatformSDK");
+		SaveFile(
+			AppendFileName(dir, m + ".bm"),
+			"BUILDER = \"MSC11\";\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(vs11, "Common7\\Ide") + ';' +
+							AppendFileName(vc, "Bin") + ';' +
+							AppendFileName(sdk, "Bin") +
+							exe
+						) + ";\n"
+			"INCLUDE = " + AsCString(
+							AppendFileName(vc, "Include") + ';' +
+							AppendFileName(sdk, "Include") +
+							include
+						   ) + ";\n"
+			"LIB = " + AsCString(
+							AppendFileName(vc, "Lib") + ';' +
+							AppendFileName(sdk, "Lib") +
+							lib
+			           ) + ";\n"
+		);
+		SaveFile(AppendFileName(dir, "default_method"), m);
+	}
+
+	String vs10 = ~msc10.dir;
+	if(!IsNull(vs10) && msc10.create64) {
 		String vc = AppendFileName(vs10, "Vc");
-		String m = ~dlg.visualcppmethod10x64;
-		String sdk = ~dlg.sdk10;
+		String m = ~msc10.method64;
+		String sdk = ~msc10.sdk;
 		if(IsNull(sdk))
 			sdk = AppendFileName(vc, "PlatformSDK");
 		String vc_lib = AppendFileName(vc, "Lib\\x64");
@@ -301,10 +456,10 @@
 		SaveFile(AppendFileName(dir, "default_method"), m);
 	}
 
-	if(!IsNull(vs10) && dlg.dovisualcpp10) {
+	if(!IsNull(vs10) && msc10.create) {
 		String vc = AppendFileName(vs10, "Vc");
-		String m = ~dlg.visualcppmethod10;
-		String sdk = ~dlg.sdk10;
+		String m = ~msc10.method;
+		String sdk = ~msc10.sdk;
 		if(IsNull(sdk))
 			sdk = AppendFileName(vc, "PlatformSDK");
 		SaveFile(
@@ -343,11 +498,11 @@
 		SaveFile(AppendFileName(dir, "default_method"), m);
 	}
 
-	String vs9 = ~dlg.visualcpp9;
-	if(!IsNull(vs9) && dlg.dovisualcpp9x64) {
+	String vs9 = ~msc9.dir;
+	if(!IsNull(vs9) && msc9.create64) {
 		String vc = AppendFileName(vs9, "Vc");
-		String m = ~dlg.visualcppmethod9x64;
-		String sdk = ~dlg.sdk9;
+		String m = ~msc9.method64;
+		String sdk = ~msc9.sdk;
 		if(IsNull(sdk))
 			sdk = AppendFileName(vc, "PlatformSDK");
 		String vc_lib = AppendFileName(vc, "Lib\\x64");
@@ -389,10 +544,10 @@
 		SaveFile(AppendFileName(dir, "default_method"), m);
 	}
 
-	if(!IsNull(vs9) && dlg.dovisualcpp9) {
+	if(!IsNull(vs9) && msc9.create) {
 		String vc = AppendFileName(vs9, "Vc");
-		String m = ~dlg.visualcppmethod9;
-		String sdk = ~dlg.sdk9;
+		String m = ~msc9.method;
+		String sdk = ~msc9.sdk;
 		if(IsNull(sdk))
 			sdk = AppendFileName(vc, "PlatformSDK");
 		SaveFile(
@@ -431,11 +586,11 @@
 		SaveFile(AppendFileName(dir, "default_method"), m);
 	}
 
-	String vs8 = ~dlg.visualcpp8;
-	if(!IsNull(vs8) && dlg.dovisualcpp8x64) {
+	String vs8 = ~msc8.dir;
+	if(!IsNull(vs8) && msc8.create64) {
 		String vc = AppendFileName(vs8, "Vc");
-		String m = ~dlg.visualcppmethod8x64;
-		String sdk = ~dlg.sdk8;
+		String m = ~msc8.method64;
+		String sdk = ~msc8.sdk;
 		if(IsNull(sdk))
 			sdk = AppendFileName(vc, "PlatformSDK");
 		SaveFile(
@@ -474,10 +629,10 @@
 		SaveFile(AppendFileName(dir, "default_method"), m);
 	}
 
-	if(!IsNull(vs8) && dlg.dovisualcpp8) {
+	if(!IsNull(vs8) && msc8.create) {
 		String vc = AppendFileName(vs8, "Vc");
-		String m = ~dlg.visualcppmethod8;
-		String sdk = ~dlg.sdk8;
+		String m = ~msc8.method;
+		String sdk = ~msc8.sdk;
 		if(IsNull(sdk8))
 			sdk = AppendFileName(vc, "PlatformSDK");
 		SaveFile(
@@ -516,14 +671,14 @@
 		SaveFile(AppendFileName(dir, "default_method"), m);
 	}
 
-	String vc7 = ~dlg.visualcpp71;
+	String vc7 = ~msc7_1.dir;
 	if(PathIsEqual(vc7, vs))
 		vs = AppendFileName(GetFileFolder(NormalizePath(vs)), "Common7\\ide") + ";";
 	else
 		vs.Clear();
-	if(!IsNull(vc7) && dlg.dovisualcpp71) {
-		String m = ~dlg.visualcppmethod71;
-		String sdk = ~dlg.sdk71;
+	if(!IsNull(vc7) && msc7_1.create) {
+		String m = ~msc7_1.method;
+		String sdk = ~msc7_1.sdk;
 		if(IsNull(sdk))
 			sdk = AppendFileName(vc7, "PlatformSDK");
 		SaveFile(
diff -ruN uppsrc/ide/Builders/MscBuilder.icpp uppsrc/ide/Builders/MscBuilder.icpp
--- uppsrc/ide/Builders/MscBuilder.icpp	2013-03-29 20:04:50 +0400
+++ uppsrc/ide/Builders/MscBuilder.icpp	2013-05-27 01:25:33 +0400
@@ -103,7 +103,7 @@
 
 bool MscBuilder::IsMsc86() const
 {
-	return HasFlag("MSC8") || HasFlag("MSC9") || HasFlag("MSC10");
+	return HasFlag("MSC8") || HasFlag("MSC9") || HasFlag("MSC10") || HasFlag("MSC11");
 }
 
 bool MscBuilder::IsMscArm() const
@@ -113,7 +113,7 @@
 
 bool MscBuilder::IsMsc64() const
 {
-	return HasFlag("MSC8X64") || HasFlag("MSC9X64") || HasFlag("MSC10X64");
+	return HasFlag("MSC8X64") || HasFlag("MSC9X64") || HasFlag("MSC10X64") || HasFlag("MSC11X64");
 }
 
 String MscBuilder::LinkerName() const
@@ -372,6 +372,7 @@
 			IdeConsoleEndGroup();
 			return false;
 		}
+		bool isgemsc10 = HasFlag("MSC10") || HasFlag("MSC10X64") || HasFlag("MSC11") || HasFlag("MSC11X64");
 		Vector<Host::FileInfo> objinfo = host->GetFileInfo(obj);
 		for(int i = 0; i < obj.GetCount(); i++)
 			if(objinfo[i] > producttime) {
@@ -381,7 +382,7 @@
 					lib << "-machine:" << MachineName()
 						<< " -pdb:" << GetHostPathQ(ForceExt(product, ".pdb"))
 						<< " -out:" << GetHostPathQ(product);
-					if(!HasFlag("MSC10") && !HasFlag("MSC10X64"))
+					if(!isgemsc10)
 						lib << " -incremental:no";
 					if(HasFlag("FORCE_SIZE")){
 						if(sContainsPchOptions(release_size_options))
@@ -516,6 +517,7 @@
 	int time = GetTickCount();
 	if(!Wait())
 		return false;
+	bool isgemsc10 = HasFlag("MSC10") || HasFlag("MSC10X64") || HasFlag("MSC11") || HasFlag("MSC11X64");
 	for(int i = 0; i < linkfile.GetCount(); i++)
 		if(GetFileTime(linkfile[i]) >= targettime) {
 			String link;
@@ -530,7 +532,7 @@
 			if(HasFlag("FORCE_SPEED"))
 				if(sContainsPchOptions(release_options))
 					link << " -ltcg";
-			if(!HasFlag("MSC10") && !HasFlag("MSC10X64"))
+			if(!isgemsc10)
 				if(HasAnyDebug())
 					link << " -incremental:yes -debug -OPT:NOREF";
 				else
@@ -605,6 +607,8 @@
 	RegisterBuilder("MSC9X64", CreateMscBuilder);
 	RegisterBuilder("MSC10", CreateMscBuilder);
 	RegisterBuilder("MSC10X64", CreateMscBuilder);
+	RegisterBuilder("MSC11", CreateMscBuilder);
+	RegisterBuilder("MSC11X64", CreateMscBuilder);
 	RegisterBuilder("MSC9ARM", CreateMscBuilder);
 	RegisterBuilder("EVC_ARM", CreateMscBuilder);
 	RegisterBuilder("EVC_MIPS", CreateMscBuilder);
diff -ruN uppsrc/ide/ide.lay uppsrc/ide/ide.lay
--- uppsrc/ide/ide.lay	2013-05-25 23:14:35 +0400
+++ uppsrc/ide/ide.lay	2013-05-27 08:03:37 +0400
@@ -265,57 +265,84 @@
 	ITEM(Button, ok, SetLabel(t_("Continue")).RightPosZ(8, 64).BottomPosZ(8, 24))
 END_LAYOUT
 
-LAYOUT(AutoSetupLayout, 612, 504)
-	ITEM(LabelBox, dv___0, SetLabel(t_("Visual C++")).LeftPosZ(4, 600).TopPosZ(4, 308))
-	ITEM(Option, dovisualcpp10, SetLabel(t_("Create Visual C++ 10.0 build method")).LeftPosZ(12, 200).TopPosZ(24, 15))
-	ITEM(EditString, visualcppmethod10, LeftPosZ(216, 72).TopPosZ(22, 19))
-	ITEM(Option, dovisualcpp10x64, SetLabel(t_("Create VC++ 10.0 x64 build method")).LeftPosZ(12, 200).TopPosZ(48, 15))
-	ITEM(EditString, visualcppmethod10x64, LeftPosZ(216, 72).TopPosZ(46, 19))
-	ITEM(Label, dv___5, SetLabel(t_("Visual C++ 10.0 directory")).LeftPosZ(12, 276).TopPosZ(68, 19))
-	ITEM(EditString, visualcpp10, LeftPosZ(12, 276).TopPosZ(88, 19))
-	ITEM(Label, dv___7, SetLabel(t_("Win32 SDK for Visual C++ 10.0 directory")).LeftPosZ(12, 276).TopPosZ(112, 19))
-	ITEM(EditString, sdk10, LeftPosZ(12, 276).TopPosZ(132, 19))
-	ITEM(LabelBox, dv___9, LeftPosZ(8, 284).TopPosZ(156, 8))
-	ITEM(Option, dovisualcpp9, SetLabel(t_("Create Visual C++ 9.0 build method")).LeftPosZ(12, 200).TopPosZ(176, 15))
-	ITEM(EditString, visualcppmethod9, LeftPosZ(216, 72).TopPosZ(174, 19))
-	ITEM(Option, dovisualcpp9x64, SetLabel(t_("Create VC++ 9.0 x64 build method")).LeftPosZ(12, 200).TopPosZ(200, 15))
-	ITEM(EditString, visualcppmethod9x64, LeftPosZ(216, 72).TopPosZ(198, 19))
-	ITEM(Label, dv___14, SetLabel(t_("Visual C++ 9.0 directory")).LeftPosZ(12, 276).TopPosZ(220, 19))
-	ITEM(EditString, visualcpp9, LeftPosZ(12, 276).TopPosZ(240, 19))
-	ITEM(Label, dv___16, SetLabel(t_("Win32 SDK for Visual C++ 9.0 directory")).LeftPosZ(12, 276).TopPosZ(264, 19))
-	ITEM(EditString, sdk9, LeftPosZ(12, 276).TopPosZ(284, 19))
-	ITEM(LabelBox, dv___18, LeftPosZ(300, 4).TopPosZ(8, 296))
-	ITEM(Option, dovisualcpp8, SetLabel(t_("Create Visual C++ 8.0 build method")).LeftPosZ(316, 200).TopPosZ(24, 15))
-	ITEM(EditString, visualcppmethod8, LeftPosZ(520, 72).TopPosZ(22, 19))
-	ITEM(Option, dovisualcpp8x64, SetLabel(t_("Create VC++ 8.0 x64 build method")).LeftPosZ(316, 200).TopPosZ(48, 15))
-	ITEM(EditString, visualcppmethod8x64, LeftPosZ(520, 72).TopPosZ(46, 19))
-	ITEM(Label, dv___23, SetLabel(t_("Visual C++ 8.0 directory")).LeftPosZ(316, 276).TopPosZ(68, 19))
-	ITEM(EditString, visualcpp8, LeftPosZ(316, 276).TopPosZ(88, 19))
-	ITEM(Label, dv___25, SetLabel(t_("Win32 SDK for Visual C++ 8.0 directory")).LeftPosZ(316, 276).TopPosZ(112, 19))
-	ITEM(EditString, sdk8, LeftPosZ(316, 276).TopPosZ(132, 19))
-	ITEM(LabelBox, dv___27, LeftPosZ(312, 284).TopPosZ(156, 8))
-	ITEM(Option, dovisualcpp71, SetLabel(t_("Create Visual C++ 7.1 build method")).LeftPosZ(316, 200).TopPosZ(172, 15))
-	ITEM(EditString, visualcppmethod71, LeftPosZ(520, 72).TopPosZ(170, 19))
-	ITEM(Label, dv___30, SetLabel(t_("Visual C++ 7.1 directory")).LeftPosZ(316, 276).TopPosZ(192, 19))
-	ITEM(EditString, visualcpp71, LeftPosZ(316, 276).TopPosZ(212, 19))
-	ITEM(Label, dv___32, SetLabel(t_("Win32 SDK for Visual C++ 7.1 directory")).LeftPosZ(316, 272).TopPosZ(236, 19))
-	ITEM(EditString, sdk71, LeftPosZ(316, 276).TopPosZ(256, 19))
-	ITEM(Button, ok, SetLabel(t_("OK")).LeftPosZ(472, 64).TopPosZ(472, 24))
-	ITEM(Button, cancel, SetLabel(t_("Cancel")).LeftPosZ(540, 64).TopPosZ(472, 24))
-	ITEM(LabelBox, dv___36, SetLabel(t_("MinGW")).LeftPosZ(4, 292).TopPosZ(320, 88))
-	ITEM(Option, domingw, SetLabel(t_("Create MinGW build method")).LeftPosZ(12, 172).TopPosZ(338, 15))
-	ITEM(EditString, mingwmethod, LeftPosZ(216, 72).TopPosZ(336, 19))
-	ITEM(EditString, mingw, LeftPosZ(12, 276).TopPosZ(380, 19))
-	ITEM(Label, dv___40, SetLabel(t_("MinGW compiler system directory")).LeftPosZ(12, 276).TopPosZ(360, 19))
-	ITEM(Label, dv___41, SetLabel(t_("SDL directory")).LeftPosZ(304, 96).TopPosZ(324, 19))
-	ITEM(EditString, sdl, LeftPosZ(304, 300).TopPosZ(344, 19))
-	ITEM(Label, dv___43, SetLabel(t_("MySql directory")).LeftPosZ(304, 96).TopPosZ(368, 19))
-	ITEM(EditString, mysql, LeftPosZ(304, 300).TopPosZ(388, 19))
-	ITEM(LabelBox, dv___45, SetLabel(t_("Open Watcom")).LeftPosZ(4, 292).TopPosZ(416, 80))
-	ITEM(Option, doowc, SetLabel(t_("Create Open Watcom build method")).LeftPosZ(12, 204).TopPosZ(432, 16))
-	ITEM(EditString, owcmethod, HSizePosZ(216, 324).TopPosZ(432, 19))
-	ITEM(Label, dv___48, SetLabel(t_("Open Watcom compiler system directory")).LeftPosZ(12, 276).TopPosZ(452, 20))
-	ITEM(EditString, owc, LeftPosZ(12, 276).TopPosZ(472, 19))
+LAYOUT(AutoSetupLayout, 320, 240)
+	ITEM(TabCtrl, tab, HSizePosZ(0, 0).VSizePosZ(0, 28))
+	ITEM(Button, ok, SetLabel(t_("OK")).RightPosZ(64, 56).BottomPosZ(4, 20))
+	ITEM(Button, cancel, SetLabel(t_("Cancel")).RightPosZ(4, 56).BottomPosZ(4, 20))
+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))
+	ITEM(Option, create64, SetLabel(t_("Create VC++ 11.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++ 11.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++ 11.0 directory")).LeftPosZ(0, 276).TopPosZ(92, 19))
+	ITEM(EditString, sdk, HSizePosZ(0, 0).TopPosZ(112, 19))
+END_LAYOUT
+
+LAYOUT(AutoSetupMSC10, 276, 132)
+	ITEM(Option, create, SetLabel(t_("Create Visual C++ 10.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++ 10.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++ 10.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++ 10.0 directory")).LeftPosZ(0, 276).TopPosZ(92, 19))
+	ITEM(EditString, sdk, HSizePosZ(0, 0).TopPosZ(112, 19))
+END_LAYOUT
+
+LAYOUT(AutoSetupMSC9, 276, 132)
+	ITEM(Option, create, SetLabel(t_("Create Visual C++ 9.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++ 9.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++ 9.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++ 9.0 directory")).LeftPosZ(0, 276).TopPosZ(92, 19))
+	ITEM(EditString, sdk, HSizePosZ(0, 0).TopPosZ(112, 19))
+END_LAYOUT
+
+LAYOUT(AutoSetupMSC8, 276, 132)
+	ITEM(Option, create, SetLabel(t_("Create Visual C++ 8.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++ 8.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++ 8.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++ 8.0 directory")).LeftPosZ(0, 276).TopPosZ(92, 19))
+	ITEM(EditString, sdk, HSizePosZ(0, 0).TopPosZ(112, 19))
+END_LAYOUT
+
+LAYOUT(AutoSetupMSC7_1, 276, 108)
+	ITEM(Option, create, SetLabel(t_("Create Visual C++ 7.1 build method")).LeftPosZ(0, 200).TopPosZ(4, 15))
+	ITEM(EditString, method, HSizePosZ(204, 0).TopPosZ(2, 19))
+	ITEM(Label, dv___2, SetLabel(t_("Visual C++ 7.1 directory")).LeftPosZ(0, 276).TopPosZ(24, 19))
+	ITEM(EditString, dir, HSizePosZ(0, 0).TopPosZ(44, 19))
+	ITEM(Label, dv___4, SetLabel(t_("Win32 SDK for Visual C++ 7.1 directory")).LeftPosZ(0, 276).TopPosZ(68, 19))
+	ITEM(EditString, sdk, HSizePosZ(0, 0).TopPosZ(88, 19))
+END_LAYOUT
+
+LAYOUT(AutoSetupMinGW, 276, 64)
+	ITEM(Option, create, SetLabel(t_("Create MinGW build method")).LeftPosZ(0, 200).TopPosZ(4, 15))
+	ITEM(EditString, method, HSizePosZ(204, 0).TopPosZ(2, 19))
+	ITEM(Label, dv___2, SetLabel(t_("MinGW compiler system directory")).LeftPosZ(0, 276).TopPosZ(24, 19))
+	ITEM(EditString, dir, HSizePosZ(0, 0).TopPosZ(44, 19))
+END_LAYOUT
+
+LAYOUT(AutoSetupOWC, 276, 64)
+	ITEM(Option, create, SetLabel(t_("Create Open Watcom build method")).LeftPosZ(0, 200).TopPosZ(4, 15))
+	ITEM(EditString, method, HSizePosZ(204, 0).TopPosZ(2, 19))
+	ITEM(Label, dv___2, SetLabel(t_("Open Watcom compiler system directory")).LeftPosZ(0, 276).TopPosZ(24, 19))
+	ITEM(EditString, dir, HSizePosZ(0, 0).TopPosZ(44, 19))
+END_LAYOUT
+
+LAYOUT(AutoSetupOther, 276, 84)
+	ITEM(Label, dv___0, SetLabel(t_("SDL directory")).LeftPosZ(0, 276).TopPosZ(0, 19))
+	ITEM(EditString, sdl, HSizePosZ(0, 0).TopPosZ(20, 19))
+	ITEM(Label, dv___2, SetLabel(t_("MySql directory")).LeftPosZ(0, 276).TopPosZ(44, 19))
+	ITEM(EditString, mysql, HSizePosZ(0, 0).TopPosZ(64, 19))
 END_LAYOUT
 
 LAYOUT(LangLayout, 716, 480)
