diff --git a/AddIns/ICSharpCode.SharpDevelop.addin b/AddIns/ICSharpCode.SharpDevelop.addin
index f5fef28e96..974be6fc3a 100644
--- a/AddIns/ICSharpCode.SharpDevelop.addin
+++ b/AddIns/ICSharpCode.SharpDevelop.addin
@@ -668,27 +668,33 @@
 		<ToolbarItem id = "Cut"
 		             icon = "Icons.16x16.CutIcon"
 		             tooltip = "${res:XML.MainMenu.EditMenu.Cut.Description}"
+		             loadclasslazy = "false"
 		             class = "ICSharpCode.SharpDevelop.Commands.Cut"/>
 		<ToolbarItem id = "Copy"
 		             icon = "Icons.16x16.CopyIcon"
 		             tooltip = "${res:XML.MainMenu.EditMenu.Copy.Description}"
+		             loadclasslazy = "false"
 		             class = "ICSharpCode.SharpDevelop.Commands.Copy"/>
 		<ToolbarItem id = "Paste"
 		             icon = "Icons.16x16.PasteIcon"
 		             tooltip = "${res:XML.MainMenu.EditMenu.Paste.Description}"
+		             loadclasslazy = "false"
 		             class = "ICSharpCode.SharpDevelop.Commands.Paste"/>
 		<ToolbarItem id = "Delete"
 		             icon = "Icons.16x16.DeleteIcon"
 		             tooltip = "${res:XML.MainMenu.EditMenu.Delete.Description}"
+		             loadclasslazy = "false"
 		             class = "ICSharpCode.SharpDevelop.Commands.Delete"/>
 		<ToolbarItem id = "UndoRedoSeparator"  type = "Separator"/>
 		<ToolbarItem id      = "Undo"
 		             icon    = "Icons.16x16.UndoIcon"
 		             tooltip = "${res:XML.MainMenu.EditMenu.Undo.Description}"
+		             loadclasslazy = "false"
 		             class   = "ICSharpCode.SharpDevelop.Commands.Undo"/>
 		<ToolbarItem id      = "Redo"
 		             icon    = "Icons.16x16.RedoIcon"
 		             tooltip = "${res:XML.MainMenu.EditMenu.Redo.Description}"
+		             loadclasslazy = "false"
 		             class   = "ICSharpCode.SharpDevelop.Commands.Redo"/>
 		
 		<ToolbarItem id = "CompileSeparator" type = "Separator"/>
@@ -1058,48 +1064,53 @@
 		</MenuItem> <!-- END File menu -->
 		
 		<MenuItem id = "Edit" label = "${res:XML.MainMenu.EditMenu}" type="Menu">
-			<Condition name = "WindowActive" activewindow="*" action="Disable">
-				<MenuItem id = "Undo"
-				          label = "${res:XML.MainMenu.EditMenu.Undo}"
-				          icon = "Icons.16x16.UndoIcon"
-				          type = "Item"
-				          shortcut = "Control|Z"
-				          class = "ICSharpCode.SharpDevelop.Commands.Undo"/>
-				<MenuItem id = "Redo"
-				          label = "${res:XML.MainMenu.EditMenu.Redo}"
-				          icon = "Icons.16x16.RedoIcon"
-				          type = "Item"
-				          shortcut = "Control|Y"
-				          class = "ICSharpCode.SharpDevelop.Commands.Redo"/>
-			</Condition>
+			<MenuItem id = "Undo"
+			          label = "${res:XML.MainMenu.EditMenu.Undo}"
+			          icon = "Icons.16x16.UndoIcon"
+			          type = "Item"
+			          shortcut = "Control|Z"
+			          loadclasslazy = "false"
+			          class = "ICSharpCode.SharpDevelop.Commands.Undo"/>
+			<MenuItem id = "Redo"
+			          label = "${res:XML.MainMenu.EditMenu.Redo}"
+			          icon = "Icons.16x16.RedoIcon"
+			          type = "Item"
+			          shortcut = "Control|Y"
+			          loadclasslazy = "false"
+			          class = "ICSharpCode.SharpDevelop.Commands.Redo"/>
 			<MenuItem id = "Separator1" type = "Separator"  />
 			<MenuItem id = "Cut"
 			          label = "${res:XML.MainMenu.EditMenu.Cut}"
 			          icon = "Icons.16x16.CutIcon"
 			          type = "Item"
 			          shortcut = "Control|X"
+			          loadclasslazy = "false"
 			          class = "ICSharpCode.SharpDevelop.Commands.Cut"/>
 			<MenuItem id = "Copy"
 			          label = "${res:XML.MainMenu.EditMenu.Copy}"
 			          icon = "Icons.16x16.CopyIcon"
 			          type = "Item"
 			          shortcut = "Control|C"
+			          loadclasslazy = "false"
 			          class = "ICSharpCode.SharpDevelop.Commands.Copy"/>
 			<MenuItem id = "Paste"
 			          label = "${res:XML.MainMenu.EditMenu.Paste}"
 			          icon = "Icons.16x16.PasteIcon"
 			          type = "Item"
 			          shortcut = "Control|V"
+			          loadclasslazy = "false"
 			          class = "ICSharpCode.SharpDevelop.Commands.Paste"/>
 			<MenuItem id = "Delete"
 			          label = "${res:XML.MainMenu.EditMenu.Delete}"
 			          icon = "Icons.16x16.DeleteIcon"
 			          type = "Item"
+			          loadclasslazy = "false"
 			          class = "ICSharpCode.SharpDevelop.Commands.Delete"/>
 			<MenuItem id = "SelectAll"
 			          label = "${res:XML.MainMenu.EditMenu.SelectAll}"
 			          type = "Item"
 			          shortcut = "Control|A"
+			          loadclasslazy = "false"
 			          class = "ICSharpCode.SharpDevelop.Commands.SelectAll"/>
 			<MenuItem id = "Separator4" type = "Separator"  />
 			<ComplexCondition action="Disable">
diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj
index 0dcd4feb1c..95fb4c504f 100644
--- a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj
+++ b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj
@@ -11,6 +11,7 @@
     <NoStdLib>False</NoStdLib>
     <NoConfig>False</NoConfig>
     <RunPostBuildEvent>OnSuccessfulBuild</RunPostBuildEvent>
+    <ProductVersion>8.0.50215</ProductVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>True</DebugSymbols>
@@ -37,7 +38,9 @@
   </ItemGroup>
   <ItemGroup>
     <Compile Include="Configuration\AssemblyInfo.cs" />
-    <Compile Include="Src\XmlEditorControl.cs" />
+    <Compile Include="Src\XmlEditorControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="Src\XmlCompletionDataProvider.cs" />
     <Compile Include="Src\XmlCompletionData.cs" />
     <Compile Include="Src\XmlCompletionDataImageList.cs" />
@@ -54,15 +57,23 @@
     <Compile Include="Src\XmlSchemaManager.cs" />
     <Compile Include="Src\Parser.cs" />
     <Compile Include="Src\ValidateXmlCommand.cs" />
-    <Compile Include="Src\XmlSchemasPanel.cs" />
+    <Compile Include="Src\XmlSchemasPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="Src\XmlSchemaListBoxItem.cs" />
-    <Compile Include="Src\CodeCompletionWindow.cs" />
+    <Compile Include="Src\CodeCompletionWindow.cs">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Include="Src\XmlEditorAddInOptions.cs" />
-    <Compile Include="Src\SelectXmlSchemaForm.cs" />
+    <Compile Include="Src\SelectXmlSchemaForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Include="Src\CodeCompletionPopupCommand.cs" />
     <Compile Include="Src\XmlSchemaAssociation.cs" />
     <Compile Include="Src\XmlSchemaAssociationListBoxItem.cs" />
-    <Compile Include="Src\XmlEditorOptionsPanel.cs" />
+    <Compile Include="Src\XmlEditorOptionsPanel.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="Src\CreateSchemaCommand.cs" />
     <Compile Include="Src\EncodedStringWriter.cs" />
     <EmbeddedResource Include="Resources\XmlSchemasPanel.xfrm" />
diff --git a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj.user b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj.user
index ef111b3b5e..33f1bf7309 100644
--- a/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj.user
+++ b/src/AddIns/DisplayBindings/XmlEditor/Project/XmlEditor.csproj.user
@@ -1,4 +1,7 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " />
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " />
+  <PropertyGroup>
+    <LastOpenVersion>8.0.50215</LastOpenVersion>
+  </PropertyGroup>
 </Project>
\ No newline at end of file
diff --git a/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj b/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj
index 0e239d4c76..22d4fdbde1 100644
--- a/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj
+++ b/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj
@@ -6,6 +6,8 @@
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
     <ProjectGuid>{918487B7-2153-4618-BBB3-344DBDDF2A2A}</ProjectGuid>
+    <ProductVersion>8.0.50215</ProductVersion>
+    <SchemaVersion>2.0</SchemaVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <OutputPath>..\..\..\..\..\AddIns\AddIns\Misc\HtmlHelp2\</OutputPath>
@@ -35,24 +37,36 @@
     <Reference Include="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
   </ItemGroup>
   <ItemGroup>
-    <Compile Include="src\BaseControls\TocPad.cs" />
+    <Compile Include="src\BaseControls\TocPad.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <None Include="src\BaseControls\DynamicHelpPad.cs" />
     <Compile Include="src\BaseControls\FavoritesPad.cs" />
-    <Compile Include="src\BaseControls\IndexPad.cs" />
+    <Compile Include="src\BaseControls\IndexPad.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="src\BaseControls\IndexResultsPad.cs" />
     <Compile Include="src\BaseControls\SearchPad.cs" />
-    <Compile Include="src\BaseControls\SearchResultsPad.cs" />
+    <Compile Include="src\BaseControls\SearchResultsPad.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="src\BrowserControl\ShowHelpBrowser.cs" />
     <None Include="HtmlHelp2.addin">
       <CopyToOutputDirectory>Always</CopyToOutputDirectory>
     </None>
     <Compile Include="src\Service\Help2RegistryWalker.cs" />
-    <Compile Include="src\Service\HtmlHelp2Dialog.cs" />
+    <Compile Include="src\Service\HtmlHelp2Dialog.cs">
+      <SubType>Component</SubType>
+    </Compile>
     <Compile Include="src\Service\HtmlHelp2Service.cs" />
     <Compile Include="src\Service\ResourcesHelper.cs" />
     <Compile Include="src\Service\Help2ControlsValidation.cs" />
-    <Compile Include="src\Service\AxMSHelpControls.cs" />
-    <Compile Include="src\Service\HtmlHelp2Options.cs" />
+    <Compile Include="src\Service\AxMSHelpControls.cs">
+      <SubType>Component</SubType>
+    </Compile>
+    <Compile Include="src\Service\HtmlHelp2Options.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Include="Configuration\AssemblyInfo.cs" />
     <EmbeddedResource Include="Resources\Favorites.16x16.Delete.bmp" />
     <EmbeddedResource Include="Resources\Favorites.16x16.MoveDown.bmp" />
diff --git a/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj.user b/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj.user
index c439b83dc4..7b8f1b2e86 100644
--- a/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj.user
+++ b/src/AddIns/Misc/HtmlHelp2/Project/HtmlHelp2.csproj.user
@@ -1,3 +1,6 @@
 <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' " />
+  <PropertyGroup>
+    <LastOpenVersion>8.0.50215</LastOpenVersion>
+  </PropertyGroup>
 </Project>
\ No newline at end of file
diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
index 35c681b5f3..f51d575af4 100644
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
@@ -183,7 +183,7 @@
       <SubType>UserControl</SubType>
     </Compile>
     <Compile Include="Src\Gui\Dialogs\CommonAboutDialog.cs">
-      <SubType>UserControl</SubType>
+      <SubType>Form</SubType>
     </Compile>
     <Compile Include="Src\Gui\Dialogs\DirtyFilesDialog.cs" />
     <Compile Include="Src\Gui\Dialogs\FolderDialog.cs" />
