diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/actions/CreateElementAction.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/actions/CreateElementAction.java
index 90b2baa..0111043 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/actions/CreateElementAction.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/actions/CreateElementAction.java
@@ -144,7 +144,7 @@
   public Element createAndAddNewChildElement()
   {
     String prefix = parentNode.getPrefix();
-    prefix = (prefix == null) ? "" : (prefix + ":");
+    prefix = (prefix == null) ? "" : (prefix + ":"); //$NON-NLS-1$ //$NON-NLS-2$
     Element childNode = getDocument().createElementNS(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, prefix + elementTag);
     if (getAttributes() != null)
     {
@@ -166,12 +166,12 @@
     
     if (isGlobal && getRelativeNode() == null)
     {
-      Text textNode = getDocument().createTextNode("\n\n");
+      Text textNode = getDocument().createTextNode("\n\n"); //$NON-NLS-1$
       parentNode.appendChild(textNode);
     }
     else if (isGlobal && getRelativeNode() != null)
     {
-      Text textNode = getDocument().createTextNode("\n\n");
+      Text textNode = getDocument().createTextNode("\n\n"); //$NON-NLS-1$
       parentNode.insertBefore(textNode, getRelativeNode());
     }
 
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/actions/XSDEditNamespacesAction.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/actions/XSDEditNamespacesAction.java
index 329e1e5..d347111 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/actions/XSDEditNamespacesAction.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/actions/XSDEditNamespacesAction.java
@@ -74,16 +74,16 @@
 		      {
 		        NamespaceInfo info = (NamespaceInfo)i.next();
 		        NamespaceInfo oldCopy = new NamespaceInfo(info);
-		        info.setProperty("oldCopy", oldCopy);
+		        info.setProperty("oldCopy", oldCopy); //$NON-NLS-1$
 		      }
 		                              
 		      dialog.setNamespaceInfoList(namespaceInfoList);   
 		      dialog.create();      
 		      //dialog.getShell().setSize(500, 300);
-		      dialog.getShell().setText(XMLCommonResources.getInstance().getString("_UI_MENU_EDIT_SCHEMA_INFORMATION_TITLE"));
+		      dialog.getShell().setText(XMLCommonResources.getInstance().getString("_UI_MENU_EDIT_SCHEMA_INFORMATION_TITLE")); //$NON-NLS-1$
 		      dialog.setBlockOnOpen(true);                                 
 		      dialog.open();
-          String xsdPrefix = "";    
+          String xsdPrefix = "";     //$NON-NLS-1$
 
 		      if (dialog.getReturnCode() == Window.OK)
 		      {
@@ -101,8 +101,8 @@
               NamespaceInfo ni = (NamespaceInfo)iter.next();
               String pref = ni.prefix;
               String uri = ni.uri;
-              if (pref == null) pref = "";
-              if (uri == null) uri = "";
+              if (pref == null) pref = ""; //$NON-NLS-1$
+              if (uri == null) uri = ""; //$NON-NLS-1$
               if (XSDConstants.isSchemaForSchemaNamespace(uri))
               {
                 xsdPrefix = pref;
@@ -173,7 +173,7 @@
 	    for (Iterator i = newList.iterator(); i.hasNext(); )
 	    {
 	      NamespaceInfo newInfo = (NamespaceInfo)i.next();
-	      NamespaceInfo oldInfo = (NamespaceInfo)oldURIToPrefixTable.get(newInfo.uri != null ? newInfo.uri : ""); 
+	      NamespaceInfo oldInfo = (NamespaceInfo)oldURIToPrefixTable.get(newInfo.uri != null ? newInfo.uri : "");  //$NON-NLS-1$
 
 
 	      // if oldInfo is non null ... there's a matching URI in the old set
@@ -183,13 +183,13 @@
 	      // assuming that the user changed the URI and the prefix
 	      if (oldInfo == null)                                            
 	      {
-	        oldInfo = (NamespaceInfo)newInfo.getProperty("oldCopy");           
+	        oldInfo = (NamespaceInfo)newInfo.getProperty("oldCopy");            //$NON-NLS-1$
 	      } 
 
 	      if (oldInfo != null)
 	      {
-	        String newPrefix = newInfo.prefix != null ? newInfo.prefix : "";
-	        String oldPrefix = oldInfo.prefix != null ? oldInfo.prefix : "";
+	        String newPrefix = newInfo.prefix != null ? newInfo.prefix : ""; //$NON-NLS-1$
+	        String oldPrefix = oldInfo.prefix != null ? oldInfo.prefix : ""; //$NON-NLS-1$
 	        if (!oldPrefix.equals(newPrefix))
 	        {
 	          map.put(oldPrefix, newPrefix);    
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDAdapterFactory.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDAdapterFactory.java
index 03d76b0..5174f07 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDAdapterFactory.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDAdapterFactory.java
@@ -102,7 +102,7 @@
         // so we adapt it in a specialized way so that it's treated as simple type
         // that way it doesn't show up as a reference from a field
         //
-        if ("anyType".equals(object.getName()))
+        if ("anyType".equals(object.getName())) //$NON-NLS-1$
         {
           return new XSDAnyTypeDefinitionAdapter(); 
         }  
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDAttributeGroupDefinitionAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDAttributeGroupDefinitionAdapter.java
index aa66859..1f125bf 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDAttributeGroupDefinitionAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDAttributeGroupDefinitionAdapter.java
@@ -24,6 +24,7 @@
 import org.eclipse.wst.xsd.ui.internal.adt.outline.ITreeElement;
 import org.eclipse.wst.xsd.ui.internal.common.actions.AddXSDAttributeDeclarationAction;
 import org.eclipse.wst.xsd.ui.internal.common.actions.DeleteXSDConcreteComponentAction;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
 import org.eclipse.xsd.XSDAttributeGroupDefinition;
 import org.eclipse.xsd.XSDWildcard;
@@ -46,11 +47,11 @@
     XSDAttributeGroupDefinition xsdAttributeGroupDefinition = (XSDAttributeGroupDefinition) target;
     if (xsdAttributeGroupDefinition.isAttributeGroupDefinitionReference())
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDAttributeGroupRef.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDAttributeGroupRef.gif"); //$NON-NLS-1$
     }
     else
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDAttributeGroup.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDAttributeGroup.gif"); //$NON-NLS-1$
     }
   }
 
@@ -58,7 +59,7 @@
   {
     XSDAttributeGroupDefinition xsdAttributeGroupDefinition = (XSDAttributeGroupDefinition) target;
     String result = xsdAttributeGroupDefinition.isAttributeGroupDefinitionReference() ? xsdAttributeGroupDefinition.getQName() : xsdAttributeGroupDefinition.getName();
-    return result == null ? "'absent'" : result;
+    return result == null ? Messages._UI_LABEL_ABSENT : result;
   }
 
   public ITreeElement[] getChildren()
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDBaseAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDBaseAdapter.java
index 17dad7d..1f4a3b7 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDBaseAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDBaseAdapter.java
@@ -100,7 +100,7 @@
   
   public String getText()
   {
-    return "";
+    return ""; //$NON-NLS-1$
   }
   
   public ITreeElement getParent()
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDBaseAttributeAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDBaseAttributeAdapter.java
index a1960c6..34456ac 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDBaseAttributeAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDBaseAttributeAdapter.java
@@ -25,6 +25,7 @@
 import org.eclipse.wst.xsd.ui.internal.common.actions.DeleteXSDConcreteComponentAction;
 import org.eclipse.wst.xsd.ui.internal.common.commands.DeleteCommand;
 import org.eclipse.wst.xsd.ui.internal.common.commands.UpdateNameCommand;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
 import org.eclipse.xsd.XSDAttributeDeclaration;
 import org.eclipse.xsd.XSDTypeDefinition;
@@ -55,12 +56,12 @@
 
   public Command getDeleteCommand()
   {
-    return new DeleteCommand("", getXSDAttributeDeclaration());
+    return new DeleteCommand("", getXSDAttributeDeclaration()); //$NON-NLS-1$
   }
 
   public String getKind()
   {
-    return "attribute";
+    return "attribute"; //$NON-NLS-1$
   }
 
   public int getMaxOccurs()
@@ -79,7 +80,7 @@
   {
     XSDAttributeDeclaration resolvedAttributeDeclaration = getResolvedXSDAttributeDeclaration();
     String name = resolvedAttributeDeclaration.getName();
-    return (name == null) ? "" : name;
+    return (name == null) ? "" : name; //$NON-NLS-1$
   }
 
   public IType getType()
@@ -91,7 +92,7 @@
   public String getTypeName()
   {
     XSDTypeDefinition td = getResolvedXSDAttributeDeclaration().getTypeDefinition();
-    return (td != null) ? td.getName() : "(no type defined)";
+    return (td != null) ? td.getName() : Messages._UI_NO_TYPE_DEFINED;
   }
 
   public String getTypeNameQualifier()
@@ -114,7 +115,7 @@
 
   public Command getUpdateNameCommand(String name)
   {
-    return new UpdateNameCommand("Update Name", getResolvedXSDAttributeDeclaration(), name);
+    return new UpdateNameCommand(Messages._UI_ACTION_UPDATE_NAME, getResolvedXSDAttributeDeclaration(), name);
   }
 
   public Command getUpdateTypeNameCommand(String typeName, String quailifier)
@@ -133,11 +134,11 @@
     XSDAttributeDeclaration xsdAttributeDeclaration = getXSDAttributeDeclaration();  // don't want the resolved attribute
     if (xsdAttributeDeclaration.isAttributeDeclarationReference())
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDAttributeRef.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDAttributeRef.gif"); //$NON-NLS-1$
     }
     else
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDAttribute.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDAttribute.gif"); //$NON-NLS-1$
     }
   }
 
@@ -158,7 +159,7 @@
     StringBuffer result = new StringBuffer();
     if (name == null)
     {
-      result.append("'absent'");
+      result.append(" " + Messages._UI_LABEL_ABSENT + " ");  //$NON-NLS-1$ //$NON-NLS-2$
     }
     else
     {
@@ -166,7 +167,7 @@
     }
     if (ad.getAnonymousTypeDefinition() == null && ad.getTypeDefinition() != null)
     {
-      result.append(" : ");
+      result.append(" : "); //$NON-NLS-1$
       // result.append(resolvedAttributeDeclaration.getTypeDefinition().getQName(xsdAttributeDeclaration));
       result.append(ad.getTypeDefinition().getName());
     }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDComplexTypeDefinitionAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDComplexTypeDefinitionAdapter.java
index 683b4ca..6dd469a 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDComplexTypeDefinitionAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDComplexTypeDefinitionAdapter.java
@@ -45,6 +45,7 @@
 import org.eclipse.wst.xsd.ui.internal.common.commands.UpdateNameCommand;
 import org.eclipse.wst.xsd.ui.internal.design.editparts.model.SpaceFiller;
 import org.eclipse.wst.xsd.ui.internal.design.editparts.model.TargetConnectionSpaceFiller;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
 import org.eclipse.xsd.XSDAttributeGroupContent;
 import org.eclipse.xsd.XSDAttributeGroupDefinition;
@@ -74,7 +75,7 @@
 
     // test to filter out the 'anyType' type ... don't want to see that
     //
-    if (td != null && !td.getName().equals("anyType"))
+    if (td != null && !td.getName().equals("anyType")) //$NON-NLS-1$
     {
       return (IType) XSDAdapterFactory.getInstance().adapt(td);
     }
@@ -150,7 +151,7 @@
             attrGroup = attrGroup.getResolvedAttributeGroupDefinition();
             if (attrGroup.getContents().size() == 0)
             {
-              concreteComponentList.add(new SpaceFiller("attribute"));
+              concreteComponentList.add(new SpaceFiller("attribute")); //$NON-NLS-1$
             }
             visitAttributeGroupDefinition(attrGroup);
           }
