diff --git a/rpm/org.eclipse.linuxtools.rpm.rpmlint/src/org/eclipse/linuxtools/internal/rpm/rpmlint/actions/RunRpmlintAction.java b/rpm/org.eclipse.linuxtools.rpm.rpmlint/src/org/eclipse/linuxtools/internal/rpm/rpmlint/actions/RunRpmlintAction.java
index 024e7f3..27861e5 100644
--- a/rpm/org.eclipse.linuxtools.rpm.rpmlint/src/org/eclipse/linuxtools/internal/rpm/rpmlint/actions/RunRpmlintAction.java
+++ b/rpm/org.eclipse.linuxtools.rpm.rpmlint/src/org/eclipse/linuxtools/internal/rpm/rpmlint/actions/RunRpmlintAction.java
@@ -110,9 +110,9 @@
 		ConsolePlugin plugin = ConsolePlugin.getDefault();
 		IConsoleManager conMan = plugin.getConsoleManager();
 		IConsole[] existing = conMan.getConsoles();
-		for (int i = 0; i < existing.length; i++) {
-			if (name.equals(existing[i].getName())) {
-				return (MessageConsole) existing[i];
+		for (IConsole element : existing) {
+			if (name.equals(element.getName())) {
+				return (MessageConsole) element;
 			}
 		}
 		// no console found, so create a new one
diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/Activator.java b/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/Activator.java
index 86df03d..b0b889b 100644
--- a/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/Activator.java
+++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/Activator.java
@@ -126,17 +126,11 @@
 						File groupsFile = new File(file, "GROUPS"); //$NON-NLS-1$
 						if (groupsFile.exists()) {
 
-							LineNumberReader reader = null;
-							try {
-								reader = new LineNumberReader(new FileReader(groupsFile));
+							try (LineNumberReader reader = new LineNumberReader(new FileReader(groupsFile))) {
 								String line;
 								while ((line = reader.readLine()) != null) {
 									rpmGroups.add(line);
 								}
-							} finally {
-								if (reader != null) {
-									reader.close();
-								}
 							}
 							break;
 						}
diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/outline/ContainsFilter.java b/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/outline/ContainsFilter.java
index 10819eb..4c39d50 100644
--- a/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/outline/ContainsFilter.java
+++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/outline/ContainsFilter.java
@@ -37,10 +37,7 @@
 		}
 		TreeViewer treeViewer = (TreeViewer) viewer;
 		String currentLabel = ((ILabelProvider) treeViewer.getLabelProvider()).getText(element);
-		if (lookFor == null) {
-			return true;
-		}
-		if (currentLabel != null && currentLabel.contains(lookFor)) {
+		if ((lookFor == null) || (currentLabel != null && currentLabel.contains(lookFor))) {
 			return true;
 		}
 		return hasUnfilteredChild(treeViewer, element);
diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/rules/SectionRule.java b/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/rules/SectionRule.java
index 5fa719e..8debe6f 100644
--- a/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/rules/SectionRule.java
+++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/internal/rpm/ui/editor/rules/SectionRule.java
@@ -102,9 +102,7 @@
 			// so we compare it with all terminating headers
 			if (readingEndSequence) {
 				nextHeaderBuffer.append((char) c);
-				for (int i = 0; i < endingHeaders.length; i++) {
-					String tempSectionheader = endingHeaders[i];
-
+				for (String tempSectionheader : endingHeaders) {
 					// we've found our terminating header
 					if (nextHeaderBuffer.toString().equals(tempSectionheader)) {
 						// exclude the terminating header from the partition
diff --git a/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/rpm/ui/editor/markers/SpecfileErrorHandler.java b/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/rpm/ui/editor/markers/SpecfileErrorHandler.java
index eda5e74..ed5e8f7 100644
--- a/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/rpm/ui/editor/markers/SpecfileErrorHandler.java
+++ b/rpm/org.eclipse.linuxtools.rpm.ui.editor/src/org/eclipse/linuxtools/rpm/ui/editor/markers/SpecfileErrorHandler.java
@@ -104,8 +104,8 @@
 			// do nothing
 		}
 
-		Integer charStart = Integer.valueOf(lineOffset + e.getStartColumn());
-		Integer charEnd = Integer.valueOf(lineOffset + e.getEndColumn());
+		int charStart = lineOffset + e.getStartColumn();
+		int charEnd = lineOffset + e.getEndColumn();
 		String annotationType = ANNOTATION_INFO;
 		if (e.getSeverity() == IMarker.SEVERITY_ERROR) {
 			annotationType = ANNOTATION_ERROR;
@@ -113,7 +113,7 @@
 			annotationType = ANNOTATION_WARNING;
 		}
 		Annotation annotation = new SpecfileAnnotation(annotationType, true, e.getLocalizedMessage());
-		Position p = new Position(charStart.intValue(), charEnd.intValue() - charStart.intValue());
+		Position p = new Position(charStart, charEnd - charStart);
 		if (fAnnotationModel != null) {
 			fAnnotationModel.addAnnotation(annotation, p);
 		}
diff --git a/rpm/org.eclipse.linuxtools.rpm.ui/src/org/eclipse/linuxtools/internal/rpm/ui/RPMNewProject.java b/rpm/org.eclipse.linuxtools.rpm.ui/src/org/eclipse/linuxtools/internal/rpm/ui/RPMNewProject.java
index e9d28f4..529f73a 100644
--- a/rpm/org.eclipse.linuxtools.rpm.ui/src/org/eclipse/linuxtools/internal/rpm/ui/RPMNewProject.java
+++ b/rpm/org.eclipse.linuxtools.rpm.ui/src/org/eclipse/linuxtools/internal/rpm/ui/RPMNewProject.java
@@ -45,9 +45,7 @@
 				}
 			};
 			getContainer().run(false, true, op);
-		} catch (InvocationTargetException x) {
-			return false;
-		} catch (InterruptedException x) {
+		} catch (InvocationTargetException | InterruptedException x) {
 			return false;
 		}
 		return true;
diff --git a/rpm/org.eclipse.linuxtools.rpm.ui/src/org/eclipse/linuxtools/internal/rpm/ui/SRPMImportPage.java b/rpm/org.eclipse.linuxtools.rpm.ui/src/org/eclipse/linuxtools/internal/rpm/ui/SRPMImportPage.java
index 644d3c7..b29b831 100644
--- a/rpm/org.eclipse.linuxtools.rpm.ui/src/org/eclipse/linuxtools/internal/rpm/ui/SRPMImportPage.java
+++ b/rpm/org.eclipse.linuxtools.rpm.ui/src/org/eclipse/linuxtools/internal/rpm/ui/SRPMImportPage.java
@@ -157,9 +157,6 @@
 					setErrorMessage(Messages.getString("SRPMImportPage.Source_not_Valid")); //$NON-NLS-1$
 					return false;
 				}
-			} catch (MalformedURLException e) {
-				setErrorMessage(Messages.getString("SRPMImportPage.Source_not_Valid")); //$NON-NLS-1$
-				return false;
 			} catch (IOException e) {
 				setErrorMessage(Messages.getString("SRPMImportPage.Source_not_Valid")); //$NON-NLS-1$
 				return false;
@@ -199,16 +196,7 @@
 						detailsPanel.getSelectedLayout());
 			}
 			getContainer().run(true, true, srpmImportOp);
