diff --git a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java
index 5524d61..3bc4697 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/cocoa/org/eclipse/swt/accessibility/Accessible.java
@@ -2780,8 +2780,10 @@
 	public void removeAccessibleListener(AccessibleListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleListeners != null) accessibleListeners.removeElement(listener);
-		if (accessibleListeners.isEmpty()) accessibleListeners = null;
+		if (accessibleListeners != null) {
+			accessibleListeners.removeElement(listener);
+			if (accessibleListeners.isEmpty()) accessibleListeners = null;
+		}
 	}
 
 	/**
@@ -2806,8 +2808,10 @@
 	public void removeAccessibleControlListener(AccessibleControlListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleControlListeners != null) accessibleControlListeners.removeElement(listener);
-		if (accessibleControlListeners.isEmpty()) accessibleControlListeners = null;
+		if (accessibleControlListeners != null) {
+			accessibleControlListeners.removeElement(listener);
+			if (accessibleControlListeners.isEmpty()) accessibleControlListeners = null;
+		}
 	}
 
 	/**
@@ -2836,11 +2840,15 @@
 		checkWidget ();
 		if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
 		if (listener instanceof AccessibleTextExtendedListener) {
-			if (accessibleTextExtendedListeners != null) accessibleTextExtendedListeners.removeElement(listener);
-			if (accessibleTextExtendedListeners.isEmpty()) accessibleTextExtendedListeners = null;
+			if (accessibleTextExtendedListeners != null) {
+				accessibleTextExtendedListeners.removeElement(listener);
+				if (accessibleTextExtendedListeners.isEmpty()) accessibleTextExtendedListeners = null;
+			}
 		} else {
-			if (accessibleTextListeners != null) accessibleTextListeners.removeElement(listener);
-			if (accessibleTextListeners.isEmpty()) accessibleTextListeners = null;
+			if (accessibleTextListeners != null) {
+				accessibleTextListeners.removeElement(listener);
+				if (accessibleTextListeners.isEmpty()) accessibleTextListeners = null;
+			}
 		}
 	}
 
@@ -2868,8 +2876,10 @@
 	public void removeAccessibleActionListener(AccessibleActionListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleActionListeners != null) accessibleActionListeners.removeElement(listener);
-		if (accessibleActionListeners.isEmpty()) accessibleActionListeners = null;
+		if (accessibleActionListeners != null) {
+			accessibleActionListeners.removeElement(listener);
+			if (accessibleActionListeners.isEmpty()) accessibleActionListeners = null;
+		}
 	}
 
 	/**
@@ -2896,8 +2906,10 @@
 	public void removeAccessibleEditableTextListener(AccessibleEditableTextListener listener) {
 	    checkWidget();
 	    if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleEditableTextListeners != null) accessibleEditableTextListeners.removeElement(listener);
-		if (accessibleEditableTextListeners.isEmpty()) accessibleEditableTextListeners = null;
+		if (accessibleEditableTextListeners != null) {
+			accessibleEditableTextListeners.removeElement(listener);
+			if (accessibleEditableTextListeners.isEmpty()) accessibleEditableTextListeners = null;
+		}
 	}
 	
 	/**
@@ -2924,8 +2936,10 @@
 	public void removeAccessibleHyperlinkListener(AccessibleHyperlinkListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleHyperlinkListeners != null) accessibleHyperlinkListeners.removeElement(listener);
-		if (accessibleHyperlinkListeners.isEmpty()) accessibleHyperlinkListeners = null;
+		if (accessibleHyperlinkListeners != null) {
+			accessibleHyperlinkListeners.removeElement(listener);
+			if (accessibleHyperlinkListeners.isEmpty()) accessibleHyperlinkListeners = null;
+		}
 	}
 
 	/**
@@ -2952,8 +2966,10 @@
 	public void removeAccessibleTableListener(AccessibleTableListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleTableListeners != null) accessibleTableListeners.removeElement(listener);
-		if (accessibleTableListeners.isEmpty()) accessibleTableListeners = null;
+		if (accessibleTableListeners != null) {
+			accessibleTableListeners.removeElement(listener);
+			if (accessibleTableListeners.isEmpty()) accessibleTableListeners = null;
+		}
 	}
 
 	/**
@@ -2980,8 +2996,10 @@
 	public void removeAccessibleTableCellListener(AccessibleTableCellListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleTableCellListeners != null) accessibleTableCellListeners.removeElement(listener);
-		if (accessibleTableCellListeners.isEmpty()) accessibleTableCellListeners = null;
+		if (accessibleTableCellListeners != null) {
+			accessibleTableCellListeners.removeElement(listener);
+			if (accessibleTableCellListeners.isEmpty()) accessibleTableCellListeners = null;
+		}
 	}
 
 	/**
@@ -3008,8 +3026,10 @@
 	public void removeAccessibleValueListener(AccessibleValueListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleValueListeners != null) accessibleValueListeners.removeElement(listener);
-		if (accessibleValueListeners.isEmpty()) accessibleValueListeners = null;
+		if (accessibleValueListeners != null) {
+			accessibleValueListeners.removeElement(listener);
+			if (accessibleValueListeners.isEmpty()) accessibleValueListeners = null;
+		}
 	}
 
 	/**
@@ -3036,8 +3056,10 @@
 	public void removeAccessibleAttributeListener(AccessibleAttributeListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleAttributeListeners != null) accessibleAttributeListeners.removeElement(listener);
-		if (accessibleAttributeListeners.isEmpty()) accessibleAttributeListeners = null;
+		if (accessibleAttributeListeners != null) {
+			accessibleAttributeListeners.removeElement(listener);
+			if (accessibleAttributeListeners.isEmpty()) accessibleAttributeListeners = null;
+		}
 	}
 
 	/**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/Accessible.java b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/Accessible.java
index 475e7db..f594351 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/Accessible.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/gtk/org/eclipse/swt/accessibility/Accessible.java
@@ -567,8 +567,10 @@
 	public void removeAccessibleControlListener (AccessibleControlListener listener) {
 		checkWidget ();
 		if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleControlListeners != null) accessibleControlListeners.removeElement(listener);
-		if (accessibleControlListeners.isEmpty()) accessibleControlListeners = null;
+		if (accessibleControlListeners != null) {
+			accessibleControlListeners.removeElement(listener);
+			if (accessibleControlListeners.isEmpty()) accessibleControlListeners = null;
+		}
 	}
 
 	/**
@@ -593,8 +595,10 @@
 	public void removeAccessibleListener (AccessibleListener listener) {
 		checkWidget ();
 		if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleListeners != null) accessibleListeners.removeElement(listener);
-		if (accessibleListeners.isEmpty()) accessibleListeners = null;
+		if (accessibleListeners != null) {
+			accessibleListeners.removeElement(listener);
+			if (accessibleListeners.isEmpty()) accessibleListeners = null;
+		}
 	}
 
 	/**
@@ -623,11 +627,15 @@
 		checkWidget ();
 		if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
 		if (listener instanceof AccessibleTextExtendedListener) {
-			if (accessibleTextExtendedListeners != null) accessibleTextExtendedListeners.removeElement (listener);
-			if (accessibleTextExtendedListeners.isEmpty()) accessibleTextExtendedListeners = null;
+			if (accessibleTextExtendedListeners != null) {
+				accessibleTextExtendedListeners.removeElement (listener);
+				if (accessibleTextExtendedListeners.isEmpty()) accessibleTextExtendedListeners = null;
+			}
 		} else {
-			if (accessibleTextListeners != null) accessibleTextListeners.removeElement (listener);
-			if (accessibleTextListeners.isEmpty()) accessibleTextListeners = null;
+			if (accessibleTextListeners != null) {
+				accessibleTextListeners.removeElement (listener);
+				if (accessibleTextListeners.isEmpty()) accessibleTextListeners = null;
+			}
 		}
 	}
 	
@@ -655,8 +663,10 @@
 	public void removeAccessibleActionListener(AccessibleActionListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleActionListeners != null) accessibleActionListeners.removeElement(listener);
-		if (accessibleActionListeners.isEmpty()) accessibleActionListeners = null;
+		if (accessibleActionListeners != null) {
+			accessibleActionListeners.removeElement(listener);
+			if (accessibleActionListeners.isEmpty()) accessibleActionListeners = null;
+		}
 	}
 
 	/**
@@ -683,8 +693,10 @@
 	public void removeAccessibleEditableTextListener(AccessibleEditableTextListener listener) {
 	    checkWidget();
 	    if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-	    if (accessibleEditableTextListeners != null) accessibleEditableTextListeners.removeElement(listener);
-		if (accessibleEditableTextListeners.isEmpty()) accessibleEditableTextListeners = null;
+	    if (accessibleEditableTextListeners != null) {
+	    	accessibleEditableTextListeners.removeElement(listener);
+			if (accessibleEditableTextListeners.isEmpty()) accessibleEditableTextListeners = null;
+	    }
 	}
 	
 	/**
@@ -711,8 +723,10 @@
 	public void removeAccessibleHyperlinkListener(AccessibleHyperlinkListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleHyperlinkListeners != null) accessibleHyperlinkListeners.removeElement(listener);
-		if (accessibleHyperlinkListeners.isEmpty()) accessibleHyperlinkListeners = null;
+		if (accessibleHyperlinkListeners != null) {
+			accessibleHyperlinkListeners.removeElement(listener);
+			if (accessibleHyperlinkListeners.isEmpty()) accessibleHyperlinkListeners = null;
+		}
 	}
 
 	/**
@@ -739,8 +753,10 @@
 	public void removeAccessibleTableListener(AccessibleTableListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleTableListeners != null) accessibleTableListeners.removeElement(listener);
-		if (accessibleTableListeners.isEmpty()) accessibleTableListeners = null;
+		if (accessibleTableListeners != null) {
+			accessibleTableListeners.removeElement(listener);
+			if (accessibleTableListeners.isEmpty()) accessibleTableListeners = null;
+		}
 	}
 
 	/**
@@ -767,8 +783,10 @@
 	public void removeAccessibleTableCellListener(AccessibleTableCellListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleTableCellListeners != null) accessibleTableCellListeners.removeElement(listener);
-		if (accessibleTableCellListeners.isEmpty()) accessibleTableCellListeners = null;
+		if (accessibleTableCellListeners != null) {
+			accessibleTableCellListeners.removeElement(listener);
+			if (accessibleTableCellListeners.isEmpty()) accessibleTableCellListeners = null;
+		}
 	}
 
 	/**
@@ -795,8 +813,10 @@
 	public void removeAccessibleValueListener(AccessibleValueListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleValueListeners != null) accessibleValueListeners.removeElement(listener);
-		if (accessibleValueListeners.isEmpty()) accessibleValueListeners = null;
+		if (accessibleValueListeners != null) {
+			accessibleValueListeners.removeElement(listener);
+			if (accessibleValueListeners.isEmpty()) accessibleValueListeners = null;
+		}
 	}
 
 	/**
@@ -823,8 +843,10 @@
 	public void removeAccessibleAttributeListener(AccessibleAttributeListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleAttributeListeners != null) accessibleAttributeListeners.removeElement(listener);
-		if (accessibleAttributeListeners.isEmpty()) accessibleAttributeListeners = null;
+		if (accessibleAttributeListeners != null) {
+			accessibleAttributeListeners.removeElement(listener);
+			if (accessibleAttributeListeners.isEmpty()) accessibleAttributeListeners = null;
+		}
 	}
 
 	/**
diff --git a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java
index 4df42f2..7b047b0 100644
--- a/bundles/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java
+++ b/bundles/org.eclipse.swt/Eclipse SWT Accessibility/win32/org/eclipse/swt/accessibility/Accessible.java
@@ -941,8 +941,10 @@
 	public void removeAccessibleListener(AccessibleListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleListeners != null) accessibleListeners.removeElement(listener);
-		if (accessibleListeners.isEmpty()) accessibleListeners = null;
+		if (accessibleListeners != null) {
+			accessibleListeners.removeElement(listener);
+			if (accessibleListeners.isEmpty()) accessibleListeners = null;
+		}
 	}
 
 	/**
@@ -967,8 +969,10 @@
 	public void removeAccessibleControlListener(AccessibleControlListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleControlListeners != null) accessibleControlListeners.removeElement(listener);
-		if (accessibleControlListeners.isEmpty()) accessibleControlListeners = null;
+		if (accessibleControlListeners != null) {
+			accessibleControlListeners.removeElement(listener);
+			if (accessibleControlListeners.isEmpty()) accessibleControlListeners = null;
+		}
 	}
 
 	/**
@@ -997,11 +1001,15 @@
 		checkWidget ();
 		if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT);
 		if (listener instanceof AccessibleTextExtendedListener) {
-			if (accessibleTextExtendedListeners != null) accessibleTextExtendedListeners.removeElement (listener);
-			if (accessibleTextExtendedListeners.isEmpty()) accessibleTextExtendedListeners = null;
+			if (accessibleTextExtendedListeners != null) {
+				accessibleTextExtendedListeners.removeElement (listener);
+				if (accessibleTextExtendedListeners.isEmpty()) accessibleTextExtendedListeners = null;
+			}
 		} else {
-			if (accessibleTextListeners != null) accessibleTextListeners.removeElement (listener);
-			if (accessibleTextListeners.isEmpty()) accessibleTextListeners = null;
+			if (accessibleTextListeners != null) {
+				accessibleTextListeners.removeElement (listener);
+				if (accessibleTextListeners.isEmpty()) accessibleTextListeners = null;
+			}
 		}
 	}
 
@@ -1029,8 +1037,10 @@
 	public void removeAccessibleActionListener(AccessibleActionListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleActionListeners != null) accessibleActionListeners.removeElement(listener);
-		if (accessibleActionListeners.isEmpty()) accessibleActionListeners = null;
+		if (accessibleActionListeners != null) {
+			accessibleActionListeners.removeElement(listener);
+			if (accessibleActionListeners.isEmpty()) accessibleActionListeners = null;
+		}
 	}
 
 	/**
@@ -1057,8 +1067,10 @@
 	public void removeAccessibleEditableTextListener(AccessibleEditableTextListener listener) {
 	    checkWidget();
 	    if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-	    if (accessibleEditableTextListeners != null) accessibleEditableTextListeners.removeElement(listener);
-		if (accessibleEditableTextListeners.isEmpty()) accessibleEditableTextListeners = null;
+	    if (accessibleEditableTextListeners != null) {
+	    	accessibleEditableTextListeners.removeElement(listener);
+	    	if (accessibleEditableTextListeners.isEmpty()) accessibleEditableTextListeners = null;
+	    }
 	}
 	
 	/**
@@ -1085,8 +1097,10 @@
 	public void removeAccessibleHyperlinkListener(AccessibleHyperlinkListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleHyperlinkListeners != null) accessibleHyperlinkListeners.removeElement(listener);
-		if (accessibleHyperlinkListeners.isEmpty()) accessibleHyperlinkListeners = null;
+		if (accessibleHyperlinkListeners != null) {
+			accessibleHyperlinkListeners.removeElement(listener);
+			if (accessibleHyperlinkListeners.isEmpty()) accessibleHyperlinkListeners = null;
+		}
 	}
 
 	/**
@@ -1113,8 +1127,10 @@
 	public void removeAccessibleTableListener(AccessibleTableListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleTableListeners != null) accessibleTableListeners.removeElement(listener);
-		if (accessibleTableListeners.isEmpty()) accessibleTableListeners = null;
+		if (accessibleTableListeners != null) {
+			accessibleTableListeners.removeElement(listener);
+			if (accessibleTableListeners.isEmpty()) accessibleTableListeners = null;
+		}
 	}
 
 	/**
@@ -1141,8 +1157,10 @@
 	public void removeAccessibleTableCellListener(AccessibleTableCellListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleTableCellListeners != null) accessibleTableCellListeners.removeElement(listener);
-		if (accessibleTableCellListeners.isEmpty()) accessibleTableCellListeners = null;
+		if (accessibleTableCellListeners != null) {
+			accessibleTableCellListeners.removeElement(listener);
+			if (accessibleTableCellListeners.isEmpty()) accessibleTableCellListeners = null;
+		}
 	}
 
 	/**
@@ -1169,8 +1187,10 @@
 	public void removeAccessibleValueListener(AccessibleValueListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleValueListeners != null) accessibleValueListeners.removeElement(listener);
-		if (accessibleValueListeners.isEmpty()) accessibleValueListeners = null;
+		if (accessibleValueListeners != null) {
+			accessibleValueListeners.removeElement(listener);
+			if (accessibleValueListeners.isEmpty()) accessibleValueListeners = null;
+		}
 	}
 
 	/**
@@ -1197,8 +1217,10 @@
 	public void removeAccessibleAttributeListener(AccessibleAttributeListener listener) {
 		checkWidget();
 		if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT);
-		if (accessibleAttributeListeners != null) accessibleAttributeListeners.removeElement(listener);
-		if (accessibleAttributeListeners.isEmpty()) accessibleAttributeListeners = null;
+		if (accessibleAttributeListeners != null) {
+			accessibleAttributeListeners.removeElement(listener);
+			if (accessibleAttributeListeners.isEmpty()) accessibleAttributeListeners = null;
+		}
 	}
 
 	/**