@@ -163,7 +164,7 @@
       int numOfChildren = modelGroup.getContents().size();
       if (numOfChildren == 0)
       {
-        concreteComponentList.add(new SpaceFiller("element"));
+        concreteComponentList.add(new SpaceFiller("element")); //$NON-NLS-1$
       }
       super.visitModelGroup(modelGroup);
     }
@@ -214,17 +215,17 @@
 
   public Command getUpdateNameCommand(String newName)
   {
-    return new UpdateNameCommand("Update Name", getXSDComplexTypeDefinition(), newName);
+    return new UpdateNameCommand(Messages._UI_ACTION_UPDATE_NAME, getXSDComplexTypeDefinition(), newName);
   }
 
   public Command getAddNewFieldCommand(String fieldKind)
   {
-    return new AddXSDElementCommand("whyDoWeUseThisLabel?", getXSDComplexTypeDefinition());
+    return new AddXSDElementCommand(Messages._UI_ACTION_ADD_FIELD, getXSDComplexTypeDefinition());
   }
 
   public Command getDeleteCommand()
   {
-    return new DeleteCommand("", getXSDComplexTypeDefinition());
+    return new DeleteCommand("", getXSDComplexTypeDefinition()); //$NON-NLS-1$
   }
 
   protected class AddNewFieldCommand extends Command
@@ -358,7 +359,7 @@
 
   public Image getImage()
   {
-    return XSDEditorPlugin.getXSDImage("icons/XSDComplexType.gif");
+    return XSDEditorPlugin.getXSDImage("icons/XSDComplexType.gif"); //$NON-NLS-1$
   }
 
   public String getText()
@@ -367,12 +368,12 @@
 
     StringBuffer result = new StringBuffer();
 
-    result.append(xsdComplexTypeDefinition.getName() == null ? "local type" : xsdComplexTypeDefinition.getName());
+    result.append(xsdComplexTypeDefinition.getName() == null ? "local type" : xsdComplexTypeDefinition.getName()); //$NON-NLS-1$
 
     XSDTypeDefinition baseTypeDefinition = xsdComplexTypeDefinition.getBaseTypeDefinition();
     if (baseTypeDefinition != null && baseTypeDefinition != xsdComplexTypeDefinition.getContent() && baseTypeDefinition.getName() != null && !XSDConstants.isURType(baseTypeDefinition))
     {
-      result.append(" : ");
+      result.append(" : "); //$NON-NLS-1$
       result.append(baseTypeDefinition.getQName(xsdComplexTypeDefinition));
     }
 
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDElementDeclarationAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDElementDeclarationAdapter.java
index ff568f7..7756b92 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDElementDeclarationAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDElementDeclarationAdapter.java
@@ -30,6 +30,7 @@
 import org.eclipse.wst.xsd.ui.internal.common.actions.SetTypeAction;
 import org.eclipse.wst.xsd.ui.internal.common.commands.DeleteCommand;
 import org.eclipse.wst.xsd.ui.internal.common.commands.UpdateNameCommand;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
 import org.eclipse.xsd.XSDComplexTypeDefinition;
 import org.eclipse.xsd.XSDElementDeclaration;
@@ -49,7 +50,7 @@
   public String getName()
   {
     String name = getXSDElementDeclaration().getResolvedElementDeclaration().getName();
-    return (name == null) ? "" : name;
+    return (name == null) ? "" : name; //$NON-NLS-1$
   }
 
   public String getTypeName()
@@ -81,11 +82,11 @@
 
     if (!xsdElementDeclaration.isElementDeclarationReference())
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDElement.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDElement.gif"); //$NON-NLS-1$
     }
     else
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDElementRef.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDElementRef.gif"); //$NON-NLS-1$
     }
   }
 
