diff --git a/core/api/src/main/java/org/onosproject/security/AuditService.java b/core/api/src/main/java/org/onosproject/security/AuditService.java
new file mode 100644
index 0000000..f98eda4
--- /dev/null
+++ b/core/api/src/main/java/org/onosproject/security/AuditService.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2018-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.security;
+
+/**
+ * Service for enabling audit logging.
+ */
+public interface AuditService {
+
+    /**
+     * Returns true if auditing is enabled.
+     *
+     * @return true if audit enabled; false otherwise
+     */
+    boolean isAuditing();
+
+    /**
+     * Logs the specified user action.
+     *
+     * @param user   user that initiated the action
+     * @param action action being logged
+     */
+    void logUserAction(String user, String action);
+
+}
diff --git a/core/net/BUCK b/core/net/BUCK
index 8a6bad8..5146650 100644
--- a/core/net/BUCK
+++ b/core/net/BUCK
@@ -5,7 +5,6 @@
     '//lib:KRYO',
     '//core/common:onos-core-common',
     '//incubator/api:onos-incubator-api',
-    '//utils/rest:onlab-rest',
     '//incubator/net:onos-incubator-net',
     '//incubator/store:onos-incubator-store',
     '//core/store/serializers:onos-core-serializers',
diff --git a/core/net/src/main/java/org/onosproject/audit/impl/AuditManager.java b/core/net/src/main/java/org/onosproject/audit/impl/AuditManager.java
new file mode 100644
index 0000000..2a8e483
--- /dev/null
+++ b/core/net/src/main/java/org/onosproject/audit/impl/AuditManager.java
@@ -0,0 +1,102 @@
+/*
+ * 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.audit.impl;
+
+import org.apache.felix.scr.annotations.Component;
+import org.apache.felix.scr.annotations.Service;
+import org.apache.felix.scr.annotations.ReferenceCardinality;
+import org.apache.felix.scr.annotations.Reference;
+import org.apache.felix.scr.annotations.Property;
+import org.apache.felix.scr.annotations.Activate;
+import org.apache.felix.scr.annotations.Deactivate;
+import org.apache.felix.scr.annotations.Modified;
+import org.onosproject.cfg.ComponentConfigService;
+import org.onosproject.security.AuditService;
+import org.osgi.service.component.ComponentContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.Dictionary;
+
+import static org.onlab.util.Tools.get;
+
+/**
+ * Component to manage audit logging.
+ */
+@Component(immediate = true)
+@Service
+public class AuditManager implements AuditService {
+
+    private final Logger log = LoggerFactory.getLogger(getClass());
+
+    private Logger auditLog = log;
+
+    private static final String AUDIT_ENABLED = "auditEnabled";
+    private static final boolean AUDIT_ENABLED_DEFAULT = false;
+
+    private static final String AUDIT_LOGGER = "auditLogger";
+    private static final String AUDIT_LOGGER_DEFAULT = "securityAudit";
+
+
+    @Property(name = AUDIT_ENABLED, boolValue = AUDIT_ENABLED_DEFAULT,
+            label = "Specifies whether or not audit logging is enabled.")
+    private boolean auditEnabled = AUDIT_ENABLED_DEFAULT;
+
+    @Property(name = AUDIT_LOGGER, value = AUDIT_LOGGER_DEFAULT,
+            label = "Name of the audit logger.")
+    private String auditLogger = AUDIT_LOGGER_DEFAULT;
+
+    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+    protected ComponentConfigService cfgService;
+
+    @Activate
+    protected void activate(ComponentContext ctx) {
+        cfgService.registerProperties(getClass());
+        modified(ctx);
+        log.info("Started");
+    }
+
+    @Deactivate
+    protected void deactivate(ComponentContext ctx) {
+        log.info("Stopped");
+    }
+
+    @Modified
+    protected void modified(ComponentContext ctx) {
+        Dictionary<?, ?> properties = ctx.getProperties();
+        if (properties != null) {
+            auditEnabled = Boolean.parseBoolean(get(properties, AUDIT_ENABLED));
+            auditLogger = get(properties, AUDIT_LOGGER);
+            auditLog = LoggerFactory.getLogger(auditLogger);
+            log.info("Reconfigured; auditEnabled={}; auditLogger={}", auditEnabled, auditLogger);
+        }
+    }
+
+    @Override
+    public boolean isAuditing() {
+        return auditEnabled;
+    }
+
+    @Override
+    public void logUserAction(String user, String action) {
+        if (auditEnabled) {
+            action = action.concat(" | " + auditLogger);
+            auditLog.info("user={}; action={}", user, action);
+        }
+    }
+
+}
diff --git a/core/net/src/main/java/org/onosproject/audit/impl/package-info.java b/core/net/src/main/java/org/onosproject/audit/impl/package-info.java
new file mode 100644
index 0000000..370c9de
--- /dev/null
+++ b/core/net/src/main/java/org/onosproject/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.audit.impl;
\ No newline at end of file
