diff --git a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin
index f13422a6aa..948128e530 100755
--- a/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin
+++ b/src/AddIns/DisplayBindings/AvalonEdit.AddIn/AvalonEdit.AddIn.addin
@@ -157,9 +157,15 @@
 		          class = "ICSharpCode.AvalonEdit.AddIn.ContextActions.FindBaseClasses"/>
 	</Path>
 	
-	<Path name = "/SharpDevelop/ViewContent/TextEditor/ContextMenu/TypeContextMenu">
-		<Include id="FindDerivedOrOverridesClasses" item="/SharpDevelop/Workbench/MainMenu/Search/FindDerivedOrOverridesClasses" />
-		<Include id="FindBaseClasses" item="/SharpDevelop/Workbench/MainMenu/Search/FindBaseClasses" />
+	<Path name = "/SharpDevelop/EntityContextMenu">
+		<Condition name="SymbolTypeAtCaret" type="type" action="Exclude">
+			<Include id="FindDerivedOrOverridesClasses"
+			         insertafter="FindReferences"
+			         item="/SharpDevelop/Workbench/MainMenu/Search/FindDerivedOrOverridesClasses" />
+			<Include id="FindBaseClasses"
+			         insertafter="FindDerivedOrOverridesClasses"
+			         item="/SharpDevelop/Workbench/MainMenu/Search/FindBaseClasses" />
+		</Condition>
 	</Path>
 	
 	<Path name = "/SharpDevelop/Dialogs/OptionsDialog/CodingOptions">
diff --git a/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyAddIn.addin b/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyAddIn.addin
index 26e4f5eec0..604748c51b 100644
--- a/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyAddIn.addin
+++ b/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyAddIn.addin
@@ -22,6 +22,7 @@
 	
 	<!-- Text editor context menu: Launch ILSpy command -->
 	<Path name="/SharpDevelop/EntityContextMenu">
+		<MenuItem id="ILSpySeparator" type="Separator" />
 		<MenuItem id="ILSpy" icon="ILSpy" type="Item" label="${res:ILSpyAddIn.OpenILSpyCommand}" class="ICSharpCode.ILSpyAddIn.OpenInILSpyCommand"/>
 	</Path>
 </AddIn>
diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
index 388d298d64..23a5e5042a 100755
--- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
+++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
@@ -1994,9 +1994,13 @@
 	<!-- TEXT EDITOR -->
 	
 	<Path name = "/SharpDevelop/EntityContextMenu">
+		<Include id="GotoDefinition" item="/SharpDevelop/Workbench/MainMenu/Search/GotoDefinition" />
+		<Include id="Rename" item="/SharpDevelop/Workbench/MainMenu/Search/Rename" />
 		<MenuItem id = "FindReferences"
 		          label = "${res:SharpDevelop.Refactoring.FindReferencesCommand}"
 		          class = "ICSharpCode.SharpDevelop.Editor.Commands.FindReferencesCommand"/>
+		
+		<MenuItem id="DeclaringTypeContextMenu" type="Builder" class="ICSharpCode.SharpDevelop.Editor.Commands.DeclaringTypeSubMenuBuilder" />
 	</Path>
 	
 	<!--
@@ -2025,38 +2029,11 @@
 		<Include id = "Common" path = "/SharpDevelop/ViewContent/DefaultTextEditor/Refactoring/Common"/>
 	</Path>-->
 	
-	<Path name = "/SharpDevelop/ViewContent/TextEditor/ContextMenu/MemberContextMenu">
-		<Include id="GotoDefinition" item="/SharpDevelop/Workbench/MainMenu/Search/GotoDefinition" />
-		<Include id="Rename" item="/SharpDevelop/Workbench/MainMenu/Search/Rename" />
-	</Path>
-	
-	<Path name = "/SharpDevelop/ViewContent/TextEditor/ContextMenu/TypeContextMenu">
-		<Include id="GotoDefinition" item="/SharpDevelop/Workbench/MainMenu/Search/GotoDefinition" />
-		<Include id="Rename" item="/SharpDevelop/Workbench/MainMenu/Search/Rename" />
-	</Path>
-	
-	<Path name = "/SharpDevelop/ViewContent/TextEditor/ContextMenu/LocalContextMenu">
-		<Include id="GotoDefinition" item="/SharpDevelop/Workbench/MainMenu/Search/GotoDefinition" />
-		<Include id="Rename" item="/SharpDevelop/Workbench/MainMenu/Search/Rename" />
-	</Path>
-	
 	<Path name = "/SharpDevelop/ViewContent/TextEditor/ContextMenu">
