diff --git a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/Request.java b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/Request.java
index b6388a7..22b1144 100644
--- a/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/Request.java
+++ b/plugins/org.eclipse.wst.internet.monitor.core/monitorcore/org/eclipse/wst/internet/monitor/core/Request.java
@@ -77,6 +77,12 @@
 
 	/**
 	 * Create a new Request.
+	 * 
+	 * @param monitor a monitor
+	 * @param protocolId the protocol id
+	 * @param localPort a local port number
+	 * @param remoteHost a remote hostname
+	 * @param remotePort a remote port number
 	 */
 	public Request(Monitor monitor, String protocolId, int localPort, String remoteHost, int remotePort) {
 		super();
@@ -335,7 +341,7 @@
 			monitor.requestChanged(this);
 	}
 
-	/* (non-Javadoc)
+	/** (non-Javadoc)
 	 * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
 	 */
 	public Object getAdapter(Class adapter) {
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java
index 97fea44..3224c56 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServer.java
@@ -477,7 +477,7 @@
 	/**
 	 * Asynchronously restarts the given module on the server.
 	 * See the specification of 
-	 * {@link IServer#synchronousRestartModule(IModule, IProgressMonitor)}
+	 * {@link IServer#synchronousRestartModule(IModule[], IProgressMonitor)}
 	 * for further details. 
 	 * <p>
 	 * The implementation should update the module sync state and fire
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java
index b16eb8c..951165a 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/IServerWorkingCopy.java
@@ -115,7 +115,7 @@
 	 * {@link IServer#createWorkingCopy()},
 	 * <code>this.getOriginal()</code> returns the original
 	 * server object. For a server working copy just created by
-	 * a call to {@link IServerType#createServer(String, IFile, IProgressMonitor)},
+	 * a call to {@link IServerType#createServer(String, org.eclipse.core.resources.IFile, IProgressMonitor)},
 	 * <code>this.getOriginal()</code> returns <code>null</code>.
 	 * </p>
 	 * 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerPort.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerPort.java
index acffe0a..9914bf8 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerPort.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/ServerPort.java
@@ -24,6 +24,11 @@
 	
 	/**
 	 * Create a new server port.
+	 * 
+	 * @param id a server-specific port id
+	 * @param name a human-readable name for the port
+	 * @param port the number number
+	 * @param protocol the port's protocol
 	 */
 	public ServerPort(String id, String name, int port, String protocol) {
 		this(id, name, port, protocol, null, true);
@@ -31,13 +36,14 @@
 
 	/**
 	 * Create a new server port.
-	 */
-	public ServerPort(String id, String name, int port, String protocol, boolean advanced) {
-		this(id, name, port, protocol, null, advanced);
-	}
-
-	/**
-	 * Create a new server port.
+	 * 
+	 * @param id a server-specific port id
+	 * @param name a human-readable name for the port
+	 * @param port the number number
+	 * @param protocol the port's protocol
+	 * @param contentTypes the content types that the port supports
+	 * @param advanced <code>true</code> if the port is "advanced" and should only
+	 *    be shown to advanced users, <code>false</code> otherwise
 	 */
 	public ServerPort(String id, String name, int port, String protocol, String[] contentTypes, boolean advanced) {
 		super();
@@ -50,13 +56,6 @@
 	}
 
 	/**
-	 * Create a new server port.
-	 */
-	public ServerPort(String name, int port, String protocol) {
-		this(null, name, port, protocol);
-	}
-
-	/**
 	 * Return an optional internal id used to identify this port.
 	 * 
 	 * @return an internal id
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IModuleResourceDelta.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IModuleResourceDelta.java
index 8327fdf..9174fed 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IModuleResourceDelta.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/IModuleResourceDelta.java
@@ -16,9 +16,32 @@
  * @since 1.0
  */
 public interface IModuleResourceDelta {
+	/**
+	 * Kind constant (value 0) for no change.
+	 * 
+	 * @see #getKind()
+	 */
 	public static final int NO_CHANGE = 0;
+
+	/**
+	 * Kind constant (value 1) for added resources.
+	 * 
+	 * @see #getKind()
+	 */
 	public static final int ADDED = 1;
+
+	/**
+	 * Kind constant (value 2) for changed resources.
+	 * 
+	 * @see #getKind()
+	 */
 	public static final int CHANGED = 2;
+
+	/**
+	 * Kind constant (value 3) for removed resources.
+	 * 
+	 * @see #getKind()
+	 */
 	public static final int REMOVED = 3;
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleDelegate.java
index 20587d5..73a8d77 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleDelegate.java
@@ -85,12 +85,10 @@
 	}
 
 	/**
-	 * Validates this module instance. See the specification of
-	 * {@link IModule#validate(IProgressMonitor)} for further details. Subclasses should
+	 * Validates this module instance. Subclasses should
 	 * override and call super.validate() for basic validation. 
 	 * <p>
-	 * This method is called by the web server core framework,
-	 * in response to a call to <code>IModule.validate(IProgressMonitor)</code>.
+	 * This method is called by the web server core framework.
 	 * Clients should never call this method.
 	 * </p>
 	 *
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleFactoryDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleFactoryDelegate.java
index 549998f..bf99a16 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleFactoryDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ModuleFactoryDelegate.java
@@ -124,13 +124,9 @@
 	public abstract ModuleDelegate getModuleDelegate(IModule module);
 
 	/**
-	 * Return all modules created by this factory.
-	 * See the specification of
-	 * {@link org.eclipse.wst.server.core.IModuleFactory#getModules()}
-	 * for further details. 
+	 * Return all modules created by this factory. 
 	 * <p>
-	 * This method is normally called by the web server core framework,
-	 * in response to a call to {@link IModuleFactory#getModules()}.
+	 * This method is normally called by the web server core framework.
 	 * Clients (other than the delegate) should never call this method.
 	 * </p>
 	 * <p>
@@ -148,9 +144,7 @@
 	 * notifications until it is removed.
 	 * Has no effect if an identical listener is already registered.
 	 * <p>
-	 * This method is normally called by the web server core framework,
-	 * in response to a call to
-	 * {@link IModuleFactory#addModuleFactoryListener(IModuleFactoryListener)}.
+	 * This method is normally called by the web server core framework.
 	 * Clients (other than the delegate) should never call this method.
 	 * </p>
 	 *
@@ -171,9 +165,7 @@
 	 * Removes the given listener from this module factory.
 	 * Has no effect if the listener is not registered.
 	 * <p>
-	 * This method is normally called by the web server core framework,
-	 * in response to a call to
-	 * {@link IModuleFactory#removeModuleFactoryListener(IModuleFactoryListener)}.
+	 * This method is normally called by the web server core framework.
 	 * Clients (other than the delegate) should never call this method.
 	 * </p>
 	 *
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeDelegate.java
index b62fb02..c64f2b0 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeDelegate.java
@@ -114,8 +114,7 @@
 	}
 
 	/**
-	 * Validates this runtime instance. See the specification of
-	 * {@link IRuntime#validate(IProgressMonitor)} for further details. Subclasses should
+	 * Validates this runtime instance. Subclasses should
 	 * override and call super.validate() for basic validation. 
 	 * <p>
 	 * This method is called by the web server core framework,
@@ -142,8 +141,10 @@
 	}
 
 	/**
+	 * Returns <code>true</code> if the current name is already in use.
 	 * 
-	 * @return
+	 * @return <code>true</code> if the name is in use, and <code>false</code>
+	 *    otherwise
 	 */
 	private boolean isNameInUse() {
 		IRuntime orig = runtime;
@@ -162,29 +163,63 @@
 	}
 
 	/**
+	 * Returns the value of the specified int-valued attribute.
 	 * 
-	 * @param attributeName
-	 * @param defaultValue
-	 * @return
+	 * @param id the attribute id
+	 * @param defaultValue the default value of the specified attribute
+	 * @return the attribute value
+	 * @see #setAttribute(String, int)
 	 */
-	public int getAttribute(String attributeName, int defaultValue) {
-		return runtime.getAttribute(attributeName, defaultValue);
+	public int getAttribute(String id, int defaultValue) {
+		return runtime.getAttribute(id, defaultValue);
 	}
 
-	public boolean getAttribute(String attributeName, boolean defaultValue) {
-		return runtime.getAttribute(attributeName, defaultValue);
-	}
-	
-	public String getAttribute(String attributeName, String defaultValue) {
-		return runtime.getAttribute(attributeName, defaultValue);
+	/**
+	 * Returns the value of the specified boolean-valued attribute.
+	 * 
+	 * @param id the attribute id
+	 * @param defaultValue the default value of the specified attribute
+	 * @return the attribute value
+	 * @see #setAttribute(String, boolean)
+	 */
+	public boolean getAttribute(String id, boolean defaultValue) {
+		return runtime.getAttribute(id, defaultValue);
 	}
 
-	public List getAttribute(String attributeName, List defaultValue) {
-		return runtime.getAttribute(attributeName, defaultValue);
+	/**
+	 * Returns the value of the specified String-valued attribute.
+	 * 
+	 * @param id the attribute id
+	 * @param defaultValue the default value of the specified attribute
+	 * @return the attribute value
+	 * @see #setAttribute(String, String)
+	 */
+	public String getAttribute(String id, String defaultValue) {
+		return runtime.getAttribute(id, defaultValue);
 	}
 
-	public Map getAttribute(String attributeName, Map defaultValue) {
-		return runtime.getAttribute(attributeName, defaultValue);
+	/**
+	 * Returns the value of the specified List-valued attribute.
+	 * 
+	 * @param id the attribute id
+	 * @param defaultValue the default value of the specified attribute
+	 * @return the attribute value
+	 * @see #setAttribute(String, List)
+	 */
+	public List getAttribute(String id, List defaultValue) {
+		return runtime.getAttribute(id, defaultValue);
+	}
+
+	/**
+	 * Returns the value of the specified Map-valued attribute.
+	 * 
+	 * @param id the attribute id
+	 * @param defaultValue the default value of the specified attribute
+	 * @return the attribute value
+	 * @see #setAttribute(String, Map)
+	 */
+	public Map getAttribute(String id, Map defaultValue) {
+		return runtime.getAttribute(id, defaultValue);
 	}
 	
 	/**
@@ -217,6 +252,7 @@
 	 * 
 	 * @param id the attribute id
 	 * @param value the value of the specified attribute
+	 * @see #getAttribute(String, int)
 	 */
 	public void setAttribute(String id, int value) {
 		runtimeWC.setAttribute(id, value);
@@ -228,6 +264,7 @@
 	 * 
 	 * @param id the attribute id
 	 * @param value the value of the specified attribute
+	 * @see #getAttribute(String, boolean)
 	 */
 	public void setAttribute(String id, boolean value) {
 		runtimeWC.setAttribute(id, value);
@@ -239,6 +276,7 @@
 	 * 
 	 * @param id the attribute id
 	 * @param value the value of the specified attribute
+	 * @see #getAttribute(String, String)
 	 */
 	public void setAttribute(String id, String value) {
 		runtimeWC.setAttribute(id, value);
@@ -250,6 +288,7 @@
 	 * 
 	 * @param id the attribute id
 	 * @param value the value of the specified attribute
+	 * @see #getAttribute(String, List)
 	 */
 	public void setAttribute(String id, List value) {
 		runtimeWC.setAttribute(id, value);
@@ -261,6 +300,7 @@
 	 * 
 	 * @param id the attribute id
 	 * @param value the value of the specified attribute
+	 * @see #getAttribute(String, Map)
 	 */
 	public void setAttribute(String id, Map value) {
 		runtimeWC.setAttribute(id, value);
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeLocatorDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeLocatorDelegate.java
index 0daeeac..2a1a709 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeLocatorDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/RuntimeLocatorDelegate.java
@@ -24,6 +24,9 @@
  * @since 1.0
  */
 public abstract class RuntimeLocatorDelegate {
+	/**
+	 * A callback listener used to report progress.
+	 */
 	public interface IRuntimeSearchListener {
 		/**
 		 * Called when a new runtime is found by the locator.
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
index 629c4c4..96dd8c2 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerBehaviourDelegate.java
@@ -50,11 +50,31 @@
 	private Server server;
 	
 	/**
-	 * Publish kind constants
+	 * Publish kind constant (value 0) for no change.
+	 * 
+	 * @see #publishModule(int, int, IModule[], IProgressMonitor)
 	 */
 	public static final int NO_CHANGE = 0;
+	
+	/**
+	 * Publish kind constant (value 1) for added resources.
+	 * 
+	 * @see #publishModule(int, int, IModule[], IProgressMonitor)
+	 */
 	public static final int ADDED = 1;
+	
+	/**
+	 * Publish kind constant (value 2) for changed resources.
+	 * 
+	 * @see #publishModule(int, int, IModule[], IProgressMonitor)
+	 */
 	public static final int CHANGED = 2;
+
+	/**
+	 * Publish kind constant (value 3) for removed resources.
+	 * 
+	 * @see #publishModule(int, int, IModule[], IProgressMonitor)
+	 */
 	public static final int REMOVED = 3;
 
 	/**
@@ -312,6 +332,10 @@
 	 * This method is used if there is a quick/better way to restart
 	 * the server. If it throws a CoreException, the normal stop/start
 	 * actions will be used.
+	 * 
+	 * @param launchMode the mode to restart in, one of the mode constants
+	 *    defined by {@link org.eclipse.debug.core.ILaunchManager}
+	 * @throws CoreException if there was a problem restarting
 	 */
 	public void restart(String launchMode) throws CoreException {
 		 throw new CoreException(new Status(IStatus.ERROR, ServerPlugin.PLUGIN_ID, 0, "Could not restart", null));
@@ -337,7 +361,7 @@
 	/**
 	 * Asynchronously restarts the given module on the server.
 	 * See the specification of 
-	 * {@link IServer#synchronousRestartModule(IModule, IProgressMonitor)}
+	 * {@link IServer#synchronousRestartModule(IModule[], IProgressMonitor)}
 	 * for further details. 
 	 * <p>
 	 * The implementation should update the module sync state and fire
@@ -394,8 +418,7 @@
 	 * will be thrown.
 	 * </p>
 	 * 
-	 * @param parents
-	 * @param module
+	 * @param module the module
 	 * @return an array containing the published module resource
 	 */
 	public IModuleResource[] getPublishedResources(IModule[] module) {
@@ -406,8 +429,7 @@
 	 * Returns the delta of the current module resources that have been
 	 * published compared to the current state of the module.
 	 *
-	 * @param parents
-	 * @param module
+	 * @param module the module
 	 * @return an array containing the publish resource delta
 	 */
 	public IModuleResourceDelta[] getPublishedResourceDelta(IModule[] module) {
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java
index eed87ae..e75ef05 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerDelegate.java
@@ -111,24 +111,64 @@
 		return serverWC;
 	}
 
-	public int getAttribute(String attributeName, int defaultValue) {
-		return server.getAttribute(attributeName, defaultValue);
+	/**
+	 * Returns the value of the specified int-valued attribute.
+	 * 
+	 * @param id the attribute id
+	 * @param defaultValue the default value of the specified attribute
+	 * @return the attribute value
+	 * @see #setAttribute(String, int)
+	 */
+	public int getAttribute(String id, int defaultValue) {
+		return server.getAttribute(id, defaultValue);
 	}
 
-	public boolean getAttribute(String attributeName, boolean defaultValue) {
-		return server.getAttribute(attributeName, defaultValue);
-	}
-	
-	public String getAttribute(String attributeName, String defaultValue) {
-		return server.getAttribute(attributeName, defaultValue);
+	/**
+	 * Returns the value of the specified boolean-valued attribute.
+	 * 
+	 * @param id the attribute id
+	 * @param defaultValue the default value of the specified attribute
+	 * @return the attribute value
+	 * @see #setAttribute(String, boolean)
+	 */
+	public boolean getAttribute(String id, boolean defaultValue) {
+		return server.getAttribute(id, defaultValue);
 	}
 
-	public List getAttribute(String attributeName, List defaultValue) {
-		return server.getAttribute(attributeName, defaultValue);
+	/**
+	 * Returns the value of the specified String-valued attribute.
+	 * 
+	 * @param id the attribute id
+	 * @param defaultValue the default value of the specified attribute
+	 * @return the attribute value
+	 * @see #setAttribute(String, String)
+	 */
+	public String getAttribute(String id, String defaultValue) {
+		return server.getAttribute(id, defaultValue);
 	}
 
-	public Map getAttribute(String attributeName, Map defaultValue) {
-		return server.getAttribute(attributeName, defaultValue);
+	/**
+	 * Returns the value of the specified List-valued attribute.
+	 * 
+	 * @param id the attribute id
+	 * @param defaultValue the default value of the specified attribute
+	 * @return the attribute value
+	 * @see #setAttribute(String, List)
+	 */
+	public List getAttribute(String id, List defaultValue) {
+		return server.getAttribute(id, defaultValue);
+	}
+
+	/**
+	 * Returns the value of the specified Map-valued attribute.
+	 * 
+	 * @param id the attribute id
+	 * @param defaultValue the default value of the specified attribute
+	 * @return the attribute value
+	 * @see #setAttribute(String, Map)
+	 */
+	public Map getAttribute(String id, Map defaultValue) {
+		return server.getAttribute(id, defaultValue);
 	}
 
 	/**
@@ -178,7 +218,8 @@
 	 * recursively called on the children.</p>
 	 *
 	 * @param module a module
-	 * @see org.eclipse.wst.server.core.IServerAttributes#getChildModules(IModule, IProgressMonitor)
+	 * @return the child modules
+	 * @see IServerAttributes#getChildModules(IModule[], IProgressMonitor)
 	 */
 	public abstract IModule[] getChildModules(IModule[] module);
 
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerLocatorDelegate.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerLocatorDelegate.java
index 49d64b4..a877f1d 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerLocatorDelegate.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/model/ServerLocatorDelegate.java
@@ -23,6 +23,9 @@
  * @since 1.0
  */
 public abstract class ServerLocatorDelegate {
+	/**
+	 * A callback listener used to report progress.
+	 */
 	public interface IServerSearchListener {
 		/**
 		 * Called when a new server is found by the locator.
diff --git a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModule.java b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModule.java
index 5adcf86..2795888 100644
--- a/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModule.java
+++ b/plugins/org.eclipse.wst.server.core/servercore/org/eclipse/wst/server/core/util/ProjectModule.java
@@ -33,16 +33,26 @@
 	// change listeners
 	private transient List listeners;
 
+	/**
+	 * Create a new project module.
+	 */
 	public ProjectModule() {
 		// do nothing
 	}
 
+	/**
+	 * Create a new project module in the given project.
+	 * 
+	 * @param project the project containing the module
+	 */
 	public ProjectModule(IProject project) {
 		this.project = project;
 	}
 
-	/*
-	 * @see IModuleProject#getProject()
+	/**
+	 * Returns the project that the module is contained in.
+	 * 
+	 * @return the project that the module is contained in
 	 */
 	public IProject getProject() {
 		return project;
@@ -138,24 +148,24 @@
 		return deployDelta;
 	}*/
 
-	/*
+	/**
 	 * Helper method - returns the module's id.
 	 * 
-	 * @see ModuleDelegate#getId()
+	 * @return the module id
 	 */
 	public String getId() {
 		return getProject().getName();
 		//return getModule().getId();
 	}
 
-	/*
+	/**
 	 * @see ModuleDelegate#validate()
 	 */
 	public IStatus validate() {
 		return null;
 	}
 
-	/*
+	/**
 	 * @see ModuleDelegate#members()
 	 */
 	public IModuleResource[] members() throws CoreException {
@@ -203,6 +213,8 @@
 
 	/**
 	 * Helper method - returns the module's name.
+	 * 
+	 * @return the module name
 	 */
 	public String getName() {
 		return getProject().getName();
@@ -220,7 +232,7 @@
 	}
 	
 	/**
-	 * 
+	 * @see Object#equals(Object)
 	 */
 	public boolean equals(Object obj) {
 		if (obj == null || !(obj instanceof ProjectModule))
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerLaunchConfigurationTab.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerLaunchConfigurationTab.java
index 88f090a..71ee03c 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerLaunchConfigurationTab.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/ServerLaunchConfigurationTab.java
@@ -54,16 +54,24 @@
 	// after the user requests a launch, they cannot change it
 	private static final String READ_ONLY = "read-only";
 
+	/**
+	 * Create a new server launch configuration tab.
+	 */
 	public ServerLaunchConfigurationTab() {
 		this(new String[] {"*"});
 	}
 
+	/**
+	 * Create a new server launch configuration tab with the given server type ids.
+	 * 
+	 * @param serverTypeIds an array of server type ids
+	 */
 	public ServerLaunchConfigurationTab(String[] serverTypeIds) {
 		this.serverTypeIds = serverTypeIds;
 	}
 
-	/*
-	 * @see ILaunchConfigurationTab#createControl(Composite)
+	/**
+	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(Composite)
 	 */
 	public void createControl(Composite parent) {
 		Composite composite = new Composite(parent, SWT.NONE);
@@ -176,8 +184,8 @@
 		super.updateLaunchConfigurationDialog();
 	}
 
-	/*
-	 * @see ILaunchConfigurationTab#setDefaults(ILaunchConfigurationWorkingCopy)
+	/**
+	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(ILaunchConfigurationWorkingCopy)
 	 */
 	public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
 		setErrorMessage(null);
@@ -198,8 +206,8 @@
 		}
 	}
 
-	/*
-	 * @see ILaunchConfigurationTab#initializeFrom(ILaunchConfiguration)
+	/**
+	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(ILaunchConfiguration)
 	 */
 	public void initializeFrom(ILaunchConfiguration configuration) {
 		serverCombo.setEnabled(true);
@@ -233,8 +241,8 @@
 		}
 	}
 
-	/*
-	 * @see ILaunchConfigurationTab#performApply(ILaunchConfigurationWorkingCopy)
+	/**
+	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(ILaunchConfigurationWorkingCopy)
 	 */
 	public void performApply(ILaunchConfigurationWorkingCopy configuration) {
 		if (server != null)
@@ -243,17 +251,8 @@
 			configuration.setAttribute(Server.ATTR_SERVER_ID, (String)null);
 	}
 
-	/*
-	 * @see ILaunchConfigurationTab#isValid() 
-	 */
-	public boolean isValid() {
-		if (serverCombo.getSelectionIndex() != -1)
-			return true;
-		return false;
-	}
-
-	/*
-	 * @see ILaunchConfigurationTab#isValid(ILaunchConfiguration) 
+	/**
+	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#isValid(ILaunchConfiguration) 
 	 */
 	public boolean isValid(ILaunchConfiguration launchConfig) {
 		try {
@@ -271,12 +270,15 @@
 		return false;
 	}
 
+	/**
+	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage()
+	 */
 	public Image getImage() {
 		return ImageResource.getImage(ImageResource.IMG_SERVER);
 	}
 
-	/*
-	 * @see ILaunchConfigurationTab#getName()
+	/**
+	 * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName()
 	 */
 	public String getName() {
 		return ServerUIPlugin.getResource("%serverLaunchConfigurationTab");
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java
index 9aaa2ac..1fc899b 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorPart.java
@@ -12,7 +12,6 @@
 
 import java.util.*;
 
-import org.eclipse.core.resources.IMarker;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.swt.widgets.Composite;
@@ -35,6 +34,9 @@
  * @since 1.0
  */
 public abstract class ServerEditorPart extends EditorPart {
+	/**
+	 * Property change id for the error message.
+	 */
 	public static final int PROP_ERROR = 5;
 	
 	private String errorMessage = null;
@@ -49,44 +51,45 @@
 	
 	private FormToolkit toolkit;
 
+	/**
+	 * Create a new server editor part.
+	 */
 	public ServerEditorPart() {
 		super();
 	}
 
+	/**
+	 * Sets the editor part factory for this page.
+	 * 
+	 * @param pageFactory the part factory
+	 */
 	public void setPageFactory(IServerEditorPartFactory pageFactory) {
 		this.pageFactory = pageFactory;
 	}
 
-	/*
-	 * @see IEditorPart#doSave(IProgressMonitor)
+	/**
+	 * @see org.eclipse.ui.IEditorPart#doSave(IProgressMonitor)
 	 */
 	public void doSave(IProgressMonitor monitor) {
 		// do nothing
 	}
 
-	/*
-	 * @see IEditorPart#doSaveAs()
+	/**
+	 * @see org.eclipse.ui.IEditorPart#doSaveAs()
 	 */
 	public void doSaveAs() {
 		// do nothing
 	}
 
-	/*
-	 * @see IEditorPart#gotoMarker(IMarker)
-	 */
-	public void gotoMarker(IMarker marker) {
-		// do nothing
-	}
-
-	/*
-	 * @see IEditorPart#isDirty()
+	/**
+	 * @see org.eclipse.ui.IEditorPart#isDirty()
 	 */
 	public boolean isDirty() {
 		return false;
 	}
 
-	/*
-	 * @see IEditorPart#isSaveAsAllowed()
+	/**
+	 * @see org.eclipse.ui.IEditorPart#isSaveAsAllowed()
 	 */
 	public boolean isSaveAsAllowed() {
 		return false;
@@ -107,7 +110,10 @@
 		errorMessage = error;
 		super.firePropertyChange(PROP_ERROR);
 	}
-	
+
+	/**
+	 * Updates the error message shown in the editor.
+	 */
 	public void updateErrorMessage() {
 		super.firePropertyChange(PROP_ERROR);
 	}
@@ -210,6 +216,9 @@
 		return list;
 	}
 
+	/**
+	 * @see org.eclipse.ui.IEditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
+	 */
 	public void init(IEditorSite site, IEditorInput input) {
 		setSite(site);
 		setInput(input);
@@ -236,6 +245,12 @@
 		return server;
 	}
 
+	/**
+	 * Inserts editor sections into the given composite.
+	 * 
+	 * @param parent the composite to add the section(s) to
+	 * @param id the section insertion id
+	 */
 	public void insertSections(Composite parent, String id) {
 		if (id == null)
 			return;
@@ -247,6 +262,9 @@
 		}
 	}
 	
+	/**
+	 * Dispose of the editor.
+	 */
 	public void dispose() {
 		super.dispose();
 
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorSection.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorSection.java
index 5bb025d..b5ca02c 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorSection.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/editor/ServerEditorSection.java
@@ -26,13 +26,21 @@
 public abstract class ServerEditorSection implements IServerEditorSection {
 	private String errorMessage = null;
 
+	/**
+	 * The server working copy.
+	 */
 	public IServerWorkingCopy server;
+
+	/**
+	 * The command manager.
+	 */
 	public ICommandManager commandManager;
+
 	protected boolean readOnly;
 	protected Composite parentComp;
 	protected ServerEditorPart editor;
 
-	/* (non-Javadoc)
+	/**
 	 * @see org.eclipse.wst.server.ui.editor.IServerEditorSection#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
 	 */
 	public void init(IEditorSite site, IEditorInput input) {
@@ -44,18 +52,28 @@
 		}
 	}
 
+	/**
+	 * Create the section.
+	 * 
+	 * @param parent the parent composite
+	 */
 	public void createSection(Composite parent) {
 		this.parentComp = parent;
 	}
 
+	/**
+	 * Return the shell of the section.
+	 * 
+	 * @return the shell
+	 */
 	public Shell getShell() {
 		return parentComp.getShell();
 	}
-	
+
 	/**
 	 * Return the error message for this page.
 	 * 
-	 * @return java.lang.String
+	 * @return the error message
 	 */
 	public String getErrorMessage() {
 		return errorMessage;
@@ -72,6 +90,11 @@
 		return null;
 	}
 
+	/**
+	 * Set the editor part that this section belongs to.
+	 * 
+	 * @param editor the editor
+	 */
 	public void setServerResourceEditorPart(ServerEditorPart editor) {
 		this.editor = editor;
 	}
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/IWizardHandle.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/IWizardHandle.java
index e3fdc69..5d48ad2 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/IWizardHandle.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/IWizardHandle.java
@@ -21,6 +21,9 @@
  * @since 1.0
  */
 public interface IWizardHandle extends IMessageProvider {
+	/**
+	 * Updates the wizard error messages and buttons.
+	 */
 	public void update();
 
 	/**
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/TaskWizard.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/TaskWizard.java
index 1d029f2..02d1b65 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/TaskWizard.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/wizard/TaskWizard.java
@@ -67,8 +67,6 @@
 	
 	private WizardFragment rootFragment;
 	private WizardFragment currentFragment;
-	
-	//private static TaskWizard current;
 
 	class FragmentData {
 		public TaskWizardPage page;
@@ -94,8 +92,6 @@
 		
 		setNeedsProgressMonitor(true);
 		setForcePreviousAndNextButtons(true);
-		
-		//current = this;
 	}
 
 	/**
