diff --git a/src/main/java/org/onosproject/cordconfig/access/AccessAgentConfig.java b/src/main/java/org/onosproject/cordconfig/access/AccessAgentConfig.java
index ba655df..704c6a1 100644
--- a/src/main/java/org/onosproject/cordconfig/access/AccessAgentConfig.java
+++ b/src/main/java/org/onosproject/cordconfig/access/AccessAgentConfig.java
@@ -1,7 +1,26 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * 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.cordconfig.access;
 
 import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.google.common.collect.Iterators;
 import com.google.common.collect.Maps;
+import org.apache.commons.lang.StringUtils;
 import org.onlab.packet.MacAddress;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
@@ -11,6 +30,9 @@
 import java.util.Map;
 import java.util.Optional;
 
+import static org.onosproject.net.config.Config.FieldPresence.MANDATORY;
+import static org.onosproject.net.config.Config.FieldPresence.OPTIONAL;
+
 /**
  * Represents configuration for an OLT agent.
  */
@@ -22,6 +44,14 @@
     // TODO: Remove this, it is only useful as long as XOS doesn't manage this.
     private static final String VTN_LOCATION = "vtn-location";
 
+    @Override
+    public boolean isValid() {
+        return hasOnlyFields(OLTS, AGENT_MAC, VTN_LOCATION) &&
+                isMacAddress(AGENT_MAC, MANDATORY) &&
+                isConnectPoint(VTN_LOCATION, OPTIONAL) &&
+                isValidOlts();
+    }
+
     /**
      * Gets the access agent configuration for this device.
      *
@@ -29,9 +59,6 @@
      */
     public AccessAgentData getAgent() {
         JsonNode olts = node.get(OLTS);
-        if (!olts.isObject()) {
-            throw new IllegalArgumentException(OLTS + " should be an object");
-        }
         Map<ConnectPoint, MacAddress> oltMacInfo = Maps.newHashMap();
         olts.fields().forEachRemaining(item -> oltMacInfo.put(
                 new ConnectPoint(subject(), PortNumber.fromString(item.getKey())),
@@ -50,4 +77,12 @@
         return new AccessAgentData(subject(), oltMacInfo, agentMac, vtnLocation);
     }
 
+    private boolean isValidOlts() {
+        JsonNode olts = node.get(OLTS);
+        if (!olts.isObject()) {
+            return false;
+        }
+        return !Iterators.any(olts.fields(), item -> !StringUtils.isNumeric(item.getKey()) ||
+                        !isMacAddress((ObjectNode) olts, item.getKey(), MANDATORY));
+    }
 }