@@ -99,7 +100,7 @@
     StringBuffer result = new StringBuffer();
     if (name == null)
     {
-      result.append("'absent'");
+      result.append(Messages._UI_LABEL_ABSENT);
     }
     else
     {
@@ -114,13 +115,13 @@
 
       if (hasMinOccurs || hasMaxOccurs)
       {
-        result.append(" [");
+        result.append(" ["); //$NON-NLS-1$
         if (hasMinOccurs)
         {
           int min = ((XSDParticle) xsdElementDeclaration.getContainer()).getMinOccurs();
           if (min == XSDParticle.UNBOUNDED)
           {
-            result.append("*");
+            result.append("*"); //$NON-NLS-1$
           }
           else
           {
@@ -136,10 +137,10 @@
         if (hasMaxOccurs)
         {
           int max = ((XSDParticle) xsdElementDeclaration.getContainer()).getMaxOccurs();
-          result.append("..");
+          result.append(".."); //$NON-NLS-1$
           if (max == XSDParticle.UNBOUNDED)
           {
-            result.append("*");
+            result.append("*"); //$NON-NLS-1$
           }
           else
           {
@@ -149,18 +150,18 @@
         else
         // print default
         {
-          result.append("..");
+          result.append(".."); //$NON-NLS-1$
           int max = ((XSDParticle) xsdElementDeclaration.getContainer()).getMaxOccurs();
           result.append(String.valueOf(max));
 
         }
-        result.append("]");
+        result.append("]"); //$NON-NLS-1$
       }
     }
 
     if (resolvedElementDeclaration.getAnonymousTypeDefinition() == null && resolvedElementDeclaration.getTypeDefinition() != null)
     {
-      result.append(" : ");
+      result.append(" : "); //$NON-NLS-1$
       // result.append(resolvedElementDeclaration.getTypeDefinition().getQName(xsdElementDeclaration));
       result.append(resolvedElementDeclaration.getTypeDefinition().getName());
     }
@@ -205,7 +206,7 @@
   
   public String getKind()
   {
-    return "element";
+    return "element"; //$NON-NLS-1$
   }
   
   public boolean isGlobal()
@@ -232,7 +233,7 @@
 
   public Command getUpdateNameCommand(String name)
   {
-    return new UpdateNameCommand("Update Name", getXSDElementDeclaration().getResolvedElementDeclaration(), name);
+    return new UpdateNameCommand(Messages._UI_ACTION_UPDATE_NAME, getXSDElementDeclaration().getResolvedElementDeclaration(), name);
   }
 
   public Command getUpdateTypeNameCommand(String typeName, String quailifier)
@@ -244,7 +245,7 @@
   public Command getDeleteCommand()
   {
     // TODO Auto-generated method stub
-    return new DeleteCommand("", getXSDElementDeclaration());
+    return new DeleteCommand("", getXSDElementDeclaration()); //$NON-NLS-1$
   }
   
   public String[] getActions(Object object)
@@ -253,12 +254,12 @@
     if (!isGlobal())
       list.add(AddXSDElementAction.ID);
 
-    list.add(BaseSelectionAction.SUBMENU_START_ID + "Set Type");
+    list.add(BaseSelectionAction.SUBMENU_START_ID + Messages._UI_ACTION_SET_TYPE);
     list.add(SetTypeAction.SET_NEW_TYPE_ID);
     list.add(SetTypeAction.SELECT_EXISTING_TYPE_ID);
     list.add(BaseSelectionAction.SUBMENU_END_ID);
 
-    list.add(BaseSelectionAction.SUBMENU_START_ID + "Set Multiplicity");
+    list.add(BaseSelectionAction.SUBMENU_START_ID + Messages._UI_ACTION_SET_MULTIPLICITY);
     list.add(SetMultiplicityAction.REQUIRED_ID);
     list.add(SetMultiplicityAction.ZERO_OR_ONE_ID);
     list.add(SetMultiplicityAction.ZERO_OR_MORE_ID);
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDModelGroupAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDModelGroupAdapter.java
index e47b376..a8f5657 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDModelGroupAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDModelGroupAdapter.java
@@ -25,6 +25,7 @@
 import org.eclipse.wst.xsd.ui.internal.common.actions.AddXSDModelGroupDefinitionAction;
 import org.eclipse.wst.xsd.ui.internal.common.actions.DeleteXSDConcreteComponentAction;
 import org.eclipse.wst.xsd.ui.internal.common.actions.SetMultiplicityAction;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
 import org.eclipse.xsd.XSDCompositor;
 import org.eclipse.xsd.XSDElementDeclaration;
@@ -39,9 +40,9 @@
 public class XSDModelGroupAdapter extends XSDParticleAdapter implements IActionProvider
 {
   // TODO: common these up with ModelGroupFigure's
-  public static final Image SEQUENCE_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("seq_obj.gif", true).createImage();
-  public static final Image CHOICE_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("choice_obj.gif", true).createImage();
-  public static final Image ALL_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("all_obj.gif", true).createImage();
+  public static final Image SEQUENCE_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("seq_obj.gif", true).createImage(); //$NON-NLS-1$
+  public static final Image CHOICE_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("choice_obj.gif", true).createImage(); //$NON-NLS-1$
+  public static final Image ALL_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("all_obj.gif", true).createImage(); //$NON-NLS-1$
 
   XSDModelGroup getXSDModelGroup()
   {
@@ -100,13 +101,13 @@
 
       if (hasMinOccurs || hasMaxOccurs)
       {
-        result.append(" [");
+        result.append(" ["); //$NON-NLS-1$
         if (hasMinOccurs)
         {
           int min = ((XSDParticle) xsdModelGroup.getContainer()).getMinOccurs();
           if (min == XSDParticle.UNBOUNDED)
           {
-            result.append("*");
+            result.append("*"); //$NON-NLS-1$
           }
           else
           {
@@ -122,10 +123,10 @@
         if (hasMaxOccurs)
         {
           int max = ((XSDParticle) xsdModelGroup.getContainer()).getMaxOccurs();
-          result.append("..");
+          result.append(".."); //$NON-NLS-1$
           if (max == XSDParticle.UNBOUNDED)
           {
-            result.append("*");
+            result.append("*"); //$NON-NLS-1$
           }
           else
           {
@@ -135,11 +136,11 @@
         else
         // print default
         {
-          result.append("..");
+          result.append(".."); //$NON-NLS-1$
           int max = ((XSDParticle) xsdModelGroup.getContainer()).getMaxOccurs();
           result.append(String.valueOf(max));
         }
-        result.append("]");
+        result.append("]"); //$NON-NLS-1$
       }
     }
     return result.toString();
@@ -197,7 +198,7 @@
      actionIDs.add(BaseSelectionAction.SEPARATOR_ID);
      // Add Any
 
-     actionIDs.add(BaseSelectionAction.SUBMENU_START_ID + "Set Multiplicity");
+     actionIDs.add(BaseSelectionAction.SUBMENU_START_ID + Messages._UI_ACTION_SET_MULTIPLICITY);
      actionIDs.add(SetMultiplicityAction.REQUIRED_ID);
      actionIDs.add(SetMultiplicityAction.ZERO_OR_ONE_ID);
      actionIDs.add(SetMultiplicityAction.ZERO_OR_MORE_ID);
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDModelGroupDefinitionAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDModelGroupDefinitionAdapter.java
index 4d3a394..0ee9abe 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDModelGroupDefinitionAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDModelGroupDefinitionAdapter.java
@@ -25,6 +25,7 @@
 import org.eclipse.wst.xsd.ui.internal.common.actions.AddXSDElementAction;
 import org.eclipse.wst.xsd.ui.internal.common.actions.AddXSDModelGroupAction;
 import org.eclipse.wst.xsd.ui.internal.common.actions.DeleteXSDConcreteComponentAction;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
 import org.eclipse.xsd.XSDModelGroup;
 import org.eclipse.xsd.XSDModelGroupDefinition;
@@ -47,11 +48,11 @@
 
     if (xsdModelGroupDefinition.isModelGroupDefinitionReference())
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDGroupRef.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDGroupRef.gif"); //$NON-NLS-1$
     }
     else
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDGroup.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDGroup.gif"); //$NON-NLS-1$
     }
   }
 
@@ -59,7 +60,7 @@
   {
     XSDModelGroupDefinition xsdModelGroupDefinition = (XSDModelGroupDefinition) target;
     String result = xsdModelGroupDefinition.isModelGroupDefinitionReference() ? xsdModelGroupDefinition.getQName() : xsdModelGroupDefinition.getName();
-    return result == null ? "'absent'" : result;
+    return result == null ? Messages._UI_LABEL_ABSENT : result;
   }
 
   public ITreeElement[] getChildren()
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDParticleAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDParticleAdapter.java
index dfd4f2a..a26649c 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDParticleAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDParticleAdapter.java
@@ -11,6 +11,7 @@
 package org.eclipse.wst.xsd.ui.internal.adapters;
 
 import org.eclipse.wst.xsd.ui.internal.adt.design.IAnnotationProvider;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.xsd.XSDConcreteComponent;
 import org.eclipse.xsd.XSDParticle;
 
@@ -99,8 +100,8 @@
 
   protected String buildAnnotationString(boolean isForLabel)
   {
-    String occurenceDescription = "";
-    String toolTipDescription = "";
+    String occurenceDescription = ""; //$NON-NLS-1$
+    String toolTipDescription = ""; //$NON-NLS-1$
     // TODO: set int values as defined constants
     // -2 means the user didn't specify (so the default is 1)
     int minOccurs = getMinOccurs();
@@ -110,41 +111,41 @@
     // occurrence attributes
     if (minOccurs == -3 && maxOccurs == -3)
     {
-      occurenceDescription = "";
+      occurenceDescription = ""; //$NON-NLS-1$
     }
     else if (minOccurs == 0 && (maxOccurs == -2 || maxOccurs == 1))
     {
-      occurenceDescription = "[0..1]";
-      toolTipDescription = "optional";
+      occurenceDescription = "[0..1]"; //$NON-NLS-1$
+      toolTipDescription = Messages._UI_LABEL_OPTIONAL;
     }
     else if (minOccurs == 0 && maxOccurs == -1)
     {
-      occurenceDescription = "[0..*]";
-      toolTipDescription = "Zero or more";
+      occurenceDescription = "[0..*]"; //$NON-NLS-1$
+      toolTipDescription = Messages._UI_LABEL_ZERO_OR_MORE;
     }
     else if ((minOccurs == 1 && maxOccurs == -1) || (minOccurs == -2 && maxOccurs == -1))
     {
-      occurenceDescription = "[1..*]";
-      toolTipDescription = "One or more";
+      occurenceDescription = "[1..*]"; //$NON-NLS-1$
+      toolTipDescription = Messages._UI_LABEL_ONE_OR_MORE;
     }
     else if ((minOccurs == 1 && maxOccurs == 1) || (minOccurs == -2 && maxOccurs == 1) || (minOccurs == 1 && maxOccurs == -2))
     {
-      occurenceDescription = "[1..1]";
-      toolTipDescription = "required";
+      occurenceDescription = "[1..1]"; //$NON-NLS-1$
+      toolTipDescription = Messages._UI_LABEL_REQUIRED;
     }
     else if (minOccurs == -2 && maxOccurs == -2)
     {
-      occurenceDescription = "";
+      occurenceDescription = ""; //$NON-NLS-1$
       // none specified, so don't have any toolTip description
     }
     else
     {
       if (maxOccurs == -2)
         maxOccurs = 1;
-      String maxSymbol = maxOccurs == -1 ? "*" : "" + maxOccurs;
-      String minSymbol = minOccurs == -2 ? "1" : "" + minOccurs;
-      occurenceDescription = "[" + minSymbol + ".." + maxSymbol + "]";
-      toolTipDescription = "array";
+      String maxSymbol = maxOccurs == -1 ? "*" : "" + maxOccurs; //$NON-NLS-1$ //$NON-NLS-2$
+      String minSymbol = minOccurs == -2 ? "1" : "" + minOccurs; //$NON-NLS-1$ //$NON-NLS-2$
+      occurenceDescription = "[" + minSymbol + ".." + maxSymbol + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+      toolTipDescription = Messages._UI_LABEL_ARRAY;
     }
 
     if (isForLabel)
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDSchemaAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDSchemaAdapter.java
index 37786ab..7710779 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDSchemaAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDSchemaAdapter.java
@@ -26,6 +26,7 @@
 import org.eclipse.wst.xsd.ui.internal.adt.outline.ITreeElement;
 import org.eclipse.wst.xsd.ui.internal.common.actions.AddXSDComplexTypeDefinitionAction;
 import org.eclipse.wst.xsd.ui.internal.common.actions.AddXSDElementAction;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
 import org.eclipse.xsd.XSDAttributeDeclaration;
 import org.eclipse.xsd.XSDAttributeGroupDefinition;
@@ -38,6 +39,7 @@
 import org.eclipse.xsd.XSDSchemaDirective;
 import org.eclipse.xsd.XSDSimpleTypeDefinition;
 import org.eclipse.xsd.XSDTypeDefinition;
+import org.eclipse.xsd.util.XSDConstants;
 
 public class XSDSchemaAdapter extends XSDBaseAdapter implements IActionProvider, IModel, IADTObjectListener
 {
@@ -64,19 +66,19 @@
     List types = getComplexTypes(xsdSchema);
     types.addAll(getSimpleTypes(xsdSchema));
 
-    fDirectivesCategory = new CategoryAdapter(XSDEditorPlugin.getResourceString("_UI_GRAPH_DIRECTIVES"), XSDEditorPlugin.getDefault().getIconImage("obj16/directivesheader"), directivesList, xsdSchema, CategoryAdapter.DIRECTIVES);
+    fDirectivesCategory = new CategoryAdapter(Messages._UI_GRAPH_DIRECTIVES, XSDEditorPlugin.getDefault().getIconImage("obj16/directivesheader"), directivesList, xsdSchema, CategoryAdapter.DIRECTIVES); //$NON-NLS-1$
     registerListener(fDirectivesCategory);
 
-    fElementsCategory = new CategoryAdapter(XSDEditorPlugin.getResourceString("_UI_GRAPH_ELEMENTS"), XSDEditorPlugin.getDefault().getIconImage("obj16/elementsheader"), elementsList, xsdSchema, CategoryAdapter.ELEMENTS);
+    fElementsCategory = new CategoryAdapter(Messages._UI_GRAPH_ELEMENTS, XSDEditorPlugin.getDefault().getIconImage("obj16/elementsheader"), elementsList, xsdSchema, CategoryAdapter.ELEMENTS);  //$NON-NLS-1$
     registerListener(fElementsCategory);
 
-    fAttributesCategory = new CategoryAdapter(XSDEditorPlugin.getResourceString("_UI_GRAPH_ATTRIBUTES"), XSDEditorPlugin.getDefault().getIconImage("obj16/attributesheader"), attributesList, xsdSchema, CategoryAdapter.ATTRIBUTES);
+    fAttributesCategory = new CategoryAdapter(Messages._UI_GRAPH_ATTRIBUTES, XSDEditorPlugin.getDefault().getIconImage("obj16/attributesheader"), attributesList, xsdSchema, CategoryAdapter.ATTRIBUTES);   //$NON-NLS-1$
     registerListener(fAttributesCategory);
 
-    fTypesCategory = new CategoryAdapter(XSDEditorPlugin.getResourceString("_UI_GRAPH_TYPES"), XSDEditorPlugin.getDefault().getIconImage("obj16/typesheader"), types, xsdSchema, CategoryAdapter.TYPES);
+    fTypesCategory = new CategoryAdapter(Messages._UI_GRAPH_TYPES, XSDEditorPlugin.getDefault().getIconImage("obj16/typesheader"), types, xsdSchema, CategoryAdapter.TYPES);  //$NON-NLS-1$
     registerListener(fTypesCategory);
 
-    fGroupsCategory = new CategoryAdapter(XSDEditorPlugin.getResourceString("_UI_GRAPH_GROUPS"), XSDEditorPlugin.getDefault().getIconImage("obj16/groupsheader"), groups, xsdSchema, CategoryAdapter.GROUPS);
+    fGroupsCategory = new CategoryAdapter(Messages._UI_GRAPH_GROUPS, XSDEditorPlugin.getDefault().getIconImage("obj16/groupsheader"), groups, xsdSchema, CategoryAdapter.GROUPS); //$NON-NLS-1$
     registerListener(fGroupsCategory);
   }
 
@@ -344,7 +346,7 @@
         {
           if (attr.getTargetNamespace() != null)
           {
-            if (!(attr.getTargetNamespace().equals("http://www.w3.org/2001/XMLSchema-instance")))
+            if (!(attr.getTargetNamespace().equals(XSDConstants.SCHEMA_INSTANCE_URI_2001)))
             {
 //              if (attr.getRootContainer() == xsdSchema)
               {
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDSchemaDirectiveAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDSchemaDirectiveAdapter.java
index 67f8a7a..baa664f 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDSchemaDirectiveAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDSchemaDirectiveAdapter.java
@@ -16,6 +16,7 @@
 
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.wst.xsd.ui.internal.adt.outline.ITreeElement;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
 import org.eclipse.xsd.XSDAttributeGroupDefinition;
 import org.eclipse.xsd.XSDComplexTypeDefinition;
@@ -35,15 +36,15 @@
     XSDSchemaDirective object = (XSDSchemaDirective) target;
     if (object instanceof XSDImport)
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDImport.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDImport.gif"); //$NON-NLS-1$
     }
     else if (object instanceof XSDInclude)
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDInclude.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDInclude.gif"); //$NON-NLS-1$
     }
     else if (object instanceof XSDRedefine)
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDRedefine.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDRedefine.gif"); //$NON-NLS-1$
     }
     return null;
   }
@@ -53,9 +54,9 @@
     XSDSchemaDirective directive = (XSDSchemaDirective) target;
     String result = directive.getSchemaLocation();
     if (result == null)
-      result = "(" + XSDEditorPlugin.getXSDString("_UI_LABEL_NO_LOCATION_SPECIFIED") + ")";
-    if (result.equals(""))
-      result = "(" + XSDEditorPlugin.getXSDString("_UI_LABEL_NO_LOCATION_SPECIFIED") + ")";
+      result = "(" + Messages._UI_LABEL_NO_LOCATION_SPECIFIED + ")"; //$NON-NLS-1$ //$NON-NLS-2$
+    if (result.equals("")) //$NON-NLS-1$
+      result = "(" + Messages._UI_LABEL_NO_LOCATION_SPECIFIED + ")"; //$NON-NLS-1$ //$NON-NLS-2$
     return result;
 
   }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDSimpleTypeDefinitionAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDSimpleTypeDefinitionAdapter.java
index fe72a39..8491a6d 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDSimpleTypeDefinitionAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDSimpleTypeDefinitionAdapter.java
@@ -15,6 +15,7 @@
 
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.wst.xsd.ui.internal.adt.facade.IType;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
 import org.eclipse.xsd.XSDSimpleTypeDefinition;
 import org.eclipse.xsd.XSDVariety;
@@ -28,39 +29,39 @@
 
     if (xsdSimpleTypeDefinition.getContainer() == null)
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif"); //$NON-NLS-1$
     }
 
     if (XSDVariety.LIST_LITERAL == xsdSimpleTypeDefinition.getVariety())
     {
-      return XSDEditorPlugin.getPlugin().getIconImage("obj16/smpl_list_obj");
+      return XSDEditorPlugin.getPlugin().getIconImage("obj16/smpl_list_obj"); //$NON-NLS-1$
     }
     else if (XSDVariety.UNION_LITERAL == xsdSimpleTypeDefinition.getVariety())
     {
-      return XSDEditorPlugin.getPlugin().getIconImage("obj16/smpl_union_obj");
+      return XSDEditorPlugin.getPlugin().getIconImage("obj16/smpl_union_obj"); //$NON-NLS-1$
     }
     else if (XSDVariety.ATOMIC_LITERAL == xsdSimpleTypeDefinition.getVariety())
     {
       if (xsdSimpleTypeDefinition.getPrimitiveTypeDefinition() != null)
       {
-        return XSDEditorPlugin.getPlugin().getIconImage("obj16/smpl_restrict_obj");
+        return XSDEditorPlugin.getPlugin().getIconImage("obj16/smpl_restrict_obj"); //$NON-NLS-1$
       }
-      return XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif"); //$NON-NLS-1$
     }
     else if (xsdSimpleTypeDefinition.isSetVariety())
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif"); //$NON-NLS-1$
     }
     else
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif"); //$NON-NLS-1$
     }
   }
   
   public String getDisplayName()
   {
     XSDSimpleTypeDefinition xsdSimpleTypeDefinition = (XSDSimpleTypeDefinition) target;
-    return (xsdSimpleTypeDefinition.getName() == null ? "local type" : xsdSimpleTypeDefinition.getName());
+    return (xsdSimpleTypeDefinition.getName() == null ? Messages._UI_LABEL_LOCAL_TYPE : xsdSimpleTypeDefinition.getName());
   }
 
   public String getText()
@@ -74,7 +75,7 @@
 
     StringBuffer result = new StringBuffer();
 
-    result.append(xsdSimpleTypeDefinition.getName() == null ? "local type" : xsdSimpleTypeDefinition.getName());
+    result.append(xsdSimpleTypeDefinition.getName() == null ? Messages._UI_LABEL_LOCAL_TYPE : xsdSimpleTypeDefinition.getName());
 
     if (showType)
     {
@@ -83,7 +84,7 @@
       {
         if (baseTypeDefinition.getName() != null && !xsdSimpleTypeDefinition.getContents().contains(baseTypeDefinition) && !XSDConstants.isAnySimpleType(baseTypeDefinition))
         {
-          result.append(" : ");
+          result.append(" : "); //$NON-NLS-1$
           result.append(baseTypeDefinition.getQName(xsdSimpleTypeDefinition));
         }
       }
@@ -94,7 +95,7 @@
         {
           if (itemTypeDefinition.getName() != null)
           {
-            result.append(" : ");
+            result.append(" : "); //$NON-NLS-1$
             result.append(itemTypeDefinition.getQName(xsdSimpleTypeDefinition));
           }
         }
@@ -111,12 +112,12 @@
               {
                 if (first)
                 {
-                  result.append(" : ");
+                  result.append(" : "); //$NON-NLS-1$
                   first = false;
                 }
                 else
                 {
-                  result.append(" | ");
+                  result.append(" | "); //$NON-NLS-1$
                 }
                 result.append(memberTypeDefinition.getQName(xsdSimpleTypeDefinition));
               }
@@ -128,7 +129,7 @@
           }
           else if (result.length() == 0)
           {
-            result.append("'absent'");
+            result.append(Messages._UI_LABEL_ABSENT);
           }
         }
       }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDTypeDefinitionAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDTypeDefinitionAdapter.java
