diff --git a/core/org.eclipse.tigerstripe.core/src/main/java/org/eclipse/tigerstripe/workbench/internal/core/model/Method.java b/core/org.eclipse.tigerstripe.core/src/main/java/org/eclipse/tigerstripe/workbench/internal/core/model/Method.java
index 0ed2f41..763850f 100644
--- a/core/org.eclipse.tigerstripe.core/src/main/java/org/eclipse/tigerstripe/workbench/internal/core/model/Method.java
+++ b/core/org.eclipse.tigerstripe.core/src/main/java/org/eclipse/tigerstripe/workbench/internal/core/model/Method.java
@@ -50,6 +50,7 @@
 import org.eclipse.tigerstripe.workbench.model.deprecated_.ossj.IOssjFlavorDefaults;
 import org.eclipse.tigerstripe.workbench.model.deprecated_.ossj.IOssjMethod;
 import org.eclipse.tigerstripe.workbench.profile.IWorkbenchProfile;
+import org.eclipse.tigerstripe.workbench.profile.stereotype.IStereotype;
 import org.eclipse.tigerstripe.workbench.profile.stereotype.IStereotypeInstance;
 import org.eclipse.tigerstripe.workbench.profile.stereotype.IStereotypeListener;
 import org.eclipse.tigerstripe.workbench.project.ITigerstripeModelProject;
@@ -203,7 +204,31 @@
 
         @Override
         public String getStereotypeString(boolean includeInherited) {
-            return getStereotypeString();
+            if (getStereotypeInstances().isEmpty()) {
+                return "";
+            }
+
+            StringBuilder result = new StringBuilder();
+
+            IWorkbenchProfile profile = getArtifactManager().getRuntime()
+                    .getWorkbenchProfileSession().getActiveProfile();
+            for (IStereotypeInstance instance : getStereotypeInstances(includeInherited)) {
+                // Check that the stereotype is enabled in the profile
+                IStereotype stereotype = profile.getStereotypeByName(instance
+                        .getName());
+                if (stereotype != null) {
+                    if (result.length() == 0) {
+                        result.append("<<");
+                    } else {
+                        result.append(",");
+                    }
+                    result.append(instance.getName());
+                }
+            }
+            if (result.length() > 0) {
+                result.append(">>");
+            }
+            return result.toString();
         }
         
         
@@ -809,7 +834,31 @@
 
         @Override
         public String getStereotypeString(boolean includeInherited) {
-            return getStereotypeString();
+            if (getStereotypeInstances().isEmpty()) {
+                return "";
+            }
+
+            StringBuilder result = new StringBuilder();
+
+            IWorkbenchProfile profile = getArtifactManager().getRuntime()
+                    .getWorkbenchProfileSession().getActiveProfile();
+            for (IStereotypeInstance instance : getStereotypeInstances(includeInherited)) {
+                // Check that the stereotype is enabled in the profile
+                IStereotype stereotype = profile.getStereotypeByName(instance
+                        .getName());
+                if (stereotype != null) {
+                    if (result.length() == 0) {
+                        result.append("<<");
+                    } else {
+                        result.append(",");
+                    }
+                    result.append(instance.getName());
+                }
+            }
+            if (result.length() > 0) {
+                result.append(">>");
+            }
+            return result.toString();
         }
         
         
