diff --git a/src/test/java/org/onosproject/aaa/AAAIntegrationTest.java b/src/test/java/org/onosproject/aaa/AaaIntegrationTest.java
similarity index 93%
rename from src/test/java/org/onosproject/aaa/AAAIntegrationTest.java
rename to src/test/java/org/onosproject/aaa/AaaIntegrationTest.java
index fb513ce..6d708fe 100644
--- a/src/test/java/org/onosproject/aaa/AAAIntegrationTest.java
+++ b/src/test/java/org/onosproject/aaa/AaaIntegrationTest.java
@@ -34,9 +34,9 @@
  * server and sends live packets over the network to it.
  */
 @Ignore ("This should not be run as part of the standard build")
-public class AAAIntegrationTest extends AAATestBase {
+public class AaaIntegrationTest extends AaaTestBase {
 
-    private AAA aaa;
+    private AaaManager aaa;
 
     /**
      * Mocks the network config registry.
@@ -46,7 +46,7 @@
             extends NetworkConfigRegistryAdapter {
         @Override
         public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) {
-            return (C) new AAAConfig();
+            return (C) new AaaConfig();
         }
     }
 
@@ -55,7 +55,7 @@
      */
     @Before
     public void setUp() {
-        aaa = new AAA();
+        aaa = new AaaManager();
         aaa.netCfgService = new TestNetworkConfigRegistry();
         aaa.coreService = new CoreServiceAdapter();
         aaa.packetService = new MockPacketService();
@@ -136,9 +136,9 @@
 
         Ethernet successRadiusPacket = fetchPacket(2);
         assertThat(successRadiusPacket, notNullValue());
-        EAPOL successEAPOL = (EAPOL) successRadiusPacket.getPayload();
-        EAP successEAP = (EAP) successEAPOL.getPayload();
-        assertThat(successEAP.getCode(), is(EAP.SUCCESS));
+        EAPOL successEapol = (EAPOL) successRadiusPacket.getPayload();
+        EAP successEap = (EAP) successEapol.getPayload();
+        assertThat(successEap.getCode(), is(EAP.SUCCESS));
 
         //  State machine should be in authorized state
 
diff --git a/src/test/java/org/onosproject/aaa/AAATest.java b/src/test/java/org/onosproject/aaa/AaaManagerTest.java
similarity index 79%
rename from src/test/java/org/onosproject/aaa/AAATest.java
rename to src/test/java/org/onosproject/aaa/AaaManagerTest.java
index 860a7db..e3bcd9e 100644
--- a/src/test/java/org/onosproject/aaa/AAATest.java
+++ b/src/test/java/org/onosproject/aaa/AaaManagerTest.java
@@ -15,9 +15,7 @@
  */
 package org.onosproject.aaa;
 
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-
+import com.google.common.base.Charsets;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -32,7 +30,8 @@
 import org.onosproject.net.config.Config;
 import org.onosproject.net.config.NetworkConfigRegistryAdapter;
 
-import com.google.common.base.Charsets;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.notNullValue;
@@ -41,14 +40,14 @@
 /**
  * Set of tests of the ONOS application component.
  */
-public class AAATest extends AAATestBase {
+public class AaaManagerTest extends AaaTestBase {
 
     static final String BAD_IP_ADDRESS = "198.51.100.0";
 
-    private AAA aaa;
+    private AaaManager aaaManager;
 
-    class AAAWithoutRadiusServer extends AAA {
-        protected void sendRADIUSPacket(RADIUS radiusPacket) {
+    class AaaManagerWithoutRadiusServer extends AaaManager {
+        protected void sendRadiusPacket(RADIUS radiusPacket) {
             savePacket(radiusPacket);
         }
     }
@@ -57,7 +56,7 @@
      * Mocks the AAAConfig class to force usage of an unroutable address for the
      * RADIUS server.
      */
-    static class MockAAAConfig extends AAAConfig {
+    static class MockAaaConfig extends AaaConfig {
         @Override
         public InetAddress radiusIp() {
             try {
@@ -77,7 +76,7 @@
             extends NetworkConfigRegistryAdapter {
         @Override
         public <S, C extends Config<S>> C getConfig(S subject, Class<C> configClass) {
-            AAAConfig aaaConfig = new MockAAAConfig();
+            AaaConfig aaaConfig = new MockAaaConfig();
             return (C) aaaConfig;
         }
     }
@@ -90,7 +89,7 @@
      * @param challengeType type to use in challenge packet
      * @return Ethernet packet
      */
-    private RADIUS constructRADIUSCodeAccessChallengePacket(byte challengeCode, byte challengeType) {
+    private RADIUS constructRadiusCodeAccessChallengePacket(byte challengeCode, byte challengeType) {
 
         String challenge = "12345678901234567";
 
@@ -116,11 +115,11 @@
      */
     @Before
     public void setUp() {
-        aaa = new AAAWithoutRadiusServer();
-        aaa.netCfgService = new TestNetworkConfigRegistry();
-        aaa.coreService = new CoreServiceAdapter();
-        aaa.packetService = new MockPacketService();
-        aaa.activate();
+        aaaManager = new AaaManagerWithoutRadiusServer();
+        aaaManager.netCfgService = new TestNetworkConfigRegistry();
+        aaaManager.coreService = new CoreServiceAdapter();
+        aaaManager.packetService = new MockPacketService();
+        aaaManager.activate();
     }
 
     /**
@@ -128,7 +127,7 @@
      */
     @After
     public void tearDown() {
-        aaa.deactivate();
+        aaaManager.deactivate();
     }
 
     /**
@@ -138,7 +137,7 @@
      * @throws DeserializationException if deserialization of the packet contents
      *         fails.
      */
-    private void checkRADIUSPacketFromSupplicant(RADIUS radius)
+    private void checkRadiusPacketFromSupplicant(RADIUS radius)
             throws DeserializationException {
         assertThat(radius, notNullValue());
 
@@ -173,7 +172,7 @@
         sendPacket(startPacket);
 
         Ethernet responsePacket = (Ethernet) fetchPacket(0);
-        checkRadiusPacket(aaa, responsePacket, EAP.ATTR_IDENTITY);
+        checkRadiusPacket(aaaManager, responsePacket, EAP.ATTR_IDENTITY);
 
         //  (2) Supplicant identify
 
@@ -182,7 +181,7 @@
 
         RADIUS radiusIdentifyPacket = (RADIUS) fetchPacket(1);
 
-        checkRADIUSPacketFromSupplicant(radiusIdentifyPacket);
+        checkRadiusPacketFromSupplicant(radiusIdentifyPacket);
 
         assertThat(radiusIdentifyPacket.getCode(), is(RADIUS.RADIUS_CODE_ACCESS_REQUEST));
         assertThat(new String(radiusIdentifyPacket.getAttribute(RADIUSAttribute.RADIUS_ATTR_USERNAME).getValue()),
@@ -192,7 +191,7 @@
                 IpAddress.valueOf(IpAddress.Version.INET,
                                   radiusIdentifyPacket.getAttribute(RADIUSAttribute.RADIUS_ATTR_NAS_IP)
                                           .getValue());
-        assertThat(nasIp.toString(), is(aaa.nasIpAddress.getHostAddress()));
+        assertThat(nasIp.toString(), is(aaaManager.nasIpAddress.getHostAddress()));
 
         //  State machine should have been created by now
 
@@ -204,11 +203,11 @@
         // (3) RADIUS MD5 challenge
 
         RADIUS radiusCodeAccessChallengePacket =
-                constructRADIUSCodeAccessChallengePacket(RADIUS.RADIUS_CODE_ACCESS_CHALLENGE, EAP.ATTR_MD5);
-        aaa.radiusListener.handleRadiusPacket(radiusCodeAccessChallengePacket);
+                constructRadiusCodeAccessChallengePacket(RADIUS.RADIUS_CODE_ACCESS_CHALLENGE, EAP.ATTR_MD5);
+        aaaManager.radiusListener.handleRadiusPacket(radiusCodeAccessChallengePacket);
 
         Ethernet radiusChallengeMD5Packet = (Ethernet) fetchPacket(2);
-        checkRadiusPacket(aaa, radiusChallengeMD5Packet, EAP.ATTR_MD5);
+        checkRadiusPacket(aaaManager, radiusChallengeMD5Packet, EAP.ATTR_MD5);
 
         // (4) Supplicant MD5 response
 
@@ -221,7 +220,7 @@
 
         RADIUS responseMd5RadiusPacket = (RADIUS) fetchPacket(3);
 
-        checkRADIUSPacketFromSupplicant(responseMd5RadiusPacket);
+        checkRadiusPacketFromSupplicant(responseMd5RadiusPacket);
         assertThat(responseMd5RadiusPacket.getIdentifier(), is((byte) 0));
         assertThat(responseMd5RadiusPacket.getCode(), is(RADIUS.RADIUS_CODE_ACCESS_REQUEST));
 
@@ -233,11 +232,11 @@
         // (5) RADIUS Success
 
         RADIUS successPacket =
-                constructRADIUSCodeAccessChallengePacket(RADIUS.RADIUS_CODE_ACCESS_ACCEPT, EAP.SUCCESS);
-        aaa.radiusListener.handleRadiusPacket((successPacket));
+                constructRadiusCodeAccessChallengePacket(RADIUS.RADIUS_CODE_ACCESS_ACCEPT, EAP.SUCCESS);
+        aaaManager.radiusListener.handleRadiusPacket((successPacket));
         Ethernet supplicantSuccessPacket = (Ethernet) fetchPacket(4);
 
-        checkRadiusPacket(aaa, supplicantSuccessPacket, EAP.SUCCESS);
+        checkRadiusPacket(aaaManager, supplicantSuccessPacket, EAP.SUCCESS);
 
         //  State machine should be in authorized state
 
@@ -251,9 +250,9 @@
      */
     @Test
     public void testConfig() {
-        assertThat(aaa.nasIpAddress.getHostAddress(), is(AAAConfig.DEFAULT_NAS_IP));
-        assertThat(aaa.nasMacAddress, is(AAAConfig.DEFAULT_NAS_MAC));
-        assertThat(aaa.radiusIpAddress.getHostAddress(), is(BAD_IP_ADDRESS));
-        assertThat(aaa.radiusMacAddress, is(AAAConfig.DEFAULT_RADIUS_MAC));
+        assertThat(aaaManager.nasIpAddress.getHostAddress(), is(AaaConfig.DEFAULT_NAS_IP));
+        assertThat(aaaManager.nasMacAddress, is(AaaConfig.DEFAULT_NAS_MAC));
+        assertThat(aaaManager.radiusIpAddress.getHostAddress(), is(BAD_IP_ADDRESS));
+        assertThat(aaaManager.radiusMacAddress, is(AaaConfig.DEFAULT_RADIUS_MAC));
     }
 }
diff --git a/src/test/java/org/onosproject/aaa/AAATestBase.java b/src/test/java/org/onosproject/aaa/AaaTestBase.java
similarity index 97%
rename from src/test/java/org/onosproject/aaa/AAATestBase.java
rename to src/test/java/org/onosproject/aaa/AaaTestBase.java
index dffcba2..b076a2e 100644
--- a/src/test/java/org/onosproject/aaa/AAATestBase.java
+++ b/src/test/java/org/onosproject/aaa/AaaTestBase.java
@@ -15,11 +15,6 @@
  */
 package org.onosproject.aaa;
 
-import java.nio.ByteBuffer;
-import java.security.MessageDigest;
-import java.util.LinkedList;
-import java.util.List;
-
 import org.onlab.packet.BasePacket;
 import org.onlab.packet.EAP;
 import org.onlab.packet.EAPOL;
@@ -34,6 +29,11 @@
 import org.onosproject.net.packet.PacketProcessor;
 import org.onosproject.net.packet.PacketServiceAdapter;
 
+import java.nio.ByteBuffer;
+import java.security.MessageDigest;
+import java.util.LinkedList;
+import java.util.List;
+
 import static org.hamcrest.Matchers.instanceOf;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.notNullValue;
@@ -44,7 +44,7 @@
 /**
  * Common methods for AAA app testing.
  */
-public class AAATestBase {
+public class AaaTestBase {
 
     MacAddress clientMac = MacAddress.valueOf("1a:1a:1a:1a:1a:1a");
     MacAddress serverMac = MacAddress.valueOf("2a:2a:2a:2a:2a:2a");
@@ -204,10 +204,10 @@
      * @param radiusPacket packet to check
      * @param code expected code
      */
-    void checkRadiusPacket(AAA aaa, Ethernet radiusPacket, byte code) {
+    void checkRadiusPacket(AaaManager aaaManager, Ethernet radiusPacket, byte code) {
 
         assertThat(radiusPacket.getSourceMAC(),
-                   is(MacAddress.valueOf(aaa.nasMacAddress)));
+                   is(MacAddress.valueOf(aaaManager.nasMacAddress)));
         assertThat(radiusPacket.getDestinationMAC(), is(serverMac));
 
         assertThat(radiusPacket.getPayload(), instanceOf(EAPOL.class));
