diff --git a/src/main/java/org/opencord/aaa/AaaManager.java b/src/main/java/org/opencord/aaa/AaaManager.java
index c920864..c9fddc0 100755
--- a/src/main/java/org/opencord/aaa/AaaManager.java
+++ b/src/main/java/org/opencord/aaa/AaaManager.java
@@ -15,11 +15,11 @@
  */
 package org.opencord.aaa;
 
+import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
 import org.apache.felix.scr.annotations.Reference;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
-import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.onlab.packet.DeserializationException;
 import org.onlab.packet.EAP;
 import org.onlab.packet.EAPOL;
@@ -28,11 +28,9 @@
 import org.onlab.packet.MacAddress;
 import org.onlab.packet.RADIUS;
 import org.onlab.packet.RADIUSAttribute;
-import org.onlab.packet.VlanId;
 import org.onosproject.core.ApplicationId;
 import org.onosproject.core.CoreService;
 import org.onosproject.mastership.MastershipService;
-import org.onosproject.net.AnnotationKeys;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
 import org.onosproject.net.PortNumber;
@@ -51,8 +49,6 @@
 import org.onosproject.net.packet.PacketContext;
 import org.onosproject.net.packet.PacketProcessor;
 import org.onosproject.net.packet.PacketService;
-import org.opencord.olt.AccessDeviceService;
-import org.opencord.sadis.SubscriberAndDeviceInformation;
 import org.opencord.sadis.SubscriberAndDeviceInformationService;
 import org.osgi.service.component.annotations.Activate;
 import org.slf4j.Logger;
@@ -96,9 +92,6 @@
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected MastershipService mastershipService;
 
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected AccessDeviceService accessDeviceService;
-
     private final DeviceListener deviceListener = new InternalDeviceListener();
 
     // NAS IP address
@@ -209,7 +202,6 @@
 
 
         StateMachine.initializeMaps();
-        StateMachine.setAccessDeviceService(accessDeviceService);
 
         impl.initializeLocalState(newCfg);
 
@@ -441,21 +433,7 @@
             String sessionId = deviceId.toString() + portNumber.toString();
             StateMachine stateMachine = StateMachine.lookupStateMachineBySessionId(sessionId);
             if (stateMachine == null) {
-                if (deviceService != null) {
-                    String nasPortId = deviceService.getPort(inPacket.receivedFrom()).
-                            annotations().value(AnnotationKeys.PORT_NAME);
-
-                    SubscriberAndDeviceInformation subscriber =
-                            subsService.get(nasPortId);
-                    if (subscriber != null) {
-                        stateMachine = new StateMachine(sessionId, subscriber.cTag());
-                    } else {
-                        log.error("Could not create new state machine for {}", nasPortId);
-                        return;
-                    }
-                } else {
-                    stateMachine = new StateMachine(sessionId, VlanId.vlanId((short) 0));
-                }
+                stateMachine = new StateMachine(sessionId);
             }
 
             EAPOL eapol = (EAPOL) ethPkt.getPayload();
diff --git a/src/main/java/org/opencord/aaa/StateMachine.java b/src/main/java/org/opencord/aaa/StateMachine.java
index a4b46aa..e2a24bc 100644
--- a/src/main/java/org/opencord/aaa/StateMachine.java
+++ b/src/main/java/org/opencord/aaa/StateMachine.java
@@ -19,9 +19,7 @@
 
 import com.google.common.collect.Maps;
 import org.onlab.packet.MacAddress;
-import org.onlab.packet.VlanId;
 import org.onosproject.net.ConnectPoint;
-import org.opencord.olt.AccessDeviceService;
 import org.slf4j.Logger;
 
 import java.util.Map;
@@ -47,8 +45,6 @@
     static final int TRANSITION_DENY_ACCESS = 3;
     static final int TRANSITION_LOGOFF = 4;
 
-    private static AccessDeviceService accessDeviceService;
-
     private static int identifier = -1;
     private byte challengeIdentifier;
     private byte[] challengeState;
@@ -59,7 +55,6 @@
     private ConnectPoint supplicantConnectpoint;
     private MacAddress supplicantAddress;
     private short vlanId;
-    private VlanId ctag;
     private byte priorityCode;
 
     private String sessionId = null;
@@ -125,10 +120,6 @@
         identifierMap = null;
     }
 
-    public static void setAccessDeviceService(AccessDeviceService service) {
-        accessDeviceService = service;
-    }
-
     public static Map<String, StateMachine> sessionIdMap() {
         return sessionIdMap;
     }
@@ -169,17 +160,14 @@
     }
 
     /**
-     * State Machine Constructor.
+     * Creates a new StateMachine with the given session ID.
      *
-     * @param sessionId   session Id represented by the switch dpid +  port number
-     * @param ctag        C-TAG for this subscriber
+     * @param sessionId session Id represented by the switch dpid +  port number
      */
-    public StateMachine(String sessionId, VlanId ctag) {
-        log.info("Creating a new state machine for {} C-TAG {}", sessionId,
-                ctag);
+    public StateMachine(String sessionId) {
+        log.info("Creating a new state machine for {}", sessionId);
         this.sessionId = sessionId;
         sessionIdMap.put(sessionId, this);
-        this.ctag = ctag;
     }
 
     /**
@@ -406,12 +394,7 @@
         //move to the next state
         next(TRANSITION_AUTHORIZE_ACCESS);
 
-        if (accessDeviceService != null) {
-            log.info("Provisioning subscriber at {} with C-TAG {}",
-                    supplicantConnectpoint(), ctag);
-            accessDeviceService.provisionSubscriber(supplicantConnectpoint(),
-                                                    ctag);
-        }
+        // TODO send state machine change event
 
         // Clear mapping
         deleteStateMachineMapping(this);