index fa7ffb4..4ca019e 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDTypeDefinitionAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDTypeDefinitionAdapter.java
@@ -36,7 +36,7 @@
       if (o instanceof XSDNamedComponent)
       {
          XSDNamedComponent ed = (XSDNamedComponent)o;
-         return "(" + ed.getName() + "Type)";               
+         return "(" + ed.getName() + "Type)";                //$NON-NLS-1$ //$NON-NLS-2$
       }
     }
     return null;
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDWildcardAdapter.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDWildcardAdapter.java
index d2897b3..5b85771 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDWildcardAdapter.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/adapters/XSDWildcardAdapter.java
@@ -31,7 +31,7 @@
   public Image getImage()
   {
     XSDWildcard xsdWildcard = (XSDWildcard) target;
-    return XSDEditorPlugin.getXSDImage(xsdWildcard.eContainer() instanceof XSDParticle ? "icons/XSDAny.gif" : "icons/XSDAnyAttribute.gif");
+    return XSDEditorPlugin.getXSDImage(xsdWildcard.eContainer() instanceof XSDParticle ? "icons/XSDAny.gif" : "icons/XSDAnyAttribute.gif"); //$NON-NLS-1$ //$NON-NLS-2$
   }
 
   public String getText()
@@ -56,7 +56,7 @@
           int min = ((XSDParticle) xsdWildcard.getContainer()).getMinOccurs();
           if (min == XSDParticle.UNBOUNDED)
           {
-            result.append("*");
+            result.append("*"); //$NON-NLS-1$
           }
           else
           {
@@ -72,10 +72,10 @@
         if (hasMaxOccurs)
         {
           int max = ((XSDParticle) xsdWildcard.getContainer()).getMaxOccurs();
-          result.append("..");
+          result.append(".."); //$NON-NLS-1$
           if (max == XSDParticle.UNBOUNDED)
           {
-            result.append("*");
+            result.append("*"); //$NON-NLS-1$
           }
           else
           {
@@ -85,11 +85,11 @@
         else
         // print default
         {
-          result.append("..");
+          result.append(".."); //$NON-NLS-1$
           int max = ((XSDParticle) xsdWildcard.getContainer()).getMaxOccurs();
           result.append(String.valueOf(max));
         }
-        result.append("]");
+        result.append("]"); //$NON-NLS-1$
       }
     }
     return result.toString();
@@ -115,7 +115,7 @@
 
   public String getKind()
   {
-    return "element";
+    return "element"; //$NON-NLS-1$
   }
 
   public IModel getModel()
@@ -125,7 +125,7 @@
 
   public String getName()
   {
-    return "anyElement";
+    return "anyElement"; //$NON-NLS-1$
   }
   
   public IType getType()
@@ -135,7 +135,7 @@
 
   public String getTypeName()
   {
-    return "anyType";
+    return "anyType"; //$NON-NLS-1$
   }
 
   public String getTypeNameQualifier()
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/AttributeGroupDefinitionEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/AttributeGroupDefinitionEditPart.java
index 2035f11..4719f79 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/AttributeGroupDefinitionEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/AttributeGroupDefinitionEditPart.java
@@ -29,7 +29,7 @@
 
 public class AttributeGroupDefinitionEditPart extends ConnectableEditPart
 {
-  public static final Image ATTRIBUTE_GROUP_REF_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("attgrref_obj.gif", true).createImage();
+  public static final Image ATTRIBUTE_GROUP_REF_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("attgrref_obj.gif", true).createImage(); //$NON-NLS-1$
 
   public AttributeGroupDefinitionEditPart()
   {
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/ConnectableEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/ConnectableEditPart.java
index f85f2fb..67e7a49 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/ConnectableEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/ConnectableEditPart.java
@@ -37,7 +37,7 @@
   public IExtendedFigureFactory getExtendedFigureFactory()
   {
     EditPartFactory factory = getViewer().getEditPartFactory();
-    Assert.isTrue(factory instanceof IExtendedFigureFactory, "EditPartFactory must be an instanceof of IExtendedFigureFactory");    
+    Assert.isTrue(factory instanceof IExtendedFigureFactory, "EditPartFactory must be an instanceof of IExtendedFigureFactory");     //$NON-NLS-1$
     return (IExtendedFigureFactory)factory; 
   }
   
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/ModelGroupDefinitionReferenceEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/ModelGroupDefinitionReferenceEditPart.java
index 5798ca6..2a89485 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/ModelGroupDefinitionReferenceEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/ModelGroupDefinitionReferenceEditPart.java
@@ -26,7 +26,7 @@
 
 public class ModelGroupDefinitionReferenceEditPart extends ConnectableEditPart
 {
-  public static final Image image = XSDEditorPlugin.getImageDescriptor("grref_obj.gif", true).createImage();
+  public static final Image image = XSDEditorPlugin.getImageDescriptor("grref_obj.gif", true).createImage(); //$NON-NLS-1$
 
   public ModelGroupDefinitionReferenceEditPart()
   {
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/ModelGroupEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/ModelGroupEditPart.java
index 158fee7..1452c8d 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/ModelGroupEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/ModelGroupEditPart.java
@@ -62,7 +62,7 @@
   
   protected void refreshVisuals()
   {
-    String iconName = "icons/newSequence.gif";
+    String iconName = "icons/newSequence.gif"; //$NON-NLS-1$
     GenericGroupFigure modelGroupFigure = (GenericGroupFigure)getFigure();
     switch (getXSDModelGroup().getCompositor().getValue())
     {
@@ -92,33 +92,33 @@
     // -2 means the user didn't specify (so the default is 1)
     int minOccurs = adapter.getMinOccurs();
     int maxOccurs = adapter.getMaxOccurs();
-    String occurenceDescription = "";
+    String occurenceDescription = ""; //$NON-NLS-1$
     
     if (minOccurs == -3 && maxOccurs == -3)
     {
-      occurenceDescription = "";
+      occurenceDescription = ""; //$NON-NLS-1$
     }
     else if (minOccurs == 0 && (maxOccurs == -2 || maxOccurs == 1))
     {
-      occurenceDescription = "[0..1]";
+      occurenceDescription = "[0..1]"; //$NON-NLS-1$
     }
     else if ((minOccurs == 1 && maxOccurs == 1) ||
              (minOccurs == -2 && maxOccurs == 1) ||
              (minOccurs == 1 && maxOccurs == -2))
     {
-      occurenceDescription = "[1..1]";
+      occurenceDescription = "[1..1]"; //$NON-NLS-1$
     }
     else if (minOccurs == -2 && maxOccurs == -2)
     {
-      occurenceDescription = "";
+      occurenceDescription = ""; //$NON-NLS-1$
     }
     else
     {
       if (maxOccurs == -2) maxOccurs = 1;
-      String maxSymbol = maxOccurs == -1 ? "*" : "" + maxOccurs;
+      String maxSymbol = maxOccurs == -1 ? "*" : "" + maxOccurs; //$NON-NLS-1$ //$NON-NLS-2$
       
-      String minSymbol = minOccurs == -2 ? "1" : "" + minOccurs;
-      occurenceDescription = "[" + minSymbol + ".." + maxSymbol + "]";
+      String minSymbol = minOccurs == -2 ? "1" : "" + minOccurs; //$NON-NLS-1$ //$NON-NLS-2$
+      occurenceDescription = "[" + minSymbol + ".." + maxSymbol + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
     }
 
     modelGroupFigure.getIconFigure().setToolTipText(occurenceDescription);
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/SpaceFillerForFieldEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/SpaceFillerForFieldEditPart.java
index c792eab..e8db41c 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/SpaceFillerForFieldEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/SpaceFillerForFieldEditPart.java
@@ -26,8 +26,8 @@
 
   protected IFigure createFigure()
   {
-    space = new Label("");
-    space.setIcon(XSDEditorPlugin.getXSDImage("icons/Dot.gif"));
+    space = new Label(""); //$NON-NLS-1$
+    space.setIcon(XSDEditorPlugin.getXSDImage("icons/Dot.gif")); //$NON-NLS-1$
     space.setBorder(new MarginBorder(3, 0, 3, 0));
     return space;
   }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/TopLevelComponentEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/TopLevelComponentEditPart.java
index 77058bc..930843b 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/TopLevelComponentEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/TopLevelComponentEditPart.java
@@ -46,7 +46,7 @@
 import org.eclipse.wst.xsd.ui.internal.adt.typeviz.design.figures.FieldFigure;
 import org.eclipse.wst.xsd.ui.internal.design.editpolicies.SelectionHandlesEditPolicyImpl;
 import org.eclipse.wst.xsd.ui.internal.design.layouts.FillLayout;
-import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 
 public class TopLevelComponentEditPart extends BaseEditPart implements IFeedbackHandler
 {
@@ -80,7 +80,7 @@
       // evil hack to provide underlines
       Object model = getModel();
 
-      boolean isLinux = java.io.File.separator.equals("/");
+      boolean isLinux = java.io.File.separator.equals("/"); //$NON-NLS-1$
       if (model instanceof XSDComplexTypeDefinitionAdapter || model instanceof XSDElementDeclarationAdapter || model instanceof XSDModelGroupDefinitionAdapter)
       {
         if (!isLinux)
@@ -133,7 +133,7 @@
     }
     else
     {
-      label.setText(XSDEditorPlugin.getXSDString("_UI_GRAPH_UNKNOWN_OBJECT") + getModel().getClass().getName());
+      label.setText(Messages._UI_GRAPH_UNKNOWN_OBJECT + getModel().getClass().getName());
       // arrowLabel.setVisible(false);
     }
 
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDBaseFieldEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDBaseFieldEditPart.java
index e935a57..1cf1723 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDBaseFieldEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDBaseFieldEditPart.java
@@ -42,7 +42,7 @@
     figure.getTypeLabel().setText(field.getTypeName());
     figure.refreshVisuals(getModel());
 
-    String occurrenceDescription = "";
+    String occurrenceDescription = ""; //$NON-NLS-1$
     if (field instanceof IAnnotationProvider)
     {
       occurrenceDescription = ((IAnnotationProvider)field).getNameAnnotationString();
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDEditPartFactory.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDEditPartFactory.java
index 15fff5d..df5fd9a 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDEditPartFactory.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDEditPartFactory.java
@@ -79,11 +79,11 @@
     {
       Annotation annotation = (Annotation) model;
       String kind = annotation.getCompartment().getKind();
-      if (kind.equals("element"))
+      if (kind.equals("element")) //$NON-NLS-1$
       {
         child = new XSDGroupsForAnnotationEditPart();
       }
-      else if (kind.equals("attribute"))
+      else if (kind.equals("attribute")) //$NON-NLS-1$
       {
         child = new XSDAttributesForAnnotationEditPart();
       }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDSchemaEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDSchemaEditPart.java
index db3a249..8df1860 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDSchemaEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDSchemaEditPart.java
@@ -27,7 +27,7 @@
 import org.eclipse.wst.xsd.ui.internal.adt.design.editparts.BaseEditPart;
 import org.eclipse.wst.xsd.ui.internal.adt.typeviz.design.figures.HeadingFigure;
 import org.eclipse.wst.xsd.ui.internal.design.layouts.FillLayout;
-import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.xsd.XSDSchema;
 
 public class XSDSchemaEditPart extends BaseEditPart
@@ -134,9 +134,9 @@
     String targetNamespaceValue = ((XSDSchema) ((XSDSchemaAdapter) getModel()).getTarget()).getTargetNamespace();
     if (targetNamespaceValue == null || targetNamespaceValue.length() == 0)
     {
-      targetNamespaceValue = XSDEditorPlugin.getXSDString("_UI_GRAPH_XSDSCHEMA_NO_NAMESPACE");
+      targetNamespaceValue = Messages._UI_GRAPH_XSDSCHEMA_NO_NAMESPACE;
     }
-    headingFigure.getLabel().setText(XSDEditorPlugin.getXSDString("_UI_GRAPH_XSDSCHEMA") + " : " + targetNamespaceValue);
+    headingFigure.getLabel().setText(Messages._UI_GRAPH_XSDSCHEMA + " : " + targetNamespaceValue);  //$NON-NLS-1$  
   }
 
   protected void createEditPolicies()
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDSimpleTypeEditPart.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDSimpleTypeEditPart.java
index d03b1a2..0b50dec 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDSimpleTypeEditPart.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/XSDSimpleTypeEditPart.java
@@ -47,7 +47,7 @@
     ToolbarLayout toolbarLayout = new ToolbarLayout();
     toolbarLayout.setStretchMinorAxis(true);
     figure.setLayoutManager(toolbarLayout);
-    figure.getHeadingFigure().getLabel().setIcon(XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif"));
+    figure.getHeadingFigure().getLabel().setIcon(XSDEditorPlugin.getXSDImage("icons/XSDSimpleType.gif")); //$NON-NLS-1$
     return figure;
   }
   
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/model/SpaceFiller.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/model/SpaceFiller.java
index 4707452..ae847ef 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/model/SpaceFiller.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/editparts/model/SpaceFiller.java
@@ -34,13 +34,13 @@
 
   public Image getImage()
   {
-    if (kind.equals("attribute"))
+    if (kind.equals("attribute")) //$NON-NLS-1$
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDAttribute.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDAttribute.gif"); //$NON-NLS-1$
     }
     else
     {
-      return XSDEditorPlugin.getXSDImage("icons/XSDElement.gif");
+      return XSDEditorPlugin.getXSDImage("icons/XSDElement.gif"); //$NON-NLS-1$
     }
   }
   
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/figures/ModelGroupFigure.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/figures/ModelGroupFigure.java
index a313e34..c152774 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/figures/ModelGroupFigure.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/figures/ModelGroupFigure.java
@@ -16,9 +16,9 @@
 
 public class ModelGroupFigure extends GenericGroupFigure implements IModelGroupFigure
 {
-  public static final Image SEQUENCE_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("seq_obj.gif", true).createImage();
-  public static final Image CHOICE_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("choice_obj.gif", true).createImage();
-  public static final Image ALL_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("all_obj.gif", true).createImage();
+  public static final Image SEQUENCE_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("seq_obj.gif", true).createImage(); //$NON-NLS-1$
+  public static final Image CHOICE_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("choice_obj.gif", true).createImage(); //$NON-NLS-1$
+  public static final Image ALL_ICON_IMAGE = XSDEditorPlugin.getImageDescriptor("all_obj.gif", true).createImage(); //$NON-NLS-1$
   
   public ModelGroupFigure()
   {
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/figures/SpacingFigure.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/figures/SpacingFigure.java
index 55c9ec4..fa6a55a 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/figures/SpacingFigure.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/design/figures/SpacingFigure.java
@@ -18,8 +18,8 @@
 {
   public SpacingFigure()
   {
-    super("");
-    setIcon(XSDEditorPlugin.getXSDImage("icons/Dot.gif"));
+    super(""); //$NON-NLS-1$
+    setIcon(XSDEditorPlugin.getXSDImage("icons/Dot.gif")); //$NON-NLS-1$
     setBorder(new MarginBorder(3, 0, 3, 0));
   }
 }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewComponentDialog.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewComponentDialog.java
index 1d09d4b..e17b22e 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewComponentDialog.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewComponentDialog.java
@@ -104,7 +104,7 @@
     composite.setLayoutData(gdFill);
 
     Label nameLabel = new Label(composite, SWT.NONE);
-    nameLabel.setText("Name:");//XSDEditorPlugin.getXSDString("_UI_LABEL_NAME")); //$NON-NLS-1$
+    nameLabel.setText("Name:");//XSDEditorPlugin.getXSDString("_UI_LABEL_NAME"));
 
     nameField = new Text(composite, SWT.SINGLE | SWT.BORDER);
     GridData gd= new GridData();
@@ -119,7 +119,7 @@
 
     // error message
     errorMessageLabel = new Label(dialogArea, SWT.NONE);
-    errorMessageLabel.setText("error message goes here");         
+    errorMessageLabel.setText("error message goes here");
     GridData gd2 = new GridData();
     gd2.horizontalAlignment= GridData.FILL;
     gd2.grabExcessHorizontalSpace= true;
@@ -144,7 +144,7 @@
   	Iterator iterator = usedNames.iterator();
   	while (iterator.hasNext()) {
   		if (name.equalsIgnoreCase((String) iterator.next())) {
-  			return "_UI_LABEL_WARNING_DUPLICATE_NAME_EXISTS";
+  			return "_UI_LABEL_WARNING_DUPLICATE_NAME_EXISTS"; //$NON-NLS-1$
   		}
   	}
   	
@@ -161,9 +161,9 @@
     }   
     else
     {
-      errorMessage = "";
+      errorMessage = ""; //$NON-NLS-1$
     }  
-    errorMessageLabel.setText(errorMessage != null ? errorMessage : "");
+    errorMessageLabel.setText(errorMessage != null ? errorMessage : ""); //$NON-NLS-1$
 //    okButton.setEnabled(errorMessage == null);
   }
  
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewElementDialog.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewElementDialog.java
index 703ec02..d923235 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewElementDialog.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewElementDialog.java
@@ -14,6 +14,7 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.wst.common.ui.internal.search.dialogs.ComponentSpecification;
 import org.eclipse.wst.xsd.ui.internal.adt.edit.IComponentDialog;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.search.IXSDSearchConstants;
 
 public class NewElementDialog extends NewComponentDialog implements IComponentDialog
@@ -24,7 +25,7 @@
 
 	  public NewElementDialog()
 	  {
-	    super(Display.getCurrent().getActiveShell(), "New Element", "NewElement");    
+	    super(Display.getCurrent().getActiveShell(), Messages._UI_LABEL_NEW_ELEMENT, "NewElement");     //$NON-NLS-1$
 	  }
 	  
 	  public int createAndOpen()
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewTypeDialog.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewTypeDialog.java
index e2e841f..ba4c544 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewTypeDialog.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/NewTypeDialog.java
@@ -23,6 +23,7 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.wst.common.ui.internal.search.dialogs.ComponentSpecification;
 import org.eclipse.wst.xsd.ui.internal.adt.edit.IComponentDialog;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.search.IXSDSearchConstants;
 
 public class NewTypeDialog extends NewComponentDialog implements IComponentDialog
@@ -35,7 +36,7 @@
 
   public NewTypeDialog()
   {
-    super(Display.getCurrent().getActiveShell(), "New Type", "NewType");    
+    super(Display.getCurrent().getActiveShell(), Messages._UI_LABEL_NEW_TYPE, "NewType");     //$NON-NLS-1$
   }
   
   public int createAndOpen()
@@ -67,10 +68,10 @@
   protected void createHeaderContent(Composite parent)
   {
     final Button complexTypeButton = new Button(parent, SWT.RADIO);
-    complexTypeButton.setText("Complex Type");
+    complexTypeButton.setText(Messages._UI_LABEL_COMPLEX_TYPE);
     
     final Button simpleTypeButton = new Button(parent, SWT.RADIO);
-    simpleTypeButton.setText("Simple Type");
+    simpleTypeButton.setText(Messages._UI_LABEL_SIMPLE_TYPE);
 
     SelectionAdapter listener = new SelectionAdapter()
     {
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/SelectBuiltInTypesForFilteringDialog.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/SelectBuiltInTypesForFilteringDialog.java
index 3de2ff7..cd83b4d 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/SelectBuiltInTypesForFilteringDialog.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/dialogs/SelectBuiltInTypesForFilteringDialog.java
@@ -19,6 +19,7 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.dialogs.CheckedTreeSelectionDialog;
 import org.eclipse.wst.common.ui.internal.search.dialogs.ComponentSpecification;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
 
 /**
@@ -44,9 +45,8 @@
 		// grey state enable
 		setContainerMode(true);
 		
-		// TODO externalize String
-		setTitle("Set common Built-In types");
-		setMessage("Select the types that you do not want to filter out: ");
+		setTitle(Messages._UI_LABEL_SET_COMMON_BUILT_IN_TYPES);
+		setMessage(Messages._UI_LABEL_SELECT_TYPES_FILTER_OUT);
 		
 		//super.create();
 		//super.getTreeViewer().setSorter(new ViewerSorter());
@@ -62,7 +62,7 @@
 	 * use this method for conversion
 	 */
 	public static String getTypesListInString(Object[] chosenTypes) {
-		String returningList = "";
+		String returningList = ""; //$NON-NLS-1$
 		for (int i = 0; i < chosenTypes.length; i++){
 			if ( chosenTypes[i] instanceof ComponentSpecification){
 				ComponentSpecification aType = 
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/InternalXSDMultiPageEditor.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/InternalXSDMultiPageEditor.java
index 70522ca..9cdc3a7 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/InternalXSDMultiPageEditor.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/InternalXSDMultiPageEditor.java
@@ -292,7 +292,7 @@
 
   public String getContributorId()
   {
-    return "org.eclipse.wst.xsd.ui.internal.editor";
+    return "org.eclipse.wst.xsd.ui.internal.editor"; //$NON-NLS-1$
   }
 
   public XSDSchema getXSDSchema()
@@ -311,7 +311,7 @@
     {
       structuredTextEditor = new StructuredTextEditor();
       int index = addPage(structuredTextEditor, getEditorInput());
-      setPageText(index, "Source");
+      setPageText(index, Messages._UI_LABEL_SOURCE);
       structuredTextEditor.update();
       structuredTextEditor.setEditorPart(this);
       structuredTextEditor.addPropertyListener(this);
@@ -389,10 +389,10 @@
     action = new DeleteAction(this);
     action.setSelectionProvider(getSelectionManager());
     registry.registerAction(action);
-    action = new AddXSDElementAction(this, AddXSDElementAction.ID, "Add Element", false);
+    action = new AddXSDElementAction(this, AddXSDElementAction.ID, Messages._UI_ACTION_ADD_ELEMENT, false);
     action.setSelectionProvider(getSelectionManager());
     registry.registerAction(action);
-    action = new AddXSDElementAction(this, AddXSDElementAction.REF_ID, "Add Element Ref", true);
+    action = new AddXSDElementAction(this, AddXSDElementAction.REF_ID, Messages._UI_ACTION_ADD_ELEMENT_REF, true);
     action.setSelectionProvider(getSelectionManager());
     registry.registerAction(action);
     action = new AddXSDModelGroupAction(this, XSDCompositor.SEQUENCE_LITERAL, AddXSDModelGroupAction.SEQUENCE_ID);
@@ -433,11 +433,11 @@
     action.setSelectionProvider(getSelectionManager());
     registry.registerAction(action);
     
-    SetTypeAction setNewComplexTypeAction = new SetTypeAction("New...", SetTypeAction.SET_NEW_TYPE_ID, this);
+    SetTypeAction setNewComplexTypeAction = new SetTypeAction(Messages._UI_ACTION_NEW, SetTypeAction.SET_NEW_TYPE_ID, this);
     setNewComplexTypeAction.setSelectionProvider(getSelectionManager());
     registry.registerAction(setNewComplexTypeAction);
         
-    SetTypeAction setExistingTypeAction = new SetTypeAction("Browse...", SetTypeAction.SELECT_EXISTING_TYPE_ID, this);
+    SetTypeAction setExistingTypeAction = new SetTypeAction(Messages._UI_ACTION_BROWSE, SetTypeAction.SELECT_EXISTING_TYPE_ID, this);
     setExistingTypeAction.setSelectionProvider(getSelectionManager());
     registry.registerAction(setExistingTypeAction);
 
@@ -446,25 +446,25 @@
   
   protected void addMultiplicityMenu(ActionRegistry registry)
   {
-    SetMultiplicityAction oneMultiplicity = new SetMultiplicityAction(this, "1..1 (" + "Required" + ")", SetMultiplicityAction.REQUIRED_ID);
+    SetMultiplicityAction oneMultiplicity = new SetMultiplicityAction(this, "1..1 (" + Messages._UI_LABEL_REQUIRED + ")", SetMultiplicityAction.REQUIRED_ID); //$NON-NLS-1$ //$NON-NLS-2$
     oneMultiplicity.setMaxOccurs(1);
     oneMultiplicity.setMinOccurs(1);
     oneMultiplicity.setSelectionProvider(getSelectionManager());
     registry.registerAction(oneMultiplicity);
 
-    SetMultiplicityAction zeroOrMoreMultiplicity = new SetMultiplicityAction(this, "0..* (" + "Zero or more" + ")", SetMultiplicityAction.ZERO_OR_MORE_ID);
+    SetMultiplicityAction zeroOrMoreMultiplicity = new SetMultiplicityAction(this, "0..* (" + Messages._UI_LABEL_ZERO_OR_MORE + ")", SetMultiplicityAction.ZERO_OR_MORE_ID); //$NON-NLS-1$ //$NON-NLS-2$
     zeroOrMoreMultiplicity.setMaxOccurs(-1);
     zeroOrMoreMultiplicity.setMinOccurs(0);
     zeroOrMoreMultiplicity.setSelectionProvider(getSelectionManager());
     registry.registerAction(zeroOrMoreMultiplicity);
     
-    SetMultiplicityAction zeroOrOneMultiplicity = new SetMultiplicityAction(this, "0..1 (" + "Optional" + ")", SetMultiplicityAction.ZERO_OR_ONE_ID);
+    SetMultiplicityAction zeroOrOneMultiplicity = new SetMultiplicityAction(this, "0..1 (" + Messages._UI_LABEL_OPTIONAL + ")", SetMultiplicityAction.ZERO_OR_ONE_ID); //$NON-NLS-1$ //$NON-NLS-2$
     zeroOrOneMultiplicity.setMaxOccurs(1);
     zeroOrOneMultiplicity.setMinOccurs(0);
     zeroOrOneMultiplicity.setSelectionProvider(getSelectionManager());
     registry.registerAction(zeroOrOneMultiplicity);
 
-    SetMultiplicityAction oneOrMoreMultiplicity = new SetMultiplicityAction(this, "1..* (" + "One or more" + ")", SetMultiplicityAction.ONE_OR_MORE_ID);
+    SetMultiplicityAction oneOrMoreMultiplicity = new SetMultiplicityAction(this, "1..* (" + Messages._UI_LABEL_ONE_OR_MORE + ")", SetMultiplicityAction.ONE_OR_MORE_ID); //$NON-NLS-1$ //$NON-NLS-2$
     oneOrMoreMultiplicity.setMaxOccurs(-1);
     oneOrMoreMultiplicity.setMinOccurs(1);
     oneOrMoreMultiplicity.setSelectionProvider(getSelectionManager());
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/Messages.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/Messages.java
index fceb357..12686c9 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/Messages.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/Messages.java
@@ -16,7 +16,7 @@
 {
   static 
   {
-    NLS.initializeMessages("org.eclipse.wst.xsd.ui.internal.editor" + ".Messages", Messages.class);
+    NLS.initializeMessages("org.eclipse.wst.xsd.ui.internal.editor" + ".Messages", Messages.class); //$NON-NLS-1$ //$NON-NLS-2$
   }
 
   public Messages()
@@ -39,6 +39,64 @@
   public static String UI_LABEL_READ_ONLY;
   public static String UI_LABEL_COMPONENTS;
 
+  public static String _UI_GRAPH_TYPES;
+  public static String _UI_GRAPH_ELEMENTS;
+  public static String _UI_GRAPH_ATTRIBUTES;
+  public static String _UI_GRAPH_ATTRIBUTE_GROUPS;
+  public static String _UI_GRAPH_NOTATIONS;
+  public static String _UI_GRAPH_IDENTITY_CONSTRAINTS;
+  public static String _UI_GRAPH_ANNOTATIONS;
+  public static String _UI_GRAPH_DIRECTIVES;
+  public static String _UI_GRAPH_GROUPS;
+  
+  public static String _UI_LABEL_NO_LOCATION_SPECIFIED;
+  public static String _UI_NO_TYPE_DEFINED;
+  public static String _UI_ACTION_UPDATE_NAME;
+  public static String _UI_LABEL_ABSENT;
+  public static String _UI_ACTION_ADD_FIELD;
+  public static String _UI_ACTION_SET_MULTIPLICITY;
+  public static String _UI_LABEL_OPTIONAL;
+  public static String _UI_LABEL_ZERO_OR_MORE;
+  public static String _UI_LABEL_ONE_OR_MORE;
+  public static String _UI_LABEL_REQUIRED;
+  public static String _UI_LABEL_ARRAY;
+  public static String _UI_ACTION_SET_TYPE;
+  public static String _UI_LABEL_LOCAL_TYPE;
+  
+  public static String _UI_GRAPH_UNKNOWN_OBJECT;
+  public static String _UI_GRAPH_XSDSCHEMA;
+  public static String _UI_GRAPH_XSDSCHEMA_NO_NAMESPACE;
+  public static String _UI_LABEL_SET_COMMON_BUILT_IN_TYPES;
+  public static String _UI_LABEL_SELECT_TYPES_FILTER_OUT;
+  public static String _UI_LABEL_NEW_TYPE;
+  public static String _UI_LABEL_COMPLEX_TYPE;
+  public static String _UI_LABEL_SIMPLE_TYPE;
+  public static String _UI_LABEL_NEW_ELEMENT;
+  public static String _UI_MENU_XSD_EDITOR;
+  public static String _UI_LABEL_SOURCE;
+  public static String _UI_ACTION_ADD_ELEMENT;
+  public static String _UI_ACTION_ADD_ELEMENT_REF;
+  public static String _UI_ACTION_NEW;
+  public static String _UI_ACTION_BROWSE;
+  public static String _UI_ACTION_UPDATE_ELEMENT_REFERENCE;
+  public static String _UI_LABEL_TARGET_NAMESPACE;
+  public static String _UI_LABEL_NO_NAMESPACE;
+  public static String _UI_ACTION_ADD_COMPLEX_TYPE;
+  public static String _UI_ACTION_ADD_SIMPLE_TYPE;
+  public static String _UI_LABEL_NAME_SEARCH_FILTER_TEXT;
+  public static String _UI_LABEL_ELEMENTS_COLON;
+  public static String _UI_LABEL_SET_ELEMENT_REFERENCE;
+  public static String _UI_LABEL_TYPES_COLON;
+  public static String _UI_LABEL_SET_TYPE;
+
+  public static String _UI_TEXT_INDENT_LABEL;
+  public static String _UI_TEXT_INDENT_SPACES_LABEL; 
+  public static String _UI_TEXT_XSD_NAMESPACE_PREFIX;
+  public static String _UI_TEXT_XSD_DEFAULT_PREFIX;
+  public static String _UI_QUALIFY_XSD;
+  public static String _UI_TEXT_XSD_DEFAULT_TARGET_NAMESPACE;
+  
+  public static String _ERROR_LABEL_INVALID_PREFIX;
 
 }
 
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/Messages.properties b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/Messages.properties
deleted file mode 100644
index 82f42e0..0000000
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/Messages.properties
+++ /dev/null
@@ -1,32 +0,0 @@
-###############################################################################
-# Copyright (c) 2001, 2006 IBM Corporation and others.
-# All rights reserved. This program and the accompanying materials
-# are made available under the terms of the Eclipse Public License v1.0
-# which accompanies this distribution, and is available at
-# http://www.eclipse.org/legal/epl-v10.html
-#
-# Contributors:
-#     IBM Corporation - initial API and implementation
-###############################################################################
-
-UI_LABEL_BASE_TYPE = Base Type:
-UI_LABEL_DERIVED_BY = Derived By:
-
-UI_LABEL_INHERIT_FROM = Inherit From:
-UI_LABEL_INHERIT_BY = Inherit By:
-
-UI_LABEL_DOCUMENTATION = Documentation
-UI_LABEL_APP_INFO = App Info
-
-UI_LABEL_SET_TYPE = Set Type
-UI_LABEL_TYPE = Type:
-
-UI_LABEL_MINOCCURS = Minimum Occurrence:
-UI_LABEL_MAXOCCURS = Maximum Occurrence:
-
-UI_PAGE_HEADING_REFERENCE = Reference
-UI_LABEL_READ_ONLY = Read-Only
-
-UI_NO_TYPE = No Type
-
-UI_LABEL_COMPONENTS				= Components:
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDEditorConfiguration.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDEditorConfiguration.java
index ca0016d..216dcc7 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDEditorConfiguration.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDEditorConfiguration.java
@@ -23,12 +23,12 @@
 
 public class XSDEditorConfiguration
 {
-  public static final String XSDEDITORCONFIGURATIONEXTENSIONID = "org.eclipse.wst.xsd.ui.XSDEditorExtensionConfiguration";
-  public static final String CLASSNAME = "class";
-  public static final String ADAPTERFACTORY = "adapterFactory";
-  public static final String TOOLBARACTION = "toolbarAction";
-  public static final String FIGUREFACTORY = "figureFactory";
-  public static final String EDITPARTFACTORY = "editPartFactory";
+  public static final String XSDEDITORCONFIGURATIONEXTENSIONID = "org.eclipse.wst.xsd.ui.XSDEditorExtensionConfiguration"; //$NON-NLS-1$
+  public static final String CLASSNAME = "class"; //$NON-NLS-1$
+  public static final String ADAPTERFACTORY = "adapterFactory"; //$NON-NLS-1$
+  public static final String TOOLBARACTION = "toolbarAction"; //$NON-NLS-1$
+  public static final String FIGUREFACTORY = "figureFactory"; //$NON-NLS-1$
+  public static final String EDITPARTFACTORY = "editPartFactory"; //$NON-NLS-1$
 
   List definedExtensionsList = null;
 
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDEditorPlugin.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDEditorPlugin.java
index ab87a70..cb0cc84 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDEditorPlugin.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDEditorPlugin.java
@@ -28,12 +28,12 @@
 
 public class XSDEditorPlugin extends AbstractUIPlugin
 {
-  public static final String PLUGIN_ID = "org.eclipse.wst.xsd.ui";
-  public static final String CONST_XSD_DEFAULT_PREFIX_TEXT = "org.eclipse.wst.xmlschema.xsdDefaultPrefixText";
-  public static final String CONST_PREFERED_BUILT_IN_TYPES = "org.eclipse.wst.xmlschema.preferedBuiltInTypes"; 
-  public static final String CUSTOM_LIST_SEPARATOR = "\n";
-  public static final String EXTENSIONS_SCHEMAS_EXTENSIONID = "org.eclipse.wst.xsd.ui.ExtensionsSchemasDescription";
-  public final static String DEFAULT_TARGET_NAMESPACE = "http://www.example.org";
+  public static final String PLUGIN_ID = "org.eclipse.wst.xsd.ui"; //$NON-NLS-1$
+  public static final String CONST_XSD_DEFAULT_PREFIX_TEXT = "org.eclipse.wst.xmlschema.xsdDefaultPrefixText"; //$NON-NLS-1$
+  public static final String CONST_PREFERED_BUILT_IN_TYPES = "org.eclipse.wst.xmlschema.preferedBuiltInTypes";  //$NON-NLS-1$
+  public static final String CUSTOM_LIST_SEPARATOR = "\n"; //$NON-NLS-1$
+  public static final String EXTENSIONS_SCHEMAS_EXTENSIONID = "org.eclipse.wst.xsd.ui.ExtensionsSchemasDescription"; //$NON-NLS-1$
+  public final static String DEFAULT_TARGET_NAMESPACE = "http://www.example.org"; //$NON-NLS-1$
   
 	//The shared instance.
 	private static XSDEditorPlugin plugin;
@@ -42,11 +42,11 @@
   private ExtensionsSchemasRegistry registry;
   private XSDEditorConfiguration xsdEditorConfiguration = null;
   
-  public static final String CONST_USE_SIMPLE_EDIT_MODE = PLUGIN_ID + ".useSimpleEditMode";
-  public static final String CONST_SHOW_INHERITED_CONTENT = PLUGIN_ID + ".showInheritedContent";
+  public static final String CONST_USE_SIMPLE_EDIT_MODE = PLUGIN_ID + ".useSimpleEditMode"; //$NON-NLS-1$
+  public static final String CONST_SHOW_INHERITED_CONTENT = PLUGIN_ID + ".showInheritedContent"; //$NON-NLS-1$
 
-  public static final String CONST_XSD_LANGUAGE_QUALIFY = "org.eclipse.wst.xmlschema.xsdQualify";
-  public static final String CONST_DEFAULT_TARGET_NAMESPACE = "org.eclipse.wst.xmlschema.defaultTargetnamespaceText";
+  public static final String CONST_XSD_LANGUAGE_QUALIFY = "org.eclipse.wst.xmlschema.xsdQualify"; //$NON-NLS-1$
+  public static final String CONST_DEFAULT_TARGET_NAMESPACE = "org.eclipse.wst.xmlschema.defaultTargetnamespaceText"; //$NON-NLS-1$
 	/**
 	 * The constructor.
 	 */
@@ -128,13 +128,13 @@
 	 * @return the image descriptor
 	 */
 	public static ImageDescriptor getImageDescriptor(String path) {
-		return AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.wst.xsd.ui", path);
+		return AbstractUIPlugin.imageDescriptorFromPlugin("org.eclipse.wst.xsd.ui", path); //$NON-NLS-1$
 	}
 	
 	public static ImageDescriptor getImageDescriptor(String name, boolean getBaseURL) {
 		try {
 			URL installURL = getDefault().getBundle().getEntry("/"); //$NON-NLS-1$
-			String imageString = getBaseURL ? "icons/" + name : name;
+			String imageString = getBaseURL ? "icons/" + name : name; //$NON-NLS-1$
 
 			URL imageURL = new URL(installURL, imageString);
 			return ImageDescriptor.createFromURL(imageURL);
@@ -181,7 +181,7 @@
 
 	public Image getIconImage(String object) {
 		try {
-			return ExtendedImageRegistry.getInstance().getImage(new URL(getBaseURL() + "icons/" + object + ".gif"));
+			return ExtendedImageRegistry.getInstance().getImage(new URL(getBaseURL() + "icons/" + object + ".gif")); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 		catch (MalformedURLException exception) {
 
@@ -197,21 +197,21 @@
   protected void initializeDefaultPreferences(IPreferenceStore store)
   {
     store.setDefault(CONST_SHOW_INHERITED_CONTENT, false);
-    store.setDefault(CONST_XSD_DEFAULT_PREFIX_TEXT, "xsd");
+    store.setDefault(CONST_XSD_DEFAULT_PREFIX_TEXT, "xsd"); //$NON-NLS-1$
     store.setDefault(CONST_XSD_LANGUAGE_QUALIFY, false);
     store.setDefault(CONST_DEFAULT_TARGET_NAMESPACE, DEFAULT_TARGET_NAMESPACE);
     
     //Even the last item in the list must contain a trailing List separator
     store.setDefault(CONST_PREFERED_BUILT_IN_TYPES,     		
-    		"boolean"+ CUSTOM_LIST_SEPARATOR +
-    		"date" + CUSTOM_LIST_SEPARATOR +
-    		"dateTime" + CUSTOM_LIST_SEPARATOR +
-    		"double" + CUSTOM_LIST_SEPARATOR +
-    		"float" + CUSTOM_LIST_SEPARATOR +
-    		"hexBinary" + CUSTOM_LIST_SEPARATOR +
-    		"int" + CUSTOM_LIST_SEPARATOR +
-    		"string" + CUSTOM_LIST_SEPARATOR +
-    		"time" + CUSTOM_LIST_SEPARATOR);
+    		"boolean"+ CUSTOM_LIST_SEPARATOR + //$NON-NLS-1$
+    		"date" + CUSTOM_LIST_SEPARATOR + //$NON-NLS-1$
+    		"dateTime" + CUSTOM_LIST_SEPARATOR + //$NON-NLS-1$
+    		"double" + CUSTOM_LIST_SEPARATOR + //$NON-NLS-1$
+    		"float" + CUSTOM_LIST_SEPARATOR + //$NON-NLS-1$
+    		"hexBinary" + CUSTOM_LIST_SEPARATOR + //$NON-NLS-1$
+    		"int" + CUSTOM_LIST_SEPARATOR + //$NON-NLS-1$
+    		"string" + CUSTOM_LIST_SEPARATOR + //$NON-NLS-1$
+    		"time" + CUSTOM_LIST_SEPARATOR); //$NON-NLS-1$
   }
 
   public ExtensionsSchemasRegistry getExtensionsSchemasRegistry()
@@ -254,8 +254,8 @@
    */
   public String getXMLSchemaTargetNamespace() {
     String targetNamespace = getPreferenceStore().getString(CONST_DEFAULT_TARGET_NAMESPACE);
-    if (!targetNamespace.endsWith("/")) {
-      targetNamespace = targetNamespace + "/";
+    if (!targetNamespace.endsWith("/")) { //$NON-NLS-1$
+      targetNamespace = targetNamespace + "/"; //$NON-NLS-1$
     }
     return targetNamespace;
   }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDElementReferenceEditManager.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDElementReferenceEditManager.java
index 0adfeae..1ef88df 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDElementReferenceEditManager.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDElementReferenceEditManager.java
@@ -95,14 +95,14 @@
           XSDElementDeclaration elementDec = null;
           if (component.getMetaName() == IXSDSearchConstants.ELEMENT_META_NAME)
           {  
-            AddXSDElementCommand command = new AddXSDElementCommand("Add Element", concreteComponent.getSchema());
+            AddXSDElementCommand command = new AddXSDElementCommand(Messages._UI_ACTION_ADD_ELEMENT, concreteComponent.getSchema());
             command.setNameToAdd(component.getName());
             command.execute();
             elementDec = (XSDElementDeclaration) command.getAddedComponent();
           }
           if (elementDec != null && elementDec instanceof XSDElementDeclaration)
           {
-            Command command = new UpdateElementReferenceCommand("Update Element reference",
+            Command command = new UpdateElementReferenceCommand(Messages._UI_ACTION_UPDATE_ELEMENT_REFERENCE,
             		concreteComponent, elementDec);
             command.execute();
           }  
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDFileEditorInput.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDFileEditorInput.java
index ba7d7d2..78f1d89 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDFileEditorInput.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDFileEditorInput.java
@@ -60,9 +60,9 @@
     {
       String ns = schema.getTargetNamespace();
       if (ns != null && ns.length() > 0)
-        return "Target Namespace: " + ns;
+        return Messages._UI_LABEL_TARGET_NAMESPACE + ns;
       else
-        return "No Namespace";
+        return Messages._UI_LABEL_NO_NAMESPACE;
     }
     return super.getToolTipText();
   }
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDMultiPageEditorContributor.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDMultiPageEditorContributor.java
index 40fb050..001d4e3 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDMultiPageEditorContributor.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDMultiPageEditorContributor.java
@@ -124,7 +124,7 @@
 
   public void contributeToMenu(IMenuManager manager)
   {
-    IMenuManager menu = new MenuManager("&XSD Editor");
+    IMenuManager menu = new MenuManager(Messages._UI_MENU_XSD_EDITOR);
     manager.prependToGroup(IWorkbenchActionConstants.MB_ADDITIONS, menu);
 
     // Add extension menu actions
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDTypeReferenceEditManager.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDTypeReferenceEditManager.java
index 20d7432..4ee37fd 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDTypeReferenceEditManager.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/XSDTypeReferenceEditManager.java
@@ -85,15 +85,15 @@
     // for now let's hard code some values
     //
     List list = new ArrayList();
-    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "boolean", null));
-    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "date", null));
-    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "dateTime", null));    
-    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "double", null));
-    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "float", null)); 
-    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "hexBinary", null));
-    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "int", null));    
-    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "string", null));
-    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "time", null));       
+    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "boolean", null)); //$NON-NLS-1$
+    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "date", null)); //$NON-NLS-1$
+    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "dateTime", null));     //$NON-NLS-1$
+    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "double", null)); //$NON-NLS-1$
+    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "float", null));  //$NON-NLS-1$
+    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "hexBinary", null)); //$NON-NLS-1$
+    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "int", null));     //$NON-NLS-1$
+    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "string", null)); //$NON-NLS-1$
+    list.add(new ComponentSpecification(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "time", null));        //$NON-NLS-1$
     ComponentSpecification result[] = new ComponentSpecification[list.size()];
     list.toArray(result);
     return result;