diff --git a/src/Main/Base/Project/Src/Commands/EditCommands.cs b/src/Main/Base/Project/Src/Commands/EditCommands.cs
index 294f1ea066..5ba6f1af59 100644
--- a/src/Main/Base/Project/Src/Commands/EditCommands.cs
+++ b/src/Main/Base/Project/Src/Commands/EditCommands.cs
@@ -27,6 +27,11 @@ namespace ICSharpCode.SharpDevelop.Commands
 				IUndoHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IUndoHandler;
 				if (editable != null) {
 					return editable.EnableUndo;
+				} else {
+					TextBoxBase textBox = WorkbenchSingleton.ActiveControl as TextBoxBase;
+					if (textBox != null) {
+						return textBox.CanUndo;
+					}
 				}
 				return false;
 			}
@@ -37,6 +42,11 @@ namespace ICSharpCode.SharpDevelop.Commands
 			IUndoHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IUndoHandler;
 			if (editable != null) {
 				editable.Undo();
+			} else {
+				TextBoxBase textBox = WorkbenchSingleton.ActiveControl as TextBoxBase;
+				if (textBox != null) {
+					textBox.Undo();
+				}
 			}
 		}
 	}
@@ -61,37 +71,86 @@ namespace ICSharpCode.SharpDevelop.Commands
 			}
 		}
 	}
