diff --git a/bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/DefaultOperationHistory.java b/bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/DefaultOperationHistory.java
index 8dcce3b..a19b10b 100644
--- a/bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/DefaultOperationHistory.java
+++ b/bundles/org.eclipse.core.commands/src/org/eclipse/core/commands/operations/DefaultOperationHistory.java
@@ -1221,10 +1221,8 @@
 				if (addToHistory) {
 					add(endedComposite);
 				}
-			} else {
-				if (mode == EXECUTE) {
-					notifyNotOK(endedComposite);
-				}
+			} else if (mode == EXECUTE) {
+				notifyNotOK(endedComposite);
 			}
 		}
 	}
diff --git a/bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/set/ListToSetAdapter.java b/bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/set/ListToSetAdapter.java
index 10e8b45..8bdd74e 100644
--- a/bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/set/ListToSetAdapter.java
+++ b/bundles/org.eclipse.core.databinding.observable/src/org/eclipse/core/databinding/observable/set/ListToSetAdapter.java
@@ -54,11 +54,9 @@
 					if (!removed.remove(element))
 						added.add(element);
 				}
-			} else {
-				if (wrappedSet.remove(element)) {
-					removed.add(element);
-					added.remove(element);
-				}
+			} else if (wrappedSet.remove(element)) {
+				removed.add(element);
+				added.remove(element);
 			}
 		}
 		fireSetChange(Diffs.createSetDiff(added, removed));
diff --git a/bundles/org.eclipse.e4.emf.xpath/src/org/eclipse/e4/emf/internal/xpath/CollectionPointer.java b/bundles/org.eclipse.e4.emf.xpath/src/org/eclipse/e4/emf/internal/xpath/CollectionPointer.java
index e1e61b1..ee25fe0 100644
--- a/bundles/org.eclipse.e4.emf.xpath/src/org/eclipse/e4/emf/internal/xpath/CollectionPointer.java
+++ b/bundles/org.eclipse.e4.emf.xpath/src/org/eclipse/e4/emf/internal/xpath/CollectionPointer.java
@@ -257,14 +257,11 @@
 				}
 				buffer.append("[").append(index + 1).append(']');
 			}
+		} else if (index != WHOLE_COLLECTION) {
+			buffer.append("/.[").append(index + 1).append(']');
 		}
 		else {
-			if (index != WHOLE_COLLECTION) {
-				buffer.append("/.[").append(index + 1).append(']');
-			}
-			else {
-				buffer.append("/");
-			}
+			buffer.append("/");
 		}
 		return buffer.toString();
 	}
diff --git a/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/keys/KeyBindingDispatcher.java b/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/keys/KeyBindingDispatcher.java
index 79c138e..a7dae34 100644
--- a/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/keys/KeyBindingDispatcher.java
+++ b/bundles/org.eclipse.e4.ui.bindings/src/org/eclipse/e4/ui/bindings/keys/KeyBindingDispatcher.java
@@ -315,30 +315,28 @@
 								"Execution exception for: " + parameterizedCommand + " in " //$NON-NLS-1$//$NON-NLS-2$
 										+ describe(context));
 					}
