diff --git a/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/SWTUtil.java b/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/SWTUtil.java
index d1f9756..99f2999 100644
--- a/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/SWTUtil.java
+++ b/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/SWTUtil.java
@@ -88,7 +88,7 @@
 	 * <b>Note:</b> This is a NOP if the button's layout data is not
 	 * an instance of <code>GridData</code>.
 	 *
-	 * @param	the button for which to set the dimension hint
+	 * @param button for which to set the dimension hint
 	 */
 	public static void setButtonDimensionHint(Button button) {
 		Dialog.applyDialogFont(button);
diff --git a/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSHyperlinkDetector.java b/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSHyperlinkDetector.java
index 9a0e680..7db2fa8 100644
--- a/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSHyperlinkDetector.java
+++ b/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/DSHyperlinkDetector.java
@@ -35,10 +35,6 @@
 
 public class DSHyperlinkDetector extends PDEHyperlinkDetector {
 
-	/**
-	 * @param editor
-	 *            the editor in which to detect the hyperlink
-	 */
 	public DSHyperlinkDetector(PDESourcePage page) {
 		super(page);
 	}
diff --git a/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/FormLayoutFactory.java b/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/FormLayoutFactory.java
index 5bafe4e..fa9cc58 100644
--- a/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/FormLayoutFactory.java
+++ b/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/FormLayoutFactory.java
@@ -17,10 +17,6 @@
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.forms.widgets.TableWrapLayout;
 
-/**
- * FormLayoutFactory
- *
- */
 public class FormLayoutFactory {
 
 	// Used in place of 0. If 0 is used, widget borders will appear clipped
@@ -96,19 +92,12 @@
 	public static final int MASTER_DETAILS_MARGIN_HEIGHT = 0;
 	public static final int MASTER_DETAILS_MARGIN_WIDTH = 0;
 
-	/**
-	 *
-	 */
 	private FormLayoutFactory() {
-		// NO-OP
+		// intentionally left empty
 	}
 
 	/**
 	 * For form bodies.
-	 *
-	 * @param makeColumnsEqualWidth
-	 * @param numColumns
-	 * @return
 	 */
 	public static GridLayout createFormGridLayout(
 			boolean makeColumnsEqualWidth, int numColumns) {
@@ -134,10 +123,6 @@
 	/**
 	 * For miscellaneous grouping composites. For sections (as a whole - header
 	 * plus client).
-	 *
-	 * @param makeColumnsEqualWidth
-	 * @param numColumns
-	 * @return
 	 */
 	public static GridLayout createClearGridLayout(
 			boolean makeColumnsEqualWidth, int numColumns) {
@@ -162,10 +147,6 @@
 
 	/**
 	 * For form bodies.
-	 *
-	 * @param makeColumnsEqualWidth
-	 * @param numColumns
-	 * @return
 	 */
 	public static TableWrapLayout createFormTableWrapLayout(
 			boolean makeColumnsEqualWidth, int numColumns) {
@@ -187,10 +168,6 @@
 
 	/**
 	 * For composites used to group sections in left and right panes.
-	 *
-	 * @param makeColumnsEqualWidth
-	 * @param numColumns
-	 * @return
 	 */
 	public static TableWrapLayout createFormPaneTableWrapLayout(
 			boolean makeColumnsEqualWidth, int numColumns) {
@@ -212,10 +189,6 @@
 
 	/**
 	 * For composites used to group sections in left and right panes.
-	 *
-	 * @param makeColumnsEqualWidth
-	 * @param numColumns
-	 * @return
 	 */
 	public static GridLayout createFormPaneGridLayout(
 			boolean makeColumnsEqualWidth, int numColumns) {
@@ -241,10 +214,6 @@
 	/**
 	 * For miscellaneous grouping composites. For sections (as a whole - header
 	 * plus client).
-	 *
-	 * @param makeColumnsEqualWidth
-	 * @param numColumns
-	 * @return
 	 */
 	public static TableWrapLayout createClearTableWrapLayout(
 			boolean makeColumnsEqualWidth, int numColumns) {
@@ -266,10 +235,6 @@
 
 	/**
 	 * For master sections belonging to a master details block.
-	 *
-	 * @param makeColumnsEqualWidth
-	 * @param numColumns
-	 * @return
 	 */
 	public static GridLayout createMasterGridLayout(
 			boolean makeColumnsEqualWidth, int numColumns) {
@@ -308,10 +273,6 @@
 
 	/**
 	 * For details sections belonging to a master details block.
-	 *
-	 * @param makeColumnsEqualWidth
-	 * @param numColumns
-	 * @return
 	 */
 	public static GridLayout createDetailsGridLayout(
 			boolean makeColumnsEqualWidth, int numColumns) {
@@ -350,10 +311,6 @@
 
 	/**
 	 * For composites set as section clients. For composites containg form text.
-	 *
-	 * @param makeColumnsEqualWidth
-	 * @param numColumns
-	 * @return
 	 */
 	public static GridLayout createSectionClientGridLayout(
 			boolean makeColumnsEqualWidth, int numColumns) {
@@ -378,10 +335,6 @@
 
 	/**
 	 * For composites set as section clients. For composites containg form text.
-	 *
-	 * @param makeColumnsEqualWidth
-	 * @param numColumns
-	 * @return
 	 */
 	public static TableWrapLayout createSectionClientTableWrapLayout(
 			boolean makeColumnsEqualWidth, int numColumns) {
@@ -405,9 +358,6 @@
 	 * Debug method.
 	 *
 	 * MAGENTA = 11 CYAN = 13 GREEN = 5
-	 *
-	 * @param container
-	 * @param color
 	 */
 	public static void visualizeLayoutArea(Composite container, int color) {
 		container.setBackground(Display.getCurrent().getSystemColor(color));
diff --git a/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/contentassist/TypeCompletionProposal.java b/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/contentassist/TypeCompletionProposal.java
index 59f7091..e071fe5 100644
--- a/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/contentassist/TypeCompletionProposal.java
+++ b/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/editor/contentassist/TypeCompletionProposal.java
@@ -96,9 +96,6 @@
 		return new Point(fBeginInsertPoint + fReplacementString.length(), 0);
 	}
 
-	/**
-	 * @return
-	 */
 	public String getReplacementString() {
 		return fReplacementString;
 	}
diff --git a/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/parts/FormEntry.java b/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/parts/FormEntry.java
index f8b9e37..610eb1e 100644
--- a/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/parts/FormEntry.java
+++ b/ds/org.eclipse.pde.ds.ui/src/org/eclipse/pde/internal/ds/ui/parts/FormEntry.java
@@ -264,8 +264,6 @@
 
 	/**
 	 * Returns the text control.
-	 *
-	 * @return
 	 */
 	public Text getText() {
 		return fText;
@@ -277,8 +275,6 @@
 
 	/**
 	 * Returns the browse button control.
-	 *
-	 * @return
 	 */
 	public Button getButton() {
 		return fBrowse;
@@ -287,8 +283,6 @@
 	/**
 	 * Returns the current entry value. If the entry is dirty and was not
 	 * commited, the value may be different from the text in the widget.
-	 *
-	 * @return
 	 */
 	public String getValue() {
 		return fValue.trim();
@@ -296,8 +290,6 @@
 
 	/**
 	 * Returns true if the text has been modified.
-	 *
-	 * @return
 	 */
 	public boolean isDirty() {
 		return fDirty;
@@ -321,8 +313,6 @@
 
 	/**
 	 * Sets the value of this entry.
-	 *
-	 * @param value
 	 */
 	public void setValue(String value) {
 		if (fText != null)
@@ -333,9 +323,6 @@
 	/**
 	 * Sets the value of this entry with the possibility to turn the
 	 * notification off.
-	 *
-	 * @param value
-	 * @param blockNotification
 	 */
 	public void setValue(String value, boolean blockNotification) {
 		fIgnoreModify = blockNotification;
@@ -356,8 +343,6 @@
 	 * If GridData was used, set the width hint. If TableWrapData was used
 	 * set the max width. If no layout data was specified, this method does
 	 * nothing.
-	 *
-	 * @param width
 	 */
 	public void setTextWidthHint(int width) {
 		Object data = getText().getLayoutData();
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/BundlePluginBase.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/BundlePluginBase.java
index 26cbd98..67d63a6 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/BundlePluginBase.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/bundle/BundlePluginBase.java
@@ -69,9 +69,6 @@
 		}
 	}
 
-	/**
-	 * @see org.eclipse.pde.internal.core.ibundle.IBundlePluginBase#getBundle()
-	 */
 	public IBundle getBundle() {
 		if (model != null) {
 			IBundleModel bmodel = model.getBundleModel();
diff --git a/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/ide/EditorTemplate.java b/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/ide/EditorTemplate.java
index 3d2d3a8..6cf6f84 100644
--- a/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/ide/EditorTemplate.java
+++ b/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/ide/EditorTemplate.java
@@ -98,9 +98,6 @@
 		return true;
 	}
 
-	/**
-	 * @see GenericTemplateSection#validateOptions(TemplateOption)
-	 */
 	@Override
 	public void validateOptions(TemplateOption source) {
 		if (source.isRequired() && source.isEmpty()) {
diff --git a/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/ide/HelpTemplate.java b/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/ide/HelpTemplate.java
index 271a640..919d965 100644
--- a/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/ide/HelpTemplate.java
+++ b/ui/org.eclipse.pde.ui.templates/src/org/eclipse/pde/internal/ui/templates/ide/HelpTemplate.java
@@ -11,19 +11,12 @@
 package org.eclipse.pde.internal.ui.templates.ide;
 
 import java.io.File;
-
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.pde.core.plugin.IPluginBase;
-import org.eclipse.pde.core.plugin.IPluginElement;
-import org.eclipse.pde.core.plugin.IPluginExtension;
-import org.eclipse.pde.core.plugin.IPluginModelFactory;
-import org.eclipse.pde.core.plugin.IPluginReference;
-import org.eclipse.pde.internal.ui.templates.IHelpContextIds;
-import org.eclipse.pde.internal.ui.templates.PDETemplateMessages;
-import org.eclipse.pde.internal.ui.templates.PDETemplateSection;
+import org.eclipse.pde.core.plugin.*;
+import org.eclipse.pde.internal.ui.templates.*;
 import org.eclipse.pde.ui.templates.BooleanOption;
 import org.eclipse.pde.ui.templates.TemplateOption;
 
@@ -90,9 +83,6 @@
 
 	}
 
-	/**
-	 * @see OptionTemplateSection#getSectionId()
-	 */
 	@Override
 	public String getSectionId() {
 		return "help"; //$NON-NLS-1$
@@ -116,9 +106,6 @@
 		return isOk;
 	}
 
-	/**
-	 * @see AbstractTemplateSection#isOkToCreateFile(File)
-	 */
 	@Override
 	protected boolean isOkToCreateFile(File sourceFile) {
 		boolean isOk = true;
@@ -142,9 +129,6 @@
 		return isOk;
 	}
 
-	/**
-	 * @see BaseOptionTemplateSection#validateOptions(TemplateOption)
-	 */
 	@Override
 	public void validateOptions(TemplateOption changed) {
 		if (changed == tocLabelOption) {
@@ -158,9 +142,6 @@
 		}
 	}
 
-	/**
-	 * @see AbstractTemplateSection#updateModel(IProgressMonitor)
-	 */
 	@Override
 	protected void updateModel(IProgressMonitor monitor) throws CoreException {
 		IPluginBase plugin = model.getPluginBase();
@@ -200,9 +181,6 @@
 		}
 	}
 
-	/**
-	 * @see ITemplateSection#getUsedExtensionPoint()
-	 */
 	@Override
 	public String getUsedExtensionPoint() {
 		return "org.eclipse.help.toc"; //$NON-NLS-1$
diff --git a/ui/org.eclipse.ui.trace/src/org/eclipse/ui/trace/internal/TracingPreferencePage.java b/ui/org.eclipse.ui.trace/src/org/eclipse/ui/trace/internal/TracingPreferencePage.java
index 60f6972..babc396 100644
--- a/ui/org.eclipse.ui.trace/src/org/eclipse/ui/trace/internal/TracingPreferencePage.java
+++ b/ui/org.eclipse.ui.trace/src/org/eclipse/ui/trace/internal/TracingPreferencePage.java
@@ -456,9 +456,6 @@
 
 	/**
 	 * Retrieve the input
-	 *
-	 * @param ev
-	 * @return input
 	 */
 	protected String getInput(Event ev) {
 		String input = null;
@@ -476,10 +473,7 @@
 	/**
 	 * Verify that the user input is a valid int field
 	 *
-	 * @param input
-	 *            The user supplied input
-	 * @param errorMessage
-	 *            The error message to display if the input is not a valid int field
+	 * @param errorMessage to display if the input is not a valid int field
 	 */
 	protected void verifyIntInput(Event ev, String errorMessage) {
 		String input = getInput(ev);
diff --git a/ui/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogReader.java b/ui/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogReader.java
index 887fc04..a9277eb 100644
--- a/ui/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogReader.java
+++ b/ui/org.eclipse.ui.views.log/src/org/eclipse/ui/internal/views/log/LogReader.java
@@ -191,8 +191,7 @@
 	}
 
 	/**
-	 * Updates the {@link currentSession} to be the one that is not null or has most recent date.
-	 * @param session
+	 * Updates the currentSession to be the one that is not null or has most recent date.
 	 */
 	private static LogSession updateCurrentSession(LogSession currentSession, LogSession session) {
 		if (currentSession == null) {
@@ -212,10 +211,6 @@
 
 	/**
 	 * Adds entry to the list if it's not filtered. Removes entries exceeding the count limit.
-	 *
-	 * @param entry
-	 * @param entries
-	 * @param memento
 	 */
 	private static void addEntry(LogEntry entry, List entries, IMemento memento) {
 
@@ -233,9 +228,6 @@
 
 	/**
 	 * Returns whether given entry is logged (true) or filtered (false).
-	 *
-	 * @param entry
-	 * @param memento
 	 * @return is entry logged or filtered
 	 */
 	public static boolean isLogged(LogEntry entry, IMemento memento) {
