diff --git a/src/com/android/loganalysis/item/DumpsysWifiStatsItem.java b/src/com/android/loganalysis/item/DumpsysWifiStatsItem.java
index 6ceb073a6d52161646f3fa9769a281f2c6010028..b956a65a7f9166fcd49267ac820d6fcfd03f4a27 100644
--- a/src/com/android/loganalysis/item/DumpsysWifiStatsItem.java
+++ b/src/com/android/loganalysis/item/DumpsysWifiStatsItem.java
@@ -27,9 +27,11 @@ public class DumpsysWifiStatsItem extends GenericItem {
     public static final String WIFI_DISCONNECT = "WIFI_DISCONNECT";
     /** Constant for JSON output */
     public static final String WIFI_SCAN = "WIFI_SCAN";
+    /** Constant for JSON output */
+    public static final String WIFI_ASSOCIATION = "WIFI_ASSOCIATION";
 
     private static final Set<String> ATTRIBUTES = new HashSet<String>(Arrays.asList(
-            WIFI_DISCONNECT, WIFI_SCAN));
+            WIFI_DISCONNECT, WIFI_SCAN, WIFI_ASSOCIATION));
 
      /**
      * The constructor for {@link DumpsysWifiStatsItem}.
@@ -52,6 +54,13 @@ public class DumpsysWifiStatsItem extends GenericItem {
         setAttribute(WIFI_SCAN, numWifiScans);
     }
 
+    /**
+     * Set number of times of wifi associations
+     */
+    public void setNumWifiAssociation(int numWifiAssociations) {
+        setAttribute(WIFI_ASSOCIATION, numWifiAssociations);
+    }
+
     /**
      * Get the number of times wifi disconnected
      */
@@ -65,4 +74,11 @@ public class DumpsysWifiStatsItem extends GenericItem {
     public int getNumWifiScans() {
         return (int) getAttribute(WIFI_SCAN);
     }
+
+    /**
+     * Get the number of times wifi association event triggered
+     */
+    public int getNumWifiAssociations() {
+        return (int) getAttribute(WIFI_ASSOCIATION);
+    }
 }
diff --git a/src/com/android/loganalysis/parser/DumpsysWifiStatsParser.java b/src/com/android/loganalysis/parser/DumpsysWifiStatsParser.java
index d977902683e76423181b22296980ef48c4744e86..52c1bf380bccf85ce603dbec0c2f1ce8ff68e2bc 100644
--- a/src/com/android/loganalysis/parser/DumpsysWifiStatsParser.java
+++ b/src/com/android/loganalysis/parser/DumpsysWifiStatsParser.java
@@ -40,6 +40,13 @@ public class DumpsysWifiStatsParser implements IParser {
             "^\\d+-\\d+ \\d+:\\d+:\\d+\\.\\d+ - Event \\[IFNAME=wlan0 CTRL-EVENT-DISCONNECTED "
             + "bssid=\\w+:\\w+:\\w+:\\w+:\\w+:\\w+ reason=\\d+(\\s*locally_generated=\\d+)?\\]");
 
