diff --git a/drivers/polatis/snmp/src/main/java/org/onosproject/drivers/polatis/snmp/PolatisAlarmConfig.java b/drivers/polatis/snmp/src/main/java/org/onosproject/drivers/polatis/snmp/PolatisAlarmConfig.java
new file mode 100644
index 0000000..9ccbf1d
--- /dev/null
+++ b/drivers/polatis/snmp/src/main/java/org/onosproject/drivers/polatis/snmp/PolatisAlarmConfig.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2018 Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.drivers.polatis.snmp;
+
+import org.onlab.packet.IpAddress;
+
+import org.onosproject.incubator.net.faultmanagement.alarm.Alarm;
+import org.onosproject.incubator.net.faultmanagement.alarm.AlarmId;
+import org.onosproject.incubator.net.faultmanagement.alarm.DefaultAlarm;
+import org.onosproject.incubator.net.faultmanagement.alarm.DeviceAlarmConfig;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.driver.AbstractHandlerBehaviour;
+
+import org.snmp4j.CommandResponderEvent;
+import org.snmp4j.PDU;
+import org.snmp4j.smi.OID;
+
+import org.slf4j.Logger;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import static org.onosproject.incubator.net.faultmanagement.alarm.Alarm.SeverityLevel;
+import static org.slf4j.LoggerFactory.getLogger;
+
+/**
+ * Polatis specific implementation to provide asynchronous alarms via SNMP.
+ */
+public class PolatisAlarmConfig extends AbstractHandlerBehaviour implements DeviceAlarmConfig {
+    private final Logger log = getLogger(getClass());
+
+    private DeviceId deviceId;
+    private static final OID SNMP_TRAP_OID = new OID(".1.3.6.1.6.3.1.1.4.1");
+    private static final OID OPM_ALARM_OID = new OID(".1.3.6.1.4.1.26592.2.3.3.0.3");
+    private static final OID ALARM_STATUS_OID = new OID(".1.3.6.1.4.1.26592.2.6.2.3.3");
+    private static final OID ALARM_ID_OID = new OID(".1.3.6.1.4.1.26592.2.6.2.3.2");
+    private static final OID ALARM_PORT_OID = new OID(".1.3.6.1.4.1.26592.2.3.3.1.1");
+    private static final OID ALARM_PORT_LABEL_OID = new OID(".1.3.6.1.4.1.26592.2.3.3.1.2");
+    private static final OID SYSUPTIME_OID = new OID(".1.3.6.1.2.1.1.3");
+    private static final String CLEARED = "cleared";
+
+    @Override
+    public boolean configureDevice(IpAddress address, int port, String protocol) {
+        // TODO: Implement me
+        return false;
+    }
+
+    @Override
+    public <T> Set<Alarm> translateAlarms(List<T> unparsedAlarms) {
+        deviceId = handler().data().deviceId();
+        Set<Alarm> alarms = new HashSet<>();
+        for (T alarm : unparsedAlarms) {
+            if (alarm instanceof CommandResponderEvent) {
+                CommandResponderEvent alarmEvent = (CommandResponderEvent) alarm;
+                PDU pdu = alarmEvent.getPDU();
+                if (pdu != null) {
+                    String alarmType = pdu.getVariable(SNMP_TRAP_OID).toString();
+                    if (alarmType.equals(OPM_ALARM_OID.toString())) {
+                        String label = pdu.getVariable(ALARM_PORT_LABEL_OID).toString();
+                        int port = pdu.getVariable(ALARM_PORT_OID).toInt();
+                        String uniqueIdentifier = "LOS" + port;
+                        String status = pdu.getVariable(ALARM_STATUS_OID).toString();
+                        String alarmMessage = "Loss of Service alarm " + status + " for fibre " + port;
+                        SeverityLevel alarmLevel = SeverityLevel.MAJOR;
+                        long timeRaised = 0;
+                        DefaultAlarm.Builder alarmBuilder = new DefaultAlarm.Builder(
+                                AlarmId.alarmId(deviceId, uniqueIdentifier),
+                                deviceId, alarmMessage, alarmLevel, timeRaised);
+                        if (status.equals(CLEARED)) {
+                            long now = System.currentTimeMillis();
+                            alarmBuilder.clear().withTimeUpdated(now).withTimeCleared(now);
+                        }
+                        alarms.add(alarmBuilder.build());
+                    }
+                }
+            }
+        }
+        return alarms;
+    }
+}
diff --git a/drivers/polatis/snmp/src/main/resources/polatis-snmp-drivers.xml b/drivers/polatis/snmp/src/main/resources/polatis-snmp-drivers.xml
index 276c15c..251d535 100644
--- a/drivers/polatis/snmp/src/main/resources/polatis-snmp-drivers.xml
+++ b/drivers/polatis/snmp/src/main/resources/polatis-snmp-drivers.xml
@@ -25,6 +25,8 @@
                    impl="org.onosproject.drivers.polatis.snmp.PolatisFlowRuleProgrammable"/>
         <behaviour api="org.onosproject.net.behaviour.PowerConfig"
                    impl="org.onosproject.drivers.polatis.snmp.PolatisPowerConfig"/>
+        <behaviour api="org.onosproject.incubator.net.faultmanagement.alarm.DeviceAlarmConfig"
+                   impl="org.onosproject.drivers.polatis.snmp.PolatisAlarmConfig"/>
         <property name="uiType">policon</property>
     </driver>
 </drivers>
diff --git a/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmService.java b/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmService.java
index 8dd76f6..2c26f30 100644
--- a/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmService.java
+++ b/incubator/api/src/main/java/org/onosproject/incubator/net/faultmanagement/alarm/AlarmService.java
@@ -33,7 +33,7 @@
      * Update book-keeping (ie administrative) fields for the alarm matching the specified identifier.
      *
      * @param id             alarm identifier
-     * @param clear          ture if the alarm has to be cleared
+     * @param clear          true if the alarm has to be cleared
      * @param isAcknowledged new acknowledged state
      * @param assignedUser   new assigned user, null clear
      * @return updated alarm (including any recent device-derived changes)
