diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowFigure.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowFigure.java
index e231a6f..c610eb8 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowFigure.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/css2/layout/FlowFigure.java
@@ -17,6 +17,7 @@
 import org.eclipse.draw2d.Graphics;
 import org.eclipse.draw2d.IFigure;
 import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.jst.pagedesigner.PDPlugin;
 
 /**
  * The base implementation for text flow figures. A flow figure is used to
@@ -53,9 +54,7 @@
 			if (getLayoutManager() instanceof FlowContext) {
 				ff.setOriginalFlowContext((FlowContext) getLayoutManager());
 			} else {
-				// should not happen
-				// FIXME: logging
-				System.err.println("layout is not FlowContext");
+				PDPlugin.getLogger(this.getClass()).error("layout is not FlowContext", new Throwable("This exception is artificial so  we can get a stack trace"));
 			}
 		}
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/ResouceDropTargetListener.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/ResouceDropTargetListener.java
index 2fc6183..c3e0c73 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/ResouceDropTargetListener.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/dnd/internal/ResouceDropTargetListener.java
@@ -30,7 +30,6 @@
 
 	public ResouceDropTargetListener(EditPartViewer viewer) {
 		super(viewer, FileTransfer.getInstance());
-		// TODO Auto-generated constructor stub
 	}
 
 	/*
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteCustomizerDialog.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteCustomizerDialog.java
index 56c9957..11528a1 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteCustomizerDialog.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/DesignerPaletteCustomizerDialog.java
@@ -80,7 +80,6 @@
 	 * @see org.eclipse.gef.ui.palette.customize.PaletteCustomizerDialog#save()
 	 */
 	protected void save() {
-		// TODO Auto-generated method stub
 		super.save();
 		Button applyButton = getButton(PaletteCustomizerDialog.APPLY_ID);
 		if (applyButton != null) {
@@ -192,8 +191,7 @@
 		 * @see org.eclipse.gef.ui.palette.customize.PaletteCustomizationAction#update()
 		 */
 		public void update() {
-			// TODO Auto-generated method stub
-
+			// no update requirements.
 		}
 	}
 
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteElementTemplateHelper.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteElementTemplateHelper.java
index 4f7b80b..9cd4b48 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteElementTemplateHelper.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/impl/PaletteElementTemplateHelper.java
@@ -20,6 +20,8 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.eclipse.jst.jsf.common.ui.internal.logging.Logger;
+import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.editors.palette.TagToolPaletteEntry;
 import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.provisional.TagCreationInfo;
 import org.eclipse.jst.pagedesigner.utils.JSPUtil;
@@ -79,6 +81,7 @@
 		if (template != null){
 			
 			final String nodeStr = prepareNode(template);//(String)template.getTemplate();
+			final Logger logger = PDPlugin.getLogger(PaletteElementTemplateHelper.class); 
 			try {
 				DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 				factory.setNamespaceAware(true);
@@ -90,18 +93,14 @@
 				Node[] templateNodes = applyPrefixes(model, tagCreationInfo, templateNode.getChildNodes(), model.getDocument());
 				return templateNodes;
 			} catch (ParserConfigurationException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
+			    logger.error(e);
 			} catch (SAXException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
+                logger.error(e);
 			} catch (IOException e) {
-				// TODO Auto-generated catch block
-				e.printStackTrace();
+                logger.error(e);
 			} catch (Exception e){
-				e.printStackTrace();
+                logger.error(e);
 			}
-//			frag.
 		}
 		return null;
 	}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfoImpl.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfoImpl.java
index f1ac742..cbcb3ba 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfoImpl.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/editors/palette/paletteinfos/internal/impl/PaletteInfoImpl.java
@@ -2,7 +2,7 @@
  * <copyright>
  * </copyright>
  *
- * $Id: PaletteInfoImpl.java,v 1.3 2007/04/09 02:23:03 cbateman Exp $
+ * $Id: PaletteInfoImpl.java,v 1.4 2007/04/09 18:28:52 cbateman Exp $
  */
 package org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.impl;
 
@@ -18,6 +18,7 @@
 import org.eclipse.jst.jsf.common.metadata.internal.provisional.Entity;
 import org.eclipse.jst.jsf.common.metadata.internal.provisional.Model;
 import org.eclipse.jst.jsf.common.metadata.internal.provisional.Trait;
+import org.eclipse.jst.pagedesigner.PDPlugin;
 import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.provisional.PaletteInfo;
 import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.provisional.PaletteInfosPackage;
 import org.eclipse.jst.pagedesigner.editors.palette.paletteinfos.internal.provisional.TagCreationInfo;
@@ -342,9 +343,11 @@
 			try {
 				Model model = (Model)this.eContainer().eContainer().eContainer();
 				//we could probably do better than this... oh well
+                //FIXME: C.B: this is really bad! We could probably do better than
+                // write code that expects to throw ClassCastExceptions and then hides them?  I hope so!
 				_tag = findTag(model, tagName);
 			} catch (ClassCastException e) {		
-				//TODO proper error handling
+			    PDPlugin.getLogger(getClass()).error(e);
 				return null;
 			}
 		}
diff --git a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupMessages.java b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupMessages.java
index 8804d5f..1fa6dc7 100644
--- a/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupMessages.java
+++ b/jsf/plugins/org.eclipse.jst.pagedesigner/src/org/eclipse/jst/pagedesigner/properties/attrgroup/AttributeGroupMessages.java
@@ -30,7 +30,6 @@
 	}
 
 	public static String getString(String key) {
-		// TODO Auto-generated method stub
 		try {
 			return RESOURCE_BUNDLE.getString(key);
 		} catch (MissingResourceException e) {
