diff --git a/org.eclipse.wst.common.snippets/.options b/org.eclipse.wst.common.snippets/.options
new file mode 100644
index 0000000..2c67355
--- /dev/null
+++ b/org.eclipse.wst.common.snippets/.options
@@ -0,0 +1,6 @@
+org.eclipse.wst.common.snippets/debug=false
+org.eclipse.wst.common.snippets/debug/tracefilter=
+org.eclipse.wst.common.snippets/debug/definition_persistence=false
+org.eclipse.wst.common.snippets/debug/drag_and_drop=false
+org.eclipse.wst.common.snippets/debug/palette_selection=false
+org.eclipse.wst.common.snippets/debug/viewer_content=false
diff --git a/org.eclipse.wst.common.snippets/META-INF/MANIFEST.MF b/org.eclipse.wst.common.snippets/META-INF/MANIFEST.MF
index d6b1413..24a7bda 100644
--- a/org.eclipse.wst.common.snippets/META-INF/MANIFEST.MF
+++ b/org.eclipse.wst.common.snippets/META-INF/MANIFEST.MF
@@ -6,17 +6,17 @@
 Bundle-Activator: org.eclipse.wst.common.snippets.internal.SnippetsPlugin
 Bundle-Vendor: Eclipse.org
 Bundle-Localization: plugin
-Export-Package: org.eclipse.wst.common.snippets.internal,
+Export-Package: org.eclipse.wst.common.snippets.core,
+ org.eclipse.wst.common.snippets.internal,
  org.eclipse.wst.common.snippets.internal.actions,
  org.eclipse.wst.common.snippets.internal.dnd,
  org.eclipse.wst.common.snippets.internal.editors,
  org.eclipse.wst.common.snippets.internal.model,
  org.eclipse.wst.common.snippets.internal.palette,
- org.eclipse.wst.common.snippets.internal.provisional,
- org.eclipse.wst.common.snippets.internal.provisional.insertions,
  org.eclipse.wst.common.snippets.internal.team,
  org.eclipse.wst.common.snippets.internal.ui,
- org.eclipse.wst.common.snippets.internal.util
+ org.eclipse.wst.common.snippets.internal.util,
+ org.eclipse.wst.common.snippets.ui
 Require-Bundle: org.eclipse.gef,
  org.eclipse.ui.ide,
  org.eclipse.ui.workbench.texteditor,
diff --git a/org.eclipse.wst.common.snippets/component.xml b/org.eclipse.wst.common.snippets/component.xml
index 904bd4e..5550dde 100644
--- a/org.eclipse.wst.common.snippets/component.xml
+++ b/org.eclipse.wst.common.snippets/component.xml
@@ -4,4 +4,13 @@
 	<component-depends unrestricted="true"/>
 	<plugin id="org.eclipse.wst.common.snippets"  fragment="false" />
 	<description url="http://eclipse.org/webtools/wst/components/common/overview/snippets/overview.html" />
+	<package name="org.eclipse.wst.common.snippets.core">
+		<type name="ISnippetCategory" implement="false" />
+		<type name="ISnippetEntry" implement="false" />
+		<type name="ISnippetItem" implement="false" />
+	</package>
+	<package name="org.eclipse.wst.common.snippets.ui">
+		<type name="DefaultSnippetInsertion" subclass="true" instantiate="true" />
+		<type name="ISnippetInsertion" implement="false" />
+	</package>
 </component>
diff --git a/org.eclipse.wst.common.snippets/schema/SnippetContributions.exsd b/org.eclipse.wst.common.snippets/schema/SnippetContributions.exsd
index 9d64ef2..4f62fb1 100644
--- a/org.eclipse.wst.common.snippets/schema/SnippetContributions.exsd
+++ b/org.eclipse.wst.common.snippets/schema/SnippetContributions.exsd
@@ -27,7 +27,7 @@
                </documentation>
             </annotation>
          </attribute>
-         <attribute name="icon" type="string">
+         <attribute name="smallicon" type="string">
             <annotation>
                <documentation>
                   The small icon to show for this category.  The value of this attributes specifies a path relative to the plugin&apos;s installation folder.
@@ -58,10 +58,10 @@
                </documentation>
             </annotation>
          </attribute>
-         <attribute name="filetypes" type="string">
+         <attribute name="extensions" type="string">
             <annotation>
                <documentation>
-                  A list of file types identical to that used to register editors.  If the Snippets View has its drawer visibility tied to the active editor, the drawer will be hidden unless the filename from the active editor matches a value from this attribute&apos;s value.  More than one value may be specified if separated by commas.
+                  A list of filename extensions identical to that used to register editors.  If the Snippets View has its drawer visibility tied to the active editor, the drawer will be hidden unless the filename from the active editor matches a value from this attribute&apos;s value.  More than one value may be specified if separated by commas.
                </documentation>
             </annotation>
          </attribute>
@@ -100,14 +100,7 @@
                </documentation>
             </annotation>
          </attribute>
-         <attribute name="editorclass" type="string">
-            <annotation>
-               <documentation>
-                  An implementation of org.eclipse.wst.common.snippets.editors.ISnippetEditor.  When the user brings up the Customizer dialog, selecting an item from the left-hand tree will display an editing page on the right.  Snippets will provide controls for editing the name and description of an item in addition to any controls provided by the editorclass.  A new instance of the class is used for every item being edited.  The default class, org.eclipse.wst.common.snippets.editors.VariableItemEditor provides a table for creating and editing variables and a text editor for the content.
-               </documentation>
-            </annotation>
-         </attribute>
-         <attribute name="icon" type="string">
+         <attribute name="smallicon" type="string">
             <annotation>
                <documentation>
                   The small icon to show for this item.  The value of this attributes specifies a path relative to the plugin&apos;s installation folder.
@@ -202,14 +195,14 @@
    &lt;extension
          point=&quot;org.eclipse.wst.common.snippets.SnippetContributions&quot;&gt;
       &lt;category
-            icon=&quot;icons/tag-jsp.gif&quot;
+            smallicon=&quot;icons/tag-jsp.gif&quot;
             label=&quot;JSP&quot;
             description=&quot;Java Server Pages&quot;
             id=&quot;org.eclipse.wst.jsp.category0&quot;
             contenttypes=&quot;org.eclipse.wst.jsp.core.jspsource&quot;
-            filetypes=&quot;*.jsp, *.jsf, *.jspf&quot;&gt;
+            extensions=&quot;*.jsp, *.jsf, *.jspf&quot;&gt;
         &lt;item
-              icon=&quot;icons/tag-generic.gif&quot;
+              smallicon=&quot;icons/tag-generic.gif&quot;
               label=&quot;%jsp_hidden_comment&quot;
               id=&quot;org.eclipse.wst.jsp.jsp_hidden_comment&quot;&gt;
            &lt;content&gt;
@@ -224,7 +217,7 @@
            &lt;/content&gt;
         &lt;/item&gt;
         &lt;item
-              icon=&quot;icons/jsptaglib.gif&quot;
+              smallicon=&quot;icons/jsptaglib.gif&quot;
               label=&quot;%jsp_taglib_directive&quot;
               class=&quot;org.eclipse.wst.common.snippets.insertions.PrependInsertion&quot;
               id=&quot;org.eclipse.wst.jsp.jsp_taglib_directive&quot;&gt;
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ISnippetCategory.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/core/ISnippetCategory.java
similarity index 60%
rename from org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ISnippetCategory.java
rename to org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/core/ISnippetCategory.java
index a2f5f09..b5d9960 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ISnippetCategory.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/core/ISnippetCategory.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2005 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
@@ -8,20 +8,8 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-
-
-package org.eclipse.wst.common.snippets.internal;
-
-import java.util.List;
-
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
+package org.eclipse.wst.common.snippets.core;
 
 public interface ISnippetCategory extends ISnippetsEntry {
-
-	void add(ISnippetItem item);
-
-	List getChildren();
-
-	void remove(ISnippetItem item);
+	ISnippetItem[] getItems();
 }
\ No newline at end of file
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/core/ISnippetItem.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/core/ISnippetItem.java
new file mode 100644
index 0000000..a0d3b49
--- /dev/null
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/core/ISnippetItem.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2005 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
+ *******************************************************************************/
+
+package org.eclipse.wst.common.snippets.core;
+
+/**
+ * A snippet item is the actual object draggable from the Snippets view.
+ */
+public interface ISnippetItem extends ISnippetsEntry {
+	/**
+	 * @return the category holding this item
+	 */
+	ISnippetCategory getCategory();
+
+	/**
+	 * @return the content string for this item; the text inserted may not be
+	 *         identical
+	 */
+	String getContentString();
+
+	/**
+	 * @return an array containing all of the valid variables for this item
+	 */
+	ISnippetVariable[] getVariables();
+}
\ No newline at end of file
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ISnippetVariable.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/core/ISnippetVariable.java
similarity index 64%
rename from org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ISnippetVariable.java
rename to org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/core/ISnippetVariable.java
index ce15049..6522fe0 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ISnippetVariable.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/core/ISnippetVariable.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2005 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
@@ -8,34 +8,22 @@
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
-package org.eclipse.wst.common.snippets.internal;
+package org.eclipse.wst.common.snippets.core;
 
 public interface ISnippetVariable {
 	/**
-	 * Gets the defaultValue.
-	 * 
-	 * @return Returns a String
+	 * @return Returns the default value for this variable
 	 */
 	String getDefaultValue();
 
 	/**
-	 * Gets the description.
-	 * 
-	 * @return Returns a String
+	 * @return Returns the description of this variable
 	 */
 	String getDescription();
 
 	/**
-	 * Gets the id.
 	 * 
-	 * @return Returns a String
-	 */
-	String getId();
-
-	/**
-	 * Gets the name.
-	 * 
-	 * @return Returns a String
+	 * @return Returns the name of this variable.
 	 */
 	String getName();
 }