-				} else {
-					if (isTracingEnabled()) {
-						logger.trace((Throwable) commandException,
-								"Command exception for: " + parameterizedCommand + " in " //$NON-NLS-1$ //$NON-NLS-2$
-										+ describe(context));
-						if (handlerService instanceof HandlerServiceImpl) {
-							HandlerServiceImpl serviceImpl = (HandlerServiceImpl) handlerService;
-							IEclipseContext serviceContext = serviceImpl.getContext();
-							if (serviceContext != null) {
-								StringBuilder sb = new StringBuilder("\n\tExecution context: "); //$NON-NLS-1$
-								sb.append(describe(serviceContext));
-								sb.append("\n\tHandler: "); //$NON-NLS-1$
-								sb.append(obj);
-								logger.trace(sb.toString());
-							}
+				} else if (isTracingEnabled()) {
+					logger.trace((Throwable) commandException,
+							"Command exception for: " + parameterizedCommand + " in " //$NON-NLS-1$ //$NON-NLS-2$
+									+ describe(context));
+					if (handlerService instanceof HandlerServiceImpl) {
+						HandlerServiceImpl serviceImpl = (HandlerServiceImpl) handlerService;
+						IEclipseContext serviceContext = serviceImpl.getContext();
+						if (serviceContext != null) {
+							StringBuilder sb = new StringBuilder("\n\tExecution context: "); //$NON-NLS-1$
+							sb.append(describe(serviceContext));
+							sb.append("\n\tHandler: "); //$NON-NLS-1$
+							sb.append(obj);
+							logger.trace(sb.toString());
 						}
-						ContextManager contextManager = context.get(ContextManager.class);
-						if (contextManager != null) {
-							Set<?> activeContextIds = contextManager.getActiveContextIds();
-							if (activeContextIds != null && !activeContextIds.isEmpty()) {
-								StringBuilder sb = new StringBuilder("\n\tAll active contexts: "); //$NON-NLS-1$
-								sb.append(activeContextIds);
-								logger.trace(sb.toString());
-							}
+					}
+					ContextManager contextManager = context.get(ContextManager.class);
+					if (contextManager != null) {
+						Set<?> activeContextIds = contextManager.getActiveContextIds();
+						if (activeContextIds != null && !activeContextIds.isEmpty()) {
+							StringBuilder sb = new StringBuilder("\n\tAll active contexts: "); //$NON-NLS-1$
+							sb.append(activeContextIds);
+							logger.trace(sb.toString());
 						}
 					}
 				}
@@ -426,11 +424,9 @@
 					}
 				}
 
-			} else {
-				if (!outOfOrderListener.isActive(event.time)) {
-					widget.addListener(SWT.KeyDown, outOfOrderListener);
-					outOfOrderListener.setActive(event.time);
-				}
+			} else if (!outOfOrderListener.isActive(event.time)) {
+				widget.addListener(SWT.KeyDown, outOfOrderListener);
+				outOfOrderListener.setActive(event.time);
 			}
 
 			/*
@@ -611,11 +607,9 @@
 						if (isTracingEnabled()) {
 							logger.trace("Error matches for key: " + sequenceAfterKeyStroke + ", :" + errorMatches); //$NON-NLS-1$//$NON-NLS-2$
 						}
-					} else {
-						if (isTracingEnabled() && !Character.isLetterOrDigit(event.character)) {
-							logger.trace("No binding for keys: " + sequenceBeforeKeyStroke + " " //$NON-NLS-1$//$NON-NLS-2$
-									+ sequenceAfterKeyStroke + " in " + describe(context)); //$NON-NLS-1$
-						}
+					} else if (isTracingEnabled() && !Character.isLetterOrDigit(event.character)) {
+						logger.trace("No binding for keys: " + sequenceBeforeKeyStroke + " " //$NON-NLS-1$//$NON-NLS-2$
+								+ sequenceAfterKeyStroke + " in " + describe(context)); //$NON-NLS-1$
 					}
 				}
 			}
diff --git a/bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/css2/CSS2FontPropertiesHelpers.java b/bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/css2/CSS2FontPropertiesHelpers.java
index 5d0a718..1cd6153 100644
--- a/bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/css2/CSS2FontPropertiesHelpers.java
+++ b/bundles/org.eclipse.e4.ui.css.core/src/org/eclipse/e4/ui/css/core/css2/CSS2FontPropertiesHelpers.java
@@ -119,11 +119,9 @@
 				CSSValue value2 = valueList.item(i);
 				updateCSSPropertyFontComposite(font, value2);
 			}
-		} else {
-			if (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
-				String property = CSS2FontHelper.getCSSFontPropertyName((CSSPrimitiveValue) value);
-				updateCSSPropertyFont(font, property, value);
-			}
+		} else if (value.getCssValueType() == CSSValue.CSS_PRIMITIVE_VALUE) {
+			String property = CSS2FontHelper.getCSSFontPropertyName((CSSPrimitiveValue) value);
+			updateCSSPropertyFont(font, property, value);
 		}
 	}
 
