diff --git a/core/net/BUILD b/core/net/BUILD
index fc6c46d..50e0a3f 100644
--- a/core/net/BUILD
+++ b/core/net/BUILD
@@ -3,6 +3,7 @@
     "//utils/rest:onlab-rest",
     "//core/store/serializers:onos-core-serializers",
     "//core/store/primitives:onos-core-primitives",
+    "//cli:onos-cli",
     "@org_osgi_service_cm//jar",
 ]
 
diff --git a/core/net/src/main/java/org/onosproject/net/OsgiPropertyConstants.java b/core/net/src/main/java/org/onosproject/net/OsgiPropertyConstants.java
index dd96525..db5c5e3 100644
--- a/core/net/src/main/java/org/onosproject/net/OsgiPropertyConstants.java
+++ b/core/net/src/main/java/org/onosproject/net/OsgiPropertyConstants.java
@@ -124,4 +124,11 @@
 
     public static final String DTP_MAX_BATCH_MS = "maxBatchMs";
     public static final int DTP_MAX_BATCH_MS_DEFAULT = 50;
+
+    public static final String AUDIT_STATUS_DESC = "auditEnabled";
+    public static final boolean AUDIT_STATUS_DEFAULT = false;
+
+    public static final String AUDIT_FILE_TYPE_DESC = "auditFile";
+    public static final String AUDIT_FILE_TYPE_DEFAULT = "all";
+
 }
diff --git a/core/net/src/main/java/org/onosproject/net/audit/impl/AuditManager.java b/core/net/src/main/java/org/onosproject/net/audit/impl/AuditManager.java
new file mode 100644
index 0000000..31b6a18
--- /dev/null
+++ b/core/net/src/main/java/org/onosproject/net/audit/impl/AuditManager.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright 2016-present 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.net.audit.impl;
+
+import org.onlab.rest.AuditFilter;
+
+import org.onosproject.cfg.ComponentConfigService;
+import org.onosproject.cli.AbstractShellCommand;
+import org.osgi.service.component.ComponentContext;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.component.annotations.Modified;
+import org.osgi.service.component.annotations.Activate;
+import org.osgi.service.component.annotations.Reference;
+import org.osgi.service.component.annotations.ReferenceCardinality;
+
+import java.util.Dictionary;
+
+import static org.onlab.util.Tools.get;
+import static org.onosproject.net.OsgiPropertyConstants.AUDIT_FILE_TYPE_DESC;
+import static org.onosproject.net.OsgiPropertyConstants.AUDIT_FILE_TYPE_DEFAULT;
+import static org.onosproject.net.OsgiPropertyConstants.AUDIT_STATUS_DESC;
+import static org.onosproject.net.OsgiPropertyConstants.AUDIT_STATUS_DEFAULT;
+
+
+/**
+ * Component to manage REST API Audit.
+ */
+@Component(
+        immediate = true,
+        property = {
+                AUDIT_FILE_TYPE_DESC + "=" + AUDIT_FILE_TYPE_DEFAULT,
+                AUDIT_STATUS_DESC + ":Boolean=" + AUDIT_STATUS_DEFAULT
+        })
+public class AuditManager {
+
+    public String auditFile = AUDIT_FILE_TYPE_DEFAULT;
+    public boolean auditEnabled = AUDIT_STATUS_DEFAULT;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY)
+    protected ComponentConfigService cfgService;
+
+    @Activate
+    public void activate(ComponentContext context) {
+        cfgService.registerProperties(getClass());
+        setAuditStatus(auditFile, auditEnabled);
+    }
+
+    @Modified
+    protected void modifyFileType(ComponentContext context) {
+        Dictionary<?, ?> properties = context.getProperties();
+        if (properties == null) {
+            return;
+        }
+        auditFile = get(properties, AUDIT_FILE_TYPE_DESC);
+        String enableAuditStr = get(properties, AUDIT_STATUS_DESC);
+
+        auditEnabled = Boolean.parseBoolean(enableAuditStr);
+        setAuditStatus(auditFile, auditEnabled);
+    }
+
+    /**
+     * To enable Audit and set file type for REST API and  CLI as  per the changes in configuration properties.
+     *
+     * @param auditFile    file which audit logs are saved.
+     * @param auditEnabled status of REST API Audit and CLI Audit.
+     */
+    public void setAuditStatus(String auditFile, boolean auditEnabled) {
+        if (auditEnabled) {
+            AuditFilter.enableAudit();
+            AbstractShellCommand.enableAudit();
+        } else {
+            AuditFilter.disableAudit();
+            AbstractShellCommand.disableAudit();
+        }
+        AuditFilter.setAuditFile(auditFile);
+        AbstractShellCommand.setAuditFile(auditFile);
+    }
+}
diff --git a/core/net/src/main/java/org/onosproject/net/audit/impl/package-info.java b/core/net/src/main/java/org/onosproject/net/audit/impl/package-info.java
new file mode 100644
index 0000000..2845808
--- /dev/null
+++ b/core/net/src/main/java/org/onosproject/net/audit/impl/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2015-present 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.
+ */
+
+/**
+ * Implementation of Audit Configuration.
+ */
+package org.onosproject.net.audit.impl;
\ No newline at end of file
