diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs
index 84bcd70377..1419521e82 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.Designer/Tests/Designer/ModelTests.cs
@@ -639,6 +639,34 @@ namespace ICSharpCode.WpfDesign.Tests.Designer
 			AddBindingWithStaticResourceWhereResourceOnSameElement(true);
 		}
 		
+		[Test]
+		public void AddStaticResourceWhereResourceOnSameElement()
+		{
+			DesignItem button = CreateCanvasContext("<Button/>");
+			DesignItem canvas = button.Parent;
+			
+			DesignItemProperty resProp = button.Properties.GetProperty("Resources");
+			Assert.IsTrue(resProp.IsCollection);
+			DesignItem exampleClassItem = canvas.Services.Component.RegisterComponentForDesigner(new ExampleClass());
+			exampleClassItem.Key = "res1";
+			resProp.CollectionElements.Add(exampleClassItem);
+			
+			button.Properties["Tag"].SetValue(new StaticResourceExtension());
+			button.Properties["Tag"].Value.Properties["ResourceKey"].SetValue("res1");
+			
+			string expectedXaml = "<Button>\n" +
+								  "  <Button.Resources>\n" +
+								  "    <t:ExampleClass x:Key=\"res1\" />\n" +
+								  "  </Button.Resources>\n" +
+								  "  <Button.Tag>\n" +
+								  "    <StaticResourceExtension ResourceKey=\"res1\" />\n" +
+								  "  </Button.Tag>\n" +
+								  "</Button>";
+			
+			AssertCanvasDesignerOutput(expectedXaml, button.Context);
+			AssertLog("");
+		}
+		
 		[Test]
 		public void AddBrushAsResource()
 		{
diff --git a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs
index d7b1b1949e..dd23b6eef2 100644
--- a/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs
+++ b/src/AddIns/DisplayBindings/WpfDesign/WpfDesign.XamlDom/Project/MarkupExtensionPrinter.cs
@@ -38,36 +38,7 @@ namespace ICSharpCode.WpfDesign.XamlDom
 				return false;
 			}
 			
-			foreach (var property in obj.Properties.Where((prop) => prop.IsSet))
-			{
-				var value = property.PropertyValue;
-				if (value is XamlTextValue)
-					continue;
-				else
-				{
-					XamlObject xamlObject = value as XamlObject;
-					if (xamlObject == null || !xamlObject.IsMarkupExtension)
-						return false;
-					else {
-						var staticResource = xamlObject.Instance as System.Windows.StaticResourceExtension;
-						if (staticResource != null &&
-							staticResource.ResourceKey != null) {
-							XamlObject parent = GetNonMarkupExtensionParent(xamlObject);
-							
-							if (parent != null) {
-								var parentLocalResource = parent.ServiceProvider.Resolver.FindLocalResource(staticResource.ResourceKey);
-								
-								// If resource with the specified key is declared locally on the same object as the StaticResource is being used the markup extension
-								// must be printed as element to find the resource, otherwise it will search from parent-parent and find none or another resource.
-								if (parentLocalResource != null)
-									return false;
-							}
-						}
-					}
-				}
-			}
-
-			return true;
+			return CanPrint(obj, false, GetNonMarkupExtensionParent(obj));
 		}
 		
 		/// <summary>
@@ -115,6 +86,28 @@ namespace ICSharpCode.WpfDesign.XamlDom
 			return sb.ToString();
 		}
 		
+		private static bool CanPrint(XamlObject obj, bool isNested, XamlObject nonMarkupExtensionParent)
+		{
+			if ((isNested || obj.ParentObject == nonMarkupExtensionParent) && IsStaticResourceThatReferencesLocalResource(obj, nonMarkupExtensionParent)) {
+				return false;
+			}
+			
+			foreach (var property in obj.Properties.Where((prop) => prop.IsSet)) {
+				var value = property.PropertyValue;
+				if (value is XamlTextValue)
+					continue;
+				else {
+					var xamlObject = value as XamlObject;
+					if (xamlObject == null || !xamlObject.IsMarkupExtension)
+						return false;
+					else
+						return CanPrint(xamlObject, true, nonMarkupExtensionParent);
+				}
+			}
+
+			return true;
+		}
+		
 		private static XamlObject GetNonMarkupExtensionParent(XamlObject markupExtensionObject)
 		{
 			System.Diagnostics.Debug.Assert(markupExtensionObject.IsMarkupExtension);
@@ -125,5 +118,21 @@ namespace ICSharpCode.WpfDesign.XamlDom
 			}
 			return obj;
 		}
+		
+		private static bool IsStaticResourceThatReferencesLocalResource(XamlObject obj, XamlObject nonMarkupExtensionParent)
+		{
+			var staticResource = obj.Instance as System.Windows.StaticResourceExtension;
+			if (staticResource != null && staticResource.ResourceKey != null && nonMarkupExtensionParent != null) {
+
+				var parentLocalResource = nonMarkupExtensionParent.ServiceProvider.Resolver.FindLocalResource(staticResource.ResourceKey);
+				
+				// If resource with the specified key is declared locally on the same object as the StaticResource is being used the markup extension
+				// must be printed as element to find the resource, otherwise it will search from parent-parent and find none or another resource.
+				if (parentLocalResource != null)
+					return true;
+			}
+			
+			return false;
+		}
 	}
 }