diff --git a/apps/faultmanagement/fmweb/src/main/java/org/onosproject/faultmanagement/web/AlarmCodec.java b/apps/faultmanagement/fmweb/src/main/java/org/onosproject/faultmanagement/web/AlarmCodec.java
index a764c90..60587bd 100644
--- a/apps/faultmanagement/fmweb/src/main/java/org/onosproject/faultmanagement/web/AlarmCodec.java
+++ b/apps/faultmanagement/fmweb/src/main/java/org/onosproject/faultmanagement/web/AlarmCodec.java
@@ -38,7 +38,7 @@
     private final Logger log = getLogger(getClass());
 
     @Override
-    public ObjectNode encode(final Alarm alarm, final CodecContext context) {
+    public ObjectNode encode(Alarm alarm, CodecContext context) {
         checkNotNull(alarm, "Alarm cannot be null");
 
         return context.mapper().createObjectNode()
@@ -60,7 +60,7 @@
     }
 
     @Override
-    public Alarm decode(final ObjectNode json, final CodecContext context) {
+    public Alarm decode(ObjectNode json, CodecContext context) {
         if (json == null || !json.isObject()) {
             return null;
         }
@@ -76,8 +76,7 @@
         final JsonNode jsonTimeCleared = json.get("timeCleared");
         final Long timeCleared = jsonTimeCleared == null || jsonTimeCleared.isNull() ? null : jsonTimeCleared.asLong();
 
-        final Alarm.SeverityLevel severity
-                = Alarm.SeverityLevel.valueOf(json.get("severity").asText().toUpperCase());
+        final Alarm.SeverityLevel severity = Alarm.SeverityLevel.valueOf(json.get("severity").asText().toUpperCase());
 
         final Boolean serviceAffecting = json.get("serviceAffecting").asBoolean();
         final Boolean acknowledged = json.get("acknowledged").asBoolean();
diff --git a/apps/faultmanagement/fmweb/src/main/java/org/onosproject/faultmanagement/web/AlarmsWebResource.java b/apps/faultmanagement/fmweb/src/main/java/org/onosproject/faultmanagement/web/AlarmsWebResource.java
index d61d3e2..d62fa76 100644
--- a/apps/faultmanagement/fmweb/src/main/java/org/onosproject/faultmanagement/web/AlarmsWebResource.java
+++ b/apps/faultmanagement/fmweb/src/main/java/org/onosproject/faultmanagement/web/AlarmsWebResource.java
@@ -59,7 +59,7 @@
      */
     @GET
     @Produces(MediaType.APPLICATION_JSON)
-    public Response getAlarms(@DefaultValue("false") @QueryParam("includeCleared") final boolean includeCleared
+    public Response getAlarms(@DefaultValue("false") @QueryParam("includeCleared") boolean includeCleared
     ) {
 
         log.info("Requesting all alarms, includeCleared={}", includeCleared);
@@ -86,7 +86,7 @@
     @GET
     @Path("{id}")
     @Produces(MediaType.APPLICATION_JSON)
-    public Response getAlarm(@PathParam("id") final String id) {
+    public Response getAlarm(@PathParam("id") String id) {
         log.info("HTTP GET alarm for id={}", id);
 
         final AlarmId alarmId = toAlarmId(id);
@@ -109,7 +109,7 @@
     @Path("{alarm_id}")
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
-    public Response update(@PathParam("alarm_id") final String alarmIdPath, final InputStream stream) {
+    public Response update(@PathParam("alarm_id") String alarmIdPath, InputStream stream) {
         log.info("PUT NEW ALARM at /{}", alarmIdPath);
 
         try {
@@ -134,7 +134,7 @@
         }
     }
 
-    private static AlarmId toAlarmId(final String id) {
+    private static AlarmId toAlarmId(String id) {
         try {
             return AlarmId.valueOf(Long.parseLong(id));
         } catch (NumberFormatException ex) {
diff --git a/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmCodecTest.java b/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmCodecTest.java
index 3009b99a..012b1ff 100644
--- a/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmCodecTest.java
+++ b/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmCodecTest.java
@@ -107,7 +107,7 @@
 
     }
 
-    private void assertCommon(final Alarm alarm) {
+    private void assertCommon(Alarm alarm) {
         assertThat(alarm.id(), is(new AlarmId(10L)));
         assertThat(alarm.description(), is("NE is not reachable"));
         assertThat(alarm.source(), is(AlarmEntityId.NONE));
@@ -124,9 +124,9 @@
      *
      * @param resourceName resource to use to read the JSON for the rule
      * @return decoded flow rule
-     * @throws IOException if processing the resource failsdecode
+     * @throws IOException if processing the resource fails to decode
      */
-    private Alarm getDecodedAlarm(final JsonCodec<Alarm> codec, final String resourceName) throws IOException {
+    private Alarm getDecodedAlarm(JsonCodec<Alarm> codec, String resourceName) throws IOException {
         final InputStream jsonStream = AlarmCodecTest.class
                 .getResourceAsStream(resourceName);
         final JsonNode json = context.mapper().readTree(jsonStream);
diff --git a/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmJsonMatcher.java b/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmJsonMatcher.java
index 14bb45f..9a295c8 100644
--- a/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmJsonMatcher.java
+++ b/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmJsonMatcher.java
@@ -28,12 +28,12 @@
 
     private final Alarm alarm;
 
-    private AlarmJsonMatcher(final Alarm alarm) {
+    private AlarmJsonMatcher(Alarm alarm) {
         this.alarm = alarm;
     }
 
     @Override
-    public boolean matchesSafely(final JsonNode jsonAlarm, final Description description) {
+    public boolean matchesSafely(JsonNode jsonAlarm, Description description) {
         final String jsonAlarmId = jsonAlarm.get("id").asText();
         final String alarmId = Long.toString(alarm.id().fingerprint());
         if (!jsonAlarmId.equals(alarmId)) {
@@ -119,7 +119,7 @@
     }
 
     @Override
-    public void describeTo(final Description description) {
+    public void describeTo(Description description) {
         description.appendText(alarm.toString());
     }
 
@@ -129,7 +129,7 @@
      * @param alarm alarm object we are looking for
      * @return matcher
      */
-    public static AlarmJsonMatcher matchesAlarm(final Alarm alarm) {
+    public static AlarmJsonMatcher matchesAlarm(Alarm alarm) {
         return new AlarmJsonMatcher(alarm);
     }
 }
diff --git a/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmsWebResourceTest.java b/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmsWebResourceTest.java
index 0b7d981..e07487c 100644
--- a/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmsWebResourceTest.java
+++ b/apps/faultmanagement/fmweb/src/test/java/org/onosproject/faultmanagement/web/AlarmsWebResourceTest.java
@@ -41,8 +41,7 @@
         final CodecManager codecService = new CodecManager();
         codecService.activate();
 
-        final ServiceDirectory testDirectory
-                = new TestServiceDirectory()
+        final ServiceDirectory testDirectory = new TestServiceDirectory()
                 // Currently no alarms-service implemented
                 // .add(AlarmsService.class, alarmsService)
                 .add(CodecService.class, codecService);