\ No newline at end of file
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/core/ISnippetsEntry.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/core/ISnippetsEntry.java
new file mode 100644
index 0000000..0681581
--- /dev/null
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/core/ISnippetsEntry.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ *******************************************************************************/
+
+
+package org.eclipse.wst.common.snippets.core;
+
+/**
+ * A Snippets Entry is an abstract notion encapsulating the values used to
+ * represent Snippet Items and Containers. No object implements only this
+ * interface.
+ */
+
+public interface ISnippetsEntry {
+
+	/**
+	 * Denotes that this entry was contributed by a plug-in
+	 */
+	String SNIPPET_SOURCE_PLUGINS = "PLUGINS"; //$NON-NLS-1$
+
+	/**
+	 * Denotes that this entry was created by the user
+	 */
+	String SNIPPET_SOURCE_USER = "USER"; //$NON-NLS-1$
+
+	/**
+	 * Denotes that this entry was discovered within the workspace
+	 * 
+	 */
+	String SNIPPET_SOURCE_WORKSPACE = "WORKSPACE"; //$NON-NLS-1$
+
+	/**
+	 * @return a longer description to display for this item
+	 */
+	String getDescription();
+	
+	String[] getFilters();
+
+	/**
+	 * @return the label to display for this item
+	 */
+	String getLabel();
+
+	/**
+	 * @return the object defining where this entry originated from. Valid
+	 *         values are instances of CategoryFileInfo and PluginRecord.
+	 */
+	Object getSourceDescriptor();
+
+	/**
+	 * @return the type of the source descriptor. Valid values are
+	 *         SNIPPET_SOURCE_PLUGINS, SNIPPET_SOURCE_USER, and
+	 *         SNIPPET_SOURCE_WORKSPACE.
+	 */
+	Object getSourceType();
+}
\ No newline at end of file
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/Debug.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/Debug.java
deleted file mode 100644
index f5ba01e..0000000
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/Debug.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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
- *******************************************************************************/
-package org.eclipse.wst.common.snippets.internal;
-
-/**
- * <p>
- * SSE Snippets Plug-in Debug flags
- * </p>
- * <p>
- * This class contains constants only; it is not intended to be extended.
- * </p>
- */
-public class Debug {
-	/**
-	 * Controls debugging output for loading/storing of the Snippets model
-	 */
-	public static final boolean debugDefinitionPersistence = false;
-
-	/**
-	 * Controls debugging output for drag and drop processing
-	 */
-	public static final boolean debugDragAndDrop = false;
-
-	/**
-	 * Controls debugging output for selection within the view
-	 */
-	public static final boolean debugPaletteSelection = false;
-	/**
-	 * Controls debugging output for replacement of the model's category list
-	 */
-	public static final boolean debugViewerContent = false;
-}
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/EntrySorter.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/EntrySorter.java
index 33f87b4..8486189 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/EntrySorter.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/EntrySorter.java
@@ -16,8 +16,9 @@
 import java.util.Arrays;
 import java.util.List;
 
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.util.Sorter;
 
 public class EntrySorter extends Sorter {
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ISnippetManager.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ISnippetManager.java
index 7db68ce..fe11c6e 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ISnippetManager.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ISnippetManager.java
@@ -10,7 +10,7 @@
  *******************************************************************************/
 package org.eclipse.wst.common.snippets.internal;
 
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
 
 /**
  * <p>
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/Logger.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/Logger.java
index c3b7578..7b3131c 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/Logger.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/Logger.java
@@ -23,6 +23,23 @@
  * plugin. Other plugins should make their own copy, with appropriate ID.
  */
 public class Logger {
+	/**
+	 * Controls debugging output for loading/storing of the Snippets model
+	 */
+	public static final boolean DEBUG_DEFINITION_PERSISTENCE = "true".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.wst.common.snippets/debug/definition_persistence")); //$NON-NLS-1$
+	/**
+	 * Controls debugging output for drag and drop processing
+	 */
+	public static final boolean DEBUG_DRAG_AND_DROP = "true".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.wst.common.snippets/debug/drag_and_drop")); //$NON-NLS-1$
+	/**
+	 * Controls debugging output for selection within the view
+	 */
+	public static final boolean DEBUG_PALETTE_SELECTION = "true".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.wst.common.snippets/debug/palette_selection")); //$NON-NLS-1$
+	/**
+	 * Controls debugging output for replacement of the model's category list
+	 */
+	public static final boolean DEBUG_VIEWER_CONTENT = "true".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.wst.common.snippets/debug/viewer_content")); //$NON-NLS-1$
+
 	public static final int ERROR = IStatus.ERROR; // 4
 	public static final int ERROR_DEBUG = 200 + ERROR;
 	private static Plugin fPlugin = SnippetsPlugin.getDefault();
@@ -31,10 +48,10 @@
 	public static final int INFO_DEBUG = 200 + INFO;
 
 	public static final int OK = IStatus.OK; // 0
-
 	public static final int OK_DEBUG = 200 + OK;
 
 	private static final String TRACEFILTER_LOCATION = "/debug/tracefilter"; //$NON-NLS-1$
+
 	public static final int WARNING = IStatus.WARNING; // 2
 	public static final int WARNING_DEBUG = 200 + WARNING;
 
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/SnippetDefinitions.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/SnippetDefinitions.java
index 2ad7bc0..aebf16e 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/SnippetDefinitions.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/SnippetDefinitions.java
@@ -14,7 +14,10 @@
 import java.util.Iterator;
 import java.util.List;
 
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteDrawer;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem;
 
 
 /**
@@ -52,7 +55,7 @@
 	public ISnippetCategory getCategory(String id) {
 		Iterator iterator = getCategories().iterator();
 		while (iterator.hasNext()) {
-			ISnippetCategory category = (ISnippetCategory) iterator.next();
+			SnippetPaletteDrawer category = (SnippetPaletteDrawer) iterator.next();
 			if (category.getId().equals(id))
 				return category;
 		}
@@ -68,7 +71,7 @@
 	public ISnippetItem getItem(String id) {
 		Iterator iterator = getItems().iterator();
 		while (iterator.hasNext()) {
-			ISnippetItem item = (ISnippetItem) iterator.next();
+			SnippetPaletteItem item = (SnippetPaletteItem) iterator.next();
 			if (item.getId().equals(id))
 				return item;
 		}
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/SnippetsPlugin.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/SnippetsPlugin.java
index fd7f1c0..4ddd3a2 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/SnippetsPlugin.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/SnippetsPlugin.java
@@ -44,13 +44,13 @@
 		String VERSION = "version"; //$NON-NLS-1$
 		String VIEW_ID = "org.eclipse.wst.common.snippets.internal.ui.SnippetsView"; //$NON-NLS-1$
 	}
-	
-	public static final String BUNDLE_ID = "org.eclipse.wst.common.snippets";  //$NON-NLS-1$
+
+	public static final String BUNDLE_ID = "org.eclipse.wst.common.snippets"; //$NON-NLS-1$
 
 	/**
 	 * The shared instance
 	 */
-	private static SnippetsPlugin fInstance;	
+	private static SnippetsPlugin fInstance;
 
 	/**
 	 * Returns the shared instance.
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/VariableInsertionDialog.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/VariableInsertionDialog.java
index ddf9250..49ace3b 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/VariableInsertionDialog.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/VariableInsertionDialog.java
@@ -34,7 +34,9 @@
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.swt.widgets.Text;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetVariable;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetVariable;
 import org.eclipse.wst.common.snippets.internal.ui.StringPropertyTableViewer;
 import org.eclipse.wst.common.snippets.internal.ui.ValueChangedListener;
 import org.eclipse.wst.common.snippets.internal.util.StringUtils;
@@ -262,7 +264,7 @@
 			return null;
 		ISnippetVariable[] variables = fItem.getVariables();
 		for (int i = 0; i < variables.length; i++) {
-			if (variables[i].getId().equals(id))
+			if (((SnippetVariable) variables[i]).getId().equals(id))
 				return variables[i];
 		}
 		return null;
@@ -280,8 +282,8 @@
 	protected void populateTableViewer() {
 		ISnippetVariable[] variables = fItem.getVariables();
 		for (int i = 0; i < variables.length; i++) {
-			fTableViewer.getColumnData()[0].put(variables[i].getId(), variables[i].getName());
-			fTableViewer.getColumnData()[1].put(variables[i].getId(), variables[i].getDefaultValue());
+			fTableViewer.getColumnData()[0].put(((SnippetVariable) variables[i]).getId(), ((SnippetVariable) variables[i]).getName());
+			fTableViewer.getColumnData()[1].put(((SnippetVariable) variables[i]).getId(), ((SnippetVariable) variables[i]).getDefaultValue());
 		}
 	}
 
@@ -290,7 +292,7 @@
 		String text = fItem.getContentString();
 		ISnippetVariable[] variables = fItem.getVariables();
 		for (int i = 0; i < variables.length; i++) {
-			String value = (String) fTableViewer.getColumnData()[1].get(variables[i].getId());
+			String value = (String) fTableViewer.getColumnData()[1].get(((SnippetVariable) variables[i]).getId());
 			text = StringUtils.replace(text, "${" + variables[i].getName() + "}", value); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/VariableItemHelper.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/VariableItemHelper.java
index b7ded7e..979a2a5 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/VariableItemHelper.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/VariableItemHelper.java
@@ -16,7 +16,7 @@
 import org.eclipse.swt.events.DisposeEvent;
 import org.eclipse.swt.events.DisposeListener;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
 
 public class VariableItemHelper {
 
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/AbstractCategoryAction.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/AbstractCategoryAction.java
index 1e21bfe..ad6fc79 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/AbstractCategoryAction.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/AbstractCategoryAction.java
@@ -15,9 +15,9 @@
 import org.eclipse.gef.palette.PaletteEntry;
 import org.eclipse.jface.action.Action;
 import org.eclipse.jface.dialogs.IInputValidator;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
 import org.eclipse.wst.common.snippets.internal.SnippetsMessages;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
 import org.eclipse.wst.common.snippets.internal.ui.SnippetsView;
 
 public abstract class AbstractCategoryAction extends Action {
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/AbstractItemAction.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/AbstractItemAction.java
index 781ea05..ea45a39 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/AbstractItemAction.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/AbstractItemAction.java
@@ -14,8 +14,8 @@
 import org.eclipse.gef.GraphicalViewer;
 import org.eclipse.gef.palette.PaletteEntry;
 import org.eclipse.jface.action.Action;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
 
 
 public abstract class AbstractItemAction extends Action {
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/DeleteCategoryAction.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/DeleteCategoryAction.java
index 30a739f..860816b 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/DeleteCategoryAction.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/DeleteCategoryAction.java
@@ -12,7 +12,7 @@
 
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.palette.PaletteContainer;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
 import org.eclipse.wst.common.snippets.internal.SnippetDefinitions;
 import org.eclipse.wst.common.snippets.internal.SnippetsMessages;
 import org.eclipse.wst.common.snippets.internal.SnippetsPlugin;
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/DeleteItemAction.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/DeleteItemAction.java
index 9cc36cc..9106b9b 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/DeleteItemAction.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/DeleteItemAction.java
@@ -13,9 +13,9 @@
 import org.eclipse.gef.EditPart;
 import org.eclipse.gef.GraphicalViewer;
 import org.eclipse.gef.palette.PaletteEntry;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
 import org.eclipse.wst.common.snippets.internal.SnippetsMessages;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteDrawer;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem;
 
 public class DeleteItemAction extends AbstractItemAction {
 
@@ -36,10 +36,10 @@
 
 	public void run() {
 		super.run();
-		ISnippetItem item = (ISnippetItem) getEntry();
+		SnippetPaletteItem item = (SnippetPaletteItem) getEntry();
 		EditPart itemPart = (EditPart) getViewer().getEditPartRegistry().get(item);
 		if (itemPart != null) {
-			ISnippetCategory category = item.getCategory();
+			SnippetPaletteDrawer category = (SnippetPaletteDrawer) item.getCategory();
 			EditPart categoryPart = itemPart.getParent();
 			category.remove(item);
 			categoryPart.refresh();
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/LibraryItemUtility.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/LibraryItemUtility.java
index eb3ee3b..4312b9a 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/LibraryItemUtility.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/actions/LibraryItemUtility.java
@@ -12,19 +12,23 @@
 
 package org.eclipse.wst.common.snippets.internal.actions;
 
-import org.eclipse.wst.common.snippets.internal.ISnippetVariable;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetVariable;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem;
 
 
 public class LibraryItemUtility {
 
-	public static void copyAttributes(ISnippetItem source, ISnippetItem target) {
+	public static void copyAttributes(ISnippetItem sourceItem, ISnippetItem targetItem) {
+		SnippetPaletteItem source = (SnippetPaletteItem) sourceItem;
+		SnippetPaletteItem target = (SnippetPaletteItem) targetItem;
+
 		target.setCategoryName(source.getCategoryName());
 		target.setClassName(source.getClassName());
 		target.setContentString(source.getContentString());
 		target.setDescription(source.getDescription());
 		target.setEditorClassName(source.getEditorClassName());
-		target.setIconName(source.getIconName());
+		target.setIconName(source.getSmallIconName());
 		target.setId(source.getId());
 		target.setLabel(source.getLabel());
 		target.setLargeIconName(source.getLargeIconName());
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/dnd/VariableTextDropAction.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/dnd/SnippetTextDropAction.java
similarity index 97%
rename from org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/dnd/VariableTextDropAction.java
rename to org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/dnd/SnippetTextDropAction.java
index 20ac163..890c6ac 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/dnd/VariableTextDropAction.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/dnd/SnippetTextDropAction.java
@@ -23,11 +23,11 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.texteditor.ITextEditor;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
 import org.eclipse.wst.common.snippets.internal.VariableItemHelper;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
 import org.eclipse.wst.common.snippets.internal.ui.EntryDeserializer;
 
-public class VariableTextDropAction {
+public class SnippetTextDropAction {
 
 	protected String getInsertString(Shell host, ISnippetItem item) {
 		return VariableItemHelper.getInsertString(host, item, false);
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/dnd/VariableTextTransfer.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/dnd/SnippetTextTransfer.java
similarity index 82%
rename from org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/dnd/VariableTextTransfer.java
rename to org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/dnd/SnippetTextTransfer.java
index 2f42512..6a1ce48 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/dnd/VariableTextTransfer.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/dnd/SnippetTextTransfer.java
@@ -12,9 +12,9 @@
 
 import org.eclipse.swt.dnd.ByteArrayTransfer;
 
-public class VariableTextTransfer extends ByteArrayTransfer {
+public class SnippetTextTransfer extends ByteArrayTransfer {
 
-	private static VariableTextTransfer instance;
+	private static SnippetTextTransfer instance;
 
 	private static final String LOCAL_NAME = "Text with Variables" + System.currentTimeMillis(); //$NON-NLS-1$
 	private static final int LOCAL_TYPE = registerType(LOCAL_NAME);
@@ -22,9 +22,9 @@
 	private static String[] names = null;
 	private static int types[] = null;
 
-	public static VariableTextTransfer getTransferInstance() {
+	public static SnippetTextTransfer getTransferInstance() {
 		if (instance == null) {
-			instance = new VariableTextTransfer();
+			instance = new SnippetTextTransfer();
 			init();
 		}
 		return instance;
@@ -35,7 +35,7 @@
 		names = new String[]{LOCAL_NAME};
 	}
 
-	private VariableTextTransfer() {
+	private SnippetTextTransfer() {
 		super();
 	}
 
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/editors/ISnippetEditor.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/editors/ISnippetEditor.java
index 08c325c..9f2f8db 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/editors/ISnippetEditor.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/editors/ISnippetEditor.java
@@ -14,11 +14,14 @@
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem;
 
 /**
  * A snippet editor is responsible for creating the interface from which a
  * user modifies a snippet item or category.
+ * 
+ * This interface is not meant to be implemented by clients.
  */
 public interface ISnippetEditor {
 
@@ -26,14 +29,16 @@
 	 * Adds a modify listener to this editor. Typically the UI surrounding
 	 * this editor will listen for modifications.
 	 * 
-	 * @param listener the to be added
+	 * @param listener
+	 *            the to be added
 	 */
 	void addModifyListener(ModifyListener listener);
 
 	/**
 	 * Fill-in the contents of an editing Dialog.
 	 * 
-	 * @param parent the parent composite for the editor's control
+	 * @param parent
+	 *            the parent composite for the editor's control
 	 * @return the main control provided by the editor
 	 */
 	Control createContents(Composite parent);
@@ -48,16 +53,19 @@
 	/**
 	 * Remove a modify listener from this editor. Typically the UI surrounding
 	 * this editor will listen for modifications.
-	 * @param listener the to be added
+	 * 
+	 * @param listener
+	 *            the to be added
 	 */
 	void removeModifyListener(ModifyListener listener);
 
 	/**
 	 * Set the ISnippetItem to edit.
 	 * 
-	 * @param item the item to edit
+	 * @param item
+	 *            the item to edit
 	 */
-	void setItem(ISnippetItem item);
+	void setItem(SnippetPaletteItem item);
 
 	/**
 	 * Update the ISnippetItem being edited, usually because the values of the
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/editors/VariableItemEditor.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/editors/VariableItemEditor.java
index 71ea449..34bf948 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/editors/VariableItemEditor.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/editors/VariableItemEditor.java
@@ -52,13 +52,14 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Control;
 import org.eclipse.swt.widgets.Label;
-import org.eclipse.ui.help.WorkbenchHelp;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetVariable;
 import org.eclipse.wst.common.snippets.internal.IHelpContextIds;
-import org.eclipse.wst.common.snippets.internal.ISnippetVariable;
 import org.eclipse.wst.common.snippets.internal.Logger;
 import org.eclipse.wst.common.snippets.internal.SnippetsMessages;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem;
 import org.eclipse.wst.common.snippets.internal.palette.SnippetVariable;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
 import org.eclipse.wst.common.snippets.internal.ui.StringPropertyTableViewer;
 import org.eclipse.wst.common.snippets.internal.ui.ValueChangedListener;
 import org.eclipse.wst.common.snippets.internal.util.Sorter;
@@ -200,7 +201,7 @@
 	}
 
 	protected StyledText content = null;
-	protected ISnippetItem fItem = null;
+	protected SnippetPaletteItem fItem = null;
 	protected StringPropertyTableViewer fTableViewer = null;
 	private ModifyListener modifyListener = null;
 
@@ -218,7 +219,7 @@
 		// create the contents of the variable editing dialog
 
 		// the container for the variables fTableViewer and new/remove buttons
-		WorkbenchHelp.setHelp(parent, IHelpContextIds.DIALOG_EDIT_VARITEM);
+		PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IHelpContextIds.DIALOG_EDIT_VARITEM);
 
 		Composite variableComposite = new Composite(parent, SWT.NONE);
 		variableComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@@ -253,7 +254,7 @@
 		// description, and default value.
 		ISnippetVariable[] variables = fItem.getVariables();
 		for (int i = 0; i < variables.length; i++) {
-			ISnippetVariable var = variables[i];
+			SnippetVariable var = (SnippetVariable) variables[i];
 			fTableViewer.getColumnData()[0].put(var.getId(), var.getName());
 			if (var.getDescription() != null)
 				fTableViewer.getColumnData()[1].put(var.getId(), var.getDescription());
@@ -500,7 +501,7 @@
 		});
 	}
 
-	public void setItem(ISnippetItem item) {
+	public void setItem(SnippetPaletteItem item) {
 		fItem = item;
 	}
 
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/model/SnippetManager.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/model/SnippetManager.java
index d0259d1..3c4c210 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/model/SnippetManager.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/model/SnippetManager.java
@@ -22,25 +22,21 @@
 
 import javax.xml.parsers.DocumentBuilder;
 
-import org.eclipse.core.resources.IWorkspaceRunnable;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.gef.palette.PaletteContainer;
-import org.eclipse.wst.common.snippets.internal.Debug;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.IEntryChangeListener;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
 import org.eclipse.wst.common.snippets.internal.ISnippetManager;
 import org.eclipse.wst.common.snippets.internal.Logger;
 import org.eclipse.wst.common.snippets.internal.SnippetDefinitions;
 import org.eclipse.wst.common.snippets.internal.SnippetsPlugin;
 import org.eclipse.wst.common.snippets.internal.palette.ModelFactoryForPlugins;
 import org.eclipse.wst.common.snippets.internal.palette.ModelFactoryForUser;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteDrawer;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem;
 import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteRoot;
 import org.eclipse.wst.common.snippets.internal.palette.UserModelDumper;
 import org.eclipse.wst.common.snippets.internal.palette.WorkspaceModelDumper;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.team.CategoryFileInfo;
 import org.eclipse.wst.common.snippets.internal.util.CommonXML;
 import org.w3c.dom.Document;
@@ -104,13 +100,13 @@
 		List categories = defs.getCategories();
 		ISnippetsEntry match = null;
 		for (int i = 0; match == null && i < categories.size(); i++) {
-			ISnippetCategory category = (ISnippetCategory) categories.get(i);
+			SnippetPaletteDrawer category = (SnippetPaletteDrawer) categories.get(i);
 			if (category.getId().equals(id)) {
 				match = category;
 			}
 			else {
 				for (int j = 0; match == null && j < category.getChildren().size(); j++) {
-					ISnippetsEntry item = (ISnippetsEntry) category.getChildren().get(j);
+					SnippetPaletteItem item = (SnippetPaletteItem) category.getChildren().get(j);
 					if (item.getId().equals(id)) {
 						match = item;
 					}
@@ -157,7 +153,12 @@
 				for (int i = 0; i < hiddenIDs.length; i++) {
 					ISnippetsEntry entry = findEntry(definitions, hiddenIDs[i]);
 					if (entry != null) {
-						entry.setVisible(false);
+						if (entry instanceof SnippetPaletteItem) {
+							((SnippetPaletteItem) entry).setVisible(false);
+						}
+						if (entry instanceof SnippetPaletteDrawer) {
+							((SnippetPaletteDrawer) entry).setVisible(false);
+						}
 					}
 				}
 			}
@@ -191,14 +192,14 @@
 		// break
 		// this into extensions with providers)
 		SnippetDefinitions pluginDefs = ModelFactoryForPlugins.getInstance().loadCurrent();
-		if (Debug.debugDefinitionPersistence)
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
 			System.out.println("SnippetManager loaded " + pluginDefs.getCategories().size() + " categories from plug-ins"); //$NON-NLS-1$ //$NON-NLS-2$
 		SnippetDefinitions userDefs = ModelFactoryForUser.getInstance().loadCurrent();
-		if (Debug.debugDefinitionPersistence)
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
 			System.out.println("SnippetManager loaded " + userDefs.getCategories().size() + " records for categories from user.xml"); //$NON-NLS-1$ //$NON-NLS-2$
 		// SnippetDefinitions sharedDefs =
 		// ModelFactoryForWorkspace.getInstance().loadCurrent();
-		// if (Debug.debugDefinitionPersistence)
+		// if (Logger.debugDefinitionPersistence)
 		// System.out.println("SnippetManager loaded " +
 		// userDefs.getCategories().size() + " records for categories from
 		// workspace"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -210,7 +211,7 @@
 		// Merge plugin drawers by replacing the placeholder drawers with the
 		// ones generated from the plugins
 		for (int i = 0; i < pluginDefs.getCategories().size(); i++) {
-			ISnippetCategory category = (ISnippetCategory) pluginDefs.getCategories().get(i);
+			SnippetPaletteDrawer category = (SnippetPaletteDrawer) pluginDefs.getCategories().get(i);
 			String id = category.getId();
 			ISnippetsEntry existingEntry = findEntry(defs, id);
 			int existingIndex = defs.getCategories().indexOf(existingEntry);
@@ -233,7 +234,7 @@
 		// well.
 		Iterator it = defs.getCategories().iterator();
 		while (it.hasNext()) {
-			ISnippetCategory category = (ISnippetCategory) it.next();
+			SnippetPaletteDrawer category = (SnippetPaletteDrawer) it.next();
 			if (category.getSourceType() != ISnippetsEntry.SNIPPET_SOURCE_USER && category.getChildren().isEmpty())
 				it.remove();
 		}
@@ -290,7 +291,7 @@
 				results = (String[]) names.toArray(results);
 			}
 		}
-		if (Debug.debugDefinitionPersistence)
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
 			System.out.println("SnippetManager remembered " + results.length + " hidden categories"); //$NON-NLS-1$ //$NON-NLS-2$
 		return results;
 	}
@@ -334,12 +335,12 @@
 
 		// save the list of categories to not see
 		saveHiddenState();
-		if (Debug.debugDefinitionPersistence)
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
 			System.out.println("SnippetManager saved hidden state"); //$NON-NLS-1$
 
 		// save the model
 		UserModelDumper.getInstance().write(getDefinitions());
-		if (Debug.debugDefinitionPersistence)
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
 			System.out.println("SnippetManager wrote user records"); //$NON-NLS-1$
 		List categories = getDefinitions().getCategories();
 		final List workspaceCategories = new ArrayList();
@@ -352,22 +353,16 @@
 				}
 			}
 		}
-		IWorkspaceRunnable operation = new IWorkspaceRunnable() {
-
-			public void run(IProgressMonitor monitor) throws CoreException {
-				for (int i = 0; i < workspaceCategories.size(); i++) {
-					CategoryFileInfo info = (CategoryFileInfo) workspaceCategories.get(i);
-					if (Debug.debugDefinitionPersistence)
-						System.out.println("save workspace category: " + info.getCategory().getLabel()); //$NON-NLS-1$
-					WorkspaceModelDumper.getInstance().write(info.getCategory(), info.getFile());
-				}
+		for (int i = 0; i < workspaceCategories.size(); i++) {
+			CategoryFileInfo info = (CategoryFileInfo) workspaceCategories.get(i);
+			try {
+				if (Logger.DEBUG_DEFINITION_PERSISTENCE)
+					System.out.println("save workspace category: " + info.getCategory().getLabel()); //$NON-NLS-1$
+				WorkspaceModelDumper.getInstance().write(info.getCategory(), info.getFile());
 			}
-		};
-		try {
-			ResourcesPlugin.getWorkspace().run(operation, new NullProgressMonitor());
-		}
-		catch (Exception e) {
-			Logger.logException(e);
+			catch (Exception e) {
+				Logger.logException(e);
+			}
 		}
 	}
 
@@ -382,12 +377,12 @@
 			List itemIDs = new ArrayList(0);
 			// collect all of the hidden entry IDs
 			for (int i = 0; i < getDefinitions().getCategories().size(); i++) {
-				ISnippetCategory category = (ISnippetCategory) getDefinitions().getCategories().get(i);
+				SnippetPaletteDrawer category = (SnippetPaletteDrawer) getDefinitions().getCategories().get(i);
 				if (!category.isVisible() && !categoryIDs.contains(category.getId())) {
 					categoryIDs.add(category.getId());
 				}
 				for (int j = 0; j < category.getChildren().size(); j++) {
-					ISnippetsEntry entry = (ISnippetsEntry) category.getChildren().get(j);
+					SnippetPaletteItem entry = (SnippetPaletteItem) category.getChildren().get(j);
 					if (!entry.isVisible() && !itemIDs.contains(entry.getId())) {
 						itemIDs.add(entry.getId());
 					}
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/AbstractModelFactory.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/AbstractModelFactory.java
index e0a6c19..74e503e 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/AbstractModelFactory.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/AbstractModelFactory.java
@@ -15,14 +15,11 @@
 import java.util.List;
 
 import org.eclipse.gef.palette.PaletteDrawer;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
-import org.eclipse.wst.common.snippets.internal.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.Logger;
 import org.eclipse.wst.common.snippets.internal.SnippetDefinitions;
 import org.eclipse.wst.common.snippets.internal.SnippetsPlugin;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
-
 
 public abstract class AbstractModelFactory {
 
@@ -33,14 +30,14 @@
 	protected void connectItemsAndCategories(SnippetDefinitions definitions) {
 		Iterator iterator = definitions.getCategories().iterator();
 		while (iterator.hasNext()) {
-			ISnippetCategory category = (ISnippetCategory) iterator.next();
+			SnippetPaletteDrawer category = (SnippetPaletteDrawer) iterator.next();
 			category.getChildren().clear();
 		}
 
 		iterator = definitions.getItems().iterator();
 		while (iterator.hasNext()) {
-			ISnippetItem item = (ISnippetItem) iterator.next();
-			ISnippetCategory parentCategory = definitions.getCategory(item.getCategoryName());
+			SnippetPaletteItem item = (SnippetPaletteItem) iterator.next();
+			SnippetPaletteDrawer parentCategory = (SnippetPaletteDrawer) definitions.getCategory(item.getCategoryName());
 			if (parentCategory != null) {
 				parentCategory.add(item);
 			}
@@ -104,27 +101,49 @@
 	public abstract SnippetDefinitions loadCurrent();
 
 	protected void migrate50to51(ISnippetsEntry entry) {
-		if (entry.getDescription() != null && entry.getDescription().length() > 0 && (entry.getLabel() == null || entry.getLabel().length() == 0 || entry.getId().equals(entry.getLabel()))) {
-			entry.setLabel(entry.getDescription());
-			entry.setDescription(""); //$NON-NLS-1$
+		if (entry.getDescription() != null && entry.getDescription().length() > 0 && (entry.getLabel() == null || entry.getLabel().length() == 0)) {
+			if (entry instanceof SnippetPaletteItem) {
+				((SnippetPaletteItem) entry).setLabel(entry.getDescription());
+				((SnippetPaletteItem) entry).setDescription(""); //$NON-NLS-1$
+			}
+			if (entry instanceof SnippetPaletteDrawer) {
+				((SnippetPaletteDrawer) entry).setLabel(entry.getDescription());
+				((SnippetPaletteDrawer) entry).setDescription(""); //$NON-NLS-1$
+			}
 		}
 	}
 
 	protected void setEntryProperty(ISnippetsEntry entry, String property, Object value) {
 		if (property == null || value == null)
 			return;
-		else if (property.equals(SnippetsPlugin.NAMES.DESCRIPTION))
-			entry.setDescription(value.toString());
-		else if (property.equals(SnippetsPlugin.NAMES.ICON))
-			entry.setIconName(value.toString());
-		else if (property.equals(SnippetsPlugin.NAMES.ID))
-			entry.setId(value.toString());
-		else if (property.equals(SnippetsPlugin.NAMES.LABEL))
-			entry.setLabel(value.toString());
-		else if (property.equals(SnippetsPlugin.NAMES.LARGEICON))
-			entry.setLargeIconName(value.toString());
-		else if (property.equals("filters")) //$NON-NLS-1$
-			entry.setFilters((String[]) value);
+		if (entry instanceof SnippetPaletteItem) {
+			if (property.equals(SnippetsPlugin.NAMES.DESCRIPTION))
+				((SnippetPaletteItem) entry).setDescription(value.toString());
+			else if (property.equals(SnippetsPlugin.NAMES.ICON))
+				((SnippetPaletteItem) entry).setIconName(value.toString());
+			else if (property.equals(SnippetsPlugin.NAMES.ID))
+				((SnippetPaletteItem) entry).setId(value.toString());
+			else if (property.equals(SnippetsPlugin.NAMES.LABEL))
+				((SnippetPaletteItem) entry).setLabel(value.toString());
+			else if (property.equals(SnippetsPlugin.NAMES.LARGEICON))
+				((SnippetPaletteItem) entry).setLargeIconName(value.toString());
+			else if (property.equals("filters")) //$NON-NLS-1$
+				((SnippetPaletteItem) entry).setFilters((String[]) value);
+		}
+		if (entry instanceof SnippetPaletteDrawer) {
+			if (property.equals(SnippetsPlugin.NAMES.DESCRIPTION))
+				((SnippetPaletteDrawer) entry).setDescription(value.toString());
+			else if (property.equals(SnippetsPlugin.NAMES.ICON))
+				((SnippetPaletteDrawer) entry).setIconName(value.toString());
+			else if (property.equals(SnippetsPlugin.NAMES.ID))
+				((SnippetPaletteDrawer) entry).setId(value.toString());
+			else if (property.equals(SnippetsPlugin.NAMES.LABEL))
+				((SnippetPaletteDrawer) entry).setLabel(value.toString());
+			else if (property.equals(SnippetsPlugin.NAMES.LARGEICON))
+				((SnippetPaletteDrawer) entry).setLargeIconName(value.toString());
+			else if (property.equals("filters")) //$NON-NLS-1$
+				((SnippetPaletteDrawer) entry).setFilters((String[]) value);
+		}
 	}
 
 	protected abstract void setProperties(SnippetPaletteDrawer category, Object source);
@@ -146,7 +165,7 @@
 		if (property == null)
 			return;
 		Object propertyValue = value;
-		if(propertyValue == null) {
+		if (propertyValue == null) {
 			propertyValue = "";
 		}
 		if (property.equals(SnippetsPlugin.NAMES.CATEGORY))
@@ -165,7 +184,7 @@
 		if (property == null)
 			return;
 		Object propertyValue = value;
-		if(propertyValue == null) {
+		if (propertyValue == null) {
 			propertyValue = "";
 		}
 		if (property.equals(SnippetsPlugin.NAMES.DEFAULT))
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForPlugins.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForPlugins.java
index 28174c6..1919c18 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForPlugins.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForPlugins.java
@@ -19,13 +19,13 @@
 import org.eclipse.core.runtime.PluginVersionIdentifier;
 import org.eclipse.gef.palette.PaletteDrawer;
 import org.eclipse.gef.palette.PaletteEntry;
-import org.eclipse.wst.common.snippets.internal.Debug;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
-import org.eclipse.wst.common.snippets.internal.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
+import org.eclipse.wst.common.snippets.internal.Logger;
 import org.eclipse.wst.common.snippets.internal.PluginRecord;
 import org.eclipse.wst.common.snippets.internal.SnippetDefinitions;
 import org.eclipse.wst.common.snippets.internal.SnippetsPlugin;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.util.StringUtils;
 import org.osgi.framework.Bundle;
 
@@ -49,9 +49,10 @@
 			if (category != null) {
 				assignSource(category, definitions, element);
 				definitions.getCategories().add(category);
-				if (Debug.debugDefinitionPersistence)
-					System.out.println("Plugin reader creating category " + category.getId()); //$NON-NLS-1$
-				
+				if (Logger.DEBUG_DEFINITION_PERSISTENCE) {
+					System.out.println("Plugin reader creating category " + ((SnippetPaletteDrawer) category).getId()); //$NON-NLS-1$
+				}
+
 				// add items for category
 				IConfigurationElement[] children = element.getChildren(SnippetsPlugin.NAMES.ITEM);
 				for (int i = 0; i < children.length; i++) {
@@ -62,7 +63,7 @@
 						setProperty(item, SnippetsPlugin.NAMES.CATEGORY, element.getAttribute(SnippetsPlugin.NAMES.ID));
 						assignSource(item, definitions, element);
 						definitions.getItems().add(item);
-						if (Debug.debugDefinitionPersistence)
+						if (Logger.DEBUG_DEFINITION_PERSISTENCE)
 							System.out.println("Plugin reader creating item " + item.getId()); //$NON-NLS-1$
 					}
 				}
@@ -71,10 +72,16 @@
 	}
 
 	protected void assignSource(ISnippetsEntry entry, SnippetDefinitions definitions, IConfigurationElement element) {
-		entry.setSourceType(ISnippetsEntry.SNIPPET_SOURCE_PLUGINS);
-		((PaletteEntry) entry).setUserModificationPermission(PaletteEntry.PERMISSION_HIDE_ONLY);
 		PluginRecord record = getPluginRecordFor(definitions, element);
-		entry.setSourceDescriptor(record);
+		if (entry instanceof SnippetPaletteItem) {
+			((SnippetPaletteItem) entry).setSourceType(ISnippetsEntry.SNIPPET_SOURCE_PLUGINS);
+			((SnippetPaletteItem) entry).setSourceDescriptor(record);
+		}
+		if (entry instanceof SnippetPaletteDrawer) {
+			((SnippetPaletteDrawer) entry).setSourceType(ISnippetsEntry.SNIPPET_SOURCE_PLUGINS);
+			((SnippetPaletteDrawer) entry).setSourceDescriptor(record);
+		}
+		((PaletteEntry) entry).setUserModificationPermission(PaletteEntry.PERMISSION_HIDE_ONLY);
 	}
 
 	/*
@@ -108,7 +115,7 @@
 		PluginRecord record = new PluginRecord();
 		record.setPluginName(id);
 		record.setPluginVersion(identifier.toString());
-		if (Debug.debugDefinitionPersistence)
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
 			System.out.println("Plugin reader creating plugin record for " + record.getPluginName() + "/" + record.getPluginVersion()); //$NON-NLS-1$ //$NON-NLS-2$
 		return record;
 	}
@@ -169,8 +176,8 @@
 				setProperty(item, SnippetsPlugin.NAMES.CONTENT, children[i].getValue());
 			else if (children[i].getName().equals(SnippetsPlugin.NAMES.VARIABLES)) {
 				Iterator iterator = createVariables(children[i].getChildren()).iterator();
-				while(iterator.hasNext()) {
-					item.addVariable((ISnippetVariable)iterator.next());
+				while (iterator.hasNext()) {
+					item.addVariable((ISnippetVariable) iterator.next());
 				}
 			}
 			else if (children[i].getName().equals(SnippetsPlugin.NAMES.VARIABLE)) {
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForUser.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForUser.java
index 2b3672d..20061e2 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForUser.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForUser.java
@@ -21,15 +21,14 @@
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.gef.palette.PaletteDrawer;
 import org.eclipse.gef.palette.PaletteEntry;
-import org.eclipse.wst.common.snippets.internal.Debug;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
-import org.eclipse.wst.common.snippets.internal.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.Logger;
 import org.eclipse.wst.common.snippets.internal.PluginRecord;
 import org.eclipse.wst.common.snippets.internal.SnippetDefinitions;
 import org.eclipse.wst.common.snippets.internal.SnippetsPlugin;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.util.CommonXML;
 import org.eclipse.wst.common.snippets.internal.util.StringUtils;
 import org.osgi.framework.Bundle;
@@ -54,24 +53,23 @@
 	}
 
 	protected void addCategory(SnippetDefinitions definitions, Element categoryElement) {
-		ISnippetCategory category = createCategory(categoryElement);
+		SnippetPaletteDrawer category = createCategory(categoryElement);
 		if (category != null) {
 			assignSource(category, definitions, categoryElement);
-			if (category instanceof PaletteDrawer) {
-				String stateString = categoryElement.getAttribute(SnippetsPlugin.NAMES.INITIAL_STATE);
-				int state = PaletteDrawer.INITIAL_STATE_CLOSED;
-				if (stateString != null && stateString.length() > 0) {
-					try {
-						state = Integer.parseInt(stateString);
-					}
-					catch (NumberFormatException e) {
-						// leave unchanged
-					}
+			String stateString = categoryElement.getAttribute(SnippetsPlugin.NAMES.INITIAL_STATE);
+			int state = PaletteDrawer.INITIAL_STATE_CLOSED;
+			if (stateString != null && stateString.length() > 0) {
+				try {
+					state = Integer.parseInt(stateString);
 				}
-				((PaletteDrawer) category).setInitialState(state);
+				catch (NumberFormatException e) {
+					// leave unchanged
+				}
 			}
+			((PaletteDrawer) category).setInitialState(state);
+
 			definitions.getCategories().add(category);
-			if (Debug.debugDefinitionPersistence)
+			if (Logger.DEBUG_DEFINITION_PERSISTENCE)
 				System.out.println("Plugin reader creating category " + category.getId()); //$NON-NLS-1$
 			NodeList children = categoryElement.getChildNodes();
 			for (int i = 0; i < children.getLength(); i++) {
@@ -83,26 +81,43 @@
 	}
 
 	protected void addChild(SnippetDefinitions definitions, Element child) {
-		ISnippetItem item = createItem(child);
+		SnippetPaletteItem item = createItem(child);
 		if (item != null) {
 			assignSource(item, definitions, child);
 			definitions.getItems().add(item);
-			if (Debug.debugDefinitionPersistence)
+			if (Logger.DEBUG_DEFINITION_PERSISTENCE)
 				System.out.println("Plugin reader creating item " + item.getId()); //$NON-NLS-1$
 		}
 	}
 
 	protected void assignSource(ISnippetsEntry entry, SnippetDefinitions definitions, Element element) {
-		entry.setSourceType(ISnippetsEntry.SNIPPET_SOURCE_USER);
-		((PaletteEntry) entry).setUserModificationPermission(PaletteEntry.PERMISSION_FULL_MODIFICATION);
-		Object pluginRecord = createPluginRecord(definitions, element);
-		if (pluginRecord != null) {
-			entry.setSourceDescriptor(pluginRecord);
-			((PaletteEntry) entry).setUserModificationPermission(PaletteEntry.PERMISSION_HIDE_ONLY);
-			entry.setSourceType(ISnippetsEntry.SNIPPET_SOURCE_PLUGINS);
+		if (entry instanceof ISnippetItem) {
+			SnippetPaletteItem item = (SnippetPaletteItem) entry;
+			item.setSourceType(ISnippetsEntry.SNIPPET_SOURCE_USER);
+			item.setUserModificationPermission(PaletteEntry.PERMISSION_FULL_MODIFICATION);
+			Object pluginRecord = createPluginRecord(definitions, element);
+			if (pluginRecord != null) {
+				item.setSourceDescriptor(pluginRecord);
+				((PaletteEntry) entry).setUserModificationPermission(PaletteEntry.PERMISSION_HIDE_ONLY);
+				item.setSourceType(ISnippetsEntry.SNIPPET_SOURCE_PLUGINS);
+			}
+			else if (element.getAttribute(SnippetsPlugin.NAMES.SHARED).equals(SnippetsPlugin.NAMES.SHARED)) {
+				item.setSourceType(ISnippetsEntry.SNIPPET_SOURCE_WORKSPACE);
+			}
 		}
-		else if (element.getAttribute(SnippetsPlugin.NAMES.SHARED).equals(SnippetsPlugin.NAMES.SHARED)) {
-			entry.setSourceType(ISnippetsEntry.SNIPPET_SOURCE_WORKSPACE);
+		if (entry instanceof ISnippetCategory) {
+			SnippetPaletteDrawer drawer = (SnippetPaletteDrawer) entry;
+			drawer.setSourceType(ISnippetsEntry.SNIPPET_SOURCE_USER);
+			((PaletteEntry) entry).setUserModificationPermission(PaletteEntry.PERMISSION_FULL_MODIFICATION);
+			Object pluginRecord = createPluginRecord(definitions, element);
+			if (pluginRecord != null) {
+				drawer.setSourceDescriptor(pluginRecord);
+				((PaletteEntry) entry).setUserModificationPermission(PaletteEntry.PERMISSION_HIDE_ONLY);
+				drawer.setSourceType(ISnippetsEntry.SNIPPET_SOURCE_PLUGINS);
+			}
+			else if (element.getAttribute(SnippetsPlugin.NAMES.SHARED).equals(SnippetsPlugin.NAMES.SHARED)) {
+				drawer.setSourceType(ISnippetsEntry.SNIPPET_SOURCE_WORKSPACE);
+			}
 		}
 	}
 
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForWorkspace.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForWorkspace.java
index ffff0b6..5482a06 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForWorkspace.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/ModelFactoryForWorkspace.java
@@ -14,7 +14,7 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.wst.common.snippets.internal.SnippetDefinitions;
 import org.eclipse.wst.common.snippets.internal.SnippetsPlugin;
-import org.eclipse.wst.common.snippets.internal.util.DocumentProvider;
+import org.eclipse.wst.common.snippets.internal.util.XMLDocumentProvider;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -57,7 +57,7 @@
 
 	public SnippetDefinitions loadFrom(IFile input) {
 		SnippetDefinitions definitions = new SnippetDefinitions();
-		DocumentProvider provider = new DocumentProvider();
+		XMLDocumentProvider provider = new XMLDocumentProvider();
 		Document document = null;
 		try {
 			provider.setInputStream(input.getContents());
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetCustomizerDialog.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetCustomizerDialog.java
index 1cbd2a6..df39345 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetCustomizerDialog.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetCustomizerDialog.java
@@ -30,7 +30,7 @@
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.FileDialog;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
 import org.eclipse.wst.common.snippets.internal.SnippetDefinitions;
 import org.eclipse.wst.common.snippets.internal.SnippetsMessages;
 import org.eclipse.wst.common.snippets.internal.SnippetsPluginImageHelper;
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetImageDescriptorHelper.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetImageDescriptorHelper.java
index 9c2eef0..f9f5bf7 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetImageDescriptorHelper.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetImageDescriptorHelper.java
@@ -13,12 +13,10 @@
 package org.eclipse.wst.common.snippets.internal.palette;
 
 import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.PluginRecord;
 import org.eclipse.wst.common.snippets.internal.SnippetsPluginImageHelper;
 import org.eclipse.wst.common.snippets.internal.SnippetsPluginImages;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
 
 
 public class SnippetImageDescriptorHelper {
@@ -43,14 +41,14 @@
 		return getImageDescriptor(SnippetsPluginImages.IMG_OBJ_SNIPPETS);
 	}
 
-	public ImageDescriptor getImageDescriptor(ISnippetCategory category) {
+	public ImageDescriptor getImageDescriptor(SnippetPaletteDrawer category) {
 		return getImageDescriptor(category, false);
 	}
 
-	public ImageDescriptor getImageDescriptor(ISnippetCategory category, boolean largeIcon) {
-		String iconName = largeIcon ? category.getLargeIconName() : category.getIconName();
+	public ImageDescriptor getImageDescriptor(SnippetPaletteDrawer category, boolean largeIcon) {
+		String iconName = largeIcon ? category.getLargeIconName() : category.getSmallIconName();
 		if (largeIcon && (iconName == null || iconName.length() == 0))
-			iconName = category.getIconName();
+			iconName = category.getSmallIconName();
 		if (category == null || iconName == null || iconName.length() == 0)
 			return getDefaultDescriptor();
 		ImageDescriptor image = null;
@@ -68,27 +66,27 @@
 		return image;
 	}
 
-	public ImageDescriptor getImageDescriptor(ISnippetItem item) {
+	public ImageDescriptor getImageDescriptor(SnippetPaletteItem item) {
 		return getImageDescriptor(item, false);
 	}
 
-	public ImageDescriptor getImageDescriptor(ISnippetItem item, boolean largeIcon) {
+	public ImageDescriptor getImageDescriptor(SnippetPaletteItem item, boolean largeIcon) {
 		ImageDescriptor image = null;
-		String iconName = largeIcon ? item.getLargeIconName() : item.getIconName();
+		String iconName = largeIcon ? item.getLargeIconName() : item.getSmallIconName();
 		if (largeIcon && (iconName == null || iconName.length() == 0))
-			iconName = item.getIconName();
+			iconName = item.getSmallIconName();
 		if (item.getSourceType() == ISnippetsEntry.SNIPPET_SOURCE_PLUGINS) {
 			PluginRecord record = (PluginRecord) item.getSourceDescriptor();
 			if (record != null && record.getPluginName() != null) {
 				image = getInstalledImage(record.getPluginName(), iconName);
 				if (image == null && item.getCategory() != null) {
-					image = getImageDescriptor(item.getCategory(), largeIcon);
+					image = getImageDescriptor((SnippetPaletteDrawer) item.getCategory(), largeIcon);
 				}
 			}
 		}
 		else {
 			if (iconName == null || iconName.length() < 1)
-				image = getImageDescriptor(item.getCategory(), largeIcon);
+				image = getImageDescriptor((SnippetPaletteDrawer) item.getCategory(), largeIcon);
 			else
 				image = getImageDescriptor(iconName);
 		}
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteDrawer.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteDrawer.java
index 193cc90..e906976 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteDrawer.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteDrawer.java
@@ -16,9 +16,8 @@
 import org.eclipse.gef.palette.PaletteEntry;
 import org.eclipse.gef.palette.PaletteTemplateEntry;
 import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
 
 public class SnippetPaletteDrawer extends PaletteDrawer implements ISnippetCategory {
 	protected String[] fFilters = new String[0];
@@ -49,13 +48,10 @@
 		setType(PaletteDrawer.PALETTE_TYPE_DRAWER);
 	}
 
-	/**
-	 * @see ISnippetCategory#add(ISnippetItem)
-	 */
-	public void add(ISnippetItem item) {
-		super.add((PaletteEntry) item);
+	public void add(SnippetPaletteItem item) {
+		super.add(item);
 		item.setCategory(this);
-		((PaletteEntry) item).setParent(this);
+		item.setParent(this);
 	}
 
 	public String[] getFilters() {
@@ -63,15 +59,6 @@
 	}
 
 	/**
-	 * Gets the iconName.
-	 * 
-	 * @return Returns a String
-	 */
-	public String getIconName() {
-		return fIconName;
-	}
-
-	/**
 	 * Gets the id.
 	 * 
 	 * @return Returns a String
@@ -80,6 +67,10 @@
 		return fId;
 	}
 
+	public ISnippetItem[] getItems() {
+		return (ISnippetItem[]) getChildren().toArray(new ISnippetItem[0]);
+	}
+
 	public ImageDescriptor getLargeIcon() {
 		ImageDescriptor icon = super.getLargeIcon();
 		if (icon == null) {
@@ -108,6 +99,15 @@
 		return icon;
 	}
 
+	/**
+	 * Gets the iconName.
+	 * 
+	 * @return Returns a String
+	 */
+	public String getSmallIconName() {
+		return fIconName;
+	}
+
 	public Object getSourceDescriptor() {
 		return fSourceDescriptor;
 	}
@@ -119,16 +119,16 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.wst.common.snippets.internal.provisional.ISnippetCategory#remove(org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem)
+	 * @see org.eclipse.wst.common.snippets.ui.ISnippetCategory#remove(org.eclipse.wst.common.snippets.ui.ISnippetItem)
 	 */
-	public void remove(ISnippetItem item) {
-		super.remove((PaletteEntry) item);
+	public void remove(SnippetPaletteItem item) {
+		super.remove(item);
 	}
 
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry#setFilters(java.lang.String[])
+	 * @see org.eclipse.wst.common.snippets.ui.ISnippetsEntry#setFilters(java.lang.String[])
 	 */
 	public void setFilters(String[] filters) {
 		fFilters = filters;
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteItem.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteItem.java
index 9767d14..a254e94 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteItem.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteItem.java
@@ -19,14 +19,13 @@
 import org.eclipse.gef.palette.PaletteContainer;
 import org.eclipse.gef.palette.PaletteTemplateEntry;
 import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
-import org.eclipse.wst.common.snippets.internal.ISnippetVariable;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetVariable;
 
 public class SnippetPaletteItem extends PaletteTemplateEntry implements ISnippetItem {
 
-	protected ISnippetCategory fCategory;
+	protected SnippetPaletteDrawer fCategory;
 	protected String fCategoryName;
 
 	protected String fClassName;
@@ -95,7 +94,7 @@
 		return fFilters;
 	}
 
-	public String getIconName() {
+	public String getSmallIconName() {
 		return fIconName;
 	}
 
@@ -142,7 +141,7 @@
 	}
 
 	public void setCategory(ISnippetCategory category) {
-		fCategory = category;
+		fCategory = (SnippetPaletteDrawer) category;
 		super.setParent((PaletteContainer) category);
 		if (fCategory == null)
 			setCategoryName(null);
@@ -169,7 +168,7 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry#setFilters(java.lang.String[])
+	 * @see org.eclipse.wst.common.snippets.ui.ISnippetsEntry#setFilters(java.lang.String[])
 	 */
 	public void setFilters(String[] filters) {
 		fFilters = filters;
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteRoot.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteRoot.java
index 1759c92..b9decdf 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteRoot.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetPaletteRoot.java
@@ -16,8 +16,8 @@
 
 import org.eclipse.gef.palette.PaletteEntry;
 import org.eclipse.gef.palette.PaletteRoot;
-import org.eclipse.wst.common.snippets.internal.Debug;
 import org.eclipse.wst.common.snippets.internal.IEntryChangeListener;
+import org.eclipse.wst.common.snippets.internal.Logger;
 import org.eclipse.wst.common.snippets.internal.SnippetDefinitions;
 import org.eclipse.wst.common.snippets.internal.model.SnippetManager;
 
@@ -68,7 +68,7 @@
 		for (int i = 0; i < children.size(); i++) {
 			((PaletteEntry) children.get(i)).setParent(this);
 		}
-		if (Debug.debugViewerContent)
+		if (Logger.DEBUG_VIEWER_CONTENT)
 			System.out.println(getClass().getName() + '@' + hashCode() + " setting categories to: " + children); //$NON-NLS-1$
 		listeners.firePropertyChange(PROPERTY_CHILDREN, oldChildren, children);
 	}
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetVariable.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetVariable.java
index 49fb3bf..8ab6795 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetVariable.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetVariable.java
@@ -12,7 +12,7 @@
 
 package org.eclipse.wst.common.snippets.internal.palette;
 
-import org.eclipse.wst.common.snippets.internal.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetVariable;
 
 public class SnippetVariable implements ISnippetVariable {
 	protected String fDefaultValue;
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetViewer.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetViewer.java
deleted file mode 100644
index 5b0b6c9..0000000
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/SnippetViewer.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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
- *******************************************************************************/
-package org.eclipse.wst.common.snippets.internal.palette;
-
-import org.eclipse.gef.ui.palette.PaletteViewer;
-import org.eclipse.gef.ui.palette.customize.PaletteCustomizerDialog;
-
-public class SnippetViewer extends PaletteViewer {
-	private PaletteCustomizerDialog customizerDialog = null;
-
-	public PaletteCustomizerDialog getCustomizerDialog() {
-		if (customizerDialog == null) {
-			customizerDialog = new SnippetCustomizerDialog(getControl().getShell(), getCustomizer(), getPaletteRoot());
-		}
-		return customizerDialog;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/UserModelDumper.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/UserModelDumper.java
index cfe9db5..34addc8 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/UserModelDumper.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/UserModelDumper.java
@@ -18,22 +18,20 @@
 
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.gef.palette.PaletteDrawer;
-import org.eclipse.wst.common.snippets.internal.Debug;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
-import org.eclipse.wst.common.snippets.internal.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.Logger;
 import org.eclipse.wst.common.snippets.internal.PluginRecord;
 import org.eclipse.wst.common.snippets.internal.SnippetDefinitions;
 import org.eclipse.wst.common.snippets.internal.SnippetsPlugin;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.util.CommonXML;
 import org.eclipse.wst.common.snippets.internal.util.StringUtils;
 import org.osgi.framework.Bundle;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-
 public class UserModelDumper {
 
 	private static UserModelDumper dumper = null;
@@ -53,15 +51,25 @@
 	 * Save the properties known for ISnippetsEntry
 	 */
 	protected void assignEntryProperties(ISnippetsEntry entry, Element owningElement) {
-		owningElement.setAttribute(SnippetsPlugin.NAMES.ID, entry.getId());
-		if (entry.getIconName() != null)
-			owningElement.setAttribute(SnippetsPlugin.NAMES.ICON, entry.getIconName());
+		if (entry instanceof SnippetPaletteDrawer) {
+			owningElement.setAttribute(SnippetsPlugin.NAMES.ID, ((SnippetPaletteDrawer) entry).getId());
+			if (((SnippetPaletteDrawer) entry).getSmallIconName() != null)
+				owningElement.setAttribute(SnippetsPlugin.NAMES.ICON, ((SnippetPaletteDrawer) entry).getSmallIconName());
+			if (entry.getLabel() != null)
+				owningElement.setAttribute(SnippetsPlugin.NAMES.LABEL, entry.getLabel());
+			if (((SnippetPaletteDrawer) entry).getLargeIconName() != null)
+				owningElement.setAttribute(SnippetsPlugin.NAMES.LARGEICON, ((SnippetPaletteDrawer) entry).getLargeIconName());
+		}
+		if (entry instanceof SnippetPaletteItem) {
+			owningElement.setAttribute(SnippetsPlugin.NAMES.ID, ((SnippetPaletteItem) entry).getId());
+			if (((SnippetPaletteItem) entry).getSmallIconName() != null)
+				owningElement.setAttribute(SnippetsPlugin.NAMES.ICON, ((SnippetPaletteItem) entry).getSmallIconName());
+			if (entry.getLabel() != null)
+				owningElement.setAttribute(SnippetsPlugin.NAMES.LABEL, entry.getLabel());
+			if (((SnippetPaletteItem) entry).getLargeIconName() != null)
+				owningElement.setAttribute(SnippetsPlugin.NAMES.LARGEICON, ((SnippetPaletteItem) entry).getLargeIconName());
+		}
 		owningElement.appendChild(createDescription(owningElement.getOwnerDocument(), entry.getDescription()));
-		// new in V5.1
-		if (entry.getLabel() != null)
-			owningElement.setAttribute(SnippetsPlugin.NAMES.LABEL, entry.getLabel());
-		if (entry.getLargeIconName() != null)
-			owningElement.setAttribute(SnippetsPlugin.NAMES.LARGEICON, entry.getLargeIconName());
 	}
 
 	/**
@@ -87,7 +95,7 @@
 		// if the category came from a plugin, only store a placeholder
 		// to maintain the ordering [it will be reloaded in subsequent
 		// sessions directly from the plugin definitions]
-		element.setAttribute(SnippetsPlugin.NAMES.ID, category.getId());
+		element.setAttribute(SnippetsPlugin.NAMES.ID, ((SnippetPaletteDrawer) category).getId());
 		if (category instanceof PaletteDrawer) {
 			element.setAttribute(SnippetsPlugin.NAMES.INITIAL_STATE, Integer.toString(((PaletteDrawer) category).getInitialState()));
 		}
@@ -104,15 +112,15 @@
 		if (category.getSourceType() == ISnippetsEntry.SNIPPET_SOURCE_USER) {
 			assignEntryProperties(category, element);
 
-			for (int i = 0; i < category.getChildren().size(); i++) {
-				ISnippetItem item = (ISnippetItem) category.getChildren().get(i);
+			for (int i = 0; i < category.getItems().length; i++) {
+				ISnippetItem item = category.getItems()[i];
 				Element child = createItem(doc, item);
 				element.appendChild(child);
 			}
 		}
 
-		if (Debug.debugDefinitionPersistence)
-			System.out.println("User item writer saving category " + category.getId()); //$NON-NLS-1$
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
+			System.out.println("User item writer saving category " + ((SnippetPaletteDrawer) category).getId()); //$NON-NLS-1$
 		return element;
 	}
 
@@ -165,19 +173,19 @@
 		Element element = doc.createElement(SnippetsPlugin.NAMES.ITEM);
 		assignEntryProperties(item, element);
 		assignSourceFor(item, element);
-		element.setAttribute(SnippetsPlugin.NAMES.CATEGORY, item.getCategory().getId());
-		if (item.getClassName() != null)
-			element.setAttribute(SnippetsPlugin.NAMES.CLASSNAME, item.getClassName());
-		if (item.getEditorClassName() != null)
-			element.setAttribute(SnippetsPlugin.NAMES.EDITORCLASSNAME, item.getEditorClassName());
+		element.setAttribute(SnippetsPlugin.NAMES.CATEGORY, ((SnippetPaletteDrawer) item.getCategory()).getId());
+		if (((SnippetPaletteItem) item).getClassName() != null)
+			element.setAttribute(SnippetsPlugin.NAMES.CLASSNAME, ((SnippetPaletteItem) item).getClassName());
+		if (((SnippetPaletteItem) item).getEditorClassName() != null)
+			element.setAttribute(SnippetsPlugin.NAMES.EDITORCLASSNAME, ((SnippetPaletteItem) item).getEditorClassName());
 		element.appendChild(createContent(doc, item));
 		ISnippetVariable[] variables = item.getVariables();
 		for (int i = 0; i < variables.length; i++) {
 			Element variable = createVariable(doc, variables[i]);
 			element.appendChild(variable);
 		}
-		if (Debug.debugDefinitionPersistence)
-			System.out.println("User item writer saving item " + item.getCategory().getId() + ":" + item.getId()); //$NON-NLS-1$ //$NON-NLS-2$
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
+			System.out.println("User item writer saving item " + ((SnippetPaletteDrawer) item.getCategory()).getId() + ":" + ((SnippetPaletteItem) item).getId()); //$NON-NLS-1$ //$NON-NLS-2$
 		return element;
 	}
 
@@ -189,7 +197,7 @@
 		Element element = doc.createElement(SnippetsPlugin.NAMES.PLUGIN);
 		element.setAttribute(SnippetsPlugin.NAMES.NAME, record.getPluginName());
 		element.setAttribute(SnippetsPlugin.NAMES.VERSION, record.getPluginVersion());
-		if (Debug.debugDefinitionPersistence)
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
 			System.out.println("User item writer saving plugin record " + record.getPluginName() + "/" + record.getPluginVersion()); //$NON-NLS-1$ //$NON-NLS-2$
 		return element;
 	}
@@ -199,7 +207,7 @@
 	 */
 	protected Element createVariable(Document doc, ISnippetVariable variable) {
 		Element element = doc.createElement(SnippetsPlugin.NAMES.VARIABLE);
-		element.setAttribute(SnippetsPlugin.NAMES.ID, variable.getId());
+		element.setAttribute(SnippetsPlugin.NAMES.ID, ((SnippetVariable) variable).getId());
 		if (variable.getName() != null)
 			element.setAttribute(SnippetsPlugin.NAMES.NAME, variable.getName());
 		if (variable.getDefaultValue() != null)
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/WorkspaceModelDumper.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/WorkspaceModelDumper.java
index 26b6e9c..d22b99c 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/WorkspaceModelDumper.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/palette/WorkspaceModelDumper.java
@@ -21,19 +21,17 @@
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.wst.common.snippets.internal.Debug;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
-import org.eclipse.wst.common.snippets.internal.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.Logger;
 import org.eclipse.wst.common.snippets.internal.PluginRecord;
 import org.eclipse.wst.common.snippets.internal.SnippetsPlugin;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.util.CommonXML;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
-
 public class WorkspaceModelDumper {
 
 	private static WorkspaceModelDumper dumper = null;
@@ -53,12 +51,21 @@
 	 * Save the properties known for ISnippetsEntry
 	 */
 	protected void assignEntryProperties(ISnippetsEntry entry, Element owningElement) {
-		owningElement.setAttribute(SnippetsPlugin.NAMES.ID, entry.getId());
-		owningElement.setAttribute(SnippetsPlugin.NAMES.ICON, entry.getIconName());
+		if (entry instanceof SnippetPaletteDrawer) {
+			SnippetPaletteDrawer drawer = (SnippetPaletteDrawer) entry;
+			owningElement.setAttribute(SnippetsPlugin.NAMES.ID, drawer.getId());
+			owningElement.setAttribute(SnippetsPlugin.NAMES.ICON, drawer.getSmallIconName());
+			owningElement.setAttribute(SnippetsPlugin.NAMES.LABEL, drawer.getLabel());
+			owningElement.setAttribute(SnippetsPlugin.NAMES.LARGEICON, drawer.getLargeIconName());
+		}
+		if (entry instanceof SnippetPaletteItem) {
+			SnippetPaletteItem item = (SnippetPaletteItem) entry;
+			owningElement.setAttribute(SnippetsPlugin.NAMES.ID, item.getId());
+			owningElement.setAttribute(SnippetsPlugin.NAMES.ICON, item.getSmallIconName());
+			owningElement.setAttribute(SnippetsPlugin.NAMES.LABEL, item.getLabel());
+			owningElement.setAttribute(SnippetsPlugin.NAMES.LARGEICON, item.getLargeIconName());
+		}
 		owningElement.appendChild(createDescription(owningElement.getOwnerDocument(), entry.getDescription()));
-		// new in V5.1
-		owningElement.setAttribute(SnippetsPlugin.NAMES.LABEL, entry.getLabel());
-		owningElement.setAttribute(SnippetsPlugin.NAMES.LARGEICON, entry.getLargeIconName());
 	}
 
 	/**
@@ -79,7 +86,7 @@
 		// if the category came from a plugin, only store a placeholder
 		// to maintain the ordering [it will be reloaded in subsequent
 		// sessions directly from the plugin definitions]
-		element.setAttribute(SnippetsPlugin.NAMES.ID, category.getId());
+		element.setAttribute(SnippetsPlugin.NAMES.ID, ((SnippetPaletteDrawer) category).getId());
 		String[] filters = category.getFilters();
 		if (filters.length > 0) {
 			String filtersAttr = filters[0];
@@ -93,15 +100,15 @@
 		if (category.getSourceType() == ISnippetsEntry.SNIPPET_SOURCE_WORKSPACE) {
 			assignEntryProperties(category, element);
 
-			for (int i = 0; i < category.getChildren().size(); i++) {
-				ISnippetItem item = (ISnippetItem) category.getChildren().get(i);
+			for (int i = 0; i < category.getItems().length; i++) {
+				ISnippetItem item = category.getItems()[i];
 				Element child = createItem(doc, item);
 				element.appendChild(child);
 			}
 		}
 
-		if (Debug.debugDefinitionPersistence)
-			System.out.println("User item writer saving category " + category.getId()); //$NON-NLS-1$
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
+			System.out.println("User item writer saving category " + ((SnippetPaletteDrawer) category).getId()); //$NON-NLS-1$
 		return element;
 	}
 
@@ -143,17 +150,17 @@
 		Element element = doc.createElement(SnippetsPlugin.NAMES.ITEM);
 		assignEntryProperties(item, element);
 		assignSourceFor(item, element);
-		element.setAttribute(SnippetsPlugin.NAMES.CATEGORY, item.getCategory().getId());
-		element.setAttribute(SnippetsPlugin.NAMES.CLASSNAME, item.getClassName());
-		element.setAttribute(SnippetsPlugin.NAMES.EDITORCLASSNAME, item.getEditorClassName());
+		element.setAttribute(SnippetsPlugin.NAMES.CATEGORY, ((SnippetPaletteDrawer) item.getCategory()).getId());
+		element.setAttribute(SnippetsPlugin.NAMES.CLASSNAME, ((SnippetPaletteItem) item).getClassName());
+		element.setAttribute(SnippetsPlugin.NAMES.EDITORCLASSNAME, ((SnippetPaletteItem) item).getEditorClassName());
 		element.appendChild(createContent(doc, item));
 		ISnippetVariable[] variables = item.getVariables();
 		for (int i = 0; i < variables.length; i++) {
 			Element variable = createVariable(doc, variables[i]);
 			element.appendChild(variable);
 		}
-		if (Debug.debugDefinitionPersistence)
-			System.out.println("User item writer saving item " + item.getCategory().getId() + ":" + item.getId()); //$NON-NLS-1$ //$NON-NLS-2$
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
+			System.out.println("User item writer saving item " + ((SnippetPaletteDrawer) item.getCategory()).getId() + ":" + ((SnippetPaletteItem) item).getId()); //$NON-NLS-1$ //$NON-NLS-2$
 		return element;
 	}
 
@@ -165,7 +172,7 @@
 		Element element = doc.createElement(SnippetsPlugin.NAMES.PLUGIN);
 		element.setAttribute(SnippetsPlugin.NAMES.NAME, record.getPluginName());
 		element.setAttribute(SnippetsPlugin.NAMES.VERSION, record.getPluginVersion());
-		if (Debug.debugDefinitionPersistence)
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
 			System.out.println("User item writer saving plugin record " + record.getPluginName() + "/" + record.getPluginVersion()); //$NON-NLS-1$ //$NON-NLS-2$
 		return element;
 	}
@@ -175,7 +182,7 @@
 	 */
 	protected Element createVariable(Document doc, ISnippetVariable variable) {
 		Element element = doc.createElement(SnippetsPlugin.NAMES.VARIABLE);
-		element.setAttribute(SnippetsPlugin.NAMES.ID, variable.getId());
+		element.setAttribute(SnippetsPlugin.NAMES.ID, ((SnippetVariable) variable).getId());
 		element.setAttribute(SnippetsPlugin.NAMES.NAME, variable.getName());
 		element.setAttribute(SnippetsPlugin.NAMES.DEFAULT, variable.getDefaultValue());
 		element.appendChild(createDescription(doc, variable.getDescription()));
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/ISnippetItem.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/ISnippetItem.java
deleted file mode 100644
index dd99d5e..0000000
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/ISnippetItem.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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
- *******************************************************************************/
-
-package org.eclipse.wst.common.snippets.internal.provisional;
-
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
-import org.eclipse.wst.common.snippets.internal.ISnippetVariable;
-
-/**
- * A snippet item is the actual object draggable from the Snippets view.
- * 
- * This interface is not meant to be implemented by clients.
- */
-public interface ISnippetItem extends ISnippetsEntry {
-
-	/**
-	 * @param the variable to add
-	 * @deprecated assumes that all implementions support this style of
-	 *             variables
-	 */
-	void addVariable(ISnippetVariable variable);
-
-	/**
-	 * @return the category holding this item
-	 * @deprecated
-	 */
-	ISnippetCategory getCategory();
-
-	/**
-	 * @return the name of the category holding this item. This is a handle
-	 *         only method; the category need not exist yet.
-	 * @deprecated assumes that all implementions support this style of
-	 *             variables
-	 */
-	String getCategoryName();
-
-	/**
-	 * @return the ISnippetInsertion class to be used with this item
-	 * @deprecated
-	 */
-	String getClassName();
-
-	/**
-	 * @return the content string for this item; the text inserted may not be
-	 *         identical
-	 */
-	String getContentString();
-
-	/**
-	 * @return the ISnippetEditor class to be used with this item
-	 * @deprecated
-	 */
-	String getEditorClassName();
-
-	/**
-	 * @return an array containing all of the valid variables for this item
-	 * @deprecated assumes that all implementions support this style of
-	 *             variables
-	 */
-	ISnippetVariable[] getVariables();
-
-	/**
-	 * @param the variable to remove. If the variable is not a know variable
-	 *            of this item, it is ignored.
-	 * 
-	 * @deprecated assumes that all implementions support this style of
-	 *             variables
-	 */
-	void removeVariable(ISnippetVariable variable);
-
-	/**
-	 * @param the category for this item
-	 * @deprecated - should not be changeable
-	 */
-	void setCategory(ISnippetCategory category);
-
-	/**
-	 * @param the name of the category holding this item. This is a handle
-	 *            only method; the category need not exist yet.
-	 * @deprecated - should not be changeable
-	 */
-	void setCategoryName(String name);
-
-	/**
-	 * @param the name of the insertion class for this item
-	 * 
-	 * @deprecated - should not be changeable
-	 */
-	void setClassName(String className);
-
-	/**
-	 * @param the new content string for this item
-	 * @deprecated - should not be changeable
-	 */
-	void setContentString(String content);
-
-	/**
-	 * @param the name of the editor class for this item
-	 * 
-	 * @deprecated - should not be changeable
-	 */
-	void setEditorClassName(String editorClassName);
-}
\ No newline at end of file
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/ISnippetsEntry.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/ISnippetsEntry.java
deleted file mode 100644
index 6e3d84f..0000000
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/ISnippetsEntry.java
+++ /dev/null
@@ -1,148 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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
- *******************************************************************************/
-
-
-package org.eclipse.wst.common.snippets.internal.provisional;
-
-/**
- * A Snippets Entry is an abstract notion encapsulating the values used to
- * represent Snippet Items and Containers. No object implements only this
- * interface.
- * 
- * This interface is not meant to be implemented by clients.
- */
-
-public interface ISnippetsEntry {
-
-	/**
-	 * Denotes that this entry was contributed by a plug-in
-	 */
-	final String SNIPPET_SOURCE_PLUGINS = "PLUGINS"; //$NON-NLS-1$
-
-	/**
-	 * Denotes that this entry was created by the user
-	 */
-	final String SNIPPET_SOURCE_USER = "USER"; //$NON-NLS-1$
-
-	/**
-	 * Denotes that this entry was discovered within the workspace
-	 * @deprecated
-	 */
-	final String SNIPPET_SOURCE_WORKSPACE = "WORKSPACE"; //$NON-NLS-1$
-
-	/**
-	 * @return the (lengthy) text description shown to the user for this entry
-	 */
-	String getDescription();
-
-	/**
-	 * @return the filters for which this entry will be shown (when filtering
-	 *         is enabled)
-	 */
-	String[] getFilters();
-
-	/**
-	 * @return the path to the icon image for this entry, relative to the
-	 *         entry's contributing plugin installation path or relative to
-	 *         the Snippets plugin's installation path
-	 */
-	String getIconName();
-
-	/**
-	 * @return a unique ID for this entry
-	 */
-	String getId();
-
-	/**
-	 * @return the (short) string shown to the user for this entry
-	 */
-	String getLabel();
-
-	/**
-	 * @return the path to a large icon image for this entry, relative to the
-	 *         entry's contributing plugin installation path or relative to
-	 *         the Snippets plugin's installation path, or null if one is not
-	 *         specified.
-	 */
-	String getLargeIconName();
-
-	/**
-	 * @return the object defining where this entry originated from. Valid
-	 *         values are instances of CategoryFileInfo and PluginRecord.
-	 */
-	Object getSourceDescriptor();
-
-	/**
-	 * @return the type of the source descriptor. Valid values are
-	 *         SNIPPET_SOURCE_PLUGINS, SNIPPET_SOURCE_USER, and
-	 *         SNIPPET_SOURCE_WORKSPACE.
-	 */
-	Object getSourceType();
-
-	/**
-	 * @return whether this entry is currently visible to the user or not
-	 */
-	boolean isVisible();
-
-	/**
-	 * @param description
-	 * @deprecated
-	 */
-	void setDescription(String description);
-
-	/**
-	 * @param filters
-	 * @deprecated
-	 */
-	void setFilters(String[] filters);
-
-	/**
-	 * @param icon
-	 * @deprecated
-	 */
-	void setIconName(String icon);
-
-	/**
-	 * @param id
-	 * @deprecated
-	 */
-	void setId(String id);
-
-	/**
-	 * @param label the (short) string shown to the user for this entry
-	 * @deprecated
-	 */
-	void setLabel(String label);
-
-	/**
-	 * @param icon
-	 * @deprecated
-	 */
-	void setLargeIconName(String icon);
-
-	/**
-	 * @param descriptor
-	 * @deprecated
-	 */
-	void setSourceDescriptor(Object descriptor);
-
-	/**
-	 * @param type
-	 * @deprecated
-	 */
-	void setSourceType(Object type);
-
-	/**
-	 * @param visible
-	 * @deprecated
-	 */
-	void setVisible(boolean visible);
-}
\ No newline at end of file
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/insertions/AbstractInsertion.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/insertions/AbstractInsertion.java
deleted file mode 100644
index dbe9aa0..0000000
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/insertions/AbstractInsertion.java
+++ /dev/null
@@ -1,197 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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
- *******************************************************************************/
-package org.eclipse.wst.common.snippets.internal.provisional.insertions;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.IDocumentExtension4;
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.ISelectionProvider;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.texteditor.IDocumentProvider;
-import org.eclipse.ui.texteditor.ITextEditor;
-import org.eclipse.wst.common.snippets.internal.Logger;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsInsertion;
-import org.eclipse.wst.common.snippets.internal.util.StringUtils;
-
-
-/**
- * An abstract insertion class that understands placing the snippet's content
- * string into a text editor.
- */
-public abstract class AbstractInsertion implements ISnippetsInsertion {
-	private IEditorPart activeEditorPart = null;
-
-	private ISnippetItem fItem = null;
-	private Transfer[] supportedTransfers = null;
-
-	/**
-	 * default constructor
-	 */
-	public AbstractInsertion() {
-		super();
-	}
-
-	/**
-	 * @return An array of Transfer objects supported by this insertion for
-	 *         Drag and Drop.
-	 */
-	protected Transfer[] createTransfers() {
-		return new Transfer[]{TextTransfer.getInstance()};
-	}
-
-	/**
-	 * @param part
-	 * @param textEditor
-	 * @param document
-	 * @param textSelection
-	 * @throws BadLocationException
-	 */
-	protected void doInsert(IEditorPart part, ITextEditor textEditor, IDocument document, ITextSelection textSelection) throws BadLocationException {
-		String replacement = getInsertString(part.getEditorSite().getShell());
-		if (replacement != null && (replacement.length() > 0 || textSelection.getLength() > 0)) {
-			// Update EOLs (bug 80231)
-			replacement = StringUtils.replace(replacement, "\r\n", "\n");
-			replacement = StringUtils.replace(replacement, "\r", "\n");
-
-			String preferredEOL = null;
-			if (document instanceof IDocumentExtension4) {
-				preferredEOL = ((IDocumentExtension4) document).getDefaultLineDelimiter();
-			}
-			else {
-				Method getLineDelimiter = null;
-				try {
-					getLineDelimiter = document.getClass().getMethod("getLineDelimiter", new Class[0]); //$NON-NLS-1$
-				}
-				catch (NoSuchMethodException e) {
-					// nothing, not unusual
-				}
-				if (getLineDelimiter != null) {
-					try {
-						preferredEOL = (String) getLineDelimiter.invoke(document, new Object[0]);
-					}
-					catch (IllegalAccessException e) {
-						// nothing, not unusual for a non-visible method
-					}
-					catch (InvocationTargetException e) {
-						// nothing, not unusual for a protected implementation
-					}
-				}
-
-			}
-			if (preferredEOL == null) {
-				preferredEOL = System.getProperty("line.separator");
-			}
-			if (!"\n".equals(preferredEOL) && preferredEOL != null) {
-				replacement = StringUtils.replace(replacement, "\n", preferredEOL);
-			}
-
-			document.replace(textSelection.getOffset(), textSelection.getLength(), replacement);
-		}
-	}
-
-	/**
-	 * Gets the activeEditorPart.
-	 * 
-	 * @return the active IEditorPart
-	 */
-	public IEditorPart getActiveEditorPart() {
-		return activeEditorPart;
-	}
-
-	/**
-	 * Return the string intended to be inserted; used by double-click
-	 * behavior
-	 * 
-	 * @param host
-	 *            a shell from which UI elements may be opened to help
-	 *            determine what String to return
-	 * 
-	 * @return the String to be inserted
-	 */
-	public String getInsertString(Shell host) {
-		return ""; //$NON-NLS-1$
-	}
-
-
-	/**
-	 * Gets the Item.
-	 * 
-	 * @return the ISnippetItem
-	 */
-	public ISnippetItem getItem() {
-		return fItem;
-	}
-
-	public Transfer[] getTransfers() {
-		if (supportedTransfers == null)
-			supportedTransfers = createTransfers();
-		return supportedTransfers;
-	}
-
-	/**
-	 * Applies the current ISnippetItem to the given IEditorPart
-	 */
-	public void insert(IEditorPart editorPart) {
-		if (editorPart == null)
-			return;
-		if (editorPart instanceof ITextEditor) {
-			// find the text widget, its Document, and the current selection
-			ITextEditor editor = (ITextEditor) editorPart;
-			if (editor.isEditable()) {
-				IDocumentProvider docprovider = editor.getDocumentProvider();
-				ISelectionProvider selprovider = editor.getSelectionProvider();
-				if (docprovider != null && selprovider != null) {
-					IDocument document = docprovider.getDocument(editorPart.getEditorInput());
-					ISelection selection = selprovider.getSelection();
-					if (document != null && selection != null && selection instanceof ITextSelection) {
-						ITextSelection textSel = (ITextSelection) selection;
-						try {
-							doInsert(editorPart, editor, document, textSel);
-						}
-						catch (Exception t) {
-							Logger.logException("Could not insert " + getItem().getId(), t); //$NON-NLS-1$
-							editor.getSite().getShell().getDisplay().beep();
-						}
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * Sets the activeEditorPart.
-	 * 
-	 * @param activeEditorPart
-	 *            The activeEditorPart to set
-	 */
-	public void setActiveEditorPart(IEditorPart newActiveEditorPart) {
-		this.activeEditorPart = newActiveEditorPart;
-	}
-
-	/**
-	 * Sets the fItem.
-	 * 
-	 * @param fItem
-	 *            The ISnippetItem to use
-	 */
-	public void setItem(ISnippetItem item) {
-		this.fItem = item;
-	}
-}
\ No newline at end of file
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/insertions/VariableInsertion.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/insertions/VariableInsertion.java
deleted file mode 100644
index 2580281..0000000
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/insertions/VariableInsertion.java
+++ /dev/null
@@ -1,156 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004 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
- *******************************************************************************/
-
-
-package org.eclipse.wst.common.snippets.internal.provisional.insertions;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-
-import org.eclipse.jface.text.IDocument;
-import org.eclipse.jface.text.ITextSelection;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.swt.dnd.DragSourceEvent;
-import org.eclipse.swt.dnd.TextTransfer;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.texteditor.ITextEditor;
-import org.eclipse.wst.common.snippets.internal.Logger;
-import org.eclipse.wst.common.snippets.internal.SnippetsPlugin;
-import org.eclipse.wst.common.snippets.internal.VariableItemHelper;
-import org.eclipse.wst.common.snippets.internal.dnd.VariableTextTransfer;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-import org.eclipse.wst.common.snippets.internal.ui.EntrySerializer;
-import org.eclipse.wst.common.snippets.internal.util.StringUtils;
-
-/**
- * An insertion implementation that supports ISnippetVariables. The content
- * string of the item can contain markers, in the form ${+variable+}, that
- * will be replaced with user-supplied values at insertion time.
- */
-public class VariableInsertion extends AbstractInsertion {
-
-	/**
-	 * Default public constructor
-	 */
-	public VariableInsertion() {
-		super();
-	}
-
-	protected Transfer[] createTransfers() {
-		return new Transfer[]{VariableTextTransfer.getTransferInstance(), TextTransfer.getInstance()};
-	}
-
-	public void dragSetData(DragSourceEvent event, ISnippetItem item) {
-		boolean isSimpleText = TextTransfer.getInstance().isSupportedType(event.dataType);
-		if (isSimpleText) {
-			// set variable values to ""
-			IWorkbenchWindow window = SnippetsPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
-			Shell shell = null;
-			if (window != null) {
-				shell = window.getShell();
-			}
-			String content = VariableItemHelper.getInsertString(shell, item);
-			// Update EOLs (bug 80231)
-			String systemEOL = System.getProperty("line.separator");
-			content = StringUtils.replace(content, "\r\n", "\n");
-			content = StringUtils.replace(content, "\r", "\n");
-			if (!"\n".equals(systemEOL) && systemEOL != null) {
-				content = StringUtils.replace(content, "\n", systemEOL);
-			}
-			event.data = content;
-		}
-		else {
-			/*
-			 * All complex insertions send an XML encoded version of the item
-			 * itself as the data. The drop action must use this to prompt the
-			 * user for the correct insertion data
-			 */
-			event.data = EntrySerializer.getInstance().toXML(item);
-		}
-	}
-
-	public String getInsertString(Shell host) {
-		if (getItem() == null)
-			return ""; //$NON-NLS-1$
-		String insertString = null;
-		ISnippetItem item = getItem();
-		if (item.getVariables().length > 0) {
-			insertString = VariableItemHelper.getInsertString(host, item);
-		}
-		else {
-			insertString = StringUtils.replace(item.getContentString(), "${cursor}", ""); //$NON-NLS-1$ //$NON-NLS-2$
-		}
-		return insertString;
-	}
-
-	public void insert(IEditorPart editorPart) {
-		IEditorPart anEditorPart = editorPart;
-		if (anEditorPart == null)
-			return;
-		if (anEditorPart instanceof ITextEditor) {
-			super.insert(editorPart);
-		}
-		else {
-			// MultiPageEditorPart has no accessors for the source EditorPart
-			ITextEditor textEditor = null;
-			if (anEditorPart instanceof ITextEditor) {
-				textEditor = (ITextEditor) anEditorPart;
-			}
-			else {
-				textEditor = (ITextEditor) anEditorPart.getAdapter(ITextEditor.class);
-			}
-			if (textEditor != null) {
-				if (textEditor.isEditable()) {
-					IDocument document = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
-					ISelection selection = textEditor.getSelectionProvider().getSelection();
-					if (document != null && selection instanceof ITextSelection) {
-						ITextSelection textSel = (ITextSelection) selection;
-						try {
-							doInsert(anEditorPart, textEditor, document, textSel);
-						}
-						catch (Exception t) {
-							Logger.logException("Could not insert " + getItem().getId(), t); //$NON-NLS-1$
-							textEditor.getSite().getShell().getDisplay().beep();
-						}
-					}
-				}
-			}
-			else {
-				// any errors here probably aren't really exceptional
-				Method getTextEditor = null;
-				try {
-					getTextEditor = anEditorPart.getClass().getMethod("getTextEditor", new Class[0]); //$NON-NLS-1$
-				}
-				catch (NoSuchMethodException e) {
-					// nothing, not unusual
-				}
-				Object editor = null;
-				if (getTextEditor != null) {
-					try {
-						editor = getTextEditor.invoke(anEditorPart, new Object[0]);
-					}
-					catch (IllegalAccessException e) {
-						// nothing, not unusual for a non-visible method
-					}
-					catch (InvocationTargetException e) {
-						// nothing, not unusual for a protected implementation
-					}
-					if (editor instanceof IEditorPart && editor != anEditorPart)
-						insert((IEditorPart) editor);
-				}
-			}
-		}
-	}
-
-}
\ No newline at end of file
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/team/CategoryFileInfo.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/team/CategoryFileInfo.java
index c69b184..4c0a579 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/team/CategoryFileInfo.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/team/CategoryFileInfo.java
@@ -11,7 +11,7 @@
 package org.eclipse.wst.common.snippets.internal.team;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
 
 
 /**
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/team/SnippetDefinitionResourceChangeListener.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/team/SnippetDefinitionResourceChangeListener.java
index cbe3a7e..e2f1543 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/team/SnippetDefinitionResourceChangeListener.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/team/SnippetDefinitionResourceChangeListener.java
@@ -31,11 +31,12 @@
 import org.eclipse.core.runtime.IPath;
 import org.eclipse.gef.palette.PaletteDrawer;
 import org.eclipse.gef.palette.PaletteEntry;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
 import org.eclipse.wst.common.snippets.internal.Logger;
 import org.eclipse.wst.common.snippets.internal.SnippetDefinitions;
 import org.eclipse.wst.common.snippets.internal.model.SnippetManager;
 import org.eclipse.wst.common.snippets.internal.palette.ModelFactoryForWorkspace;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteDrawer;
 
 
 /**
@@ -160,7 +161,7 @@
 		int oldIndex = -1;
 		List categories = SnippetManager.getInstance().getPaletteRoot().getChildren();
 		for (int i = 0; i < categories.size(); i++) {
-			if (((ISnippetCategory) categories.get(i)).getId().equals(info.getCategory().getId())) {
+			if (((SnippetPaletteDrawer) categories.get(i)).getId().equals(((SnippetPaletteDrawer) info.getCategory()).getId())) {
 				SnippetManager.getInstance().getPaletteRoot().remove((PaletteEntry) categories.get(i));
 				oldIndex = i;
 				break;
@@ -187,7 +188,7 @@
 		}
 		CategoryFileInfo result = new CategoryFileInfo(this, file, category);
 		if (category != null)
-			category.setSourceDescriptor(result);
+			((SnippetPaletteDrawer) category).setSourceDescriptor(result);
 		return result;
 	}
 
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/EntryDeserializer.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/EntryDeserializer.java
index 7eee245..5ef1da1 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/EntryDeserializer.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/EntryDeserializer.java
@@ -15,14 +15,12 @@
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
 
-import org.eclipse.wst.common.snippets.internal.Debug;
-import org.eclipse.wst.common.snippets.internal.ISnippetVariable;
-import org.eclipse.wst.common.snippets.internal.SnippetDefinitions;
+import org.eclipse.wst.common.snippets.core.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
+import org.eclipse.wst.common.snippets.internal.Logger;
 import org.eclipse.wst.common.snippets.internal.SnippetsPlugin;
 import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem;
 import org.eclipse.wst.common.snippets.internal.palette.SnippetVariable;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.util.CommonXML;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -33,8 +31,6 @@
 
 
 public class EntryDeserializer {
-
-
 	private static EntryDeserializer reader = null;
 
 	public synchronized static EntryDeserializer getInstance() {
@@ -44,20 +40,13 @@
 		return reader;
 	}
 
-	protected EntryDeserializer() {
+	private EntryDeserializer() {
 		super();
 	}
 
-	protected void addItem(SnippetDefinitions definitions, Element element) {
-		SnippetPaletteItem item = createItem(element);
-		// item.setPluginRecord(getPluginRecord(definitions, element));
-		definitions.getItems().add(item);
-	}
-
-	protected void assignEntryProperties(Element element, ISnippetsEntry entry) {
+	private void assignEntryProperties(Element element, SnippetPaletteItem entry) {
 		entry.setId(element.getAttribute(SnippetsPlugin.NAMES.ID));
 		entry.setIconName(element.getAttribute(SnippetsPlugin.NAMES.ICON));
-		// new in V5.1
 		String description = createDescription(element);
 		String label = element.getAttribute(SnippetsPlugin.NAMES.LABEL);
 		if ((label == null || label.length() == 0) && description != null) {
@@ -68,15 +57,15 @@
 		entry.setLabel(label);
 	}
 
-	protected String createContent(Node item) {
+	private String createContent(Node item) {
 		return readCDATAofChild(item, SnippetsPlugin.NAMES.CONTENT);
 	}
 
-	protected String createDescription(Node entryElement) {
+	private String createDescription(Node entryElement) {
 		return readCDATAofChild(entryElement, SnippetsPlugin.NAMES.DESCRIPTION);
 	}
 
-	protected SnippetPaletteItem createItem(Element element) {
+	private SnippetPaletteItem createItem(Element element) {
 		SnippetPaletteItem item = new SnippetPaletteItem(element.getAttribute(SnippetsPlugin.NAMES.ID));
 		assignEntryProperties(element, item);
 		item.setContentString(createContent(element));
@@ -93,12 +82,12 @@
 					item.addVariable(var);
 			}
 		}
-		if (Debug.debugDefinitionPersistence)
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
 			System.out.println("User item reader creating item " + item.getId()); //$NON-NLS-1$
 		return item;
 	}
 
-	protected ISnippetVariable createVariable(Element element) {
+	private ISnippetVariable createVariable(Element element) {
 		SnippetVariable var = new SnippetVariable();
 		var.setId(element.getAttribute(SnippetsPlugin.NAMES.ID));
 		var.setName(element.getAttribute(SnippetsPlugin.NAMES.NAME));
@@ -117,7 +106,7 @@
 				while (child.getNodeType() != Node.ELEMENT_NODE)
 					child = child.getNextSibling();
 				if (child.getNodeName().equals(SnippetsPlugin.NAMES.ITEM)) {
-					ISnippetItem item = createItem((Element) child);
+					SnippetPaletteItem item = createItem((Element) child);
 					item.setCategoryName(null);
 					item.setCategory(null);
 					item.setClassName(null);
@@ -142,7 +131,7 @@
 	 * <node><otherChild/><childName><wrong element/> <![CDATA[ RETURNED
 	 * TEXT]]> </childName> </node>
 	 */
-	protected String readCDATAofChild(Node node, String childName) {
+	private String readCDATAofChild(Node node, String childName) {
 		NodeList children = node.getChildNodes();
 		for (int i = 0; i < children.getLength(); i++) {
 			Node child = children.item(i);
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/EntrySerializer.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/EntrySerializer.java
index 7749a73..215045d 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/EntrySerializer.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/EntrySerializer.java
@@ -14,14 +14,14 @@
 
 import java.io.ByteArrayOutputStream;
 
-import org.eclipse.wst.common.snippets.internal.Debug;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
-import org.eclipse.wst.common.snippets.internal.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.Logger;
-import org.eclipse.wst.common.snippets.internal.PluginRecord;
 import org.eclipse.wst.common.snippets.internal.SnippetsPlugin;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteDrawer;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetVariable;
 import org.eclipse.wst.common.snippets.internal.util.CommonXML;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -38,36 +38,44 @@
 		return writer;
 	}
 
-	protected EntrySerializer() {
+	private EntrySerializer() {
 		super();
 	}
 
 	/**
 	 * Save the properties known for ISnippetsEntry
 	 */
-	protected void assignEntryProperties(ISnippetsEntry entry, Element owningElement) {
-		owningElement.setAttribute(SnippetsPlugin.NAMES.ID, entry.getId());
-		if (entry.getIconName() != null)
-			owningElement.setAttribute(SnippetsPlugin.NAMES.ICON, entry.getIconName());
+	private void assignEntryProperties(ISnippetsEntry entry, Element owningElement) {
+		if (entry instanceof SnippetPaletteItem) {
+			SnippetPaletteItem item = (SnippetPaletteItem) entry;
+			owningElement.setAttribute(SnippetsPlugin.NAMES.ID, item.getId());
+			if (item.getSmallIconName() != null)
+				owningElement.setAttribute(SnippetsPlugin.NAMES.ICON, item.getSmallIconName());
+		}
+		if (entry instanceof SnippetPaletteDrawer) {
+			SnippetPaletteDrawer drawer = (SnippetPaletteDrawer) entry;
+			owningElement.setAttribute(SnippetsPlugin.NAMES.ID, drawer.getId());
+			if (drawer.getSmallIconName() != null)
+				owningElement.setAttribute(SnippetsPlugin.NAMES.ICON, drawer.getSmallIconName());
+		}
 		if (entry.getDescription() != null)
 			owningElement.appendChild(createDescription(owningElement.getOwnerDocument(), entry.getDescription()));
-		// new in V5.1
 		if (entry.getLabel() != null)
 			owningElement.setAttribute(SnippetsPlugin.NAMES.LABEL, entry.getLabel());
 	}
 
 	/**
-	 * Create and save the properties known for LibraryCategories
+	 * Create and save the properties known for Snippet Categories
 	 */
-	protected Element createCategory(Document doc, ISnippetCategory category) {
+	private Element createCategory(Document doc, SnippetPaletteDrawer category) {
 		Element element = doc.createElement(SnippetsPlugin.NAMES.CATEGORY);
 		assignEntryProperties(category, element);
 		for (int i = 0; i < category.getChildren().size(); i++) {
-			ISnippetItem item = (ISnippetItem) category.getChildren().get(i);
+			SnippetPaletteItem item = (SnippetPaletteItem) category.getChildren().get(i);
 			Element child = createItem(doc, item);
 			element.appendChild(child);
 		}
-		if (Debug.debugDefinitionPersistence)
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
 			System.out.println("User item writer saving category " + category.getId()); //$NON-NLS-1$
 		return element;
 	}
@@ -76,7 +84,7 @@
 	 * Create and save the content property of a ISnippetItem - always place
 	 * it in a CDATA section for consistency
 	 */
-	protected Element createContent(Document doc, ISnippetItem item) {
+	private Element createContent(Document doc, ISnippetItem item) {
 		Element element = doc.createElement(SnippetsPlugin.NAMES.CONTENT);
 		element.appendChild(doc.createCDATASection(item.getContentString()));
 		return element;
@@ -86,7 +94,7 @@
 	 * Create and save the content property of a ISnippetItem - always place
 	 * it in a CDATA section for consistency
 	 */
-	protected Element createDescription(Document doc, String description) {
+	private Element createDescription(Document doc, String description) {
 		Element element = doc.createElement(SnippetsPlugin.NAMES.DESCRIPTION);
 		if (description != null)
 			element.appendChild(doc.createCDATASection(description));
@@ -98,12 +106,12 @@
 	/**
 	 * Create and save the properties known for LibraryItems
 	 */
-	protected Element createItem(Document doc, ISnippetItem item) {
+	private Element createItem(Document doc, SnippetPaletteItem item) {
 		Element element = doc.createElement(SnippetsPlugin.NAMES.ITEM);
 		assignEntryProperties(item, element);
 		// JAXP is very picky about null values
 		if (item.getCategory() != null)
-			element.setAttribute(SnippetsPlugin.NAMES.CATEGORY, item.getCategory().getId());
+			element.setAttribute(SnippetsPlugin.NAMES.CATEGORY, ((SnippetPaletteDrawer) item.getCategory()).getId());
 		if (item.getClassName() != null)
 			element.setAttribute(SnippetsPlugin.NAMES.CLASSNAME, item.getClassName());
 		if (item.getEditorClassName() != null)
@@ -115,30 +123,17 @@
 			Element variable = createVariable(doc, variables[i]);
 			element.appendChild(variable);
 		}
-		if (Debug.debugDefinitionPersistence)
-			System.out.println("User item writer saving item " + item.getCategory().getId() + ":" + item.getId()); //$NON-NLS-1$ //$NON-NLS-2$
-		return element;
-	}
-
-	/**
-	 * Save the list of plugins already seen as there may no longer be
-	 * references to them in the remaining categories and items
-	 */
-	protected Element createPluginRecord(Document doc, PluginRecord record) {
-		Element element = doc.createElement(SnippetsPlugin.NAMES.PLUGIN);
-		element.setAttribute(SnippetsPlugin.NAMES.NAME, record.getPluginName());
-		element.setAttribute(SnippetsPlugin.NAMES.VERSION, record.getPluginVersion());
-		if (Debug.debugDefinitionPersistence)
-			System.out.println("User item writer saving plugin record " + record.getPluginName() + "/" + record.getPluginVersion()); //$NON-NLS-1$ //$NON-NLS-2$
+		if (Logger.DEBUG_DEFINITION_PERSISTENCE)
+			System.out.println("User item writer saving item " + ((SnippetPaletteDrawer) item.getCategory()).getId() + ":" + item.getId()); //$NON-NLS-1$ //$NON-NLS-2$
 		return element;
 	}
 
 	/**
 	 * Create and save the values for a ISnippetVariable
 	 */
-	protected Element createVariable(Document doc, ISnippetVariable variable) {
+	private Element createVariable(Document doc, ISnippetVariable variable) {
 		Element element = doc.createElement(SnippetsPlugin.NAMES.VARIABLE);
-		element.setAttribute(SnippetsPlugin.NAMES.ID, variable.getId());
+		element.setAttribute(SnippetsPlugin.NAMES.ID, ((SnippetVariable) variable).getId());
 		if (variable.getName() != null)
 			element.setAttribute(SnippetsPlugin.NAMES.NAME, variable.getName());
 		if (variable.getDefaultValue() != null)
@@ -153,12 +148,12 @@
 		ByteArrayOutputStream output = new ByteArrayOutputStream();
 
 		if (entry instanceof ISnippetItem) {
-			ISnippetItem item = (ISnippetItem) entry;
+			SnippetPaletteItem item = (SnippetPaletteItem) entry;
 			Element itemElement = createItem(document, item);
 			document.getDocumentElement().appendChild(itemElement);
 		}
 		else {
-			ISnippetCategory category = (ISnippetCategory) entry;
+			SnippetPaletteDrawer category = (SnippetPaletteDrawer) entry;
 			Element categoryElement = createCategory(document, category);
 			document.getDocumentElement().appendChild(categoryElement);
 		}
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetDrawerEntryPage.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetDrawerEntryPage.java
index 77e5015..0571ef2 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetDrawerEntryPage.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetDrawerEntryPage.java
@@ -47,9 +47,10 @@
 import org.eclipse.ui.dialogs.ElementListSelectionDialog;
 import org.eclipse.ui.dialogs.ListSelectionDialog;
 import org.eclipse.ui.help.WorkbenchHelp;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.IHelpContextIds;
 import org.eclipse.wst.common.snippets.internal.SnippetsMessages;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteDrawer;
 import org.eclipse.wst.common.snippets.internal.util.VisibilityUtil;
 
 public class SnippetDrawerEntryPage extends DrawerEntryPage {
@@ -338,19 +339,19 @@
 	}
 
 	protected void refreshEntryFilters() {
-		ISnippetsEntry snippetEntry = (ISnippetsEntry) getEntry();
+		SnippetPaletteDrawer snippetDrawer = (SnippetPaletteDrawer) getEntry();
 		if (fAlwaysShowButton.getSelection()) {
-			snippetEntry.setFilters(new String[]{"*"}); //$NON-NLS-1$
-			snippetEntry.setVisible(true);
+			snippetDrawer.setFilters(new String[]{"*"}); //$NON-NLS-1$
+			snippetDrawer.setVisible(true);
 		}
 		else if (fAlwaysHideButton.getSelection()) {
-			snippetEntry.setFilters(new String[]{"!"}); //$NON-NLS-1$
-			snippetEntry.setVisible(false);
+			snippetDrawer.setFilters(new String[]{"!"}); //$NON-NLS-1$
+			snippetDrawer.setVisible(false);
 		}
 		else {
 			if (fContentTypes.length == 0) {
-				snippetEntry.setFilters(new String[]{"-"}); //$NON-NLS-1$
-				snippetEntry.setVisible(false);
+				snippetDrawer.setFilters(new String[]{"-"}); //$NON-NLS-1$
+				snippetDrawer.setVisible(false);
 			}
 			else {
 				String[] filters = new String[fContentTypes.length];
@@ -367,8 +368,8 @@
 					visible = VisibilityUtil.isContentType(input, filters);
 				}
 
-				snippetEntry.setFilters(filters);
-				snippetEntry.setVisible(visible);
+				snippetDrawer.setFilters(filters);
+				snippetDrawer.setVisible(visible);
 			}
 		}
 	}
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetTemplateEntryPage.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetTemplateEntryPage.java
index e6ae449..efd144d 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetTemplateEntryPage.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetTemplateEntryPage.java
@@ -10,19 +10,15 @@
  *******************************************************************************/
 package org.eclipse.wst.common.snippets.internal.ui;
 
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.gef.palette.PaletteEntry;
 import org.eclipse.gef.ui.palette.customize.DefaultEntryPage;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
 import org.eclipse.swt.widgets.Composite;
-import org.eclipse.wst.common.snippets.internal.Logger;
-import org.eclipse.wst.common.snippets.internal.PluginRecord;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.editors.ISnippetEditor;
 import org.eclipse.wst.common.snippets.internal.editors.VariableItemEditor;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
-import org.osgi.framework.Bundle;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem;
 
 
 public class SnippetTemplateEntryPage extends DefaultEntryPage implements ModifyListener {
@@ -36,11 +32,11 @@
 
 	public void createControl(Composite parent, PaletteEntry entry) {
 		super.createControl(parent, entry);
-		editor = getEditor((ISnippetItem) entry);
+		editor = getEditor((SnippetPaletteItem) entry);
 		if (editor != null) {
 			snippetsCustomizer.activeEditors.add(editor);
 			editor.addModifyListener(this);
-			editor.setItem((ISnippetItem) entry);
+			editor.setItem((SnippetPaletteItem) entry);
 			editor.createContents((Composite) getControl());
 			// it can't be known in advance since the editor is unknown as
 			// well
@@ -48,58 +44,10 @@
 		}
 	}
 
-	protected ISnippetEditor getEditor(ISnippetItem item) {
+	protected ISnippetEditor getEditor(SnippetPaletteItem item) {
 		ISnippetEditor snippetEditor = null;
-
-		String editorClassName = item.getEditorClassName();
-
-		// ignore the version
-		Bundle bundle = null;
-		if (item.getSourceType() == ISnippetsEntry.SNIPPET_SOURCE_PLUGINS) {
-			PluginRecord pluginRecord = (PluginRecord) item.getSourceDescriptor();
-			if (pluginRecord != null) {
-				bundle = Platform.getBundle(pluginRecord.getPluginName());
-			}
-		}
-
-		boolean editorSpecified = editorClassName != null && editorClassName.length() > 0;
-
-		if (editorSpecified) {
-			Class theClass = null;
-			try {
-				if (editorClassName != null && editorClassName.length() > 0) {
-					if ( bundle != null && bundle.getState() != Bundle.UNINSTALLED) {
-						theClass = bundle.loadClass(editorClassName);
-					} else {
-						ClassLoader classLoader = getClass().getClassLoader();
-						theClass = classLoader != null ? classLoader.loadClass(editorClassName) : Class.forName(editorClassName); 
-					}
-				}
-			}
-			catch (ClassNotFoundException e) {
-				Logger.logException("Could not load ISnippetEditor class", e); //$NON-NLS-1$
-			}
-			if (theClass != null) {
-				try {
-					snippetEditor = (ISnippetEditor) theClass.newInstance();
-				}
-				catch (IllegalAccessException e) {
-					Logger.logException("Could not access ISnippetEditor class", e); //$NON-NLS-1$
-				}
-				catch (InstantiationException e) {
-					Logger.logException("Could not instantiate ISnippetEditor class", e); //$NON-NLS-1$
-				}
-			}
-		}
-
-		if (snippetEditor == null && !editorSpecified) {
-			try {
-				snippetEditor = (ISnippetEditor) DEFAULT_EDITOR_CLASS.newInstance();
-			}
-			catch (IllegalAccessException e) {
-			}
-			catch (InstantiationException e) {
-			}
+		if (item.getSourceType() != ISnippetsEntry.SNIPPET_SOURCE_PLUGINS) {
+			snippetEditor = new VariableItemEditor();
 		}
 		return snippetEditor;
 	}
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetVariableTableViewer.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetVariableTableViewer.java
index c447a4a..ab53f50 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetVariableTableViewer.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetVariableTableViewer.java
@@ -15,20 +15,19 @@
 import java.util.Hashtable;
 import java.util.List;
 
+import org.eclipse.jface.viewers.ArrayContentProvider;
 import org.eclipse.jface.viewers.CellEditor;
 import org.eclipse.jface.viewers.ColumnWeightData;
 import org.eclipse.jface.viewers.ICellModifier;
 import org.eclipse.jface.viewers.ILabelProviderListener;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.SelectionChangedEvent;
 import org.eclipse.jface.viewers.TableLayout;
 import org.eclipse.jface.viewers.TableViewer;
 import org.eclipse.jface.viewers.TextCellEditor;
-import org.eclipse.jface.viewers.Viewer;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Composite;
@@ -36,7 +35,8 @@
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.TableItem;
-import org.eclipse.wst.common.snippets.internal.ISnippetVariable;
+import org.eclipse.wst.common.snippets.core.ISnippetVariable;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetVariable;
 
 
 /**
@@ -94,18 +94,7 @@
 			}
 		});
 
-		fTableViewer.setContentProvider(new IStructuredContentProvider() {
-
-			public void dispose() {
-			}
-
-			public Object[] getElements(Object inputElement) {
-				return ((List) inputElement).toArray();
-			}
-
-			public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
-			}
-		});
+		fTableViewer.setContentProvider(new ArrayContentProvider());
 
 		fTableViewer.setLabelProvider(new ITableLabelProvider() {
 
@@ -122,7 +111,7 @@
 			public String getColumnText(Object element, int columnIndex) {
 				if (element == null)
 					return null;
-				ISnippetVariable var = (ISnippetVariable) element;
+				SnippetVariable var = (SnippetVariable) element;
 				if (columnIndex == 0)
 					return var.getId();
 				else if (columnIndex == 1)
@@ -161,15 +150,15 @@
 
 			public Object getValue(Object element, String property) {
 				if (property.equals("id")) //$NON-NLS-1$
-					return ((ISnippetVariable) element).getId();
+					return ((SnippetVariable) element).getId();
 				else if (property.equals("value")) //$NON-NLS-1$
-					return fValues.get(((ISnippetVariable) element).getId());
+					return fValues.get(((SnippetVariable) element).getId());
 				return ""; //$NON-NLS-1$
 			}
 
 			public void modify(Object element, String property, Object value) {
 				TableItem item = (TableItem) element;
-				ISnippetVariable var = (ISnippetVariable) item.getData();
+				SnippetVariable var = (SnippetVariable) item.getData();
 				if (property.equals("value")) { //$NON-NLS-1$
 					String oldValue = (String) fValues.get(var.getId());
 					fValues.put(var.getId(), value);
@@ -236,7 +225,7 @@
 	}
 
 	public String getValue(ISnippetVariable var) {
-		return getValue(var.getId());
+		return getValue(((SnippetVariable) var).getId());
 	}
 
 	public String getValue(String id) {
@@ -266,7 +255,7 @@
 		if (fLibraryVariables != null) {
 			fValues = null;
 			for (int i = 0; i < fLibraryVariables.size(); i++) {
-				ISnippetVariable var = (ISnippetVariable) fLibraryVariables.get(i);
+				SnippetVariable var = (SnippetVariable) fLibraryVariables.get(i);
 				getValues().put(var.getId(), var.getDefaultValue());
 			}
 		}
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetsCustomizer.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetsCustomizer.java
index 0534f6c..23eda7e 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetsCustomizer.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetsCustomizer.java
@@ -19,7 +19,8 @@
 import org.eclipse.gef.palette.PaletteTemplateEntry;
 import org.eclipse.gef.ui.palette.PaletteCustomizer;
 import org.eclipse.gef.ui.palette.customize.EntryPage;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.Logger;
 import org.eclipse.wst.common.snippets.internal.editors.ISnippetEditor;
 import org.eclipse.wst.common.snippets.internal.model.SnippetManager;
@@ -27,7 +28,6 @@
 import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteDrawerFactory;
 import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem;
 import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItemFactory;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
 
 
 public class SnippetsCustomizer extends PaletteCustomizer {
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetsView.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetsView.java
index 38880f8..8118a69 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetsView.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/ui/SnippetsView.java
@@ -59,9 +59,10 @@
 import org.eclipse.ui.PartInitException;
 import org.eclipse.ui.help.WorkbenchHelp;
 import org.eclipse.ui.part.ViewPart;
-import org.eclipse.wst.common.snippets.internal.Debug;
+import org.eclipse.wst.common.snippets.core.ISnippetCategory;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
+import org.eclipse.wst.common.snippets.core.ISnippetsEntry;
 import org.eclipse.wst.common.snippets.internal.IHelpContextIds;
-import org.eclipse.wst.common.snippets.internal.ISnippetCategory;
 import org.eclipse.wst.common.snippets.internal.Logger;
 import org.eclipse.wst.common.snippets.internal.PluginRecord;
 import org.eclipse.wst.common.snippets.internal.SnippetDefinitions;
@@ -73,17 +74,15 @@
 import org.eclipse.wst.common.snippets.internal.actions.DeleteCategoryAction;
 import org.eclipse.wst.common.snippets.internal.actions.DeleteItemAction;
 import org.eclipse.wst.common.snippets.internal.model.SnippetManager;
+import org.eclipse.wst.common.snippets.internal.palette.SnippetCustomizerDialog;
 import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteDrawer;
 import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItem;
 import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteItemFactory;
 import org.eclipse.wst.common.snippets.internal.palette.SnippetPaletteRoot;
-import org.eclipse.wst.common.snippets.internal.palette.SnippetViewer;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetItem;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsEntry;
-import org.eclipse.wst.common.snippets.internal.provisional.ISnippetsInsertion;
-import org.eclipse.wst.common.snippets.internal.provisional.insertions.VariableInsertion;
 import org.eclipse.wst.common.snippets.internal.util.UserDrawerSelector;
 import org.eclipse.wst.common.snippets.internal.util.VisibilityUtil;
+import org.eclipse.wst.common.snippets.ui.DefaultSnippetInsertion;
+import org.eclipse.wst.common.snippets.ui.ISnippetInsertion;
 import org.osgi.framework.Bundle;
 
 public class SnippetsView extends ViewPart {
@@ -142,7 +141,7 @@
 
 	protected class InsertAction extends Action {
 		public InsertAction() {
-			super(SnippetsMessages.Insert___); 
+			super(SnippetsMessages.Insert___);
 			setImageDescriptor(SnippetsPluginImageHelper.getInstance().getImageDescriptor(SnippetsPluginImages.IMG_ELCL_INSERT));
 			setHoverImageDescriptor(SnippetsPluginImageHelper.getInstance().getImageDescriptor(SnippetsPluginImages.IMG_CLCL_INSERT));
 			setDisabledImageDescriptor(SnippetsPluginImageHelper.getInstance().getImageDescriptor(SnippetsPluginImages.IMG_DLCL_INSERT));
@@ -155,13 +154,13 @@
 		}
 	}
 
-	protected class InsertionHelper {
+	class InsertionHelper {
 		protected InsertionHelper() {
 			super();
 		}
 
-		protected ISnippetsInsertion getInsertion(ISnippetItem item) {
-			ISnippetsInsertion insertion = null;
+		protected ISnippetInsertion getInsertion(SnippetPaletteItem item) {
+			ISnippetInsertion insertion = null;
 			String className = item.getClassName();
 
 			PluginRecord record = null;
@@ -187,7 +186,7 @@
 				}
 				if (theClass != null) {
 					try {
-						insertion = (ISnippetsInsertion) theClass.newInstance();
+						insertion = (ISnippetInsertion) theClass.newInstance();
 					}
 					catch (IllegalAccessException e) {
 						Logger.logException("Could not access Insertion class", e); //$NON-NLS-1$
@@ -198,24 +197,15 @@
 				}
 			}
 			if (insertion == null) {
-				try {
-					insertion = (ISnippetsInsertion) DEFAULT_INSERTION_CLASS.newInstance();
-				}
-				catch (IllegalAccessException e) {
-					Logger.logException("Could not access Insertion class", e); //$NON-NLS-1$
-				}
-				catch (InstantiationException e) {
-					Logger.logException("Could not instantiate Insertion class", e); //$NON-NLS-1$
-				}
+				insertion = new DefaultSnippetInsertion();
 			}
 			return insertion;
 		}
 
-		public boolean insert(ISnippetItem item, IEditorPart editorPart) {
-			ISnippetsInsertion insertion = getInsertion(item);
+		public boolean insert(SnippetPaletteItem item, IEditorPart editorPart) {
+			ISnippetInsertion insertion = getInsertion(item);
 			if (insertion != null) {
 				insertion.setItem(item);
-				insertion.setActiveEditorPart(editorPart);
 				insertion.insert(editorPart);
 				return true;
 			}
@@ -228,10 +218,10 @@
 			// doesn't detect if hitpoint is on internal scrollbars
 			if (e.button == 1) {
 				EditPart part = SnippetsView.this.getViewer().findObjectAt(new Point(e.x, e.y));
-				ISnippetItem item = null;
+				SnippetPaletteItem item = null;
 				if (part != null) {
-					if (part.getModel() instanceof ISnippetItem)
-						item = (ISnippetItem) part.getModel();
+					if (part.getModel() instanceof SnippetPaletteItem)
+						item = (SnippetPaletteItem) part.getModel();
 				}
 				if (item != null)
 					insert(item);
@@ -276,7 +266,6 @@
 	}
 
 	protected class PasteAction extends Action {
-
 		public PasteAction() {
 			super(SnippetsMessages.Paste_4); //$NON-NLS-1$
 			setImageDescriptor(SnippetsPluginImageHelper.getInstance().getImageDescriptor(SnippetsPluginImages.IMG_ELCL_PASTE));
@@ -325,16 +314,16 @@
 					else
 						return;
 				}
-				if (entry instanceof ISnippetItem) {
-					ISnippetItem item = (ISnippetItem) entry;
-					if (destination instanceof ISnippetCategory) {
-						item.setId(destination.getId() + System.currentTimeMillis());
-						((ISnippetCategory) destination).add(item);
+				if (entry instanceof SnippetPaletteItem) {
+					SnippetPaletteItem item = (SnippetPaletteItem) entry;
+					if (destination instanceof SnippetPaletteDrawer) {
+						item.setId(((SnippetPaletteDrawer) destination).getId() + System.currentTimeMillis());
+						((SnippetPaletteDrawer) destination).add(item);
 						EditPart container = (EditPart) getViewer().getEditPartRegistry().get(destination);
 						container.refresh();
 					}
 					else if (destination instanceof ISnippetItem) {
-						ISnippetCategory category = ((ISnippetItem) destination).getCategory();
+						SnippetPaletteDrawer category = (SnippetPaletteDrawer) ((ISnippetItem) destination).getCategory();
 						item.setId("item_" + System.currentTimeMillis()); //$NON-NLS-1$
 						category.add(item);
 						EditPart container = (EditPart) getViewer().getEditPartRegistry().get(category);
@@ -409,7 +398,7 @@
 		}
 
 		public void dragFinished(DragSourceEvent event) {
-			if (Debug.debugDragAndDrop)
+			if (Logger.DEBUG_DRAG_AND_DROP)
 				System.out.println("drag finished"); //$NON-NLS-1$
 		}
 
@@ -417,8 +406,8 @@
 			if (getSelectedEntry() == null)
 				return;
 			if (getSelectedEntry() instanceof ISnippetItem) {
-				ISnippetsInsertion insertion = insertionHelper.getInsertion((ISnippetItem) getSelectedEntry());
-				insertion.setActiveEditorPart(getSite().getPage().getActiveEditor());
+				ISnippetInsertion insertion = insertionHelper.getInsertion((SnippetPaletteItem) getSelectedEntry());
+				insertion.setEditorPart(getSite().getPage().getActiveEditor());
 				insertion.dragSetData(event, (ISnippetItem) getSelectedEntry());
 			}
 			else {
@@ -430,7 +419,7 @@
 		}
 
 		public void dragStart(DragSourceEvent event) {
-			if (Debug.debugDragAndDrop)
+			if (Logger.DEBUG_DRAG_AND_DROP)
 				System.out.println("drag begun"); //$NON-NLS-1$
 		}
 
@@ -444,8 +433,6 @@
 		}
 	}
 
-	public static final Class DEFAULT_INSERTION_CLASS = VariableInsertion.class;
-
 	protected Clipboard clipboard = null;
 
 	protected Action copyAction = null;
@@ -482,11 +469,21 @@
 		getTransferDragSourceListeners().add(listener);
 	}
 
+	private PaletteCustomizerDialog fPaletteCustomizerDialog = null;
+
 	/*
 	 * @see IWorkbenchPart#createPartControl(Composite)
 	 */
 	public void createPartControl(Composite parent) {
-		fViewer = new SnippetViewer();
+		fViewer = new PaletteViewer() {
+			public PaletteCustomizerDialog getCustomizerDialog() {
+				if (fPaletteCustomizerDialog == null) {
+					fPaletteCustomizerDialog = new SnippetCustomizerDialog(getControl().getShell(), getCustomizer(), getPaletteRoot());
+				}
+				return fPaletteCustomizerDialog;
+			}
+		};
+
 		fViewer.enableVerticalScrollbar(true);
 
 		fViewer.createControl(parent);
@@ -510,9 +507,10 @@
 		fViewer.getContextMenu().setRemoveAllWhenShown(true);
 
 		fViewer.setCustomizer(new SnippetsCustomizer());
-		PaletteViewerPreferences libraryPreferences = new DefaultPaletteViewerPreferences(SnippetsPlugin.getDefault().getPreferenceStore());
+
+		PaletteViewerPreferences palettePreferences = new DefaultPaletteViewerPreferences(SnippetsPlugin.getDefault().getPreferenceStore());
 		SnippetsPlugin.getDefault().getPreferenceStore().setDefault(PaletteViewerPreferences.PREFERENCE_AUTO_COLLAPSE, PaletteViewerPreferences.COLLAPSE_ALWAYS);
-		fViewer.setPaletteViewerPreferences(libraryPreferences);
+		fViewer.setPaletteViewerPreferences(palettePreferences);
 
 		fViewer.setPaletteRoot(getRoot());
 
@@ -745,12 +743,12 @@
 
 	public void insert() {
 		if (getSelectedEntry() != null && getSelectedEntry() instanceof ISnippetItem) {
-			ISnippetItem item = (ISnippetItem) getSelectedEntry();
+			SnippetPaletteItem item = (SnippetPaletteItem) getSelectedEntry();
 			insert(item);
 		}
 	}
 
-	public void insert(ISnippetItem item) {
+	public void insert(SnippetPaletteItem item) {
 		insertionHelper.insert(item, getSite().getPage().getActiveEditor());
 	}
 
@@ -779,7 +777,7 @@
 	}
 
 	public void setSelectedEntry(ISnippetsEntry entry) {
-		if (Debug.debugPaletteSelection) {
+		if (Logger.DEBUG_PALETTE_SELECTION) {
 			if (fSelectedEntry == entry)
 				System.out.println("selection notification: " + entry + " (duplicated)"); //$NON-NLS-1$ //$NON-NLS-2$
 			else
@@ -788,7 +786,7 @@
 		if (fSelectedEntry == entry) {
 			return;
 		}
-		if (Debug.debugPaletteSelection)
+		if (Logger.DEBUG_PALETTE_SELECTION)
 			System.out.println("processing selection: " + entry); //$NON-NLS-1$
 		fSelectedEntry = entry;
 		updateDragSource();
@@ -809,11 +807,11 @@
 	protected void updateDragSource() {
 		Transfer[] supportedTypes = null;
 		if (getSelectedEntry() != null && getSelectedEntry() instanceof ISnippetItem) {
-			ISnippetItem item = (ISnippetItem) getSelectedEntry();
-			ISnippetsInsertion insertion = insertionHelper.getInsertion(item);
+			SnippetPaletteItem item = (SnippetPaletteItem) getSelectedEntry();
+			ISnippetInsertion insertion = insertionHelper.getInsertion(item);
 			if (insertion != null) {
 				insertion.setItem(item);
-				insertion.setActiveEditorPart(getSite().getPage().getActiveEditor());
+				insertion.setEditorPart(getSite().getPage().getActiveEditor());
 				supportedTypes = insertion.getTransfers();
 			}
 		}
@@ -859,7 +857,7 @@
 		if (addTextTransfer) {
 			addTextTransferListener();
 		}
-		if (Debug.debugDragAndDrop)
+		if (Logger.DEBUG_DRAG_AND_DROP)
 			System.out.println("" + getTransferDragSourceListeners().size() + " transfer types"); //$NON-NLS-1$ //$NON-NLS-2$
 	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/Sorter.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/Sorter.java
index 6a0bdbe..3a5b56c 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/Sorter.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/Sorter.java
@@ -12,8 +12,6 @@
  *******************************************************************************/
 package org.eclipse.wst.common.snippets.internal.util;
 
-
-
 /**
  * The SortOperation takes a collection of objects and returns a sorted
  * collection of these objects. Concrete instances of this class provide the
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/VisibilityUtil.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/VisibilityUtil.java
index f07a165..d2e651b 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/VisibilityUtil.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/VisibilityUtil.java
@@ -31,20 +31,20 @@
  */
 public class VisibilityUtil {
 	public static boolean isContentType(IEditorInput input, String[] filterContentTypes) {
-		boolean match = false;
+		boolean isMatch = false;
 		if (filterContentTypes == null) {
-			match = true;
+			isMatch = true;
 		}
 		else if (filterContentTypes.length >= 1) {
 			String firstFilter = filterContentTypes[0];
 			if (firstFilter.compareTo("*") == 0) //$NON-NLS-1$
-				match = true;
+				isMatch = true;
 			else if (firstFilter.compareTo("!") == 0) //$NON-NLS-1$
-				match = false;
+				isMatch = false;
 			else if (firstFilter.compareTo("-") == 0) //$NON-NLS-1$
-				match = false;
+				isMatch = false;
 			else {
-				match = false;
+				isMatch = false;
 				InputStream contents = null;
 				IContentDescription contentDesc = null;
 				try {
@@ -96,7 +96,7 @@
 							for (int i = 0; i < filterContentTypes.length; i++) {
 								IContentType contentType = Platform.getContentTypeManager().getContentType(filterContentTypes[i]);
 								if (contentType != null && currentContentType.isKindOf(contentType)) {
-									match = true;
+									isMatch = true;
 									break;
 								}
 							}
@@ -115,7 +115,7 @@
 								String filterContentTypeName = filterContentTypes[i];
 								IContentType filterContentType = Platform.getContentTypeManager().getContentType(filterContentTypeName);
 								if (filterContentType != null && contentTypes[j].isKindOf(filterContentType)) {
-									match = true;
+									isMatch = true;
 									break;
 								}
 							}
@@ -141,6 +141,6 @@
 				}
 			}
 		}
-		return match;
+		return isMatch;
 	}
 }
\ No newline at end of file
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/DocumentProvider.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/XMLDocumentProvider.java
similarity index 98%
rename from org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/DocumentProvider.java
rename to org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/XMLDocumentProvider.java
index 219d2e6..6655e5a 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/DocumentProvider.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/util/XMLDocumentProvider.java
@@ -47,7 +47,7 @@
  * from within a .JAR file (***read-only***)
  */
 
-public class DocumentProvider {
+public class XMLDocumentProvider {
 	/**
 	 * 
 	 * @param args
@@ -56,7 +56,7 @@
 	public static void main(String[] args) {
 		if (args.length < 2)
 			return;
-		DocumentProvider p = new DocumentProvider();
+		XMLDocumentProvider p = new XMLDocumentProvider();
 		p.setFileName(args[0]);
 		p.setRootElementName(args[1]);
 		p.getDocument();
@@ -74,7 +74,7 @@
 	protected String rootElementName = null;
 
 
-	public DocumentProvider() {
+	public XMLDocumentProvider() {
 		super();
 	}
 
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/ui/DefaultSnippetInsertion.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/ui/DefaultSnippetInsertion.java
new file mode 100644
index 0000000..3af8269
--- /dev/null
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/ui/DefaultSnippetInsertion.java
@@ -0,0 +1,247 @@
+/*******************************************************************************
+ * Copyright (c) 2004 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
+ *******************************************************************************/
+
+package org.eclipse.wst.common.snippets.ui;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IDocumentExtension4;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionProvider;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.TextTransfer;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.texteditor.IDocumentProvider;
+import org.eclipse.ui.texteditor.ITextEditor;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
+import org.eclipse.wst.common.snippets.internal.Logger;
+import org.eclipse.wst.common.snippets.internal.SnippetsPlugin;
+import org.eclipse.wst.common.snippets.internal.VariableItemHelper;
+import org.eclipse.wst.common.snippets.internal.dnd.SnippetTextTransfer;
+import org.eclipse.wst.common.snippets.internal.ui.EntrySerializer;
+import org.eclipse.wst.common.snippets.internal.util.StringUtils;
+
+/**
+ * An insertion implementation that supports ISnippetVariables. The content
+ * string of the item can contain markers, in the form ${+variable+}, that
+ * will be replaced with user-supplied values at insertion time.
+ */
+public class DefaultSnippetInsertion implements ISnippetInsertion {
+	private IEditorPart fEditorPart;
+	private ISnippetItem fItem = null;
+	private Transfer[] fSupportedTransfers = null;
+
+	public DefaultSnippetInsertion() {
+		super();
+	}
+
+	protected Transfer[] createTransfers() {
+		return new Transfer[]{SnippetTextTransfer.getTransferInstance(), TextTransfer.getInstance()};
+	}
+
+	/**
+	 * @param editorPart
+	 * @param textEditor
+	 * @param document
+	 * @param textSelection
+	 * @throws BadLocationException
+	 */
+	protected void doInsert(IEditorPart editorPart, ITextEditor textEditor, IDocument document, ITextSelection textSelection) throws BadLocationException {
+		String replacement = getInsertString(editorPart.getEditorSite().getShell());
+		if (replacement != null && (replacement.length() > 0 || textSelection.getLength() > 0)) {
+			// Update EOLs (bug 80231)
+			replacement = StringUtils.replace(replacement, "\r\n", "\n");
+			replacement = StringUtils.replace(replacement, "\r", "\n");
+
+			String preferredEOL = null;
+			if (document instanceof IDocumentExtension4) {
+				preferredEOL = ((IDocumentExtension4) document).getDefaultLineDelimiter();
+			}
+			else {
+				Method getLineDelimiter = null;
+				try {
+					getLineDelimiter = document.getClass().getMethod("getLineDelimiter", new Class[0]); //$NON-NLS-1$
+				}
+				catch (NoSuchMethodException e) {
+					// nothing, not unusual
+				}
+				if (getLineDelimiter != null) {
+					try {
+						preferredEOL = (String) getLineDelimiter.invoke(document, new Object[0]);
+					}
+					catch (IllegalAccessException e) {
+						// nothing, not unusual for a non-visible method
+					}
+					catch (InvocationTargetException e) {
+						// nothing, not unusual for a protected implementation
+					}
+				}
+
+			}
+			if (preferredEOL == null) {
+				preferredEOL = System.getProperty("line.separator");
+			}
+			if (!"\n".equals(preferredEOL) && preferredEOL != null) {
+				replacement = StringUtils.replace(replacement, "\n", preferredEOL);
+			}
+
+			document.replace(textSelection.getOffset(), textSelection.getLength(), replacement);
+		}
+	}
+
+	public void dragSetData(DragSourceEvent event, ISnippetItem item) {
+		boolean isSimpleText = TextTransfer.getInstance().isSupportedType(event.dataType);
+		if (isSimpleText) {
+			// set variable values to ""
+			IWorkbenchWindow window = SnippetsPlugin.getDefault().getWorkbench().getActiveWorkbenchWindow();
+			Shell shell = null;
+			if (window != null) {
+				shell = window.getShell();
+			}
+			String content = VariableItemHelper.getInsertString(shell, item);
+			// Update EOLs (bug 80231)
+			String systemEOL = System.getProperty("line.separator");
+			content = StringUtils.replace(content, "\r\n", "\n");
+			content = StringUtils.replace(content, "\r", "\n");
+			if (!"\n".equals(systemEOL) && systemEOL != null) {
+				content = StringUtils.replace(content, "\n", systemEOL);
+			}
+			event.data = content;
+		}
+		else {
+			/*
+			 * All complex insertions send an XML encoded version of the item
+			 * itself as the data. The drop action must use this to prompt the
+			 * user for the correct insertion data
+			 */
+			event.data = EntrySerializer.getInstance().toXML(item);
+		}
+	}
+
+	protected String getInsertString(Shell host) {
+		if (getItem() == null)
+			return ""; //$NON-NLS-1$
+		String insertString = null;
+		ISnippetItem item = getItem();
+		if (item.getVariables().length > 0) {
+			insertString = VariableItemHelper.getInsertString(host, item);
+		}
+		else {
+			insertString = StringUtils.replace(item.getContentString(), "${cursor}", ""); //$NON-NLS-1$ //$NON-NLS-2$
+		}
+		return insertString;
+	}
+
+	/**
+	 * Gets the Item.
+	 * 
+	 * @return the ISnippetItem
+	 */
+	public final ISnippetItem getItem() {
+		return fItem;
+	}
+
+	public Transfer[] getTransfers() {
+		if (fSupportedTransfers == null)
+			fSupportedTransfers = createTransfers();
+		return fSupportedTransfers;
+	}
+
+	public void insert(IEditorPart editorPart) {
+		if (editorPart == null)
+			return;
+		ITextEditor textEditor = null;
+
+		if (editorPart instanceof ITextEditor) {
+			textEditor = (ITextEditor) editorPart;
+		}
+		if (textEditor == null) {
+			// MultiPageEditorPart has no accessors for the source
+			textEditor = (ITextEditor) editorPart.getAdapter(ITextEditor.class);
+		}
+		if (textEditor == null) {
+			// any errors here probably aren't really exceptional
+			Method getTextEditor = null;
+			try {
+				getTextEditor = editorPart.getClass().getMethod("getTextEditor", new Class[0]); //$NON-NLS-1$
+			}
+			catch (NoSuchMethodException e) {
+				// nothing, not unusual
+			}
+			Object editor = null;
+			if (getTextEditor != null) {
+				try {
+					editor = getTextEditor.invoke(editorPart, new Object[0]);
+				}
+				catch (IllegalAccessException e) {
+					// nothing, not unusual for a non-visible method
+				}
+				catch (InvocationTargetException e) {
+					// nothing, not unusual for a protected implementation
+				}
+				if (editor instanceof IEditorPart && editor != editorPart && editor instanceof ITextEditor) {
+					textEditor = (ITextEditor) editor;
+				}
+			}
+		}
+		if (textEditor != null) {
+			insertIntoTextEditor(textEditor);
+		}
+	}
+
+	private void insertIntoTextEditor(ITextEditor editor) {
+		// find the text widget, its Document, and the current selection
+		if (editor.isEditable()) {
+			IDocumentProvider docprovider = editor.getDocumentProvider();
+			ISelectionProvider selprovider = editor.getSelectionProvider();
+			if (docprovider != null && selprovider != null) {
+				IDocument document = docprovider.getDocument(editor.getEditorInput());
+				ISelection selection = selprovider.getSelection();
+				if (document != null && selection != null && selection instanceof ITextSelection) {
+					ITextSelection textSel = (ITextSelection) selection;
+					try {
+						doInsert(editor, editor, document, textSel);
+					}
+					catch (Exception t) {
+						Logger.logException("Could not insert " + getItem(), t); //$NON-NLS-1$
+						editor.getSite().getShell().getDisplay().beep();
+					}
+				}
+			}
+		}
+	}
+
+
+	/**
+	 * Sets the fItem.
+	 * 
+	 * @param fItem
+	 *            The ISnippetItem to use
+	 */
+	public final void setItem(ISnippetItem item) {
+		fItem = item;
+	}
+
+	public IEditorPart getEditorPart() {
+		return fEditorPart;
+	}
+
+	public void setEditorPart(IEditorPart editorPart) {
+		fEditorPart = editorPart;
+	}
+}
\ No newline at end of file
diff --git a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/ISnippetsInsertion.java b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/ui/ISnippetInsertion.java
similarity index 74%
rename from org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/ISnippetsInsertion.java
rename to org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/ui/ISnippetInsertion.java
index f286acf..482178a 100644
--- a/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/internal/provisional/ISnippetsInsertion.java
+++ b/org.eclipse.wst.common.snippets/src/org/eclipse/wst/common/snippets/ui/ISnippetInsertion.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2004 IBM Corporation and others.
+ * Copyright (c) 2005 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
@@ -9,26 +9,26 @@
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 
-
-package org.eclipse.wst.common.snippets.internal.provisional;
+package org.eclipse.wst.common.snippets.ui;
 
 import org.eclipse.swt.dnd.DragSourceEvent;
 import org.eclipse.swt.dnd.Transfer;
 import org.eclipse.ui.IEditorPart;
+import org.eclipse.wst.common.snippets.core.ISnippetItem;
 
 /**
  * An insertion class is responsible for inserting a snippet item's contents
  * into editors. Implementors are responsible for supporting the drag-and-drop
  * mechanism and inserting the snippet's text into a given editor part.
  */
-public interface ISnippetsInsertion {
+public interface ISnippetInsertion {
 
 	/**
 	 * The data is required from the drag source.
 	 * 
 	 * <p>
 	 * The following fields in the DragSourceEvent should be examined/updated
-	 * by the LibraryInsertion object:
+	 * by the Insertion object:
 	 * <ul>
 	 * <li>dataType - (in) the type of data requested. This is a TransferData
 	 * object and can be used with the Transfer subclasses.
@@ -40,8 +40,10 @@
 	 * Subclasses should check which Transfer types are supported and set the
 	 * data accordingly.
 	 * 
-	 * @param event - the information associated with the drag set data event
-	 * @param item - the ISnippetItem instance from which to derive the data
+	 * @param event -
+	 *            the information associated with the drag set data event
+	 * @param item -
+	 *            the ISnippetItem instance from which to derive the data
 	 */
 	void dragSetData(DragSourceEvent event, ISnippetItem item);
 
@@ -58,21 +60,19 @@
 	/**
 	 * Insert the current ISnippetItem's insertion String to the given
 	 * IEditorPart. Used by double-click behavior.
-	 * @param editorPart the editor part into which to insert
+	 * 
+	 * @param editorPart
+	 *            the editor part into which to insert
 	 */
 	void insert(IEditorPart editorPart);
 
-	/**
-	 * The active editorpart in the workbench window. May be used as a clue
-	 * for determining which Transfer types to allow.
-	 * 
-	 * @param activeEditorPart the editor part which is active
-	 */
-	void setActiveEditorPart(IEditorPart activeEditorPart);
+	void setEditorPart(IEditorPart targetPart);
 
 	/**
 	 * Use this ISnippetItem
-	 * @param item the item to insert
+	 * 
+	 * @param item
+	 *            the item to insert
 	 */
 	void setItem(ISnippetItem item);
 }
\ No newline at end of file