-
-	public class Cut : AbstractMenuCommand
+	
+	public abstract class AbstractClipboardCommand : AbstractMenuCommand
 	{
-		public override bool IsEnabled {
-			get {
-				IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
-				if (editable != null) {
-					return editable.EnableCut;
-				}
-				return false;
+		protected abstract bool GetEnabled(IClipboardHandler editable);
+		protected abstract void Run(IClipboardHandler editable);
+		
+		public static IClipboardHandler GetClipboardHandlerWrapper(Control ctl)
+		{
+			TextBoxBase tb = ctl as TextBoxBase;
+			if (tb != null)
+				return new TextBoxWrapper(tb);
+			ComboBox cb = ctl as ComboBox;
+			if (cb != null && cb.DropDownStyle != ComboBoxStyle.DropDownList)
+				return new ComboBoxWrapper(cb);
+			return null;
+		}
+		
+		private class TextBoxWrapper : IClipboardHandler
+		{
+			TextBoxBase textBox;
+			public TextBoxWrapper(TextBoxBase textBox) {
+				this.textBox = textBox;
+			}
+			public bool EnableCut {
+				get { return !textBox.ReadOnly && textBox.SelectionLength > 0; }
+			}
+			public bool EnableCopy {
+				get { return textBox.SelectionLength > 0; }
 			}
+			public bool EnablePaste {
+				get { return !textBox.ReadOnly; }
+			}
+			public bool EnableDelete {
+				get { return !textBox.ReadOnly && textBox.SelectionLength > 0; }
+			}
+			public bool EnableSelectAll {
+				get { return textBox.TextLength > 0; }
+			}
+			public void Cut()       { textBox.Cut(); }
+			public void Copy()      { textBox.Copy(); }
+			public void Paste()     { textBox.Paste(); }
+			public void Delete()    { textBox.SelectedText = ""; }
+			public void SelectAll() { textBox.SelectAll(); }
 		}
 		
-		public override void Run()
+		private class ComboBoxWrapper : IClipboardHandler
 		{
-			if (IsEnabled) {
-				IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
-				if (editable != null) {
-					editable.Cut();
-				}
+			ComboBox comboBox;
+			public ComboBoxWrapper(ComboBox comboBox) {
+				this.comboBox = comboBox;
+			}
+			public bool EnableCut {
+				get { return comboBox.SelectionLength > 0; }
+			}
+			public bool EnableCopy {
+				get { return comboBox.SelectionLength > 0; }
+			}
+			public bool EnablePaste {
+				get { return Clipboard.ContainsText(); }
 			}
+			public bool EnableDelete {
+				get { return true; }
+			}
+			public bool EnableSelectAll {
+				get { return comboBox.Text.Length > 0; }
+			}
+			public void Cut()       { Clipboard.SetText(comboBox.SelectedText); comboBox.SelectedText = ""; }
+			public void Copy()      { Clipboard.SetText(comboBox.SelectedText); }
+			public void Paste()     { comboBox.SelectedText = Clipboard.GetText(); }
+			public void Delete()    { comboBox.SelectedText = ""; }
+			public void SelectAll() { comboBox.SelectAll(); }
 		}
-	}
-	
-	public class Copy : AbstractMenuCommand
-	{
+		
 		public override bool IsEnabled {
 			get {
 				IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
+				if (editable == null)
+					editable = GetClipboardHandlerWrapper(WorkbenchSingleton.ActiveControl);
 				if (editable != null) {
-					return editable.EnableCopy;
+					return GetEnabled(editable);
 				}
 				return false;
 			}
@@ -101,77 +160,65 @@ namespace ICSharpCode.SharpDevelop.Commands
 		{
 			if (IsEnabled) {
 				IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
+				if (editable == null)
+					editable = GetClipboardHandlerWrapper(WorkbenchSingleton.ActiveControl);
 				if (editable != null) {
-					editable.Copy();
+					Run(editable);
 				}
 			}
 		}
 	}
 	
-	public class Paste : AbstractMenuCommand
+	public class Cut : AbstractClipboardCommand
 	{
-		public override bool IsEnabled {
-			get {
-				IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
-				if (editable != null) {
-					return editable.EnablePaste;
-				}
-				return false;
-			}
+		protected override bool GetEnabled(IClipboardHandler editable) {
+			return editable.EnableCut;
 		}
-		public override void Run()
-		{
-			if (IsEnabled) {
-				IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
-				if (editable != null) {
-					editable.Paste();
-				}
-			}
+		protected override void Run(IClipboardHandler editable) {
+			editable.Cut();
 		}
 	}
 	
-	public class Delete : AbstractMenuCommand
+	public class Copy : AbstractClipboardCommand
 	{
-		public override bool IsEnabled {
-			get {
-				IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
-				if (editable != null) {
-					return editable.EnableDelete;
-				}
-				return false;
-			}
+		protected override bool GetEnabled(IClipboardHandler editable) {
+			return editable.EnableCopy;
 		}
-		public override void Run()
-		{
-			IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
-			if (editable != null) {
-				editable.Delete();
-			}
+		protected override void Run(IClipboardHandler editable) {
+			editable.Copy();
 		}
 	}
 	
-	public class SelectAll : AbstractMenuCommand
+	public class Paste : AbstractClipboardCommand
 	{
-		public override bool IsEnabled {
-			get {
-				IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
-				if (editable != null) {
-					return editable.EnableSelectAll;
-				}
-				return false;
-			}
+		protected override bool GetEnabled(IClipboardHandler editable) {
+			return editable.EnablePaste;
 		}
-		public override void Run()
-		{
-			if (IsEnabled) {
-				IClipboardHandler editable = WorkbenchSingleton.Workbench.ActiveContent as IClipboardHandler;
-				if (editable != null) {
-					editable.SelectAll();
-				}
-			}
+		protected override void Run(IClipboardHandler editable) {
+			editable.Paste();
 		}
 	}
-
+	
+	public class Delete : AbstractClipboardCommand
+	{
+		protected override bool GetEnabled(IClipboardHandler editable) {
+			return editable.EnableDelete;
+		}
+		protected override void Run(IClipboardHandler editable) {
+			editable.Delete();
+		}
+	}
+	
+	public class SelectAll : AbstractClipboardCommand
+	{
+		protected override bool GetEnabled(IClipboardHandler editable) {
+			return editable.EnableSelectAll;
+		}
+		protected override void Run(IClipboardHandler editable) {
+			editable.SelectAll();
+		}
+	}
+	
 	public class WordCount : AbstractMenuCommand
 	{
 		public override void Run()
diff --git a/src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs b/src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs
index 73f8ba4b94..f9d6581922 100644
--- a/src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs
+++ b/src/Main/Base/Project/Src/Dom/ReflectionLayer/ReflectionClass.cs
@@ -24,12 +24,16 @@ namespace ICSharpCode.SharpDevelop.Dom
 			BindingFlags.NonPublic |
 			BindingFlags.DeclaredOnly |
 			BindingFlags.Public;
-		
+
+		List<IClass> innerClasses;
+
 		public override List<IClass> InnerClasses {
 			get {
-				List<IClass> innerClasses = new List<IClass>();
-				foreach (Type nestedType in type.GetNestedTypes(flags)) {
-					innerClasses.Add(new ReflectionClass(CompilationUnit, nestedType, this));
+				if (innerClasses == null) {
+					innerClasses = new List<IClass>();
+					foreach (Type nestedType in type.GetNestedTypes(flags)) {
+						innerClasses.Add(new ReflectionClass(CompilationUnit, nestedType, this));
+					}
 				}
 				return innerClasses;
 			}
diff --git a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserLocationConditionEvaluator.cs b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserLocationConditionEvaluator.cs
index 488f9e0c8f..8fbf5208c5 100644
--- a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserLocationConditionEvaluator.cs
+++ b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/BrowserLocationConditionEvaluator.cs
@@ -19,10 +19,7 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
 		public bool IsValid(object caller, Condition condition)
 		{
 			HtmlViewPane pane = (HtmlViewPane)caller;
-			Uri uri = pane.Url;
-			if (uri == null)
-				return false;
-			string url = uri.ToString();
+			string url = pane.Url.ToString();
 			string pattern = condition.Properties["urlRegex"];
 			string options = condition.Properties["options"];
 			if (options != null && options.Length > 0)
diff --git a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/HtmlViewPane.cs b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/HtmlViewPane.cs
index 3b2e93b89a..e27a54c636 100644
--- a/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/HtmlViewPane.cs
+++ b/src/Main/Base/Project/Src/Gui/BrowserDisplayBinding/HtmlViewPane.cs
@@ -318,7 +318,7 @@ namespace ICSharpCode.SharpDevelop.BrowserDisplayBinding
 		public Uri Url {
 			get {
 				if (webBrowser.Url == null)
-					return null;
+					return new Uri("about:blank");
 				if (dummyUrl != null && webBrowser.Url.ToString() == "about:blank") {
 					return new Uri(dummyUrl);
 				} else {
diff --git a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs
index fc1452593e..1918fdff50 100644
--- a/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs
+++ b/src/Main/Base/Project/Src/Gui/Pads/ProjectBrowser/ProjectBrowserPanel.cs
@@ -40,15 +40,13 @@ namespace ICSharpCode.SharpDevelop.Project
 			projectBrowserControl.Dock = DockStyle.Fill;
 			Controls.Add(projectBrowserControl);
 			
-			toolStrip = new ToolStrip();
+			toolStrip = ToolbarService.CreateToolStrip(this, "/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard");
 			toolStrip.ShowItemToolTips  = true;
 			toolStrip.Dock = DockStyle.Top;
 			toolStrip.GripStyle = System.Windows.Forms.ToolStripGripStyle.Hidden;
 			toolStrip.Stretch   = true;
-			standardItems = ToolbarService.CreateToolStripItems(this, "/SharpDevelop/Pads/ProjectBrowser/ToolBar/Standard");
-			if (standardItems != null) {
-				toolStrip.Items.AddRange(standardItems);
-			}
+			standardItems = new ToolStripItem[toolStrip.Items.Count];
+			toolStrip.Items.CopyTo(standardItems, 0);
 			Controls.Add(toolStrip);
 			projectBrowserControl.TreeView.AfterSelect += new TreeViewEventHandler(TreeViewAfterSelect);
 		}
@@ -64,7 +62,7 @@ namespace ICSharpCode.SharpDevelop.Project
 			toolStrip.Items.AddRange(standardItems);
 			if (node.ToolbarAddinTreePath != null) {
 				toolStrip.Items.Add(new ToolStripSeparator());
-				toolStrip.Items.AddRange(ToolbarService.CreateToolStripItems(node, node.ToolbarAddinTreePath));
+				toolStrip.Items.AddRange((ToolStripItem[])AddInTree.BuildItems(node.ToolbarAddinTreePath, node, false).ToArray(typeof(ToolStripItem)));
 			}
 		}
 		
diff --git a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs
index e90d2f9b80..ec735a85c5 100644
--- a/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs
+++ b/src/Main/Base/Project/Src/Gui/Workbench/DefaultWorkbench.cs
@@ -230,6 +230,11 @@ namespace ICSharpCode.SharpDevelop.Gui
 		{
 			RightToLeft = RightToLeftConverter.RightToLeft;
 			
+			foreach (ToolStripItem item in TopMenu.Items) {
+				if (item is IStatusUpdate)
+					((IStatusUpdate)item).UpdateText();
+			}
+				
 			foreach (IViewContent content in workbenchContentCollection) {
 				content.RedrawContent();
 				if (content.WorkbenchWindow != null) {
diff --git a/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs b/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs
index a502333e93..cd67d4ebd0 100644
--- a/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs
+++ b/src/Main/Base/Project/Src/Gui/WorkbenchSingleton.cs
@@ -38,9 +38,24 @@ namespace ICSharpCode.SharpDevelop.Gui
 			}
 		}
 		
+		public static Control ActiveControl {
+			get {
+				ContainerControl container = WorkbenchSingleton.MainForm;
+				Control ctl;
+				do {
+					ctl = container.ActiveControl;
+					if (ctl == null)
+						return container;
+					container = ctl as ContainerControl;
+				} while(container != null);
+				return ctl;
+			}
+		}
+		
 		static WorkbenchSingleton()
 		{
 			PropertyService.PropertyChanged += new PropertyChangedEventHandler(TrackPropertyChanges);
+			ResourceService.LanguageChanged += delegate { workbench.RedrawAllComponents(); };
 		}
 		
 		/// <remarks>
@@ -52,7 +67,6 @@ namespace ICSharpCode.SharpDevelop.Gui
 				switch (e.Key) {
 					case "ICSharpCode.SharpDevelop.Gui.StatusBarVisible":
 					case "ICSharpCode.SharpDevelop.Gui.VisualStyle":
-					case "CoreProperties.UILanguage":
 					case "ICSharpCode.SharpDevelop.Gui.ToolBarVisible":
 						workbench.RedrawAllComponents();
 						break;
diff --git a/src/Main/Base/Project/Src/Services/File/FileService.cs b/src/Main/Base/Project/Src/Services/File/FileService.cs
index 038b0a0053..8892d342f4 100644
--- a/src/Main/Base/Project/Src/Services/File/FileService.cs
+++ b/src/Main/Base/Project/Src/Services/File/FileService.cs
@@ -222,6 +222,8 @@ namespace ICSharpCode.Core
 		
 		public static void RenameFile(string oldName, string newName, bool isDirectory)
 		{
+			if (FileUtility.IsEqualFileName(oldName, newName))
+				return;
 			FileRenamingEventArgs eargs = new FileRenamingEventArgs(oldName, newName, isDirectory);
 			OnFileRenaming(eargs);
 			if (eargs.Cancel)
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/IStatusUpdate.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/IStatusUpdate.cs
index 110a97f3be..8ee0dddfa3 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/IStatusUpdate.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/IStatusUpdate.cs
@@ -12,5 +12,6 @@ namespace ICSharpCode.Core
 	public interface IStatusUpdate
 	{
 		void UpdateStatus();
+		void UpdateText();
 	}
 }
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/Menu.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/Menu.cs
index feb7a00ee5..a5fc4be876 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/Menu.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/Menu.cs
@@ -28,7 +28,8 @@ namespace ICSharpCode.Core
 			this.subItems = subItems;
 			this.RightToLeft = RightToLeft.Inherit;
 			
-			CreateDropDownItems();
+			UpdateText();
+			CreateDropDownItems(); // must be created to support shortcuts
 			if (DropDownItems.Count == 0 && subItems.Count > 0) {
 				DropDownItems.Add(new ToolStripMenuItem());
 			}
@@ -40,7 +41,10 @@ namespace ICSharpCode.Core
 			foreach (object item in subItems) {
 				if (item is ToolStripItem) {
 					DropDownItems.Add((ToolStripItem)item);
-					((IStatusUpdate)item).UpdateStatus();
+					if (item is IStatusUpdate) {
+						((IStatusUpdate)item).UpdateStatus();
+						((IStatusUpdate)item).UpdateText();
+					}
 				} else {
 					ISubmenuBuilder submenuBuilder = (ISubmenuBuilder)item;
 					DropDownItems.AddRange(submenuBuilder.BuildSubmenu(codon, caller));
@@ -49,20 +53,8 @@ namespace ICSharpCode.Core
 		}
 		protected override void OnDropDownShow(EventArgs e)
 		{
-			base.OnDropDownShow(e);
 			CreateDropDownItems();
-			foreach (object item in subItems) {
-				if (item is ToolStripItem) {
-					if (item is IStatusUpdate) {
-						((IStatusUpdate)item).UpdateStatus();
-					}
-				}
-			}
-		}
-
-		protected override void OnDropDownOpened(System.EventArgs e)
-		{
-			base.OnDropDownOpened(e);
+			base.OnDropDownShow(e);
 		}
 		
 		public override bool Enabled {
@@ -81,8 +73,13 @@ namespace ICSharpCode.Core
 				ConditionFailedAction failedAction = codon.GetFailedAction(caller);
 				this.Visible = failedAction != ConditionFailedAction.Exclude;
 			}
-			
-			Text = StringParser.Parse(codon.Properties["label"]);
+		}
+		
+		public virtual void UpdateText()
+		{
+			if (codon != null) {
+				Text = StringParser.Parse(codon.Properties["label"]);
+			}
 		}
 	}
 }
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCheckBox.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCheckBox.cs
index ed4c56b8d1..54a1b5e288 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCheckBox.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCheckBox.cs
@@ -52,6 +52,7 @@ namespace ICSharpCode.Core
 			this.RightToLeft = RightToLeft.Inherit;
 			this.caller = caller;
 			this.codon  = codon;
+			UpdateText();
 		}
 		
 		protected override void OnClick(System.EventArgs e)
@@ -79,10 +80,15 @@ namespace ICSharpCode.Core
 			if (codon != null) {
 				ConditionFailedAction failedAction = codon.GetFailedAction(caller);
 				this.Visible = failedAction != ConditionFailedAction.Exclude;
-				
-				Text    = StringParser.Parse(codon.Properties["label"]);
 				Checked = MenuCommand.IsChecked;
 			}
 		}
+		
+		public virtual void UpdateText()
+		{
+			if (codon != null) {
+				Text = StringParser.Parse(codon.Properties["label"]);
+			}
+		}
 	}
 }
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCommand.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCommand.cs
index 11a3686b48..107bce42b3 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCommand.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuCommand.cs
@@ -20,7 +20,6 @@ namespace ICSharpCode.Core
 		Codon codon;
 		ICommand menuCommand = null;
 		string description = "";
-		string localizedText = null;
 		
 		public string Description {
 			get {
@@ -88,6 +87,7 @@ namespace ICSharpCode.Core
 				CreateCommand();
 			}
 			
+			UpdateText();
 			if (codon.Properties.Contains("shortcut")) {
 				ShortcutKeys =  ParseShortcut(codon.Properties["shortcut"]);
 			}
@@ -154,13 +154,13 @@ namespace ICSharpCode.Core
 					Image = ResourceService.GetBitmap(codon.Properties["icon"]);
 				}
 				Visible = GetVisible();
-				
-				if (localizedText == null) {
-					localizedText = codon.Properties["label"];
-				}
 			}
-			if (localizedText != null) {
-				Text = StringParser.Parse(localizedText);
+		}
+		
+		public virtual void UpdateText()
+		{
+			if (codon != null) {
+				Text = StringParser.Parse(codon.Properties["label"]);
 			}
 		}
 	}
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuSeparator.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuSeparator.cs
index bf35845ebc..0ed26efc86 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuSeparator.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/Gui/MenuSeparator.cs
@@ -39,5 +39,9 @@ namespace ICSharpCode.Core
 				this.Visible = failedAction != ConditionFailedAction.Exclude;
 			}
 		}
+		
+		public virtual void UpdateText()
+		{
+		}
 	}
 }
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs
index 28f32ffef4..fab0b970f9 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/MenuItem/MenuItemDoozer.cs
@@ -27,15 +27,17 @@ namespace ICSharpCode.Core
 		{
 			string type = codon.Properties.Contains("type") ? codon.Properties["type"] : "Command";
 			
+			bool createCommand = codon.Properties["loadclasslazy"] == "false";
+			
 			switch (type) {
 				case "Separator":
 					return new MenuSeparator(codon, caller);
 				case "CheckBox":
 					return new MenuCheckBox(codon, caller);
 				case "Item":
-					return new MenuCommand(codon, caller);
+					return new MenuCommand(codon, caller, createCommand);
 				case "Command":
-					return new MenuCommand(codon, caller, false);
+					return new MenuCommand(codon, caller, createCommand);
 				case "Menu":
 					return new Menu(codon, caller, subItems);
 				case "Builder":
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCheckBox.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCheckBox.cs
index 055bcfd53e..58424d9708 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCheckBox.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCheckBox.cs
@@ -58,6 +58,7 @@ namespace ICSharpCode.Core
 			if (Image == null && codon.Properties.Contains("icon")) {
 				Image = ResourceService.GetBitmap(codon.Properties["icon"]);
 			}
+			UpdateText();
 			UpdateStatus();
 		}
 		
@@ -84,12 +85,22 @@ namespace ICSharpCode.Core
 		{
 			if (codon != null) {
 				ConditionFailedAction failedAction = codon.GetFailedAction(caller);
-				this.Visible = failedAction != ConditionFailedAction.Exclude;
-				if (codon.Properties.Contains("tooltip")) {
-					ToolTipText = StringParser.Parse(codon.Properties["tooltip"]);
+				bool isVisible = failedAction != ConditionFailedAction.Exclude;
+				if (isVisible != Visible)
+					Visible = isVisible;
+				if (menuCommand != null) {
+					bool isChecked = menuCommand.IsChecked;
+					if (isChecked != Checked)
+						Checked = isChecked;
 				}
-				Checked     = menuCommand.IsChecked;
-				Text        = StringParser.Parse(codon.Properties["label"]);
+			}
+		}
+		
+		public virtual void UpdateText()
+		{
+			Text = StringParser.Parse(codon.Properties["label"]);
+			if (codon.Properties.Contains("tooltip")) {
+				ToolTipText = StringParser.Parse(codon.Properties["tooltip"]);
 			}
 		}
 	}
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarComboBox.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarComboBox.cs
index 964de2995c..291ce32031 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarComboBox.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarComboBox.cs
@@ -57,6 +57,7 @@ namespace ICSharpCode.Core
 			if (menuCommand == null) {
 				throw new NullReferenceException("Can't create combobox menu command");
 			}
+			UpdateText();
 			UpdateStatus();
 		}
 		
@@ -100,18 +101,20 @@ namespace ICSharpCode.Core
 			if (codon != null) {
 				ConditionFailedAction failedAction = codon.GetFailedAction(caller);
 				isVisible &= failedAction != ConditionFailedAction.Exclude;
-				
-				if (codon.Properties.Contains("label")) {
-					Text        = StringParser.Parse(codon.Properties["label"]);
-				}
-				if (codon.Properties.Contains("tooltip")) {
-					ToolTipText = StringParser.Parse(codon.Properties["tooltip"]);
-				}
 			}
 			if (base.Visible != isVisible) {
 				Visible = isVisible;
 			}
-			
+		}
+		
+		public virtual void UpdateText()
+		{
+			if (codon.Properties.Contains("label")) {
+				Text = StringParser.Parse(codon.Properties["label"]);
+			}
+			if (codon.Properties.Contains("tooltip")) {
+				ToolTipText = StringParser.Parse(codon.Properties["tooltip"]);
+			}
 		}
 	}
 }
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs
index c8bda4661e..545e208c0a 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarCommand.cs
@@ -18,27 +18,16 @@ namespace ICSharpCode.Core
 	{
 		object caller;
 		Codon codon;
-		string description   = String.Empty;
-		string localizedText = String.Empty;
 		ICommand menuCommand = null;
 		
-		public string Description {
-			get {
-				return description;
-			}
-			set {
-				description = value;
-			}
-		}
-		
-		public ToolBarCommand(Codon codon, object caller)
+		public ToolBarCommand(Codon codon, object caller, bool createCommand)
 		{
 			this.RightToLeft = RightToLeft.Inherit;
 			this.caller        = caller;
 			this.codon         = codon;
 			
-			if (codon.Properties.Contains("tooltip")) {
-				localizedText = codon.Properties["tooltip"];
+			if (createCommand) {
+				menuCommand = (ICommand)codon.AddIn.CreateObject(codon.Properties["class"]);
 			}
 			
 			if (Image == null && codon.Properties.Contains("icon")) {
@@ -46,6 +35,7 @@ namespace ICSharpCode.Core
 			}
 			
 			UpdateStatus();
+			UpdateText();
 		}
 		
 		protected override void OnClick(System.EventArgs e)
@@ -97,8 +87,13 @@ namespace ICSharpCode.Core
 					base.Visible = isVisible;
 				}
 			}
-			
-			ToolTipText  = StringParser.Parse(localizedText);
+		}
+		
+		public virtual void UpdateText()
+		{
+			if (codon != null) {
+				ToolTipText = StringParser.Parse(codon.Properties["tooltip"]);
+			}
 		}
 	}
 }
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarDropDownButton.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarDropDownButton.cs
index 2e674a61fe..d868da786d 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarDropDownButton.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarDropDownButton.cs
@@ -11,25 +11,14 @@ using System.Diagnostics;
 using System.Drawing.Text;
 using System.Drawing.Imaging;
 using System.Windows.Forms;
