diff --git a/MusicDemo/src/main/java/com/example/android/musicservicedemo/BrowseFragment.java b/MusicDemo/src/main/java/com/example/android/musicservicedemo/BrowseFragment.java
index 2b98263..1218c81 100644
--- a/MusicDemo/src/main/java/com/example/android/musicservicedemo/BrowseFragment.java
+++ b/MusicDemo/src/main/java/com/example/android/musicservicedemo/BrowseFragment.java
@@ -68,7 +68,6 @@
             mBrowserAdapter.clear();
             mBrowserAdapter.notifyDataSetInvalidated();
             for (MediaBrowser.MediaItem item : children) {
-                LogHelper.d(TAG, "MediaItem: -> " + item.getDescription().getDescription());
                 mBrowserAdapter.add(item);
             }
             mBrowserAdapter.notifyDataSetChanged();
@@ -91,6 +90,9 @@
                 mMediaId = mMediaBrowser.getRoot();
             }
             mMediaBrowser.subscribe(mMediaId, mSubscriptionCallback);
+            if (mMediaBrowser.getSessionToken() == null) {
+                throw new IllegalArgumentException("No Session token");
+            }
             MediaController mediaController = new MediaController(getActivity(),
                     mMediaBrowser.getSessionToken());
             getActivity().setMediaController(mediaController);
@@ -167,7 +169,7 @@
     private static class BrowseAdapter extends ArrayAdapter<MediaBrowser.MediaItem> {
 
         public BrowseAdapter(Context context) {
-            super(context, R.layout.list_item, new ArrayList<MediaBrowser.MediaItem>());
+            super(context, R.layout.media_list_item, new ArrayList<MediaBrowser.MediaItem>());
         }
 
         static class ViewHolder {
@@ -183,7 +185,7 @@
 
             if (convertView == null) {
                 convertView = LayoutInflater.from(getContext())
-                        .inflate(R.layout.list_item, parent, false);
+                        .inflate(R.layout.media_list_item, parent, false);
                 holder = new ViewHolder();
                 holder.mImageView = (ImageView) convertView.findViewById(R.id.play_eq);
                 holder.mImageView.setVisibility(View.GONE);
diff --git a/MusicDemo/src/main/java/com/example/android/musicservicedemo/MusicPlayerActivity.java b/MusicDemo/src/main/java/com/example/android/musicservicedemo/MusicPlayerActivity.java
index 7a2f8fb..39c46c4 100644
--- a/MusicDemo/src/main/java/com/example/android/musicservicedemo/MusicPlayerActivity.java
+++ b/MusicDemo/src/main/java/com/example/android/musicservicedemo/MusicPlayerActivity.java
@@ -46,7 +46,7 @@
     public void onMediaItemSelected(MediaBrowser.MediaItem item) {
         if (item.isPlayable()) {
             getMediaController().getTransportControls().playFromMediaId(item.getMediaId(), null);
-            QueueFragment queueFragment = QueueFragment.newInstance(item.getMediaId());
+            QueueFragment queueFragment = QueueFragment.newInstance();
             getFragmentManager().beginTransaction()
                     .replace(R.id.container, queueFragment)
                     .addToBackStack(null)
diff --git a/MusicDemo/src/main/java/com/example/android/musicservicedemo/QueueAdapter.java b/MusicDemo/src/main/java/com/example/android/musicservicedemo/QueueAdapter.java
index 9c7870b..d1f6ac5 100644
--- a/MusicDemo/src/main/java/com/example/android/musicservicedemo/QueueAdapter.java
+++ b/MusicDemo/src/main/java/com/example/android/musicservicedemo/QueueAdapter.java
@@ -35,7 +35,7 @@
     private long mActiveQueueItemId = MediaSession.QueueItem.UNKNOWN_ID;
 
     public QueueAdapter(Activity context) {
-        super(context, R.layout.list_item, new ArrayList<MediaSession.QueueItem>());
+        super(context, R.layout.media_list_item, new ArrayList<MediaSession.QueueItem>());
     }
 
     public void setActiveQueueItemId(long id) {
@@ -53,7 +53,7 @@
 
         if (convertView == null) {
             convertView = LayoutInflater.from(getContext())
-                    .inflate(R.layout.list_item, parent, false);
+                    .inflate(R.layout.media_list_item, parent, false);
             holder = new ViewHolder();
             holder.mImageView = (ImageView) convertView.findViewById(R.id.play_eq);
             holder.mTitleView = (TextView) convertView.findViewById(R.id.title);
diff --git a/MusicDemo/src/main/java/com/example/android/musicservicedemo/QueueFragment.java b/MusicDemo/src/main/java/com/example/android/musicservicedemo/QueueFragment.java
index 233b282..5d2525b 100644
--- a/MusicDemo/src/main/java/com/example/android/musicservicedemo/QueueFragment.java
+++ b/MusicDemo/src/main/java/com/example/android/musicservicedemo/QueueFragment.java
@@ -17,7 +17,6 @@
 
 import android.app.Fragment;
 import android.content.ComponentName;
-import android.media.MediaMetadata;
 import android.media.browse.MediaBrowser;
 import android.media.session.MediaController;
 import android.media.session.MediaSession;
@@ -35,12 +34,11 @@
 import java.util.List;
 
 /**
- * A class that shows the queue to the user
+ * A class that shows the Media Queue to the user.
  */
 public class QueueFragment extends Fragment {
 
-    private static final String TAG = QueueFragment.class.getSimpleName() + "BLAH";
-    private static final String ARGS_MEDIA_ID = "media_id";
+    private static final String TAG = QueueFragment.class.getSimpleName();
 
     private ImageButton mSkipNext;
     private ImageButton mSkipPrevious;
@@ -50,17 +48,18 @@
     private MediaController.TransportControls mTransportControls;
     private MediaController mMediaController;
     private PlaybackState mPlaybackState;
-    private boolean mConnected;
 
     private QueueAdapter mQueueAdapter;
-    private String mMediaId;
-    private ListView mListView;
 
     private MediaBrowser.ConnectionCallback mConnectionCallback =
             new MediaBrowser.ConnectionCallback() {
         @Override
         public void onConnected() {
-            LogHelper.d(TAG, "onConnected: session token " + mMediaBrowser.getSessionToken());
+            LogHelper.d(TAG, "onConnected: session token ", mMediaBrowser.getSessionToken());
+
+            if (mMediaBrowser.getSessionToken() == null) {
+                throw new IllegalArgumentException("No Session token");
+            }
 
             mMediaController = new MediaController(getActivity(),
                     mMediaBrowser.getSessionToken());
@@ -70,12 +69,6 @@
             getActivity().setMediaController(mMediaController);
             mPlaybackState = mMediaController.getPlaybackState();
 
-            long activeItemId = MediaSession.QueueItem.UNKNOWN_ID;
-            if (mPlaybackState != null) {
-                activeItemId = mPlaybackState.getActiveQueueItemId();
-            }
-            mQueueAdapter.setActiveQueueItemId(activeItemId);
-
             List<MediaSession.QueueItem> queue = mMediaController.getQueue();
             if (queue != null) {
                 mQueueAdapter.clear();
@@ -83,16 +76,12 @@
                 mQueueAdapter.addAll(queue);
                 mQueueAdapter.notifyDataSetChanged();
             }
-
-            LogHelper.d(TAG, "got playback state " + mPlaybackState);
-            mConnected = true;
             onPlaybackStateChanged(mPlaybackState);
         }
 
         @Override
         public void onConnectionFailed() {
             LogHelper.d(TAG, "onConnectionFailed");
-            mConnected = false;
         }
 
         @Override
@@ -100,7 +89,6 @@
             LogHelper.d(TAG, "onConnectionSuspended");
             mMediaController.unregisterCallback(mSessionCallback);
             mTransportControls = null;
-            mConnected = false;
             mMediaController = null;
             getActivity().setMediaController(null);
         }
@@ -120,14 +108,14 @@
             if (state == null) {
                 return;
             }
-            LogHelper.d(TAG, "Received playback state change to state " + state.getState());
+            LogHelper.d(TAG, "Received playback state change to state ", state.getState());
             mPlaybackState = state;
             QueueFragment.this.onPlaybackStateChanged(state);
         }
 
         @Override
         public void onQueueChanged(List<MediaSession.QueueItem> queue) {
-            LogHelper.d(TAG, "onQueueChanged " + queue);
+            LogHelper.d(TAG, "onQueueChanged ", queue);
             if (queue != null) {
                 mQueueAdapter.clear();
                 mQueueAdapter.notifyDataSetInvalidated();
@@ -137,15 +125,10 @@
         }
     };
 
-    public static QueueFragment newInstance(String mediaId) {
-        QueueFragment fragment = new QueueFragment();
-        Bundle args = new Bundle();
-        args.putString(ARGS_MEDIA_ID, mediaId);
-        fragment.setArguments(args);
-        return fragment;
+    public static QueueFragment newInstance() {
+        return new QueueFragment();
     }
 
-
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
@@ -165,7 +148,7 @@
 
         mQueueAdapter = new QueueAdapter(getActivity());
 
-        mListView = (ListView) rootView.findViewById(R.id.list_view);
+        ListView mListView = (ListView) rootView.findViewById(R.id.list_view);
         mListView.setAdapter(mQueueAdapter);
         mListView.setFocusable(true);
         mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@@ -173,14 +156,9 @@
             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                 MediaSession.QueueItem item = mQueueAdapter.getItem(position);
                 mTransportControls.skipToQueueItem(item.getQueueId());
-                mQueueAdapter.setActiveQueueItemId(item.getQueueId());
-                mQueueAdapter.notifyDataSetChanged();
             }
         });
 
-        Bundle args = getArguments();
-        mMediaId = args.getString(ARGS_MEDIA_ID);
-
         mMediaBrowser = new MediaBrowser(getActivity(),
                 new ComponentName(getActivity(), MusicService.class),
                 mConnectionCallback, null);
@@ -188,7 +166,6 @@
         return rootView;
     }
 
-
     @Override
     public void onResume() {
         super.onResume();
@@ -210,7 +187,7 @@
 
 
     private void onPlaybackStateChanged(PlaybackState state) {
-        LogHelper.d(TAG, "onPlaybackStateChanged " + state);
+        LogHelper.d(TAG, "onPlaybackStateChanged ", state);
         if (state == null) {
             return;
         }
@@ -289,7 +266,6 @@
                     skipToNext();
                     break;
             }
-
         }
     };
 
diff --git a/MusicDemo/src/main/res/layout/fragment_list.xml b/MusicDemo/src/main/res/layout/fragment_list.xml
index a40240f..c169fec 100644
--- a/MusicDemo/src/main/res/layout/fragment_list.xml
+++ b/MusicDemo/src/main/res/layout/fragment_list.xml
@@ -17,7 +17,7 @@
               android:orientation="vertical"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
-              android:padding="16dp">
+              android:padding="@dimen/fragment_list_padding">
 
     <LinearLayout
         android:id="@+id/controls"
diff --git a/MusicDemo/src/main/res/layout/list_item.xml b/MusicDemo/src/main/res/layout/media_list_item.xml
similarity index 97%
rename from MusicDemo/src/main/res/layout/list_item.xml
rename to MusicDemo/src/main/res/layout/media_list_item.xml
index 729628f..72c0ccf 100644
--- a/MusicDemo/src/main/res/layout/list_item.xml
+++ b/MusicDemo/src/main/res/layout/media_list_item.xml
@@ -31,7 +31,7 @@
         android:layout_height="wrap_content"
         android:minHeight="?android:attr/listPreferredItemHeight"
         android:mode="twoLine"
-        android:padding="4dp"
+        android:padding="@dimen/list_item_padding"
         android:orientation="vertical">
 
         <TextView
diff --git a/MusicDemo/src/main/res/values/dimens.xml b/MusicDemo/src/main/res/values/dimens.xml
index f905809..e57a8c9 100644
--- a/MusicDemo/src/main/res/values/dimens.xml
+++ b/MusicDemo/src/main/res/values/dimens.xml
@@ -15,5 +15,7 @@
   limitations under the License.
   -->
 <resources>
-    <dimen name="margin_text_view">6dip</dimen>
+    <dimen name="fragment_list_padding">16dp</dimen>
+    <dimen name="list_item_padding">4dp</dimen>
+    <dimen name="margin_text_view">6dp</dimen>
 </resources>