@@ -123,14 +123,14 @@
         XSDTypeDefinition td = null;
         if (component.getMetaName() == IXSDSearchConstants.COMPLEX_TYPE_META_NAME)
         {  
-          AddXSDComplexTypeDefinitionCommand command = new AddXSDComplexTypeDefinitionCommand("Add Complex Type", concreteComponent.getSchema());
+          AddXSDComplexTypeDefinitionCommand command = new AddXSDComplexTypeDefinitionCommand(Messages._UI_ACTION_ADD_COMPLEX_TYPE, concreteComponent.getSchema());
           command.setNameToAdd(component.getName());
           command.execute();
           td = command.getCreatedComplexType();
         }
         else
         {
-          AddXSDSimpleTypeDefinitionCommand command = new AddXSDSimpleTypeDefinitionCommand("Add Simple Type", concreteComponent.getSchema());
+          AddXSDSimpleTypeDefinitionCommand command = new AddXSDSimpleTypeDefinitionCommand(Messages._UI_ACTION_ADD_SIMPLE_TYPE, concreteComponent.getSchema());
           command.setNameToAdd(component.getName());
           command.execute();
           td = command.getCreatedSimpleType();
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/messages.properties b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/messages.properties
new file mode 100644
index 0000000..3b814ef
--- /dev/null
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/messages.properties
@@ -0,0 +1,99 @@
+###############################################################################
+# Copyright (c) 2001, 2006 IBM Corporation and others.
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Eclipse Public License v1.0
+# which accompanies this distribution, and is available at
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# Contributors:
+#     IBM Corporation - initial API and implementation
+###############################################################################
+
+UI_LABEL_BASE_TYPE = Base Type:
+UI_LABEL_DERIVED_BY = Derived By:
+
+UI_LABEL_INHERIT_FROM = Inherit From:
+UI_LABEL_INHERIT_BY = Inherit By:
+
+UI_LABEL_DOCUMENTATION = Documentation
+UI_LABEL_APP_INFO = App Info
+
+UI_LABEL_SET_TYPE = Set Type
+UI_LABEL_TYPE = Type:
+
+UI_LABEL_MINOCCURS = Minimum Occurrence:
+UI_LABEL_MAXOCCURS = Maximum Occurrence:
+
+UI_PAGE_HEADING_REFERENCE = Reference
+UI_LABEL_READ_ONLY = Read-Only
+
+UI_NO_TYPE = No Type
+
+UI_LABEL_COMPONENTS				= Components:
+
+! Additional Categories
+_UI_GRAPH_TYPES                = Types
+_UI_GRAPH_ELEMENTS             = Elements
+_UI_GRAPH_ATTRIBUTES           = Attributes
+_UI_GRAPH_ATTRIBUTE_GROUPS     = Attribute Groups
+_UI_GRAPH_NOTATIONS            = Notations
+_UI_GRAPH_IDENTITY_CONSTRAINTS = Identity Constraints
+_UI_GRAPH_ANNOTATIONS          = Annotations
+_UI_GRAPH_DIRECTIVES           = Directives
+_UI_GRAPH_GROUPS               = Groups
+
+_UI_LABEL_NO_LOCATION_SPECIFIED  = No Location Specified
+_UI_ACTION_SET_MULTIPLICITY		 = Set Multiplicity
+_UI_LABEL_ABSENT               = absent
+_UI_GRAPH_UNKNOWN_OBJECT       = Unknown object
+_UI_GRAPH_XSDSCHEMA_NO_NAMESPACE = (no target namespace specified)
+_UI_GRAPH_XSDSCHEMA            = Schema
+_UI_MENU_XSD_EDITOR                 = &XSD
+_UI_LABEL_SET_TYPE				    = Set Type
+
+!
+! Preference Page
+!
+_UI_TEXT_INDENT_LABEL                 = Indentation
+_UI_TEXT_INDENT_SPACES_LABEL          = &Number of spaces: 
+_UI_TEXT_XSD_NAMESPACE_PREFIX         = XML schema language
+_UI_TEXT_XSD_DEFAULT_PREFIX           = XML schema language constructs &prefix:
+_UI_QUALIFY_XSD                       = &Qualify XML schema language constructs
+_UI_TEXT_XSD_DEFAULT_TARGET_NAMESPACE = Default Target Namespace:
+
+_ERROR_LABEL_INVALID_PREFIX     = IWAX1004E Invalid prefix. A prefix must not be empty or contain any space.
+
+_UI_NO_TYPE_DEFINED=(no type defined)
+_UI_ACTION_UPDATE_NAME=Update Name
+_UI_ACTION_UPDATE_ELEMENT_REFERENCE=Update Element reference
+_UI_ACTION_ADD_FIELD=Add Field
+_UI_ACTION_ADD_ELEMENT=Add Element
+_UI_ACTION_ADD_ELEMENT_REF=Add Element Ref
+_UI_ACTION_ADD_COMPLEX_TYPE=Add Complex Type
+_UI_ACTION_ADD_SIMPLE_TYPE=Add Simple Type
+_UI_ACTION_SET_TYPE=Set Type
+_UI_ACTION_NEW=New...
+_UI_ACTION_BROWSE=Browse...
+
+_UI_LABEL_OPTIONAL=Optional
+_UI_LABEL_ZERO_OR_MORE=Zero or more
+_UI_LABEL_ONE_OR_MORE=One or more
+_UI_LABEL_LOCAL_TYPE=local type
+_UI_LABEL_REQUIRED=Required
+_UI_LABEL_ARRAY=array
+
+_UI_LABEL_SET_COMMON_BUILT_IN_TYPES=Set common Built-In types
+_UI_LABEL_SELECT_TYPES_FILTER_OUT=Select the types that you do not want to filter out: 
+_UI_LABEL_NAME_SEARCH_FILTER_TEXT=Name (? = any character, * = any string):
+_UI_LABEL_SET_ELEMENT_REFERENCE=Set element reference
+
+_UI_LABEL_NEW_TYPE=New Type
+_UI_LABEL_NEW_ELEMENT=New Element
+_UI_LABEL_COMPLEX_TYPE=Complex Type
+_UI_LABEL_TARGET_NAMESPACE=Target Namespace: 
+_UI_LABEL_NO_NAMESPACE=No Namespace
+_UI_LABEL_ELEMENTS_COLON=Elements:
+_UI_LABEL_SIMPLE_TYPE=Simple Type
+_UI_LABEL_TYPES_COLON=Types:
+
+_UI_LABEL_SOURCE=Source
\ No newline at end of file
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/search/XSDSearchListDialogDelegate.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/search/XSDSearchListDialogDelegate.java
index ccb7cb3..e201869 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/search/XSDSearchListDialogDelegate.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/editor/search/XSDSearchListDialogDelegate.java
@@ -25,14 +25,15 @@
 import org.eclipse.wst.xsd.ui.internal.adt.edit.IComponentDialog;
 import org.eclipse.wst.xsd.ui.internal.dialogs.NewElementButtonHandler;
 import org.eclipse.wst.xsd.ui.internal.dialogs.NewTypeButtonHandler;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
 import org.eclipse.xsd.XSDSchema;
 import org.eclipse.xsd.util.XSDConstants;
 
 public class XSDSearchListDialogDelegate implements IComponentDialog
 {
-  public final static QualifiedName TYPE_META_NAME = new QualifiedName(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "type");
-  public final static QualifiedName ELEMENT_META_NAME = new QualifiedName(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "element");
+  public final static QualifiedName TYPE_META_NAME = new QualifiedName(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "type"); //$NON-NLS-1$
+  public final static QualifiedName ELEMENT_META_NAME = new QualifiedName(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "element"); //$NON-NLS-1$
   // protected Object setObject;
   protected ComponentSpecification selection;
   protected IFile currentFile;
@@ -70,11 +71,11 @@
     	
         configuration.setDescriptionProvider(descriptionProvider);
         configuration.setSearchListProvider(searchListProvider);
-        configuration.setFilterLabelText("Name (? = any character, * = any string):");
-        configuration.setListLabelText("Elements:");
+        configuration.setFilterLabelText(Messages._UI_LABEL_NAME_SEARCH_FILTER_TEXT);
+        configuration.setListLabelText(Messages._UI_LABEL_ELEMENTS_COLON);
         configuration.setNewComponentHandler(new NewElementButtonHandler());
         //TODO externalize string
-        dialog = new ScopedComponentSearchListDialog(shell, "Set element reference", configuration);
+        dialog = new ScopedComponentSearchListDialog(shell, Messages._UI_LABEL_SET_ELEMENT_REFERENCE, configuration);
     }
     else if (metaName == TYPE_META_NAME)
     {
@@ -85,9 +86,9 @@
       configuration.setDescriptionProvider(descriptionProvider);
       configuration.setSearchListProvider(searchListProvider);
       configuration.setNewComponentHandler(new NewTypeButtonHandler());
-      configuration.setFilterLabelText("Name (? = any character, * = any string):");
-      configuration.setListLabelText("Types:");
-      dialog = new ScopedComponentSearchListDialog(shell, XSDEditorPlugin.getXSDString("_UI_LABEL_SET_TYPE"), configuration);
+      configuration.setFilterLabelText(Messages._UI_LABEL_NAME_SEARCH_FILTER_TEXT);
+      configuration.setListLabelText(Messages._UI_LABEL_TYPES_COLON);
+      dialog = new ScopedComponentSearchListDialog(shell, Messages._UI_LABEL_SET_TYPE, configuration); //$NON-NLS-1$
     }
     
     if (dialog != null)
diff --git a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/preferences/XSDPreferencePage.java b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/preferences/XSDPreferencePage.java
index 4feba19..a312b04 100644
--- a/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/preferences/XSDPreferencePage.java
+++ b/bundles/org.eclipse.wst.xsd.ui/src-adt-xsd/org/eclipse/wst/xsd/ui/internal/preferences/XSDPreferencePage.java
@@ -28,6 +28,7 @@
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPreferencePage;
 import org.eclipse.ui.help.WorkbenchHelp;
+import org.eclipse.wst.xsd.ui.internal.editor.Messages;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorContextIds;
 import org.eclipse.wst.xsd.ui.internal.editor.XSDEditorPlugin;
 import org.eclipse.wst.xsd.ui.internal.util.ViewUtility;
@@ -49,12 +50,12 @@
     WorkbenchHelp.setHelp(parent, XSDEditorContextIds.XSDP_PREFERENCE_PAGE);
 
     Group group = createGroup(parent, 2);   
-    group.setText(XSDEditorPlugin.getXSDString("_UI_TEXT_XSD_NAMESPACE_PREFIX"));
+    group.setText(Messages._UI_TEXT_XSD_NAMESPACE_PREFIX);
 
-    qualifyXSDLanguage = ViewUtility.createCheckBox(group, XSDEditorPlugin.getXSDString("_UI_QUALIFY_XSD"));
+    qualifyXSDLanguage = ViewUtility.createCheckBox(group, Messages._UI_QUALIFY_XSD);
     ViewUtility.createLabel(group, " ");
 
-    createLabel(group, XSDEditorPlugin.getXSDString("_UI_TEXT_XSD_DEFAULT_PREFIX"));
+    createLabel(group, Messages._UI_TEXT_XSD_DEFAULT_PREFIX);
     schemaNsPrefixField = createTextField(group);
     schemaNsPrefixField.addKeyListener(new KeyAdapter()
     {
@@ -64,7 +65,7 @@
       }      
     });
     
-    createLabel(group, XSDEditorPlugin.getXSDString("_UI_TEXT_XSD_DEFAULT_TARGET_NAMESPACE"));
+    createLabel(group, Messages._UI_TEXT_XSD_DEFAULT_TARGET_NAMESPACE);
     defaultTargetNamespaceText = createTextField(group);
 
     initializeValues();
@@ -246,7 +247,7 @@
     }
     else
     {
-      setErrorMessage(XSDEditorPlugin.getXSDString("_ERROR_LABEL_INVALID_PREFIX"));
+      setErrorMessage(Messages._ERROR_LABEL_INVALID_PREFIX);
       setValid(false);
       return false;
     }