- 
+
 namespace ICSharpCode.Core
 {
 	public class ToolBarDropDownButton : ToolStripDropDownButton , IStatusUpdate
 	{
 		object caller;
 		Codon codon;
-		string description   = String.Empty;
-		string localizedText = String.Empty;
 		ICommand menuCommand = null;
-	
-		public string Description {
-			get {
-				return description;
-			}
-			set {
-				description = value;
-			}
-		}
 		
 		public ToolBarDropDownButton(Codon codon, object caller)
 		{
@@ -37,16 +26,13 @@ namespace ICSharpCode.Core
 			this.caller        = caller;
 			this.codon         = codon;
 			
-			if (codon.Properties.Contains("tooltip")) {
-				localizedText = codon.Properties["tooltip"];
-			}
-			
 			if (Image == null && codon.Properties.Contains("icon")) {
 				Image = ResourceService.GetBitmap(codon.Properties["icon"]);
 			}
 			menuCommand = codon.AddIn.CreateObject(codon.Properties["class"]) as ICommand;
 			menuCommand.Owner = this;
 			UpdateStatus();
+			UpdateText();
 		}
 		
 		protected override void OnClick(System.EventArgs e)
@@ -79,6 +65,12 @@ namespace ICSharpCode.Core
 			}
 		}
 		
