diff --git a/src/main/java/org/onosproject/aaa/AaaManager.java b/src/main/java/org/onosproject/aaa/AaaManager.java
index afacff2..9bd65a0 100755
--- a/src/main/java/org/onosproject/aaa/AaaManager.java
+++ b/src/main/java/org/onosproject/aaa/AaaManager.java
@@ -15,7 +15,14 @@
  */
 package org.onosproject.aaa;
 
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+import java.nio.ByteBuffer;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -48,16 +55,9 @@
 import org.onosproject.net.packet.PacketContext;
 import org.onosproject.net.packet.PacketProcessor;
 import org.onosproject.net.packet.PacketService;
-import org.onosproject.xosintegration.VoltTenantService;
 import org.slf4j.Logger;
 
-import java.io.IOException;
-import java.net.DatagramPacket;
-import java.net.DatagramSocket;
-import java.net.InetAddress;
-import java.nio.ByteBuffer;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
+import com.google.common.util.concurrent.ThreadFactoryBuilder;
 
 import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
 import static org.onosproject.net.packet.PacketPriority.CONTROL;
@@ -82,9 +82,6 @@
     protected PacketService packetService;
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
-    protected VoltTenantService voltTenantService;
-
-    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected NetworkConfigRegistry netCfgService;
 
     // Parsed RADIUS server addresses
@@ -331,7 +328,7 @@
             String sessionId = deviceId.toString() + portNumber.toString();
             StateMachine stateMachine = StateMachine.lookupStateMachineBySessionId(sessionId);
             if (stateMachine == null) {
-                stateMachine = new StateMachine(sessionId, voltTenantService);
+                stateMachine = new StateMachine(sessionId);
             }
 
 
diff --git a/src/main/java/org/onosproject/aaa/StateMachine.java b/src/main/java/org/onosproject/aaa/StateMachine.java
index 946133d..6b8ebcb 100644
--- a/src/main/java/org/onosproject/aaa/StateMachine.java
+++ b/src/main/java/org/onosproject/aaa/StateMachine.java
@@ -23,8 +23,6 @@
 
 import org.onlab.packet.MacAddress;
 import org.onosproject.net.ConnectPoint;
-import org.onosproject.xosintegration.VoltTenant;
-import org.onosproject.xosintegration.VoltTenantService;
 import org.slf4j.Logger;
 
 import com.google.common.collect.Maps;
@@ -52,7 +50,6 @@
 
     //map of access identifiers (issued at EAPOL START)
     static BitSet bitSet = new BitSet();
-    private final VoltTenantService voltService;
 
     private int identifier = -1;
     private byte challengeIdentifier;
@@ -137,12 +134,10 @@
      * State Machine Constructor.
      *
      * @param sessionId   session Id represented by the switch dpid +  port number
-     * @param voltService volt service reference
      */
-    public StateMachine(String sessionId, VoltTenantService voltService) {
+    public StateMachine(String sessionId) {
         log.info("Creating a new state machine for {}", sessionId);
         this.sessionId = sessionId;
-        this.voltService = voltService;
         sessionIdMap.put(sessionId, this);
     }
 
@@ -387,16 +382,7 @@
         //move to the next state
         next(TRANSITION_AUTHORIZE_ACCESS);
 
-        if (voltService != null) {
-            voltService.addTenant(
-                    VoltTenant.builder()
-                            .withHumanReadableName("VCPE-" + this.identifier)
-                            .withId(this.identifier)
-                            .withProviderService(1)
-                            .withServiceSpecificId(String.valueOf(this.identifier))
-                            .withPort(this.supplicantConnectpoint)
-                            .withVlanId(String.valueOf(this.vlanId)).build());
-        }
+        // TODO: put in calls to launch vSG here
 
         deleteIdentifier();
     }
