diff --git a/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java b/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java
index ea40829..77073cb 100644
--- a/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java
@@ -26,11 +26,16 @@
     private static final String TYPE = "type";
     private static final String DRIVER = "driver";
     private static final String MANAGEMENT_ADDRESS = "managementAddress";
+    private static final String MANUFACTURER = "manufacturer";
+    private static final String HW_VERSION = "hwVersion";
+    private static final String SW_VERSION = "swVersion";
+    private static final String SERIAL = "serial";
 
     @Override
     public boolean isValid() {
         return hasOnlyFields(ALLOWED, NAME, LATITUDE, LONGITUDE, RACK_ADDRESS, OWNER,
-                             TYPE, DRIVER, MANAGEMENT_ADDRESS);
+                             TYPE, DRIVER, MANUFACTURER, HW_VERSION, SW_VERSION, SERIAL,
+                             MANAGEMENT_ADDRESS);
     }
 
     /**
@@ -55,7 +60,7 @@
     /**
      * Returns the device driver name.
      *
-     * @return driver name of null if not set
+     * @return driver name or null if not set
      */
     public String driver() {
         return get(DRIVER, null);
@@ -67,8 +72,84 @@
      * @param driverName new driver name; null to clear
      * @return self
      */
-    public BasicElementConfig driver(String driverName) {
-        return (BasicElementConfig) setOrClear(DRIVER, driverName);
+    public BasicDeviceConfig driver(String driverName) {
+        return (BasicDeviceConfig) setOrClear(DRIVER, driverName);
+    }
+
+    /**
+     * Returns the device manufacturer.
+     *
+     * @return manufacturer or null if not set
+     */
+    public String manufacturer() {
+        return get(MANUFACTURER, null);
+    }
+
+    /**
+     * Sets the device manufacturer.
+     *
+     * @param manufacturerName new manufacturer; null to clear
+     * @return self
+     */
+    public BasicDeviceConfig manufacturer(String manufacturerName) {
+        return (BasicDeviceConfig) setOrClear(MANUFACTURER, manufacturerName);
+    }
+
+    /**
+     * Returns the device hardware version.
+     *
+     * @return hardware version or null if not set
+     */
+    public String hwVersion() {
+        return get(HW_VERSION, null);
+    }
+
+    /**
+     * Sets the device hardware version.
+     *
+     * @param hwVersion new hardware version; null to clear
+     * @return self
+     */
+    public BasicDeviceConfig hwVersion(String hwVersion) {
+        return (BasicDeviceConfig) setOrClear(HW_VERSION, hwVersion);
+    }
+
+    /**
+     * Returns the device software version.
+     *
+     * @return software version or null if not set
+     */
+    public String swVersion() {
+        return get(SW_VERSION, null);
+    }
+
+    /**
+     * Sets the device software version.
+     *
+     * @param swVersion new software version; null to clear
+     * @return self
+     */
+    public BasicDeviceConfig swVersion(String swVersion) {
+        return (BasicDeviceConfig) setOrClear(SW_VERSION, swVersion);
+    }
+
+    /**
+     * Returns the device serial number.
+     *
+     * @return serial number or null if not set
+     */
+    public String serial() {
+        return get(SERIAL, null);
+    }
+
+    /**
+     * Sets the device serial number.
+     *
+     * @param serial new serial number; null to clear
+     * @return self
+     */
+    public BasicDeviceConfig serial(String serial) {
+        return (BasicDeviceConfig) setOrClear(SERIAL, serial);
     }
 
     /**
@@ -86,8 +167,8 @@
      * @param managementAddress new device management address (ip:port); null to clear
      * @return self
      */
-    public BasicElementConfig managementAddress(String managementAddress) {
-        return (BasicElementConfig) setOrClear(MANAGEMENT_ADDRESS, managementAddress);
+    public BasicDeviceConfig managementAddress(String managementAddress) {
+        return (BasicDeviceConfig) setOrClear(MANAGEMENT_ADDRESS, managementAddress);
     }
 
     // TODO: device port meta-data to be configured via BasicPortsConfig