-		} catch (InterruptedException e) {
-			setErrorMessage(e.toString());
-			return false;
-		} catch (InvocationTargetException e) {
-			setErrorMessage(e.toString());
-			return false;
-		} catch (MalformedURLException e) {
-			setErrorMessage(e.toString());
-			return false;
-		} catch (CoreException e) {
+		} catch (InterruptedException | InvocationTargetException | MalformedURLException | CoreException e) {
 			setErrorMessage(e.toString());
 			return false;
 		}
diff --git a/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/model/EggModel.java b/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/model/EggModel.java
index e23e0e6..7b8d0ef 100644
--- a/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/model/EggModel.java
+++ b/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/model/EggModel.java
@@ -66,9 +66,7 @@
     public EggModel(IFile file) {
         try {
             pyEggParser = new PythonEggParser(file);
-        } catch (IOException e) {
-            StubbyLog.logError(e);
-        } catch (CoreException e) {
+        } catch (IOException | CoreException e) {
             StubbyLog.logError(e);
         }
     }
diff --git a/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/model/GemModel.java b/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/model/GemModel.java
index bade9f5..2dbcb0c 100644
--- a/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/model/GemModel.java
+++ b/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/model/GemModel.java
@@ -57,9 +57,7 @@
     public GemModel(IFile file) {
         try {
             rubyGemParser = new RubyGemParser(file);
-        } catch (IOException e) {
-            StubbyLog.logError(e);
-        } catch (CoreException e) {
+        } catch (IOException | CoreException e) {
             StubbyLog.logError(e);
         }
     }
diff --git a/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/model/PerlModel.java b/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/model/PerlModel.java
index 200fb63..28b2b20 100644
--- a/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/model/PerlModel.java
+++ b/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/model/PerlModel.java
@@ -47,9 +47,7 @@
     public PerlModel(IFile file) {
         try {
             perlMakefileParser = new PerlMakefileParser(file);
-        } catch (IOException e) {
-            StubbyLog.logError(e);
-        } catch (CoreException e) {
+        } catch (IOException | CoreException e) {
             StubbyLog.logError(e);
         }
     }
diff --git a/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/parser/PythonEggParser.java b/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/parser/PythonEggParser.java
index 1122a88..3566f5c 100644
--- a/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/parser/PythonEggParser.java
+++ b/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/internal/rpmstubby/parser/PythonEggParser.java
@@ -353,7 +353,7 @@
         String line = "";
 
         reader.seek(startPosition);
-        while ((line = reader.readLine()) != null && stop == false) {
+        while ((line = reader.readLine()) != null && !stop) {
             for (char x : line.toCharArray()) {
                 if (x == '(') {
                     bracketCounter++;
diff --git a/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/rpmstubby/RPMStubbyUtils.java b/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/rpmstubby/RPMStubbyUtils.java
index a7211d4..82b13ee 100644
--- a/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/rpmstubby/RPMStubbyUtils.java
+++ b/rpm/org.eclipse.linuxtools.rpmstubby/src/org/eclipse/linuxtools/rpmstubby/RPMStubbyUtils.java
@@ -77,11 +77,7 @@
                 } else {
                     rc = true;
                 }
-            } catch (SAXException e) {
-                StubbyLog.logError(e);
-            } catch (IOException e) {
-                StubbyLog.logError(e);
-            } catch (XPathExpressionException e) {
+            } catch (SAXException | IOException | XPathExpressionException e) {
                 StubbyLog.logError(e);
             }
         }