+		public virtual void UpdateText()
+		{
+			if (codon != null) {
+				ToolTipText = StringParser.Parse(codon.Properties["tooltip"]);
+			}
+		}
 		
 		public virtual void UpdateStatus()
 		{
@@ -89,7 +81,6 @@ namespace ICSharpCode.Core
 					base.Visible = isVisible;
 				}
 			}
-			ToolTipText  = StringParser.Parse(localizedText);
 		}
 	}
 }
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarSeparator.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarSeparator.cs
index 4bcb3a4c2e..935775b1e5 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarSeparator.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/Gui/ToolBarSeparator.cs
@@ -39,5 +39,9 @@ namespace ICSharpCode.Core
 				this.Visible = failedAction != ConditionFailedAction.Exclude;
 			}
 		}
+		
+		public virtual void UpdateText()
+		{
+		}
 	}
 }
diff --git a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/ToolBarItemDoozer.cs b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/ToolBarItemDoozer.cs
index aa14054732..e4d3b1ad14 100644
--- a/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/ToolBarItemDoozer.cs
+++ b/src/Main/Core/Project/Src/AddInTree/AddIn/DefaultDoozers/ToolBarItem/ToolBarItemDoozer.cs
@@ -27,13 +27,15 @@ namespace ICSharpCode.Core
 		{
 			string type = codon.Properties.Contains("type") ? codon.Properties["type"] : "Item";
 			
+			bool createCommand = codon.Properties["loadclasslazy"] == "false";
+			
 			switch (type) {
 				case "Separator":
 					return new ToolBarSeparator(codon, caller);
 				case "CheckBox":
 					return new ToolBarCheckBox(codon, caller);
 				case "Item":
-					return new ToolBarCommand(codon, caller);
+					return new ToolBarCommand(codon, caller, createCommand);
 				case "ComboBox":
 					return new ToolBarComboBox(codon, caller);
 				case "DropDownButton":
diff --git a/src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs b/src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs
index 34792389d3..3fb4abcae8 100644
--- a/src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs
+++ b/src/Main/Core/Project/Src/Services/ResourceService/ResourceService.cs
@@ -42,9 +42,8 @@ namespace ICSharpCode.Core
 				RegisterAssembly(assembly);
 			}
 			
-//			PropertyService.PropertyChanged += new PropertyChangedEventHandler(ChangeProperty);
-			
-			LoadLanguageResources();
+			PropertyService.PropertyChanged += new PropertyChangedEventHandler(OnPropertyChange);
+			LoadLanguageResources(PropertyService.Get(uiLanguageProperty, Thread.CurrentThread.CurrentUICulture.Name));
 		}
 		
 		static Hashtable userStrings = null;
