diff --git a/docs/html/guide/components/intents-common.jd b/docs/html/guide/components/intents-common.jd
index ac61924..d4b033a 100644
--- a/docs/html/guide/components/intents-common.jd
+++ b/docs/html/guide/components/intents-common.jd
@@ -80,6 +80,13 @@
       <li><a href="#DialPhone">Initiate a phone call</a></li>
     </ol>
   </li>
+  </li>
+  <li><a href="#Search">Search</a>
+    <ol>
+      <li><a href="#SearchOnApp">Search in a specific app</a></li>
+      <li><a href="#SearchWeb">Perform a web search</a></li>
+    </ol>
+  </li>
   <li><a href="#Settings">Settings</a>
     <ol>
       <li><a href="#OpenSettings">Open a specific section of Settings</a></li>
@@ -93,7 +100,6 @@
   <li><a href="#Browser">Web Browser</a>
     <ol>
       <li><a href="#ViewUrl">Load a web URL</a></li>
-      <li><a href="#SearchWeb">Perform a web search</a></li>
     </ol>
   </li>
   <li><a href="#AdbIntents">Verify Intents with the Android Debug Bridge</a></li>
@@ -205,7 +211,8 @@
 <div class="now-box">
   <div class="now-img-cont">
     <a href="#Now">
-      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30" height="30" alt=""/>
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30"
+           height="30" alt=""/>
     </a>
   </div>
   <p class="now-title">Google Now</p>
@@ -302,7 +309,8 @@
 <div class="now-box">
   <div class="now-img-cont">
     <a href="#Now">
-      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30" height="30" alt=""/>
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
+           width="30" height="30" alt=""/>
     </a>
   </div>
   <p class="now-title">Google Now</p>
@@ -605,7 +613,8 @@
 <div class="now-box">
   <div class="now-img-cont">
     <a href="#Now">
-      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30" height="30" alt=""/>
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
+           width="30" height="30" alt=""/>
     </a>
   </div>
   <p class="now-title">Google Now</p>
@@ -660,7 +669,8 @@
 <div class="now-box">
   <div class="now-img-cont">
     <a href="#Now">
-      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30" height="30" alt=""/>
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
+           width="30" height="30" alt=""/>
     </a>
   </div>
   <p class="now-title">Google Now</p>
@@ -1351,7 +1361,8 @@
 <div class="now-box">
   <div class="now-img-cont">
     <a href="#Now">
-      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30" height="30" alt=""/>
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
+           width="30" height="30" alt=""/>
     </a>
   </div>
   <p class="now-title">Google Now</p>
@@ -1362,14 +1373,21 @@
   </ul>
 </div>
 
-<p>To track a bike ride, use the <code>"vnd.google.fitness.TRACK"</code> action with the
-<code>"vnd.google.fitness.activity/biking"</code> MIME type and set the <code>"actionStatus"</code>
-extra to <code>"ActiveActionStatus"</code> when starting and to <code>"CompletedActionStatus"</code>
-when stopping.</p>
+<p>To track a bike ride, use the
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_TRACK">
+<code>ACTION_TRACK</code></a> action with the <code>"vnd.google.fitness.activity/biking"</code>
+MIME type and set the
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#EXTRA_STATUS">
+<code>EXTRA_STATUS</code></a> extra to
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#STATUS_ACTIVE">
+<code>STATUS_ACTIVE</code></a> when starting and to
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#STATUS_COMPLETED">
+<code>STATUS_COMPLETED</code></a> when stopping.</p>
 
 <dl>
   <dt><b>Action</b></dt>
-  <dd><code>"vnd.google.fitness.TRACK"</code><dd>
+  <dd><a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_TRACK">
+      <code>ACTION_TRACK</code></a><dd>
 
   <dt><b>Data URI</b></dt>
   <dd>None</dd>
@@ -1380,9 +1398,12 @@
   <dt><b>Extras</b></dt>
   <dd>
     <dl>
-      <dt><code>"actionStatus"</code></dt>
-      <dd>A string with the value <code>"ActiveActionStatus"</code> when starting and
-      <code>"CompletedActionStatus"</code> when stopping.</dd>
+      <dt><a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#EXTRA_STATUS">
+          <code>EXTRA_STATUS</code></a></dt>
+      <dd>A string with the value <a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#STATUS_ACTIVE">
+          <code>STATUS_ACTIVE</code></a> when starting and
+      <a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#STATUS_COMPLETED">
+          <code>STATUS_COMPLETED</code></a> when stopping.</dd>
     </dl>
   </dd>
 </dl>