-		<Condition name="SymbolTypeAtCaret" type="member" action="Exclude">
-			<Include id="MemberContextMenu" path="/SharpDevelop/ViewContent/TextEditor/ContextMenu/MemberContextMenu" />
+		<Condition name="SymbolTypeAtCaret" type="member,type,local" action="Exclude">
 			<Include id="EntityContextMenu" path="/SharpDevelop/EntityContextMenu" />
 			<MenuItem id="Separator1" type="Separator" />
 		</Condition>
-		<Condition name="SymbolTypeAtCaret" type="type" action="Exclude">
-			<Include id="TypeContextMenu" path="/SharpDevelop/ViewContent/TextEditor/ContextMenu/TypeContextMenu" />
-			<Include id="EntityContextMenu" path="/SharpDevelop/EntityContextMenu" />
-			<MenuItem id="Separator1" type="Separator" />
-		</Condition>
-		<Condition name="SymbolTypeAtCaret" type="local" action="Exclude">
-			<Include id="LocalContextMenu" path="/SharpDevelop/ViewContent/TextEditor/ContextMenu/LocalContextMenu" />
-			<MenuItem id="Separator1" type="Separator" />
-		</Condition>
-		
-		<MenuItem id="DeclaringTypeContextMenu" type="Builder" class="ICSharpCode.SharpDevelop.Editor.Commands.DeclaringTypeSubMenuBuilder" />
 		
 		<Include id = "Cut" item = "/SharpDevelop/Workbench/MainMenu/Edit/Cut"/>
 		<Include id = "Copy" item = "/SharpDevelop/Workbench/MainMenu/Edit/Copy"/>
diff --git a/src/Main/Base/Project/Src/Editor/Commands/DeclaringTypeSubMenuBuilder.cs b/src/Main/Base/Project/Src/Editor/Commands/DeclaringTypeSubMenuBuilder.cs
index 2a474ae27e..3010de7654 100644
--- a/src/Main/Base/Project/Src/Editor/Commands/DeclaringTypeSubMenuBuilder.cs
+++ b/src/Main/Base/Project/Src/Editor/Commands/DeclaringTypeSubMenuBuilder.cs
@@ -2,6 +2,7 @@
 // This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
 
 using System;
+using System.Linq;
 using System.Collections.Generic;
 using System.Windows;
 using System.Windows.Controls;
@@ -9,6 +10,7 @@ using ICSharpCode.Core;
 using ICSharpCode.Core.Presentation;
 using ICSharpCode.NRefactory.Semantics;
 using ICSharpCode.NRefactory.TypeSystem;
