diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/display/DisplayView.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/display/DisplayView.java
index 8271aa0..c31ef00 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/display/DisplayView.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/display/DisplayView.java
@@ -291,8 +291,8 @@
 			
 		};
 
-        IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
-        fHandlerActivation = handlerService.activateHandler(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS, handler);
+		IHandlerService handlerService = getSite().getService(IHandlerService.class);
+		fHandlerActivation = handlerService.activateHandler(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS, handler);
 	}
 	
 	/**
@@ -329,8 +329,9 @@
 	 */
 	private IUndoContext getUndoContext() {
 		IUndoManager undoManager= fSourceViewer.getUndoManager();
-		if (undoManager instanceof IUndoManagerExtension)
+		if (undoManager instanceof IUndoManagerExtension) {
 			return ((IUndoManagerExtension)undoManager).getUndoContext();
+		}
 		return null;
 	}
 
@@ -484,8 +485,9 @@
 	
 	protected void updateSelectionDependentActions() {
 		Iterator<String> iterator= fSelectionActions.iterator();
-		while (iterator.hasNext())
+		while (iterator.hasNext()) {
 			updateAction(iterator.next());
+		}
 	}
 
 
@@ -518,8 +520,8 @@
 			fSourceViewer = null;
 		}
 		
-        IHandlerService handlerService = (IHandlerService) getSite().getService(IHandlerService.class);
-        handlerService.deactivateHandler(fHandlerActivation);
+		IHandlerService handlerService = getSite().getService(IHandlerService.class);
+		handlerService.deactivateHandler(fHandlerActivation);
 		
 		super.dispose();
 	}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SnippetOpenHierarchyOnSelectionAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SnippetOpenHierarchyOnSelectionAction.java
index 25828cc..bb654e8 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SnippetOpenHierarchyOnSelectionAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SnippetOpenHierarchyOnSelectionAction.java
@@ -44,10 +44,10 @@
 		fEditor= editor;
 		setResources();
 		setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_TYPE_HIERARCHY);
-        
-        ActionHandler handler = new ActionHandler(this);
-        IHandlerService handlerService = (IHandlerService) editor.getSite().getService(IHandlerService.class);
-        handlerService.activateHandler(IJavaEditorActionDefinitionIds.OPEN_TYPE_HIERARCHY, handler);
+
+		ActionHandler handler = new ActionHandler(this);
+		IHandlerService handlerService = editor.getSite().getService(IHandlerService.class);
+		handlerService.activateHandler(IJavaEditorActionDefinitionIds.OPEN_TYPE_HIERARCHY, handler);
 	}
 	
 	protected void setResources() {
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SnippetOpenOnSelectionAction.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SnippetOpenOnSelectionAction.java
index d948124..784eaf8 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SnippetOpenOnSelectionAction.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/snippeteditor/SnippetOpenOnSelectionAction.java
@@ -46,11 +46,10 @@
 		fEditor= editor;
 		setResources();
 		setActionDefinitionId(IJavaEditorActionDefinitionIds.OPEN_EDITOR);
-        
-        
-        IHandler handler = new ActionHandler(this);
-		IHandlerService service = (IHandlerService) editor.getSite().getService(IHandlerService.class);
-        service.activateHandler(IJavaEditorActionDefinitionIds.OPEN_EDITOR, handler);
+
+		IHandler handler = new ActionHandler(this);
+		IHandlerService service = editor.getSite().getService(IHandlerService.class);
+		service.activateHandler(IJavaEditorActionDefinitionIds.OPEN_EDITOR, handler);
 	}
 	
 	protected void setResources() {
@@ -99,8 +98,9 @@
 				nResults= selection.length;
 				for (int i= 0; i < nResults; i++) {
 					Object current= selection[i];
-					if (current instanceof IJavaElement)
+					if (current instanceof IJavaElement) {
 						return (IJavaElement) current;
+					}
 				}
 			}
 		}		
@@ -116,8 +116,9 @@
 		int nResults= codeResolveResults.length;
 		List<IJavaElement> refs= new ArrayList<IJavaElement>(nResults);
 		for (int i= 0; i < nResults; i++) {
-			if (codeResolveResults[i] instanceof ISourceReference)
+			if (codeResolveResults[i] instanceof ISourceReference) {
 				refs.add(codeResolveResults[i]);
+			}
 		}
 		return refs;
 	}
