diff --git a/src/com/android/loganalysis/parser/DmesgParser.java b/src/com/android/loganalysis/parser/DmesgParser.java
index 63026d4..be292ff 100644
--- a/src/com/android/loganalysis/parser/DmesgParser.java
+++ b/src/com/android/loganalysis/parser/DmesgParser.java
@@ -42,6 +42,7 @@
     private static final String ACTION = "ACTION";
     private static final String DURATION = "DURATION";
     private static final String UEVENTD = "ueventd";
+    private static final String INIT = "init";
 
     // Matches: [ 14.822691] init:
     private static final String SERVICE_PREFIX = String.format("^\\[\\s+(?<%s>.*)\\] init:\\s+",
@@ -94,6 +95,11 @@
     private static final Pattern UEVENTD_STAGE_INFO = Pattern.compile(
             String.format("%s%s", UEVENTD_PREFIX, STAGE_SUFFIX));
 
+    private static final String PROPERTY_SUFFIX= String.format(
+            "(?<%s>.*)\\s+took\\s+(?<%s>.*)ms$", STAGE, DURATION);
+    // Matches [    7.270487] init: Wait for property 'apexd.status=ready' took 230ms
+    private static final Pattern WAIT_FOR_PROPERTY_INFO = Pattern.compile(
+            String.format("%s%s", SERVICE_PREFIX, PROPERTY_SUFFIX));
 
     private DmesgItem mDmesgItem = new DmesgItem();
 
@@ -142,6 +148,7 @@
      * @param line individual line of the dmesg log
      */
     private void parse(String line) {
+
         if (parseServiceInfo(line)) {
             return;
         }
@@ -210,7 +217,17 @@
             stageInfoItem.setDuration((long) (Double.parseDouble(
                     match.group(DURATION)) * 1000));
             mDmesgItem.addStageInfoItem(stageInfoItem);
+            return true;
         }
+        if((match = matches(WAIT_FOR_PROPERTY_INFO, line)) != null) {
+            DmesgStageInfoItem stageInfoItem = new DmesgStageInfoItem();
+            stageInfoItem.setStageName(String.format("%s_%s", INIT, match.group(STAGE)));
+            stageInfoItem.setDuration((long) (Double.parseDouble(
+                    match.group(DURATION))));
+            mDmesgItem.addStageInfoItem(stageInfoItem);
+            return true;
+        }
+
         return false;
     }
 
diff --git a/tests/src/com/android/loganalysis/parser/DmesgParserTest.java b/tests/src/com/android/loganalysis/parser/DmesgParserTest.java
index 20665ea..7cdbd36 100644
--- a/tests/src/com/android/loganalysis/parser/DmesgParserTest.java
+++ b/tests/src/com/android/loganalysis/parser/DmesgParserTest.java
@@ -40,6 +40,7 @@
     private static final String NETD = "netd";
     private static final String[] LINES =
             new String[] {
+                "[    2.471163] init: Wait for property 'apexd.status=ready' took 403ms",
                 "[    3.786943] ueventd: Coldboot took 0.701291 seconds",
                 "[   22.962730] init: starting service 'bootanim'...",
                 "[   23.252321] init: starting service 'netd'...",
@@ -96,7 +97,7 @@
 
         assertEquals("Service info items list size should be 2", 2,
                 dmesgParser.getServiceInfoItems().size());
-        assertEquals("Stage info items list size should be 2",2,
+        assertEquals("Stage info items list size should be 3",3,
                 dmesgParser.getStageInfoItems().size());
         assertEquals("Action info items list size should be 9",9,
                 dmesgParser.getActionInfoItems().size());
@@ -116,7 +117,7 @@
             dmesgParser.parseInfo(bufferedReader);
             assertEquals("Service info items list size should be 2", 2,
                     dmesgParser.getServiceInfoItems().size());
-            assertEquals("Stage info items list size should be 2", 2,
+            assertEquals("Stage info items list size should be 3", 3,
                     dmesgParser.getStageInfoItems().size());
             assertEquals("Action info items list size should be 9",9,
                     dmesgParser.getActionInfoItems().size());
@@ -197,7 +198,7 @@
             dmesgParser.parseStageInfo(line);
         }
         List<DmesgStageInfoItem> stageInfoItems = dmesgParser.getStageInfoItems();
-        assertEquals(2, stageInfoItems.size());
+        assertEquals(3, stageInfoItems.size());
         assertEquals(EXPECTED_STAGE_INFO_ITEMS, stageInfoItems);
     }
 
@@ -234,6 +235,7 @@
 
     private static List<DmesgStageInfoItem> getExpectedStageInfoItems() {
         return Arrays.asList(
+                new DmesgStageInfoItem("init_Wait for property 'apexd.status=ready'", null, 403L),
                 new DmesgStageInfoItem("ueventd_Coldboot", null, 701L),
                 new DmesgStageInfoItem("first", 41665L, null));
     }
