diff --git a/content/ShareActionProvider/Application/src/main/assets/photo_1.jpg b/content/ShareActionProvider/Application/src/main/assets/photo_1.jpg
index cd365c7..73ff1d7 100644
--- a/content/ShareActionProvider/Application/src/main/assets/photo_1.jpg
+++ b/content/ShareActionProvider/Application/src/main/assets/photo_1.jpg
Binary files differ
diff --git a/content/ShareActionProvider/Application/src/main/assets/photo_2.jpg b/content/ShareActionProvider/Application/src/main/assets/photo_2.jpg
index f088c11..9859532 100644
--- a/content/ShareActionProvider/Application/src/main/assets/photo_2.jpg
+++ b/content/ShareActionProvider/Application/src/main/assets/photo_2.jpg
Binary files differ
diff --git a/content/ShareActionProvider/Application/src/main/assets/photo_3.jpg b/content/ShareActionProvider/Application/src/main/assets/photo_3.jpg
index d4cff6a..cb6d0c2 100644
--- a/content/ShareActionProvider/Application/src/main/assets/photo_3.jpg
+++ b/content/ShareActionProvider/Application/src/main/assets/photo_3.jpg
Binary files differ
diff --git a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediasession/service/MusicService.java b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediasession/service/MusicService.java
index df4b736..1ac0243 100644
--- a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediasession/service/MusicService.java
+++ b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediasession/service/MusicService.java
@@ -18,6 +18,7 @@
 
 import android.app.Notification;
 import android.content.Intent;
+import android.net.Uri;
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.v4.content.ContextCompat;
@@ -50,6 +51,8 @@
     public void onCreate() {
         super.onCreate();
 
+        MusicLibrary.createAllMedia(this);
+
         // Create a new MediaSession.
         mSession = new MediaSessionCompat(this, "MusicService");
         mCallback = new MediaSessionCallback();
@@ -94,6 +97,35 @@
         result.sendResult(MusicLibrary.getMediaItems());
     }
 
+    @Override
+    public void onLoadItem(String itemId, @NonNull Result<MediaBrowserCompat.MediaItem> result) {
+        for (MediaBrowserCompat.MediaItem item : MusicLibrary.getMediaItems()) {
+            if (item.getDescription().getMediaId().equals(itemId)) {
+                result.sendResult(item);
+                return;
+            }
+        }
+        result.sendResult(null);
+    }
+
+    @Override
+    public void onSearch(
+            @NonNull String query,
+            Bundle extras,
+            @NonNull Result<List<MediaBrowserCompat.MediaItem>> result) {
+        final List<MediaBrowserCompat.MediaItem> searchResults = new ArrayList<>();
+        for (MediaBrowserCompat.MediaItem item : MusicLibrary.getMediaItems()) {
+            final MediaDescriptionCompat description = item.getDescription();
+            final String mediaTitle = description.getTitle().toString().toLowerCase();
+            final String mediaArtist = description.getSubtitle().toString().toLowerCase();
+            query = query.toLowerCase();
+            if (mediaTitle.contains(query) || mediaArtist.contains(query)) {
+                searchResults.add(item);
+            }
+        }
+        result.sendResult(searchResults);
+    }
+
     // MediaSession Callback: Transport Controls -> MediaPlayerAdapter
     public class MediaSessionCallback extends MediaSessionCompat.Callback {
         private final List<MediaSessionCompat.QueueItem> mPlaylist = new ArrayList<>();
@@ -146,6 +178,17 @@
         }
 
         @Override
+        public void onPlayFromMediaId(String mediaId, Bundle extras) {
+            mPreparedMedia = MusicLibrary.getMetadata(MusicService.this, mediaId);
+            mPlayback.playFromMedia(mPreparedMedia);
+        }
+
+        @Override
+        public void onPlayFromUri(Uri uri, Bundle extras) {
+            onPlayFromMediaId(uri.toString(), extras);
+        }
+
+        @Override
         public void onPause() {
             mPlayback.pause();
         }
diff --git a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediasession/service/contentcatalogs/MusicLibrary.java b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediasession/service/contentcatalogs/MusicLibrary.java
index dacb009..6c30579 100644
--- a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediasession/service/contentcatalogs/MusicLibrary.java
+++ b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediasession/service/contentcatalogs/MusicLibrary.java
@@ -39,8 +39,9 @@
     private static final HashMap<String, Integer> albumRes = new HashMap<>();
     private static final HashMap<String, String> musicFileName = new HashMap<>();
 
-    static {
+    public static void createAllMedia(Context context) {
         createMediaMetadataCompat(
+                context,
                 "Jazz_In_Paris",
                 "Jazz in Paris",
                 "Media Right Productions",
@@ -52,6 +53,7 @@
                 R.drawable.album_jazz_blues,
                 "album_jazz_blues");
         createMediaMetadataCompat(
+                context,
                 "The_Coldest_Shoulder",
                 "The Coldest Shoulder",
                 "The 126ers",
@@ -121,6 +123,7 @@
     }
 
     private static void createMediaMetadataCompat(
+            Context context,
             String mediaId,
             String title,
             String artist,
@@ -135,10 +138,11 @@
                 mediaId,
                 new MediaMetadataCompat.Builder()
                         .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, mediaId)
+                        .putString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI, mediaId)
                         .putString(MediaMetadataCompat.METADATA_KEY_ALBUM, album)
                         .putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist)
                         .putLong(MediaMetadataCompat.METADATA_KEY_DURATION,
-                                 TimeUnit.MILLISECONDS.convert(duration, durationUnit))
+                                TimeUnit.MILLISECONDS.convert(duration, durationUnit))
                         .putString(MediaMetadataCompat.METADATA_KEY_GENRE, genre)
                         .putString(
                                 MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI,
@@ -147,6 +151,9 @@
                                 MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI,
                                 getAlbumArtUri(albumArtResName))
                         .putString(MediaMetadataCompat.METADATA_KEY_TITLE, title)
+                        .putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART,
+                                BitmapFactory.decodeResource(context.getResources(),
+                                albumArtResId))
                         .build());
         albumRes.put(mediaId, albumArtResId);
         musicFileName.put(mediaId, musicFilename);
diff --git a/renderScript/BasicRenderScript/Application/src/main/res/drawable-nodpi/data.jpg b/renderScript/BasicRenderScript/Application/src/main/res/drawable-nodpi/data.jpg
index 81a87b1..b7a0cbd 100644
--- a/renderScript/BasicRenderScript/Application/src/main/res/drawable-nodpi/data.jpg
+++ b/renderScript/BasicRenderScript/Application/src/main/res/drawable-nodpi/data.jpg
Binary files differ