@@ -1391,9 +1412,9 @@
 <p><b>Example intent:</b></p>
 <pre>
 public void startBikeRide() {
-    Intent intent = new Intent("vnd.google.fitness.TRACK")
+    Intent intent = new Intent(FitnessIntents.ACTION_TRACK)
             .setType("vnd.google.fitness.activity/biking")
-            .putExtra("actionStatus", "ActiveActionStatus");
+            .putExtra(FitnessIntents.EXTRA_STATUS, FitnessIntents.STATUS_ACTIVE);
     if (intent.resolveActivity(getPackageManager()) != null) {
         startActivity(intent);
     }
@@ -1422,7 +1443,8 @@
 <div class="now-box">
   <div class="now-img-cont">
     <a href="#Now">
-      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30" height="30" alt=""/>
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
+           width="30" height="30" alt=""/>
     </a>
   </div>
   <p class="now-title">Google Now</p>
@@ -1433,14 +1455,21 @@
   </ul>
 </div>
 
-<p>To track a run, use the <code>"vnd.google.fitness.TRACK"</code> action with the
-<code>"vnd.google.fitness.activity/running"</code> MIME type and set the <code>"actionStatus"</code>
-extra to <code>"ActiveActionStatus"</code> when starting and to <code>"CompletedActionStatus"</code>
-when stopping.</p>
+<p>To track a run, use the
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_TRACK">
+<code>ACTION_TRACK</code></a> action with the <code>"vnd.google.fitness.activity/running"</code>
+MIME type and set the
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#EXTRA_STATUS">
+<code>EXTRA_STATUS</code></a> extra to
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#STATUS_ACTIVE">
+<code>STATUS_ACTIVE</code></a> when starting and to
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#STATUS_COMPLETED">
+<code>STATUS_COMPLETED</code></a> when stopping.</p>
 
 <dl>
   <dt><b>Action</b></dt>
-  <dd><code>"vnd.google.fitness.TRACK"</code><dd>
+  <dd><a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_TRACK">
+      <code>ACTION_TRACK</code></a><dd>
 
   <dt><b>Data URI</b></dt>
   <dd>None</dd>
@@ -1451,9 +1480,12 @@
   <dt><b>Extras</b></dt>
   <dd>
     <dl>
-      <dt><code>"actionStatus"</code></dt>
-      <dd>A string with the value <code>"ActiveActionStatus"</code> when starting and
-      <code>"CompletedActionStatus"</code> when stopping.</dd>
+      <dt><a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#EXTRA_STATUS">
+          <code>EXTRA_STATUS</code></a></dt>
+      <dd>A string with the value <a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#STATUS_ACTIVE">
+          <code>STATUS_ACTIVE</code></a> when starting and
+      <a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#STATUS_COMPLETED">
+          <code>STATUS_COMPLETED</code></a> when stopping.</dd>
     </dl>
   </dd>
 </dl>
@@ -1462,9 +1494,9 @@
 <p><b>Example intent:</b></p>
 <pre>
 public void startRun() {
-    Intent intent = new Intent("vnd.google.fitness.TRACK")
+    Intent intent = new Intent(FitnessIntents.ACTION_TRACK)
             .setType("vnd.google.fitness.activity/running")
-            .putExtra("actionStatus", "ActiveActionStatus");
+            .putExtra(FitnessIntents.EXTRA_STATUS, FitnessIntents.STATUS_ACTIVE);
     if (intent.resolveActivity(getPackageManager()) != null) {
         startActivity(intent);
     }
@@ -1492,7 +1524,8 @@
 <div class="now-box">
   <div class="now-img-cont">
     <a href="#Now">
-      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30" height="30" alt=""/>
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
+           width="30" height="30" alt=""/>
     </a>
   </div>
   <p class="now-title">Google Now</p>
@@ -1503,14 +1536,21 @@
   </ul>
 </div>
 
-<p>To track a workout, use the <code>"vnd.google.fitness.TRACK"</code> action with the
-<code>"vnd.google.fitness.activity/other"</code> MIME type and set the <code>"actionStatus"</code>
-extra to <code>"ActiveActionStatus"</code> when starting and to <code>"CompletedActionStatus"</code>
-when stopping.</p>
+<p>To track a workout, use the
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_TRACK">
+<code>ACTION_TRACK</code></a> action with the <code>"vnd.google.fitness.activity/other"</code>
+MIME type and set the
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#EXTRA_STATUS">
+<code>EXTRA_STATUS</code></a> extra to
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#STATUS_ACTIVE">
+<code>STATUS_ACTIVE</code></a> when starting and to
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#STATUS_COMPLETED">
+<code>STATUS_COMPLETED</code></a> when stopping.</p>
 
 <dl>
   <dt><b>Action</b></dt>
-  <dd><code>"vnd.google.fitness.TRACK"</code><dd>
+  <dd><a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_TRACK">
+      <code>ACTION_TRACK</code></a><dd>
 
   <dt><b>Data URI</b></dt>
   <dd>None</dd>
@@ -1521,9 +1561,12 @@
   <dt><b>Extras</b></dt>
   <dd>
     <dl>
-      <dt><code>"actionStatus"</code></dt>
-      <dd>A string with the value <code>"ActiveActionStatus"</code> when starting and
-      <code>"CompletedActionStatus"</code> when stopping.</dd>
+      <dt><a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#EXTRA_STATUS">
+          <code>EXTRA_STATUS</code></a></dt>
+      <dd>A string with the value <a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#STATUS_ACTIVE">
+          <code>STATUS_ACTIVE</code></a> when starting and
+      <a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#STATUS_COMPLETED">
+          <code>STATUS_COMPLETED</code></a> when stopping.</dd>
     </dl>
   </dd>
 </dl>
@@ -1532,9 +1575,9 @@
 <p><b>Example intent:</b></p>
 <pre>
 public void startWorkout() {
-    Intent intent = new Intent("vnd.google.fitness.TRACK")
+    Intent intent = new Intent(FitnessIntents.ACTION_TRACK)
             .setType("vnd.google.fitness.activity/other")
-            .putExtra("actionStatus", "ActiveActionStatus");
+            .putExtra(FitnessIntents.EXTRA_STATUS, FitnessIntents.STATUS_ACTIVE);
     if (intent.resolveActivity(getPackageManager()) != null) {
         startActivity(intent);
     }
@@ -1562,7 +1605,8 @@
 <div class="now-box">
   <div class="now-img-cont">
     <a href="#Now">
-      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30" height="30" alt=""/>
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
+           width="30" height="30" alt=""/>
     </a>
   </div>
   <p class="now-title">Google Now</p>
@@ -1572,12 +1616,15 @@
   </ul>
 </div>
 
-<p>To show the user's heart rate, use the <code>"vnd.google.fitness.VIEW"</code> action with the
-<code>"vnd.google.fitness.data_type<br/>/com.google.heart_rate.bpm"</code> MIME type.</p>
+<p>To show the user's heart rate, use the
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_VIEW">
+<code>ACTION_VIEW</code></a> action with the
+<code>"vnd.google.fitness.data_type/com.google.heart_rate.bpm"</code> MIME type.</p>
 
 <dl>
   <dt><b>Action</b></dt>
-  <dd><code>"vnd.google.fitness.VIEW"</code><dd>
+  <dd><a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_VIEW">
+      <code>ACTION_VIEW</code></a><dd>
 
   <dt><b>Data URI</b></dt>
   <dd>None</dd>
@@ -1592,8 +1639,8 @@
 
 <p><b>Example intent:</b></p>
 <pre>
-public void showHR() {
-    Intent intent = new Intent("vnd.google.fitness.VIEW")
+public void showHeartRate() {
+    Intent intent = new Intent(FitnessIntents.ACTION_VIEW)
             .setType("vnd.google.fitness.data_type/com.google.heart_rate.bpm");
     if (intent.resolveActivity(getPackageManager()) != null) {
         startActivity(intent);
@@ -1623,7 +1670,8 @@
 <div class="now-box">
   <div class="now-img-cont">
     <a href="#Now">
-      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30" height="30" alt=""/>
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
+           width="30" height="30" alt=""/>
     </a>
   </div>
   <p class="now-title">Google Now</p>
@@ -1633,12 +1681,16 @@
   </ul>
 </div>
 
-<p>To show the user's step count, use the <code>"vnd.google.fitness.VIEW"</code> action with the
-<code>"vnd.google.fitness.data_type<br/>/com.google.step_count.cumulative"</code> MIME type.</p>
+<p>To show the user's step count, use the
+<a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_VIEW">
+<code>ACTION_VIEW</code></a> action with the
+<code>"vnd.google.fitness.data_type<br/>/com.google.step_count<br/>.cumulative"</code> MIME
+type.</p>
 
 <dl>
   <dt><b>Action</b></dt>
-  <dd><code>"vnd.google.fitness.VIEW"</code><dd>
+  <dd><a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_VIEW">
+      <code>ACTION_VIEW</code></a><dd>
 
   <dt><b>Data URI</b></dt>
   <dd>None</dd>
@@ -1654,7 +1706,7 @@
 <p><b>Example intent:</b></p>
 <pre>
 public void showStepCount() {
-    Intent intent = new Intent("vnd.google.fitness.VIEW")
+    Intent intent = new Intent(FitnessIntents.ACTION_VIEW)
             .setType("vnd.google.fitness.data_type/com.google.step_count.cumulative");
     if (intent.resolveActivity(getPackageManager()) != null) {
         startActivity(intent);
@@ -1689,7 +1741,8 @@
 <div class="now-box">
   <div class="now-img-cont">
     <a href="#Now">
-      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30" height="30" alt=""/>
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
+           width="30" height="30" alt=""/>
     </a>
   </div>
   <p class="now-title">Google Now</p>
@@ -1888,7 +1941,8 @@
 <div class="now-box">
   <div class="now-img-cont">
     <a href="#Now">
-      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30" height="30" alt=""/>
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
+           width="30" height="30" alt=""/>
     </a>
   </div>
   <p class="now-title">Google Now</p>
@@ -2134,7 +2188,8 @@
 <div class="now-box">
   <div class="now-img-cont">
     <a href="#Now">
-      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30" height="30" alt=""/>
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
+           width="30" height="30" alt=""/>
     </a>
   </div>
   <p class="now-title">Google Now</p>
@@ -2211,6 +2266,98 @@
 
 
 
+<h2 id="Search">Search</h2>
+
+<h3 id="SearchOnApp">Search using a specific app</h3>
+
+<!-- Google Now box -->
+<div class="now-box">
+  <div class="now-img-cont">
+    <a href="#Now">
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
+           width="30" height="30"/></a>
+  </div>
+  <p class="now-title">Google Now</p>
+  <ul>
+    <li>"search for cat videos on myvideoapp"</li>
+  </ul>
+</div>
+
+<p>To support search within the context of your app, declare an intent filter in your app with
+the <code>SEARCH_ACTION</code> action, as shown in the example intent filter below.</p>
+
+<dl>
+<dt><b>Action</b></dt>
+<dd>
+  <dl>
+    <dt><code>"com.google.android.gms.actions.SEARCH_ACTION"</code></dt>
+    <dd>Support search queries from Google Now.</dd>
+  </dl>
+</dd>
+
+<dt><b>Extras</b></dt>
+<dd>
+  <dl>
+    <dt><code>{@link android.app.SearchManager#QUERY}</code></dt>
+    <dd>A string that contains the search query.</dd>
+  <dl>
+</dd>
+</dl>
+
+<p><b>Example intent filter:</b></p>
+<pre>
+&lt;activity android:name=".SearchActivity">
+    &lt;intent-filter>
+        &lt;action android:name="com.google.android.gms.actions.SEARCH_ACTION"/>
+        &lt;category android:name="android.intent.category.DEFAULT"/>
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+
+
+<h3 id="SearchWeb">Perform a web search</h3>
+
+<p>To initiate a web search, use the {@link android.content.Intent#ACTION_WEB_SEARCH} action
+and specify the search string in the
+{@link android.app.SearchManager#QUERY SearchManager.QUERY} extra.</p>
+
+
+<dl>
+  <dt><b>Action</b></dt>
+  <dd>{@link android.content.Intent#ACTION_WEB_SEARCH}</dd>
+
+  <dt><b>Data URI Scheme</b></dt>
+  <dd>None</dd>
+
+  <dt><b>MIME Type</b></dt>
+  <dd>None</dd>
+
+  <dt><b>Extras</b></dt>
+  <dd>
+    <dl>
+      <dt>{@link android.app.SearchManager#QUERY SearchManager.QUERY}</dt>
+      <dd>The search string.</dd>
+    </dl>
+  </dd>
+</dl>
+
+<p><b>Example intent:</b></p>
+<pre>
+public void searchWeb(String query) {
+    Intent intent = new Intent(Intent.ACTION_SEARCH);
+    intent.putExtra(SearchManager.QUERY, query);
+    if (intent.resolveActivity(getPackageManager()) != null) {
+        startActivity(intent);
+    }
+}
+</pre>
+
+
+
+
+
+
 
 <h2 id="Settings">Settings</h2>
 
@@ -2379,7 +2526,8 @@
 <div class="now-box">
   <div class="now-img-cont">
     <a href="#Now">
-      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30" height="30" alt=""/>
+      <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
+           width="30" height="30" alt=""/>
     </a>
   </div>
   <p class="now-title">Google Now</p>
@@ -2447,46 +2595,6 @@
 
 
 
-<h3 id="SearchWeb">Perform a web search</h3>
-
-<p>To initiate a web search, use the {@link android.content.Intent#ACTION_WEB_SEARCH} action
-and specify the search string in the
-{@link android.app.SearchManager#QUERY SearchManager.QUERY} extra.</p>
-
-
-<dl>
-  <dt><b>Action</b></dt>
-  <dd>{@link android.content.Intent#ACTION_WEB_SEARCH}</dd>
-
-  <dt><b>Data URI Scheme</b></dt>
-  <dd>None</dd>
-
-  <dt><b>MIME Type</b></dt>
-  <dd>None</dd>
-
-  <dt><b>Extras</b></dt>
-  <dd>
-    <dl>
-      <dt>{@link android.app.SearchManager#QUERY SearchManager.QUERY}</dt>
-      <dd>The search string.</dd>
-    </dl>
-  </dd>
-</dl>
-
-<p><b>Example intent:</b></p>
-<pre>
-public void searchWeb(String query) {
-    Intent intent = new Intent(Intent.ACTION_SEARCH);
-    intent.putExtra(SearchManager.QUERY, query);
-    if (intent.resolveActivity(getPackageManager()) != null) {
-        startActivity(intent);
-    }
-}
-</pre>
-
-
-
-
 
 
 
@@ -2588,7 +2696,8 @@
       <li>"stop cycling"</li>
     </ul>
   </td>
-  <td><code>"vnd.google.fitness.TRACK"</code></td>
+  <td><a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_TRACK">
+      <code>FitnessIntents.ACTION_TRACK</code></a></td>
 </tr>
 <tr>
   <td>
@@ -2599,7 +2708,8 @@
       <li>"stop running"</li>
     </ul>
   </td>
-  <td><code>"vnd.google.fitness.TRACK"</code></td>
+  <td><a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_TRACK">
+      <code>FitnessIntents.ACTION_TRACK</code></a></td>
 </tr>
 <tr>
   <td>
@@ -2610,7 +2720,8 @@
       <li>"stop workout"</li>
     </ul>
   </td>
-  <td><code>"vnd.google.fitness.TRACK"</code></td>
+  <td><a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_TRACK">
+      <code>FitnessIntents.ACTION_TRACK</code></a></code></td>
 </tr>
 <tr>
   <td>
@@ -2620,7 +2731,8 @@
       <li>"what's my bpm"</li>
     </ul>
   </td>
-  <td><code>"vnd.google.fitness.VIEW"</code></td>
+  <td><a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_VIEW">
+      <code>FitnessIntents.ACTION_VIEW</code></a></code></td>
 </tr>
 <tr>
   <td>
@@ -2630,7 +2742,8 @@
       <li>"what's my step count"</li>
     </ul>
   </td>
-  <td><code>"vnd.google.fitness.VIEW"</code></td>
+  <td><a href="{@docRoot}reference/com/google/android/gms/fitness/FitnessIntents.html#ACTION_VIEW">
+      <code>FitnessIntents.ACTION_VIEW</code></a></td>
 </tr>
 <tr>
   <td style="vertical-align:middle">Local</td>
@@ -2673,6 +2786,16 @@
   <td>{@link android.provider.MediaStore#INTENT_ACTION_VIDEO_CAMERA MediaStore<br/>.INTENT_ACTION_VIDEO_CAMERA}</td>
 </tr>
 <tr>
+  <td style="vertical-align:middle">Search</td>
+  <td>
+    <p><a href="#SearchOnApp">Search using a specific app</a></p>
+    <ul class="now-list">
+      <li>"search for cat videos <br/>on myvideoapp"</li>
+    </ul>
+  </td>
+  <td><code>"com.google.android.gms.actions<br/>.SEARCH_ACTION"</code></td>
+</tr>
+<tr>
   <td style="vertical-align:middle">Web browser</td>
   <td>
     <p><a href="#ViewUrl">Open URL</a></p>
