diff --git a/org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/internal/jetty70/Jetty70Configuration.java b/org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/internal/jetty70/Jetty70Configuration.java
index 072833f..60f8427 100644
--- a/org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/internal/jetty70/Jetty70Configuration.java
+++ b/org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/internal/jetty70/Jetty70Configuration.java
@@ -611,7 +611,7 @@
             {
                 serverInstance.setPort(port + "");
                 isServerDirty = true;
-                firePropertyChangeEvent(MODIFY_PORT_PROPERTY,id,new Integer(port));
+                firePropertyChangeEvent(MODIFY_PORT_PROPERTY,id, Integer.valueOf(port));
                 return;
             }
 
@@ -669,7 +669,7 @@
                 context.save();
                 isServerDirty = true;
                 WebModule module = new WebModule(path,docBase,null,reloadable);
-                firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY,new Integer(index),module);
+                firePropertyChangeEvent(MODIFY_WEB_MODULE_PROPERTY, Integer.valueOf(index),module);
             }
         }
         catch (Exception e)
diff --git a/org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/internal/xml/XMLUtil.java b/org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/internal/xml/XMLUtil.java
index 7e3767d..53d9ed0 100644
--- a/org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/internal/xml/XMLUtil.java
+++ b/org.eclipse.jst.server.jetty.core/src/org/eclipse/jst/server/jetty/core/internal/xml/XMLUtil.java
@@ -55,37 +55,39 @@
 
     public static DocumentBuilder getDocumentBuilder()
     {
-        if (documentBuilder == null)
-            try
-            {
-                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-                factory.setValidating(false);
-                factory.setNamespaceAware(false);
-                factory.setExpandEntityReferences(false);
-                // In case we happen to have a Xerces parser, try to set the feature that allows Java encodings to be used
+        synchronized (documentBuilder)
+        {
+            if (documentBuilder == null)
                 try
                 {
-                    factory.setFeature("http://apache.org/xml/features/allow-java-encodings",true);
-                }
-                catch (ParserConfigurationException e)
-                {
-                    // Ignore if feature isn't supported
-                }
-                // factory.setAttribute("http://apache.org/xml/features/nonvalidating/load-external-dtd", new Boolean(false));
-                documentBuilder = factory.newDocumentBuilder();
-                documentBuilder.setEntityResolver(new EntityResolver()
-                {
-                    public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
+                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+                    factory.setValidating(false);
+                    factory.setNamespaceAware(false);
+                    factory.setExpandEntityReferences(false);
+                    // In case we happen to have a Xerces parser, try to set the feature that allows Java encodings to be used
+                    try
                     {
-                        return new InputSource(new ByteArrayInputStream(new byte[0]));
+                        factory.setFeature("http://apache.org/xml/features/allow-java-encodings",true);
                     }
-                });
-            }
-            catch (Exception e)
-            {
-                Trace.trace(Trace.SEVERE,"Error creating document builder");
-            }
-
+                    catch (ParserConfigurationException e)
+                    {
+                        // Ignore if feature isn't supported
+                    }
+                    // factory.setAttribute("http://apache.org/xml/features/nonvalidating/load-external-dtd", new Boolean(false));
+                    documentBuilder = factory.newDocumentBuilder();
+                    documentBuilder.setEntityResolver(new EntityResolver()
+                    {
+                        public InputSource resolveEntity(String publicId, String systemId) throws SAXException, IOException
+                        {
+                            return new InputSource(new ByteArrayInputStream(new byte[0]));
+                        }
+                    });
+                }
+                catch (Exception e)
+                {
+                    Trace.trace(Trace.SEVERE,"Error creating document builder");
+                }
+        }
         return documentBuilder;
     }
 
diff --git a/org.eclipse.jst.server.jetty.ui.websocket/src/org/eclipse/jst/server/jetty/ui/websocket/internal/wizard/NewWebSocketServletClassWizardPage.java b/org.eclipse.jst.server.jetty.ui.websocket/src/org/eclipse/jst/server/jetty/ui/websocket/internal/wizard/NewWebSocketServletClassWizardPage.java
index 07cd257..2d1fe59 100644
--- a/org.eclipse.jst.server.jetty.ui.websocket/src/org/eclipse/jst/server/jetty/ui/websocket/internal/wizard/NewWebSocketServletClassWizardPage.java
+++ b/org.eclipse.jst.server.jetty.ui.websocket/src/org/eclipse/jst/server/jetty/ui/websocket/internal/wizard/NewWebSocketServletClassWizardPage.java
@@ -117,7 +117,7 @@
                             IPath pBase = root.getFullPath();
                             IPath path = pFull.removeFirstSegments(pBase.segmentCount());
                             qualifiedClassName = path.makeAbsolute().toString();
-                            model.setProperty(IS_SERVLET_TYPE,new Boolean(false));
+                            model.setProperty(IS_SERVLET_TYPE, Boolean.valueOf(false));
                         }
                     }
                 }