+using ICSharpCode.SharpDevelop.Dom;
 
 namespace ICSharpCode.SharpDevelop.Editor.Commands
 {
@@ -19,12 +21,28 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
 	{
 		public IEnumerable<object> BuildItems(Codon codon, object parameter)
 		{
-			MemberResolveResult resolveResult = GetResolveResult() as MemberResolveResult;
-			if (resolveResult == null) {
-				return null;
+			IMember member = null;
+			
+			if (parameter is IMemberModel) {
+				// Menu is directly created from a member model (e.g. bookmarks etc.)
+				member = ((IMemberModel) parameter).Resolve();
+			} else if (parameter is ResolveResult) {
+				MemberResolveResult resolveResult = parameter as MemberResolveResult;
+				if (resolveResult != null) {
+					member = resolveResult.Member;
+				}
+			} else if (parameter is ITextEditor) {
+				// Shown in context menu of a text editor
+				MemberResolveResult resolveResult = GetResolveResult((ITextEditor) parameter) as MemberResolveResult;
+				if (resolveResult != null) {
+					member = resolveResult.Member;
+				}
 			}
 			
-			IMember member = resolveResult.Member;
+			if (member == null) {
+				return null;
+			}
+
 			IType declaringType = member.DeclaringTypeDefinition;
 			if (declaringType == null) {
 				return null;
@@ -33,31 +51,28 @@ namespace ICSharpCode.SharpDevelop.Editor.Commands
 			var items = new List<object>();
 			var declaringTypeItem = new MenuItem() {
 				Header = "Declaring type: " + declaringType.Name,
-				Icon = ClassBrowserIconService.GetIcon(declaringType).ImageSource
+				Icon = new Image() { Source = ClassBrowserIconService.GetIcon(declaringType).ImageSource }
 			};
 			
 			var subItems = MenuService.CreateMenuItems(
-				null, new TypeResolveResult(declaringType), "/SharpDevelop/ViewContent/TextEditor/ContextMenu/TypeContextMenu");
+				null, new TypeResolveResult(declaringType), "/SharpDevelop/EntityContextMenu");
 			if (subItems != null) {
 				foreach (var item in subItems) {
 					declaringTypeItem.Items.Add(item);
 				}
 			}
-			
 			items.Add(declaringTypeItem);
-			items.Add(new Separator());
 			
 			return items;
 		}
 		
-		static ResolveResult GetResolveResult()
+		static ResolveResult GetResolveResult(ITextEditor currentEditor)
 		{
-			ITextEditor currentEditor = SD.GetActiveViewContentService<ITextEditor>();
 			if (currentEditor != null) {
 				return SD.ParserService.Resolve(currentEditor, currentEditor.Caret.Location);
-			} else {
-				return ErrorResolveResult.UnknownError;
 			}
+			
+			return ErrorResolveResult.UnknownError;
 		}
 	}
 }
diff --git a/src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs b/src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs
index 403ebbedcf..b9e0d3a256 100644
--- a/src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs
+++ b/src/Main/Base/Project/Src/Internal/ConditionEvaluators/SymbolTypeAtCaretConditionEvaluator.cs
@@ -4,7 +4,10 @@
 using System;
 using ICSharpCode.Core;
 using ICSharpCode.NRefactory.Semantics;
+using ICSharpCode.NRefactory.TypeSystem;
+using ICSharpCode.SharpDevelop.Dom;
 using ICSharpCode.SharpDevelop.Editor;
+using ICSharpCode.SharpDevelop.Editor.Commands;
 
 namespace ICSharpCode.SharpDevelop.Internal.ConditionEvaluators
 {
@@ -15,7 +18,7 @@ namespace ICSharpCode.SharpDevelop.Internal.ConditionEvaluators
 	{
 		public bool IsValid(object parameter, Condition condition)
 		{
-			ResolveResult resolveResult = GetResolveResult();
+			ResolveResult resolveResult = GetResolveResult(parameter);
 			if ((resolveResult != null) && !resolveResult.IsError) {
 				// Check type of symbol
 				string typesList = condition.Properties["type"];
@@ -53,14 +56,46 @@ namespace ICSharpCode.SharpDevelop.Internal.ConditionEvaluators
 			return false;
 		}
 		
-		static ResolveResult GetResolveResult()
+		static ResolveResult GetResolveResult(object parameter)
+		{
+			if (parameter == null)
+				return GetResolveResultFromCurrentEditor();
+			
+			if (parameter is ITextEditor)
+				return GetResolveResultFromCurrentEditor((ITextEditor) parameter);
+			
+			if (parameter is ResolveResult)
+				return (ResolveResult) parameter;
+			
+			if (parameter is IEntityModel)
+				return GetResolveResultFromEntityModel((IEntityModel) parameter);
+			
+			return null;
+		}
+		
+		static ResolveResult GetResolveResultFromEntityModel(IEntityModel entityModel)
+		{
+			IEntity entity = entityModel.Resolve();
+			if (entity is IMember)
+				return new MemberResolveResult(null, (IMember) entity);
+			if (entity is ITypeDefinition)
+				return new TypeResolveResult((ITypeDefinition) entity);
+			return ErrorResolveResult.UnknownError;
+		}
+		
+		static ResolveResult GetResolveResultFromCurrentEditor()
 		{
 			ITextEditor currentEditor = SD.GetActiveViewContentService<ITextEditor>();
+			return GetResolveResultFromCurrentEditor(currentEditor);
+		}
+		
+		static ResolveResult GetResolveResultFromCurrentEditor(ITextEditor currentEditor)
+		{
 			if (currentEditor != null) {
 				return SD.ParserService.Resolve(currentEditor, currentEditor.Caret.Location);
-			} else {
-				return ErrorResolveResult.UnknownError;
 			}
+			
+			return ErrorResolveResult.UnknownError;
 		}
 	}
 }