@@ -63,17 +62,19 @@ namespace ICSharpCode.Core
 
 		static ArrayList assemblies = new ArrayList();
 		
-//		static void ChangeProperty(object sender, PropertyChangedEventArgs e)
-//		{
-//			if (e.Key == uiLanguageProperty && e.NewValue != e.OldValue) {
-//				LoadLanguageResources();
-//			}
-//		}
+		static void OnPropertyChange(object sender, PropertyChangedEventArgs e)
+		{
+			if (e.Key == uiLanguageProperty && e.NewValue != e.OldValue) {
+				LoadLanguageResources((string)e.NewValue);
+				if (LanguageChanged != null)
+					LanguageChanged(null, e);
+			}
+		}
 		
-		static void LoadLanguageResources()
+		public static event EventHandler LanguageChanged;
+		
+		static void LoadLanguageResources(string language)
 		{
-			string language = PropertyService.Get(uiLanguageProperty, Thread.CurrentThread.CurrentUICulture.Name);
-			
 			try {
 				Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(language);
 			} catch (Exception) {
@@ -205,8 +206,6 @@ namespace ICSharpCode.Core
 			
 		}
 		
-		static string lastLanguage = "";
-		
 		/// <summary>
 		/// Returns a string from the resource database, it handles localization
 		/// transparent for the user.
@@ -222,11 +221,6 @@ namespace ICSharpCode.Core
 		/// </exception>
 		public static string GetString(string name)
 		{
-			string currentLanguage = PropertyService.Get(uiLanguageProperty, Thread.CurrentThread.CurrentUICulture.Name);
-			if (currentLanguage != lastLanguage) {
-				LoadLanguageResources();
-				lastLanguage = currentLanguage;
-			}
 			if (localUserStrings != null && localUserStrings[name] != null) {
 				return localUserStrings[name].ToString();
 			}
diff --git a/src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs b/src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs
index 3797cc216f..46527c22b2 100644
--- a/src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs
+++ b/src/Main/Core/Project/Src/Services/ToolBarService/ToolBarService.cs
@@ -13,38 +13,38 @@ namespace ICSharpCode.Core
 {
 	public static class ToolbarService
 	{
-//		readonly static string toolBarPath = "/SharpDevelop/Workbench/ToolBar";
-		
 		public static ToolStripItem[] CreateToolStripItems(object owner, AddInTreeNode treeNode)
 		{
 			return (ToolStripItem[])(treeNode.BuildChildItems(owner)).ToArray(typeof(ToolStripItem));
 		}
 		
-		public static ToolStripItem[] CreateToolStripItems(object owner, string addInTreePath)
-		{
-			AddInTreeNode treeNode;
-			try {
-				treeNode = AddInTree.GetTreeNode(addInTreePath);
-			} catch (TreePathNotFoundException) {
-				return null;
-			}
-			return CreateToolStripItems(owner, treeNode);
-		}
-		
 		public static ToolStrip CreateToolStrip(object owner, AddInTreeNode treeNode)
 		{
 			ToolStrip toolStrip = new ToolStrip();
 			toolStrip.Items.AddRange(CreateToolStripItems(owner, treeNode));
 			UpdateToolbar(toolStrip); // setting Visible is only possible after the items have been added
+			new LanguageChangeWatcher(toolStrip);
 			return toolStrip;
 		}
 		
+		class LanguageChangeWatcher {
+			ToolStrip toolStrip;
+			public LanguageChangeWatcher(ToolStrip toolStrip) {
+				this.toolStrip = toolStrip;
+				toolStrip.Disposed += Disposed;
+				ResourceService.LanguageChanged += LanguageChanged;
+			}
+			void LanguageChanged(object sender, EventArgs e) {
+				ToolbarService.UpdateToolbarText(toolStrip);
+			}
+			void Disposed(object sender, EventArgs e) {
+				ResourceService.LanguageChanged -= LanguageChanged;
+			}
+		}
+		
 		public static ToolStrip CreateToolStrip(object owner, string addInTreePath)
 		{
-			ToolStrip toolStrip = new ToolStrip();
-			toolStrip.Items.AddRange(CreateToolStripItems(owner, addInTreePath));
-			UpdateToolbar(toolStrip); // setting Visible is only possible after the items have been added
-			return toolStrip;
+			return CreateToolStrip(owner, AddInTree.GetTreeNode(addInTreePath));
 		}
 		
 		public static ToolStrip[] CreateToolbars(object owner, string addInTreePath)
@@ -72,5 +72,14 @@ namespace ICSharpCode.Core
 			}
 			toolStrip.Refresh();
 		}
+		
+		public static void UpdateToolbarText(ToolStrip toolStrip)
+		{
+			foreach (ToolStripItem item in toolStrip.Items) {
+				if (item is IStatusUpdate) {
+					((IStatusUpdate)item).UpdateText();
+				}
+			}
+		}
 	}
 }
diff --git a/src/SharpDevelop.sln b/src/SharpDevelop.sln
index 3f1f59bba9..c4f02084f5 100644
--- a/src/SharpDevelop.sln
+++ b/src/SharpDevelop.sln
@@ -1,5 +1,5 @@
 Microsoft Visual Studio Solution File, Format Version 9.00
-# SharpDevelop 2.0.0.326
+# SharpDevelop 2.0.0.336
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "AddIns", "AddIns", "{14A277EE-7DF1-4529-B639-7D1EF334C1C5}"
 	ProjectSection(SolutionItems) = postProject
 	EndProjectSection
@@ -84,8 +84,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.Core", "Main\Co
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "StartUp", "Main\StartUp\Project\StartUp.csproj", "{1152B71B-3C05-4598-B20D-823B5D40559E}"
 EndProject
-Project("{00000000-0000-0000-0000-000000000000}") = "Tools", "Tools\Tools.build", "{970116b0-f96b-4257-8579-986b9cf086f5}"
-EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU