diff --git a/samples/ApiDemos/res/layout/clipboard.xml b/samples/ApiDemos/res/layout/clipboard.xml
index db1e302..645b1ea 100644
--- a/samples/ApiDemos/res/layout/clipboard.xml
+++ b/samples/ApiDemos/res/layout/clipboard.xml
@@ -88,6 +88,14 @@
         android:prompt="@string/clip_type_prompt"
     />
 
+    <TextView
+        android:id="@+id/clip_mime_types"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_weight="0"
+        android:textStyle="normal"
+        />
+
     <EditText
         android:id="@+id/clip_text"
         android:layout_width="match_parent"
diff --git a/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.java b/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.java
index dea06d5..e369ca9 100644
--- a/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.java
+++ b/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.java
@@ -1,10 +1,26 @@
+/**
+ * Copyright (c) 2010, The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
 package com.example.android.apis.content;
 
 import com.example.android.apis.R;
 
 import android.app.Activity;
 import android.content.ClipboardManager;
-import android.content.ClippedData;
+import android.content.ClipData;
 import android.content.Context;
 import android.content.Intent;
 import android.content.res.Resources;
@@ -22,6 +38,7 @@
     ClipboardManager mClipboard;
 
     Spinner mSpinner;
+    TextView mMimeTypes;
     EditText mEditText;
 
     CharSequence mStyledText;
@@ -68,6 +85,7 @@
                     }
                 });
 
+        mMimeTypes = (TextView)findViewById(R.id.clip_mime_types);
         mEditText = (EditText)findViewById(R.id.clip_text);
 
         mClipboard.addPrimaryClipChangedListener(mPrimaryChangeListener);
@@ -81,28 +99,33 @@
     }
 
     public void pasteStyledText(View button) {
-        mClipboard.setPrimaryClip(new ClippedData("Styled Text", null,
-                new ClippedData.Item(mStyledText)));
+        mClipboard.setPrimaryClip(ClipData.newPlainText("Styled Text", null, mStyledText));
     }
 
     public void pastePlainText(View button) {
-        mClipboard.setPrimaryClip(new ClippedData("Plain Text", null,
-                new ClippedData.Item(mPlainText)));
+        mClipboard.setPrimaryClip(ClipData.newPlainText("Styled Text", null, mPlainText));
     }
 
     public void pasteIntent(View button) {
         Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.android.com/"));
-        mClipboard.setPrimaryClip(new ClippedData("View intent", null,
-                new ClippedData.Item(intent)));
+        mClipboard.setPrimaryClip(ClipData.newIntent("VIEW intent", null, intent));
     }
 
     public void pasteUri(View button) {
-        mClipboard.setPrimaryClip(new ClippedData("View intent", null,
-                new ClippedData.Item(Uri.parse("http://www.android.com/"))));
+        mClipboard.setPrimaryClip(ClipData.newRawUri("URI", null,
+                Uri.parse("http://www.android.com/")));
     }
 
     void updateClipData() {
-        ClippedData clip = mClipboard.getPrimaryClip();
+        ClipData clip = mClipboard.getPrimaryClip();
+        String[] mimeTypes = clip != null ? clip.filterMimeTypes("*/*") : null;
+        mMimeTypes.setText("");
+        if (mimeTypes != null) {
+            for (int i=0; i<mimeTypes.length; i++) {
+                mMimeTypes.append(mimeTypes[i]);
+                mMimeTypes.append("\n");
+            }
+        }
         if (clip == null) {
             mSpinner.setSelection(0);
             mEditText.setText("");
diff --git a/samples/NotePad/Android.mk b/samples/NotePad/Android.mk
new file mode 100644
index 0000000..7939212
--- /dev/null
+++ b/samples/NotePad/Android.mk
@@ -0,0 +1,16 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := samples
+
+# Only compile source java files in this apk.
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_PACKAGE_NAME := NotePad
+
+LOCAL_SDK_VERSION := current
+
+include $(BUILD_PACKAGE)
+
+# Use the following include to make our test apk.
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/samples/NotePad/src/com/example/android/notepad/NoteEditor.java b/samples/NotePad/src/com/example/android/notepad/NoteEditor.java
index 78a9721..da85974 100644
--- a/samples/NotePad/src/com/example/android/notepad/NoteEditor.java
+++ b/samples/NotePad/src/com/example/android/notepad/NoteEditor.java
@@ -20,7 +20,7 @@
 
 import android.app.Activity;
 import android.content.ClipboardManager;
-import android.content.ClippedData;
+import android.content.ClipData;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.ContentValues;
@@ -510,14 +510,14 @@
         ContentResolver cr = getContentResolver();
 
         // Gets the clipboard data from the clipboard
-        ClippedData clip = clipboard.getPrimaryClip();
+        ClipData clip = clipboard.getPrimaryClip();
         if (clip != null) {
 
             String text=null;
             String title=null;
 
             // Gets the first item from the clipboard data
-            ClippedData.Item item = clip.getItem(0);
+            ClipData.Item item = clip.getItem(0);
 
             // Tries to get the item's contents as a URI pointing to a note
             Uri uri = item.getUri();
diff --git a/samples/NotePad/src/com/example/android/notepad/NotePadProvider.java b/samples/NotePad/src/com/example/android/notepad/NotePadProvider.java
index f121553..1131356 100644
--- a/samples/NotePad/src/com/example/android/notepad/NotePadProvider.java
+++ b/samples/NotePad/src/com/example/android/notepad/NotePadProvider.java
@@ -18,6 +18,7 @@
 
 import com.example.android.notepad.NotePad;
 
+import android.content.ClipDescription;
 import android.content.ContentProvider;
 import android.content.ContentUris;
 import android.content.ContentValues;
@@ -349,10 +350,17 @@
            default:
                throw new IllegalArgumentException("Unknown URI " + uri);
        }
-   }
+    }
 
 //BEGIN_INCLUDE(stream)
     /**
+     * This describes the MIME types that are supported for opening a note
+     * URI as a stream.
+     */
+    static ClipDescription NOTE_STREAM_TYPES = new ClipDescription(null,
+            new String[] { ClipDescription.MIMETYPE_TEXT_PLAIN });
+
+    /**
      * Returns the types of available data streams.  URIs to specific notes are supported.
      * The application can convert such a note to a plain text stream.
      *
@@ -378,12 +386,7 @@
             // If the pattern is for note IDs and the MIME filter is text/plain, then return
             // text/plain
             case NOTE_ID:
-                if (compareMimeTypes("text/plain", mimeTypeFilter)) {
-                    return new String[] { "text/plain" };
-                }
-
-                // If the URI is for a note id, but the MIME filter isn't text/plain, return null.
-                return null;
+                return NOTE_STREAM_TYPES.filterMimeTypes(mimeTypeFilter);
 
                 // If the URI pattern doesn't match any permitted patterns, throws an exception.
             default:
@@ -394,16 +397,15 @@
 
     /**
      * Returns a stream of data for each supported stream type. This method does a query on the
-     * incomding URI, then uses
+     * incoming URI, then uses
      * {@link android.content.ContentProvider#openPipeHelper(Uri, String, Bundle, Object,
      * PipeDataWriter)} to start another thread in which to convert the data into a stream.
      *
      * @param uri The URI pattern that points to the data stream
      * @param mimeTypeFilter A String containing a MIME type. This method tries to get a stream of
      * data with this MIME type.
-     * @param opts The access mode for the data stream. This may be "r" for read-only, "w" for write
-     * with overwrite, "wa" for write with append, "rw" for read and write access for existing data,
-     * and "rwt" that truncates the existing file if the new data is smaller.
+     * @param opts Additional options supplied by the caller.  Can be interpreted as
+     * desired by the content provider.
      * @return AssetFileDescriptor A handle to the file.
      * @throws FileNotFoundException if there is no file associated with the incoming URI.
      */
diff --git a/samples/NotePad/src/com/example/android/notepad/NotesList.java b/samples/NotePad/src/com/example/android/notepad/NotesList.java
index 39be81c..6229dd2 100644
--- a/samples/NotePad/src/com/example/android/notepad/NotesList.java
+++ b/samples/NotePad/src/com/example/android/notepad/NotesList.java
@@ -20,7 +20,7 @@
 
 import android.app.ListActivity;
 import android.content.ClipboardManager;
-import android.content.ClippedData;
+import android.content.ClipData;
 import android.content.ComponentName;
 import android.content.ContentUris;
 import android.content.Context;
@@ -485,7 +485,6 @@
             }
 
 //BEGIN_INCLUDE(copy)
-
             // Copies the selected note to the clipboard
             case MENU_ITEM_COPY: {
 
@@ -497,12 +496,11 @@
                 Uri noteUri = ContentUris.withAppendedId(getIntent().getData(), info.id);
 
                 // Copies the notes URI to the clipboard. In effect, this copies the note itself
-                clipboard.setPrimaryClip(
-                        new ClippedData(                       // creates a new clipboard item
-                                null,                          // no visible label
-                                null,                          // no visible icon
-                                new ClippedData.Item(noteUri)  // A clipboard Item that is a URI.
-                        )
+                clipboard.setPrimaryClip(ClipData.newUri(   // new clipboard item holding a URI
+                        getContentResolver(),               // resolver to retrieve URI info
+                        "Note",                             // label for the clip
+                        null,                               // icon for the clip
+                        noteUri)                            // the URI
                 );
 
                 // Returns to the caller and skips further processing.
