diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java
index b9ef1e6..63d9676 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/CTabFolder.java
@@ -136,12 +136,12 @@
 	 * <p>
 	 * If there is not enough place for all tabs, tabs starting from the end of
 	 * the {@link #priority} array will be hidden first (independently from the
-	 * {@link #mru} flag!) => the right most elements have the highest priority
+	 * {@link #mru} flag!) =&gt; the right most elements have the highest priority
 	 * to be hidden.
 	 * <p>
 	 * If there is more place to show previously hidden tabs, tabs starting from
 	 * the beginning of the {@link #priority} array will be made visible first
-	 * (independently from the {@link #mru} flag!) => the left most elements
+	 * (independently from the {@link #mru} flag!) =&gt; the left most elements
 	 * have the highest priority to be shown.
 	 * <p>
 	 * The update strategy of the {@link #priority} array however depends on the
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/DefaultContent.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/DefaultContent.java
index ada84d7..bd3d013 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/DefaultContent.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/DefaultContent.java
@@ -37,7 +37,7 @@
 	int replaceExpandExp = 1; 	// the expansion exponent, used to increase the lines array exponentially
 
 /**
- * Creates a new DefaultContent and initializes it.  A <code>StyledTextContent</> will always have
+ * Creates a new DefaultContent and initializes it.  A <code>StyledTextContent</code> will always have
  * at least one empty line.
  */
 DefaultContent() {
@@ -759,12 +759,12 @@
  * lines that are going to be inserted and <code>replaceLineCount</code> is
  * the number of lines that are going to be deleted, based on the change
  * that occurs visually.  For example:
- * <ul>
- * <li>(replaceText,newText) ==> (replaceLineCount,newLineCount)
- * <li>("","\n") ==> (0,1)
- * <li>("\n\n","a") ==> (2,0)
- * </ul>
  * </p>
+ * <ul>
+ * <li>(replaceText,newText) ==&gt; (replaceLineCount,newLineCount)
+ * <li>("","\n") ==&gt; (0,1)
+ * <li>("\n\n","a") ==&gt; (2,0)
+ * </ul>
  *
  * @param start	start offset of text to replace
  * @param replaceLength start offset of text to replace
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MouseNavigator.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MouseNavigator.java
index 1857d0f..764ae80 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MouseNavigator.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/MouseNavigator.java
@@ -18,9 +18,11 @@
 import org.eclipse.swt.widgets.*;
 
 /**
- * This class add the following behaviour to <code>StyledText</code> widgets:<br/>
+ * This class add the following behaviour to <code>StyledText</code> widgets:
+ * <p>
  * When the user clicks on the wheel, a circle with arrows appears. When the user moves the mouse,
- * the StyledText content is scrolled (on the right or on the left for horizontal movements, up or down for vertical movements).<br/>
+ * the StyledText content is scrolled (on the right or on the left for horizontal movements, up or down for vertical movements).
+ * </p>
  *
  * @since 3.110
  */
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
index 71deecf..61453a5 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Custom Widgets/common/org/eclipse/swt/custom/StyledText.java
@@ -232,7 +232,7 @@
 	 * Creates an instance of <code>Printing</code>.
 	 * Copies the widget content and rendering data that needs
 	 * to be requested from listeners.
-	 * </p>
+	 *
 	 * @param parent StyledText widget to print.
 	 * @param printer printer device to print on.
 	 * @param printOptions print options
@@ -263,7 +263,7 @@
 	}
 	/**
 	 * Caches all line data that needs to be requested from a listener.
-	 * </p>
+	 *
 	 * @param printerContent <code>StyledTextContent</code> to request
 	 * 	line data for.
 	 */
@@ -378,7 +378,7 @@
 	}
 	/**
 	 * Copies the text of the specified <code>StyledTextContent</code>.
-	 * </p>
+	 *
 	 * @param original the <code>StyledTextContent</code> to copy.
 	 */
 	StyledTextContent copyContent(StyledTextContent original) {
@@ -1039,7 +1039,7 @@
 	 * partial lines, specify the start and length of the desired segment
 	 * during object creation.
 	 * <p>
-	 * </b>NOTE:</b> <code>toString()</code> is guaranteed to return a valid string only after close()
+	 * <b>NOTE:</b> <code>toString()</code> is guaranteed to return a valid string only after close()
 	 * has been called.
 	 * </p>
 	 */
@@ -1113,7 +1113,7 @@
 	/**
 	 * Inserts the given string to the data at the specified offset.
 	 * <p>
-	 * Do nothing if "offset" is < 0 or > getCharCount()
+	 * Do nothing if "offset" is &lt; 0 or &gt; getCharCount()
 	 * </p>
 	 *
 	 * @param string text to insert
@@ -3350,7 +3350,7 @@
  * relative to the top line remains the same. The exception is the end
  * of the text where a full page scroll is not possible. In this case
  * the caret is moved after the last character.
- * <p></p>
+ * </p><p>
  * Adjusts the selection according to the caret change. This can either add
  * to or subtract from the old selection, depending on the previous selection
  * direction.
@@ -8144,8 +8144,8 @@
 /**
  * Scrolls the widget horizontally.
  *
- * @param pixels number of SWT logical points to scroll, > 0 = scroll left,
- * 	< 0 scroll right
+ * @param pixels number of SWT logical points to scroll, &gt; 0 = scroll left,
+ * 	&lt; 0 scroll right
  * @param adjustScrollBar
  * 	true= the scroll thumb will be moved to reflect the new scroll offset.
  * 	false = the scroll thumb will not be moved
@@ -8855,7 +8855,7 @@
  * @param start start index of the text
  * @param length length of text to place in clipboard
  *
- * @exception SWTError, see Clipboard.setContents
+ * @exception SWTError
  * @see org.eclipse.swt.dnd.Clipboard#setContents
  */
 void setClipboardContent(int start, int length, int clipboardType) throws SWTError {
@@ -10008,9 +10008,9 @@
  * the selection into view.
  * </p>
  *
- * @param start offset of the first selected character, start >= 0 must be true.
- * @param length number of characters to select, 0 <= start + length
- * 	<= getCharCount() must be true.
+ * @param start offset of the first selected character, start &gt;= 0 must be true.
+ * @param length number of characters to select, 0 &lt;= start + length
+ * 	&lt;= getCharCount() must be true.
  * 	A negative length places the caret at the selection start.
  * @param sendEvent a Selection event is sent when set to true and when
  * 	the selection is reset.
@@ -10331,7 +10331,7 @@
  *
  * @param referenceRanges former ranges, sorted by order and without overlapping, typically returned {@link #getRanges(int, int)}
  * @param referenceStyles
- * @param newRanges former ranges, sorted by order and without overlappingz
+ * @param newRanges former ranges, sorted by order and without overlapping
  * @param newStyles
  * @return
  */
@@ -10503,7 +10503,7 @@
  *    <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
  * </ul>
  * @exception IllegalArgumentException <ul>
- *    <li>ERROR_INVALID_ARGUMENT - if a tab stop is negavite or less than the previous stop in the list</li>
+ *    <li>ERROR_INVALID_ARGUMENT - if a tab stop is negative or less than the previous stop in the list</li>
  * </ul>
  *
  * @see StyledText#getTabStops()