+    /**
+     * Matches: 01-21 18:17:23.15 - Event [IFNAME=wlan0 Trying to associate with SSID 'WL-power-2']
+     */
+    private static final Pattern WIFI_ASSOCIATION = Pattern.compile(
+            "^\\d+-\\d+ \\d+:\\d+:\\d+\\.\\d+ - Event \\[IFNAME=wlan0 Trying to associate with "
+            + "SSID \\'.*\\'\\]");
+
     /**
      * {@inheritDoc}
      *
@@ -50,6 +57,7 @@ public class DumpsysWifiStatsParser implements IParser {
         DumpsysWifiStatsItem item = new DumpsysWifiStatsItem();
         int numWifiScans = 0;
         int numWifiDisconnects = 0;
+        int numWifiAssociations = 0;
         for (String line : lines) {
             Matcher m = WIFI_SCAN.matcher(line);
             if(m.matches()) {
@@ -59,10 +67,16 @@ public class DumpsysWifiStatsParser implements IParser {
             m = WIFI_DISCONNECT.matcher(line);
             if (m.matches()) {
                 numWifiDisconnects++;
+                continue;
+            }
+            m = WIFI_ASSOCIATION.matcher(line);
+            if (m.matches()) {
+                numWifiAssociations++;
             }
         }
         item.setNumWifiScan(numWifiScans);
         item.setNumWifiDisconnect(numWifiDisconnects);
+        item.setNumWifiAssociation(numWifiAssociations);
         return item;
     }
 
diff --git a/src/com/android/loganalysis/rule/WifiStatsRule.java b/src/com/android/loganalysis/rule/WifiStatsRule.java
index f9bca3914edbe2b87da8ffa8d8d515ad1f09e95e..da422ded7cd408a6ab56559d2bcd0a8607ebf091 100644
--- a/src/com/android/loganalysis/rule/WifiStatsRule.java
+++ b/src/com/android/loganalysis/rule/WifiStatsRule.java
@@ -31,11 +31,13 @@ public class WifiStatsRule extends AbstractPowerRule {
 
     private static final String WIFI_STATS = "WIFI_STATS";
     private static final int WIFI_DISCONNECT_THRESHOLD = 1; // wifi disconnect should never happen
+    private static final int WIFI_ASSOCIATION_THRESHOLD = 1;
     // Wifi scans are scheduled by GSA every 285 seconds, anything more frequent is an issue
     private static final long WIFI_SCAN_INTERVAL_THRESHOLD_MS = 285000;
 
     private long mFrequentWifiScansIntervalSecs = 0;
     private int mNumFrequentWifiDisconnects = 0;
+    private int mNumFrequentWifiAssociations = 0;
 
     private BugreportItem mBugreportItem = null;
 
@@ -65,6 +67,9 @@ public class WifiStatsRule extends AbstractPowerRule {
         if (dumpsysWifiStatsItem.getNumWifiDisconnects() >= WIFI_DISCONNECT_THRESHOLD) {
             mNumFrequentWifiDisconnects = dumpsysWifiStatsItem.getNumWifiDisconnects();
         }
+        if (dumpsysWifiStatsItem.getNumWifiAssociations() > WIFI_ASSOCIATION_THRESHOLD) {
+            mNumFrequentWifiAssociations = dumpsysWifiStatsItem.getNumWifiAssociations();
+        }
     }
 
     @Override
@@ -83,6 +88,12 @@ public class WifiStatsRule extends AbstractPowerRule {
             analysis.append(String.format("Wifi got disconnected %d times. ",
                     mNumFrequentWifiDisconnects));
         }
+        if (mNumFrequentWifiAssociations == 0) {
+            analysis.append("No frequent wifi associations were observed. ");
+        } else {
+            analysis.append(String.format("Wifi got associated with AP %d times. ",
+                    mNumFrequentWifiAssociations));
+        }
         try {
             wifiStatsAnalysis.put(WIFI_STATS, analysis.toString().trim());
         } catch (JSONException e) {
diff --git a/tests/src/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java b/tests/src/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java
index 6a9e30226eec7d80ed2be45f00f744539cfa9d28..f52e432f81769dbb057a612c779b347d77096ca5 100644
--- a/tests/src/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java
+++ b/tests/src/com/android/loganalysis/parser/DumpsysWifiStatsParserTest.java
@@ -56,11 +56,15 @@ public class DumpsysWifiStatsParserTest extends TestCase {
                 "10-08 13:06:25.363 - Event [IFNAME=wlan0 CTRL-EVENT-SCAN-STARTED ]",
                 "10-08 13:08:15.018 - Event [IFNAME=wlan0 CTRL-EVENT-DISCONNECTED "
                 + "bssid=9c:1c:12:e8:72:d2 reason=3 locally_generated=1]",
-                "10-08 13:08:15.324 - wlan0: 442:IFNAME=wlan0 ENABLE_NETWORK 0 -> true");
+                "10-08 13:08:15.324 - wlan0: 442:IFNAME=wlan0 ENABLE_NETWORK 0 -> true",
+                "01-21 13:17:23.1 - Event [IFNAME=wlan0 Trying to associate with SSID 'WL-power']",
+                "01-21 13:18:23.1 - Event [IFNAME=wlan0 Trying to associate with SSID 'WL-power']",
+                "01-21 13:18:23.1 - Event [IFNAME=wlan0 Trying to associate with SSID 'WL-power']");
 
         DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsParser().parse(inputBlock);
         assertEquals(2, wifiStats.getNumWifiDisconnects());
         assertEquals(3, wifiStats.getNumWifiScans());
+        assertEquals(3, wifiStats.getNumWifiAssociations());
     }
 
     /**
@@ -93,6 +97,7 @@ public class DumpsysWifiStatsParserTest extends TestCase {
         DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsParser().parse(inputBlock);
         assertEquals(0, wifiStats.getNumWifiDisconnects());
         assertEquals(0, wifiStats.getNumWifiScans());
+        assertEquals(0, wifiStats.getNumWifiAssociations());
     }
 }
 
diff --git a/tests/src/com/android/loganalysis/rule/WifiStatsRuleTest.java b/tests/src/com/android/loganalysis/rule/WifiStatsRuleTest.java
index 628039e1226900c61d802579b78197b8119cfd56..984ed201f48e6ea4bf1f375c2dddcc1920add4a9 100644
--- a/tests/src/com/android/loganalysis/rule/WifiStatsRuleTest.java
+++ b/tests/src/com/android/loganalysis/rule/WifiStatsRuleTest.java
@@ -20,10 +20,6 @@ import com.android.loganalysis.item.BugreportItem;
 import com.android.loganalysis.item.DumpsysBatteryStatsItem;
 import com.android.loganalysis.item.DumpsysItem;
 import com.android.loganalysis.item.DumpsysWifiStatsItem;
-import com.android.loganalysis.parser.BugreportParser;
-
-import java.util.Arrays;
-import java.util.List;
 
 import junit.framework.TestCase;
 
@@ -58,6 +54,7 @@ public class WifiStatsRuleTest extends TestCase {
         DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsItem();
         wifiStats.setNumWifiDisconnect(1);
         wifiStats.setNumWifiScan(0);
+        wifiStats.setNumWifiAssociation(0);
 
         mDumpsys.setWifiStats(wifiStats);
         WifiStatsRule wifiStatsRule = new WifiStatsRule(mBugreport);
@@ -66,13 +63,32 @@ public class WifiStatsRuleTest extends TestCase {
         assertNotNull(analysis);
         assertTrue(analysis.has("WIFI_STATS"));
         assertEquals(analysis.getString("WIFI_STATS"),
-                "No apps requested for frequent wifi scans. Wifi got disconnected 1 times.");
+                "No apps requested for frequent wifi scans. Wifi got disconnected 1 times. "
+                + "No frequent wifi associations were observed.");
     }
 
     public void testWifiScanAnalysis() throws Exception {
         DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsItem();
         wifiStats.setNumWifiDisconnect(0);
         wifiStats.setNumWifiScan(3);
+        wifiStats.setNumWifiAssociation(0);
+
+        mDumpsys.setWifiStats(wifiStats);
+        WifiStatsRule wifiStatsRule = new WifiStatsRule(mBugreport);
+        wifiStatsRule.applyRule();
+        JSONObject analysis = wifiStatsRule.getAnalysis();
+        assertNotNull(analysis);
+        assertTrue(analysis.has("WIFI_STATS"));
+        assertEquals(analysis.getString("WIFI_STATS"),
+                "Wifi scans happened every 100 seconds. No frequent wifi disconnects were "
+                + "observed. No frequent wifi associations were observed.");
+    }
+
+    public void testWifiAssociationAnalysis() throws Exception {
+        DumpsysWifiStatsItem wifiStats = new DumpsysWifiStatsItem();
+        wifiStats.setNumWifiDisconnect(0);
+        wifiStats.setNumWifiScan(0);
+        wifiStats.setNumWifiAssociation(3);
 
         mDumpsys.setWifiStats(wifiStats);
         WifiStatsRule wifiStatsRule = new WifiStatsRule(mBugreport);
@@ -81,7 +97,7 @@ public class WifiStatsRuleTest extends TestCase {
         assertNotNull(analysis);
         assertTrue(analysis.has("WIFI_STATS"));
         assertEquals(analysis.getString("WIFI_STATS"),
-                "Wifi scans happened every 100 seconds. No frequent wifi disconnects were observed."
-                );
+                "No apps requested for frequent wifi scans. No frequent wifi disconnects were "
+                + "observed. Wifi got associated with AP 3 times.");
     }
 }