reconcile korg/master into goog/master
diff --git a/res/layout-finger/audio_player_common.xml b/res/layout-finger/audio_player_common.xml
index 95320d9..6e14f75 100644
--- a/res/layout-finger/audio_player_common.xml
+++ b/res/layout-finger/audio_player_common.xml
@@ -25,8 +25,8 @@
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:background="#ff5a5a5a"
-        android:paddingTop="1px"
-        android:paddingBottom="4px"
+        android:paddingTop="1dip"
+        android:paddingBottom="4dip"
         android:orientation="horizontal">
 
         <TextView android:id="@+id/currenttime"
@@ -40,7 +40,7 @@
             android:layout_gravity="bottom"
             android:layout_weight="1"
             android:layout_width="0dip"
-            android:paddingLeft="5px"
+            android:paddingLeft="5dip"
             android:layout_height="wrap_content" />
 
         <LinearLayout
@@ -48,8 +48,8 @@
             android:layout_height="wrap_content"
             android:orientation="horizontal"
             android:layout_gravity="bottom"
-            android:layout_marginTop="1px"
-            android:layout_marginBottom="2px"
+            android:layout_marginTop="1dip"
+            android:layout_marginBottom="2dip"
             android:gravity="center">
 
             <com.android.music.RepeatingImageButton android:id="@+id/prev" style="@android:style/MediaButton.Previous" />
@@ -69,7 +69,7 @@
             android:shadowDy="0"
             android:shadowRadius="3"
             android:gravity="right"
-            android:paddingRight="5px"
+            android:paddingRight="5dip"
             android:layout_gravity="bottom"
             android:layout_weight="1"
             android:layout_width="0dip"
@@ -81,9 +81,9 @@
         android:background="#ff5a5a5a"
         style="?android:attr/progressBarStyleHorizontal"
         android:layout_width="fill_parent"
-        android:layout_height="36px"
-        android:paddingLeft="5px"
-        android:paddingRight="5px"
-        android:paddingBottom="4px" />
+        android:layout_height="36dip"
+        android:paddingLeft="5dip"
+        android:paddingRight="5dip"
+        android:paddingBottom="4dip" />
 
 </merge>
diff --git a/res/layout-finger/confirm_delete.xml b/res/layout-finger/confirm_delete.xml
index be8d7ec..1fdf3fc 100644
--- a/res/layout-finger/confirm_delete.xml
+++ b/res/layout-finger/confirm_delete.xml
@@ -31,17 +31,17 @@
     <RelativeLayout
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:padding="6px"
+        android:padding="6dip"
         android:background="#ffffff" >
 
         <Button android:id="@+id/delete"
-            android:layout_width="120px" android:layout_height="wrap_content" 
+            android:layout_width="120dip" android:layout_height="wrap_content" 
             android:text="@string/delete_confirm_button_text"
             android:layout_gravity="center_horizontal"
             android:layout_alignParentLeft="true" />
 
         <Button android:id="@+id/cancel"
-            android:layout_width="120px" android:layout_height="wrap_content" 
+            android:layout_width="120dip" android:layout_height="wrap_content" 
             android:text="@string/cancel"
             android:layout_alignParentRight="true" />
 
diff --git a/res/layout-finger/weekpicker.xml b/res/layout-finger/weekpicker.xml
index 00ced6f..053a1e2 100644
--- a/res/layout-finger/weekpicker.xml
+++ b/res/layout-finger/weekpicker.xml
@@ -39,25 +39,25 @@
         android:focusable="true"
         android:focusableInTouchMode="true"
         android:layout_gravity="center_horizontal"
-        android:layout_marginTop="6px"
-        android:layout_marginBottom="6px"
+        android:layout_marginTop="6dip"
+        android:layout_marginBottom="6dip"
         />
     
     <!-- Set button -->
     <RelativeLayout
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:padding="6px"
+        android:padding="6dip"
         android:background="#ffffff" >
 
         <Button android:id="@+id/set"
-            android:layout_width="120px"
+            android:layout_width="120dip"
             android:layout_height="wrap_content"
             android:text="@string/weekpicker_set"
             android:layout_alignParentLeft="true" />
 
         <Button android:id="@+id/cancel"
-            android:layout_width="120px"
+            android:layout_width="120dip"
             android:layout_height="wrap_content" 
             android:text="@string/cancel"
             android:layout_alignParentRight="true" />
diff --git a/res/layout-keysexposed/create_playlist.xml b/res/layout-keysexposed/create_playlist.xml
index 1bf2252..9a91a46 100644
--- a/res/layout-keysexposed/create_playlist.xml
+++ b/res/layout-keysexposed/create_playlist.xml
@@ -40,16 +40,16 @@
     <RelativeLayout
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:padding="6px"
+        android:padding="6dip"
         android:background="#ffffff" >
 
         <Button android:id="@+id/create"
-            android:layout_width="120px" android:layout_height="wrap_content" 
+            android:layout_width="120dip" android:layout_height="wrap_content" 
             android:text="@string/create_playlist_create_text"
             android:layout_alignParentLeft="true" />
 
         <Button android:id="@+id/cancel"
-            android:layout_width="120px" android:layout_height="wrap_content" 
+            android:layout_width="120dip" android:layout_height="wrap_content" 
             android:text="@string/cancel"
             android:layout_alignParentRight="true" />
 
diff --git a/res/layout-keyshidden/create_playlist.xml b/res/layout-keyshidden/create_playlist.xml
index bb5c6ac..675228b 100644
--- a/res/layout-keyshidden/create_playlist.xml
+++ b/res/layout-keyshidden/create_playlist.xml
@@ -51,16 +51,16 @@
     <RelativeLayout
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
-        android:padding="6px"
+        android:padding="6dip"
         android:background="#ffffff" >
 
         <Button android:id="@+id/create"
-            android:layout_width="120px" android:layout_height="wrap_content" 
+            android:layout_width="120dip" android:layout_height="wrap_content" 
             android:text="@string/create_playlist_create_text"
             android:layout_alignParentLeft="true" />
 
         <Button android:id="@+id/cancel"
-            android:layout_width="120px" android:layout_height="wrap_content" 
+            android:layout_width="120dip" android:layout_height="wrap_content" 
             android:text="@string/cancel"
             android:layout_alignParentRight="true" />
 
diff --git a/res/layout/scanning.xml b/res/layout/scanning.xml
index ff3caa6..c4aa9ad 100644
--- a/res/layout/scanning.xml
+++ b/res/layout/scanning.xml
@@ -18,7 +18,7 @@
     android:orientation="vertical"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
-    android:padding="12px">
+    android:padding="12dip">
 
     <ProgressBar android:id="@+id/spinner"
         style="?android:attr/progressBarStyleLarge"
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index f6c5f9f..b43e378 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -136,4 +136,7 @@
     <string name="sort_by_artist">"Interpreti"</string>
     <string name="music_picker_title">"Vyberte hudební stopu"</string>
     <string name="gadget_track">"Stopa <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <string name="fail_to_start_stream">"Přehrání požadovaného datového proudu se nezdařilo."</string>
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values/dimens.xml b/res/values-da-finger/strings2.xml
similarity index 68%
rename from res/values/dimens.xml
rename to res/values-da-finger/strings2.xml
index 539b64f..838dac5 100644
--- a/res/values/dimens.xml
+++ b/res/values-da-finger/strings2.xml
@@ -1,20 +1,19 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!-- Copyright (C) 2009 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.
 -->
-
-<resources>
-    <!-- Size of widget album art cutout -->
-    <dimen name="appwidget_cutout">198dip</dimen>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="notification_artist_album">"<xliff:g id="ALBUM">%2$s</xliff:g>"\n"<xliff:g id="ARTIST">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-da-keysexposed/strings.xml b/res/values-da-keysexposed/strings.xml
new file mode 100644
index 0000000..f21aa99
--- /dev/null
+++ b/res/values-da-keysexposed/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="create_playlist_create_text_prompt">"Afspilningslistens navn"</string>
+    <string name="rename_playlist_same_prompt">"Omdøb \"<xliff:g id="PLAYLIST">%s</xliff:g>\" til"</string>
+    <string name="rename_playlist_diff_prompt">"Omdøb \"<xliff:g id="PLAYLIST">%s</xliff:g>\" til"</string>
+</resources>
diff --git a/res/values-da-keyshidden/strings.xml b/res/values-da-keyshidden/strings.xml
new file mode 100644
index 0000000..957e03f
--- /dev/null
+++ b/res/values-da-keyshidden/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="create_playlist_create_text_prompt">"Åbn tastaturet for at give din nye afspilningsliste et navn, eller vælg Gem for at give den navnet \"%s\"."</string>
+    <string name="rename_playlist_same_prompt">"Åbn tastaturet for at give afspilningslisten \"<xliff:g id="PLAYLIST">%s</xliff:g>\" et nyt navn."</string>
+    <string name="rename_playlist_diff_prompt">"Åbn tastaturet for at give afspilningslisten \"<xliff:g id="PLAYLIST">%s</xliff:g>\" et navn, eller vælg Gem for at give den navnet \"%s\"."</string>
+</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
new file mode 100644
index 0000000..66de33d
--- /dev/null
+++ b/res/values-da/strings.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="onesong">"1 sang"</string>
+  <plurals name="Nsongs">
+    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> sange"</item>
+  </plurals>
+  <plurals name="Nsongscomp">
+    <item quantity="other">"<xliff:g id="COUNT_FOR_ARTIST">%2$d</xliff:g> af <xliff:g id="TOTAL_COUNT">%1$d</xliff:g> sange"</item>
+  </plurals>
+  <plurals name="Nalbums">
+    <item quantity="one">"1 album"</item>
+    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> albummer"</item>
+  </plurals>
+    <string name="goto_start">"Bibliotek"</string>
+    <string name="goto_playback">"Afspilning"</string>
+    <string name="party_shuffle">"Festmix"</string>
+    <string name="party_shuffle_off">"Festmix er slået fra"</string>
+    <string name="delete_item">"Slet"</string>
+    <string name="shuffle_all">"Bland alle"</string>
+    <string name="play_all">"Spil alle"</string>
+    <string name="delete_artist_desc">"Alle sange af <xliff:g id="ARTIST">%s</xliff:g> slettes permanent fra SD-kortet."</string>
+    <string name="delete_album_desc">"Hele albummet \"<xliff:g id="ALBUM">%s</xliff:g>\" slettes permanent fra SD-kortet."</string>
+    <string name="delete_song_desc">"\"<xliff:g id="SONG">%s</xliff:g>\" slettes permanent fra SD-kortet."</string>
+    <string name="delete_confirm_button_text">"OK"</string>
+  <plurals name="NNNtracksdeleted">
+    <item quantity="one">"Der blev slettet 1 sang."</item>
+    <item quantity="other">"<xliff:g id="SONGS_TO_DELETE">%d</xliff:g> sange blev slettet."</item>
+  </plurals>
+    <string name="scanning">"Scanner SD-kort ..."</string>
+    <string name="nowplaying_title">"Spiller nu"</string>
+    <string name="partyshuffle_title">"Festmix"</string>
+    <string name="artists_title">"Kunstnere"</string>
+    <string name="albums_menu">"Albummer"</string>
+    <string name="albums_title">"Albummer"</string>
+    <string name="tracks_menu">"Sange"</string>
+    <string name="tracks_title">"Sange"</string>
+    <string name="playlists_menu">"Afspilningslister"</string>
+    <string name="playlists_title">"Afspilningslister"</string>
+    <string name="videos_title">"Videoer"</string>
+    <string name="all_title">"Alle medier"</string>
+    <string name="browse_menu">"Kunstnere"</string>
+    <string name="search_title">"Søg"</string>
+    <string name="no_tracks_title">"Der er ingen sange"</string>
+    <string name="no_videos_title">"Der er ingen videoer"</string>
+    <string name="no_playlists_title">"Der er ingen afspilningslister"</string>
+    <string name="delete_playlist_menu">"Slet"</string>
+    <string name="edit_playlist_menu">"Rediger"</string>
+    <string name="rename_playlist_menu">"Omdøb"</string>
+    <string name="playlist_deleted_message">"Afspilningsliste slettet."</string>
+    <string name="playlist_renamed_message">"Afspilningslisten er omdøbt."</string>
+    <string name="recentlyadded">"Tilføjet for nyligt"</string>
+    <string name="recentlyadded_title">"Tilføjet for nyligt"</string>
+    <string name="podcasts_listitem">"Podcasts"</string>
+    <string name="podcasts_title">"Podcasts"</string>
+    <string name="sdcard_missing_title">"Der er intet SD-kort"</string>
+    <string name="sdcard_missing_message">"Der er ikke indsat et SD-kort i din telefon."</string>
+    <string name="sdcard_busy_title">"SD-kortet er ikke tilgængeligt"</string>
+    <string name="sdcard_busy_message">"Beklager! Dit SD-kort er optaget."</string>
+    <string name="sdcard_error_title">"SD-kortfejl"</string>
+    <string name="sdcard_error_message">"Der opstod en fejl på dit SD-kort."</string>
+    <string name="unknown_artist_name">"Ukendt kunstner"</string>
+    <string name="unknown_album_name">"Ukendt album"</string>
+    <string name="shuffle_on_notif">"Bland er slået til."</string>
+    <string name="shuffle_off_notif">"Bland er slået fra."</string>
+    <string name="repeat_off_notif">"Gentagelse er slået fra."</string>
+    <string name="repeat_current_notif">"Den aktuelle sang gentages."</string>
+    <string name="repeat_all_notif">"Gentager alle sange."</string>
+    <string name="ringtone_menu">"Brug som telefonringetone"</string>
+    <string name="ringtone_menu_short">"Brug som ringetone"</string>
+    <string name="ringtone_set">"\"%s\" er indstillet som ringetone for telefonen."</string>
+    <string name="play_selection">"Afspil"</string>
+    <string name="add_to_playlist">"Føj til afspilningsliste"</string>
+    <string name="queue">"Aktuel afspilningsliste"</string>
+    <string name="new_playlist">"Ny"</string>
+    <string name="new_playlist_name_template">"Ny afspilningsliste <xliff:g id="NUMBER">%d</xliff:g>"</string>
+  <plurals name="NNNtrackstoplaylist">
+    <item quantity="one">"Der blev føjet 1 sang til afspilningslisten."</item>
+    <item quantity="other">"%d sange føjet til afspilningsliste."</item>
+  </plurals>
+    <string name="emptyplaylist">"Den valgte afspilningsliste er tom."</string>
+    <string name="create_playlist_create_text">"Gem"</string>
+    <string name="create_playlist_overwrite_text">"Overskriv"</string>
+    <string name="service_start_error_title">"Afspilningsproblem"</string>
+    <string name="service_start_error_msg">"Beklager! Sangen kunne ikke spilles."</string>
+    <string name="service_start_error_button">"OK"</string>
+  <string-array name="weeklist">
+    <item>"1 uge"</item>
+    <item>"2 uger"</item>
+    <item>"3 uger"</item>
+    <item>"4 uger"</item>
+    <item>"5 uger"</item>
+    <item>"6 uger"</item>
+    <item>"7 uger"</item>
+    <item>"8 uger"</item>
+    <item>"9 uger"</item>
+    <item>"10 uger"</item>
+    <item>"11 uger"</item>
+    <item>"12 uger"</item>
+  </string-array>
+    <string name="weekpicker_set">"Færdig"</string>
+    <string name="weekpicker_title">"Indstil tid"</string>
+    <string name="save_as_playlist">"Gem som afspilningsliste"</string>
+    <string name="clear_playlist">"Ryd afspilningsliste"</string>
+    <string name="musicbrowserlabel">"Musik"</string>
+    <string name="musicshortcutlabel">"Musikafspilningsliste"</string>
+    <string name="mediaplaybacklabel">"Musik"</string>
+    <string name="videobrowserlabel">"Videoer"</string>
+    <string name="mediapickerlabel">"Musik"</string>
+    <string name="playback_failed">"Beklager! Afspilleren understøtter ikke denne slags lydfiler."</string>
+    <string name="cancel">"Annuller"</string>
+    <string name="remove_from_playlist">"Fjern fra afspilningsliste"</string>
+    <string name="streamloadingtext">"Forbinder til <xliff:g id="HOST">%s</xliff:g>"</string>
+    <string name="mediasearch">"Søg efter %s ved hjælp af:"</string>
+    <string name="working_artists">"Kunstnere ..."</string>
+    <string name="working_albums">"Albummer ..."</string>
+    <string name="working_songs">"Sange ..."</string>
+    <string name="working_playlists">"Afspilningslister ..."</string>
+    <string name="loading">"Indlæser"</string>
+    <string name="sort_by_track">"Numre"</string>
+    <string name="sort_by_album">"Albummer"</string>
+    <string name="sort_by_artist">"Kunstnere"</string>
+    <string name="music_picker_title">"Vælg musiknummer"</string>
+    <string name="gadget_track">"Nummer <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for fail_to_start_stream (3605390187703912835) -->
+    <skip />
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
+</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 8ca4408..52d009d 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -26,10 +26,10 @@
     <item quantity="one">"1 Album"</item>
     <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> Alben"</item>
   </plurals>
-    <string name="goto_start">"Startübersicht"</string>
+    <string name="goto_start">"Bibliothek"</string>
     <string name="goto_playback">"Wiedergeben"</string>
-    <string name="party_shuffle">"Zufallswiedergabe (Party)"</string>
-    <string name="party_shuffle_off">"Zufallswiedergabe (Party) deaktivieren"</string>
+    <string name="party_shuffle">"Party-Shuffle"</string>
+    <string name="party_shuffle_off">"Party-Shuffle deaktivieren"</string>
     <string name="delete_item">"Löschen"</string>
     <string name="shuffle_all">"Alle zufällig wiedergeben"</string>
     <string name="play_all">"Alle wiedergeben"</string>
@@ -43,7 +43,7 @@
   </plurals>
     <string name="scanning">"SD-Karte wird gelesenen..."</string>
     <string name="nowplaying_title">"Aktuelle Wiedergabe"</string>
-    <string name="partyshuffle_title">"Zufallswiedergabe (Party)"</string>
+    <string name="partyshuffle_title">"Party-Shuffle"</string>
     <string name="artists_title">"Interpreten"</string>
     <string name="albums_menu">"Alben"</string>
     <string name="albums_title">"Alben"</string>
@@ -92,7 +92,7 @@
     <item quantity="one">"1 Titel zur Playlist hinzugefügt"</item>
     <item quantity="other">"%d Titel zur Playlist hinzugefügt."</item>
   </plurals>
-    <string name="emptyplaylist">"Ausgewählte Playlist ist leer"</string>
+    <string name="emptyplaylist">"Playlist ist leer"</string>
     <string name="create_playlist_create_text">"Speichern"</string>
     <string name="create_playlist_overwrite_text">"Überschreiben"</string>
     <string name="service_start_error_title">"Problem bei der Wiedergabe"</string>
@@ -126,14 +126,17 @@
     <string name="remove_from_playlist">"Von Playlist entfernen"</string>
     <string name="streamloadingtext">"Verbindung mit <xliff:g id="HOST">%s</xliff:g> wird hergestellt"</string>
     <string name="mediasearch">"Nach %s suchen mithilfe von:"</string>
-    <string name="working_artists">"Künstler…"</string>
+    <string name="working_artists">"Interpreten..."</string>
     <string name="working_albums">"Alben…"</string>
     <string name="working_songs">"Lieder…"</string>
     <string name="working_playlists">"Playlists…"</string>
     <string name="loading">"Wird geladen"</string>
-    <string name="sort_by_track">"Titel"</string>
+    <string name="sort_by_track">"Tracks"</string>
     <string name="sort_by_album">"Alben"</string>
-    <string name="sort_by_artist">"Künstler"</string>
-    <string name="music_picker_title">"Musiktitel auswählen"</string>
+    <string name="sort_by_artist">"Interpreten"</string>
+    <string name="music_picker_title">"Musiktrack auswählen"</string>
     <string name="gadget_track">"Track <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <string name="fail_to_start_stream">"Der angeforderte Stream konnte nicht wiedergegeben werden."</string>
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values/dimens.xml b/res/values-el-finger/strings2.xml
similarity index 68%
copy from res/values/dimens.xml
copy to res/values-el-finger/strings2.xml
index 539b64f..838dac5 100644
--- a/res/values/dimens.xml
+++ b/res/values-el-finger/strings2.xml
@@ -1,20 +1,19 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!-- Copyright (C) 2009 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.
 -->
-
-<resources>
-    <!-- Size of widget album art cutout -->
-    <dimen name="appwidget_cutout">198dip</dimen>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="notification_artist_album">"<xliff:g id="ALBUM">%2$s</xliff:g>"\n"<xliff:g id="ARTIST">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-el-keysexposed/strings.xml b/res/values-el-keysexposed/strings.xml
new file mode 100644
index 0000000..7b6d38e
--- /dev/null
+++ b/res/values-el-keysexposed/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="create_playlist_create_text_prompt">"Όνομα λίστας αναπαραγωγής"</string>
+    <string name="rename_playlist_same_prompt">"Μετονομασία της λίστας αναπαραγωγής \"<xliff:g id="PLAYLIST">%s</xliff:g>\" σε"</string>
+    <string name="rename_playlist_diff_prompt">"Μετονομασία της λίστας αναπαραγωγής \"<xliff:g id="PLAYLIST">%s</xliff:g>\" σε"</string>
+</resources>
diff --git a/res/values-el-keyshidden/strings.xml b/res/values-el-keyshidden/strings.xml
new file mode 100644
index 0000000..8ce2680
--- /dev/null
+++ b/res/values-el-keyshidden/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="create_playlist_create_text_prompt">"Ανοίξτε το πληκτρολόγιο για να δώσετε στην νέα λίστα αναπαραγωγής ένα όνομα ή επιλέξτε Αποθήκευση για να την ονομάσετε \"%s\"."</string>
+    <string name="rename_playlist_same_prompt">"Ανοίξτε το πληκτρολόγιο για να δώσετε στη λίστα αναπαραγωγής \"<xliff:g id="PLAYLIST">%s</xliff:g>\" ένα νέο όνομα."</string>
+    <string name="rename_playlist_diff_prompt">"Ανοίξτε το πληκτρολόγιο για να δώσετε στη λίστα αναπαραγωγής <xliff:g id="PLAYLIST">%s</xliff:g>ένα νέο όνομα ή επιλέξτε Αποθήκευση για να την ονομάσετε \"%s\"."</string>
+</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
new file mode 100644
index 0000000..e74edc9
--- /dev/null
+++ b/res/values-el/strings.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="onesong">"1 τραγούδι"</string>
+  <plurals name="Nsongs">
+    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> τραγούδια"</item>
+  </plurals>
+  <plurals name="Nsongscomp">
+    <item quantity="other">"<xliff:g id="COUNT_FOR_ARTIST">%2$d</xliff:g> από <xliff:g id="TOTAL_COUNT">%1$d</xliff:g> τραγούδια"</item>
+  </plurals>
+  <plurals name="Nalbums">
+    <item quantity="one">"1 άλμπουμ"</item>
+    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> άλμπουμ"</item>
+  </plurals>
+    <string name="goto_start">"Βιβλιοθήκη"</string>
+    <string name="goto_playback">"Αναπαραγωγή"</string>
+    <string name="party_shuffle">"Πάρτι - τυχαία αναπαραγωγή"</string>
+    <string name="party_shuffle_off">"Απενεργοποίηση λειτουργίας \"πάρτι - τυχαία αναπαραγωγή\""</string>
+    <string name="delete_item">"Διαγραφή"</string>
+    <string name="shuffle_all">"Τυχαία αναπαραγωγή όλων"</string>
+    <string name="play_all">"Αναπαραγωγή όλων"</string>
+    <string name="delete_artist_desc">"Όλα τα τραγούδια από <xliff:g id="ARTIST">%s</xliff:g> θα διαγραφούν οριστικά από την κάρτα SD."</string>
+    <string name="delete_album_desc">"Ολόκληρο το άλμπουμ \"<xliff:g id="ALBUM">%s</xliff:g>\" θα διαγραφεί οριστικά από την κάρτα SD."</string>
+    <string name="delete_song_desc">"Το <xliff:g id="SONG">%s</xliff:g> θα διαγραφεί οριστικά από την κάρτα SD."</string>
+    <string name="delete_confirm_button_text">"OK"</string>
+  <plurals name="NNNtracksdeleted">
+    <item quantity="one">"Διαγράφηκε 1 τραγούδι."</item>
+    <item quantity="other">"Διαγράφηκαν <xliff:g id="SONGS_TO_DELETE">%d</xliff:g> τραγούδια."</item>
+  </plurals>
+    <string name="scanning">"Σάρωση κάρτας SD..."</string>
+    <string name="nowplaying_title">"Αναπαραγωγή σε εξέλιξη"</string>
+    <string name="partyshuffle_title">"Πάρτι - τυχαία αναπαραγωγή"</string>
+    <string name="artists_title">"Καλλιτέχνες"</string>
+    <string name="albums_menu">"Άλμπουμ"</string>
+    <string name="albums_title">"Άλμπουμ"</string>
+    <string name="tracks_menu">"Τραγούδια"</string>
+    <string name="tracks_title">"Τραγούδια"</string>
+    <string name="playlists_menu">"Λίστες αναπαραγωγής"</string>
+    <string name="playlists_title">"Λίστες αναπαραγωγής"</string>
+    <string name="videos_title">"Βίντεο"</string>
+    <string name="all_title">"Όλα τα μέσα"</string>
+    <string name="browse_menu">"Καλλιτέχνες"</string>
+    <string name="search_title">"Αναζήτηση"</string>
+    <string name="no_tracks_title">"Δεν υπάρχουν τραγούδια"</string>
+    <string name="no_videos_title">"Δεν υπάρχουν βίντεο"</string>
+    <string name="no_playlists_title">"Δεν υπάρχουν λίστες αναπαραγωγής"</string>
+    <string name="delete_playlist_menu">"Διαγραφή"</string>
+    <string name="edit_playlist_menu">"Επεξεργασία"</string>
+    <string name="rename_playlist_menu">"Μετονομασία"</string>
+    <string name="playlist_deleted_message">"Η λίστα αναπαραγωγής διαγράφηκε."</string>
+    <string name="playlist_renamed_message">"Μετονομασία λίστας αναπαραγωγής."</string>
+    <string name="recentlyadded">"Αρχεία που προστέθηκαν πρόσφατα"</string>
+    <string name="recentlyadded_title">"Αρχεία που προστέθηκαν πρόσφατα"</string>
+    <string name="podcasts_listitem">"Podcasts"</string>
+    <string name="podcasts_title">"Podcasts"</string>
+    <string name="sdcard_missing_title">"Δεν υπάρχει κάρτα SD"</string>
+    <string name="sdcard_missing_message">"Δεν υπάρχει κάρτα SD στο τηλέφωνό σας."</string>
+    <string name="sdcard_busy_title">"Η κάρτα SD δεν είναι διαθέσιμη"</string>
+    <string name="sdcard_busy_message">"Λυπούμαστε, η κάρτα SD είναι απασχολημένη."</string>
+    <string name="sdcard_error_title">"Σφάλμα κάρτας SD"</string>
+    <string name="sdcard_error_message">"Προέκυψε σφάλμα στην κάρτα SD."</string>
+    <string name="unknown_artist_name">"Άγνωστος καλλιτέχνης"</string>
+    <string name="unknown_album_name">"Άγνωστο άλμπουμ"</string>
+    <string name="shuffle_on_notif">"Η τυχαία αναπαραγωγή ενεργοποιήθηκε."</string>
+    <string name="shuffle_off_notif">"Η τυχαία αναπαραγωγή απενεργοποιήθηκε."</string>
+    <string name="repeat_off_notif">"Η επανάληψη απενεργοποιήθηκε."</string>
+    <string name="repeat_current_notif">"Επανάληψη τρέχοντος τραγουδιού."</string>
+    <string name="repeat_all_notif">"Επανάληψη όλων των τραγουδιών."</string>
+    <string name="ringtone_menu">"Χρήση ως ήχος κλήσης τηλεφώνου"</string>
+    <string name="ringtone_menu_short">"Χρήση ως ήχος κλήσης"</string>
+    <string name="ringtone_set">"Ορισμός του \"%s\" ως ήχος κλήσης τηλεφώνου."</string>
+    <string name="play_selection">"Αναπαραγωγή"</string>
+    <string name="add_to_playlist">"Προσθήκη στη λίστα αναπαραγωγής"</string>
+    <string name="queue">"Τρέχουσα λίστα αναπαραγωγής"</string>
+    <string name="new_playlist">"Νέο"</string>
+    <string name="new_playlist_name_template">"Νέα λίστα αναπαραγωγής <xliff:g id="NUMBER">%d</xliff:g>"</string>
+  <plurals name="NNNtrackstoplaylist">
+    <item quantity="one">"1 τραγούδι προστέθηκε στη λίστα αναπαραγωγής."</item>
+    <item quantity="other">"%d τραγούδια προστέθηκαν στη λίστα αναπαραγωγής."</item>
+  </plurals>
+    <string name="emptyplaylist">"Η λίστα αναπαραγωγής που επιλέξατε είναι κενή."</string>
+    <string name="create_playlist_create_text">"Αποθήκευση"</string>
+    <string name="create_playlist_overwrite_text">"Αντικατάσταση"</string>
+    <string name="service_start_error_title">"Πρόβλημα αναπαραγωγής"</string>
+    <string name="service_start_error_msg">"Λυπούμαστε, δεν είναι δυνατή η αναπαραγωγή του τραγουδιού."</string>
+    <string name="service_start_error_button">"OK"</string>
+  <string-array name="weeklist">
+    <item>"1 εβδομάδα"</item>
+    <item>"2 εβδομάδες"</item>
+    <item>"3 εβδομάδες"</item>
+    <item>"4 εβδομάδες"</item>
+    <item>"5 εβδομάδες"</item>
+    <item>"6 εβδομάδες"</item>
+    <item>"7 εβδομάδες"</item>
+    <item>"8 εβδομάδες"</item>
+    <item>"9 εβδομάδες"</item>
+    <item>"10 εβδομάδες"</item>
+    <item>"11 εβδομάδες"</item>
+    <item>"12 εβδομάδες"</item>
+  </string-array>
+    <string name="weekpicker_set">"Ολοκληρώθηκε"</string>
+    <string name="weekpicker_title">"Ρύθμιση ώρας"</string>
+    <string name="save_as_playlist">"Αποθήκευση ως λίστα αναπαραγωγής"</string>
+    <string name="clear_playlist">"Εκκαθάριση λίστας αναπαραγωγής"</string>
+    <string name="musicbrowserlabel">"Μουσική"</string>
+    <string name="musicshortcutlabel">"Λίστα αναπαραγωγής μουσικής"</string>
+    <string name="mediaplaybacklabel">"Μουσική"</string>
+    <string name="videobrowserlabel">"Βίντεο"</string>
+    <string name="mediapickerlabel">"Μουσική"</string>
+    <string name="playback_failed">"Λυπούμαστε, το πρόγραμμα αναπαραγωγής δεν υποστηρίζει αυτόν τον τύπο αρχείου ήχου."</string>
+    <string name="cancel">"Ακύρωση"</string>
+    <string name="remove_from_playlist">"Κατάργηση από τη λίστα αναπαραγωγής"</string>
+    <string name="streamloadingtext">"Σύνδεση στο <xliff:g id="HOST">%s</xliff:g>"</string>
+    <string name="mediasearch">"Αναζήτηση του %s με χρήση:"</string>
+    <string name="working_artists">"Καλλιτέχνες..."</string>
+    <string name="working_albums">"Άλμπουμ..."</string>
+    <string name="working_songs">"Τραγούδια..."</string>
+    <string name="working_playlists">"Λίστες αναπαραγωγής..."</string>
+    <string name="loading">"Φόρτωση"</string>
+    <string name="sort_by_track">"Κομμάτια"</string>
+    <string name="sort_by_album">"Άλμπουμ"</string>
+    <string name="sort_by_artist">"Καλλιτέχνες"</string>
+    <string name="music_picker_title">"Επιλέξτε μουσικό κομμάτι"</string>
+    <string name="gadget_track">"Κομμάτι <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for fail_to_start_stream (3605390187703912835) -->
+    <skip />
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
+</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index c90fc7b..3f78fb1 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -34,7 +34,7 @@
     <string name="shuffle_all">"Arrastrar todo"</string>
     <string name="play_all">"Reproducir todo"</string>
     <string name="delete_artist_desc">"Todas las canciones de <xliff:g id="ARTIST">%s</xliff:g> se eliminarán definitivamente de la tarjeta SD."</string>
-    <string name="delete_album_desc">"El álbum \"<xliff:g id="ALBUM">%s</xliff:g>\" se eliminará definitivamente de la tarjeta SD.\n."</string>
+    <string name="delete_album_desc">"El álbum \"<xliff:g id="ALBUM">%s</xliff:g>\" se eliminará definitivamente de la tarjeta SD."</string>
     <string name="delete_song_desc">"\"<xliff:g id="SONG">%s</xliff:g>\" se eliminará definitivamente de la tarjeta SD."</string>
     <string name="delete_confirm_button_text">"Aceptar"</string>
   <plurals name="NNNtracksdeleted">
@@ -136,4 +136,8 @@
     <string name="sort_by_artist">"Artistas"</string>
     <string name="music_picker_title">"Seleccionar pista de música"</string>
     <string name="gadget_track">"Pista <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for fail_to_start_stream (3605390187703912835) -->
+    <skip />
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 00c743f..3e8511f 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -49,8 +49,8 @@
     <string name="albums_title">"Álbumes"</string>
     <string name="tracks_menu">"Canciones"</string>
     <string name="tracks_title">"Canciones"</string>
-    <string name="playlists_menu">"Listas de reproducción"</string>
-    <string name="playlists_title">"Listas de reproducción"</string>
+    <string name="playlists_menu">"Listas reprod."</string>
+    <string name="playlists_title">"Listas reprod."</string>
     <string name="videos_title">"Vídeos"</string>
     <string name="all_title">"Todos los medios"</string>
     <string name="browse_menu">"Artistas"</string>
@@ -136,4 +136,7 @@
     <string name="sort_by_artist">"Artistas"</string>
     <string name="music_picker_title">"Seleccionar pista musical"</string>
     <string name="gadget_track">"Pista <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <string name="fail_to_start_stream">"No se ha podido reproducir el flujo solicitado."</string>
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index b434be0..d988d51 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -26,7 +26,7 @@
     <item quantity="one">"1 album"</item>
     <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> albums"</item>
   </plurals>
-    <string name="goto_start">"Médiathèque"</string>
+    <string name="goto_start">"Bibliothèque"</string>
     <string name="goto_playback">"Lecture"</string>
     <string name="party_shuffle">"Lecture aléatoire"</string>
     <string name="party_shuffle_off">"La lecture aléatoire est désactivée."</string>
@@ -76,7 +76,7 @@
     <string name="unknown_artist_name">"Artiste inconnu"</string>
     <string name="unknown_album_name">"Album inconnu"</string>
     <string name="shuffle_on_notif">"La lecture aléatoire est activée."</string>
-    <string name="shuffle_off_notif">"Le mode aléatoire est désactivé."</string>
+    <string name="shuffle_off_notif">"La lecture aléatoire est désactivée."</string>
     <string name="repeat_off_notif">"La lecture en boucle est désactivée."</string>
     <string name="repeat_current_notif">"Lecture en boucle de la chanson en écoute."</string>
     <string name="repeat_all_notif">"Lecture en boucle de toutes les chansons"</string>
@@ -136,4 +136,7 @@
     <string name="sort_by_artist">"Artistes"</string>
     <string name="music_picker_title">"Sélectionner une piste"</string>
     <string name="gadget_track">"Piste <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <string name="fail_to_start_stream">"Échec de la lecture du flux demandé"</string>
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 2a730e9..3ab0f31 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -136,4 +136,7 @@
     <string name="sort_by_artist">"Artisti"</string>
     <string name="music_picker_title">"Seleziona traccia musicale"</string>
     <string name="gadget_track">"Traccia <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <string name="fail_to_start_stream">"Impossibile riprodurre lo stream richiesto."</string>
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 6b0bc1a..3bb0153 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -64,7 +64,7 @@
     <string name="playlist_deleted_message">"プレイリストを削除しました。"</string>
     <string name="playlist_renamed_message">"プレイリストの名前を変更しました。"</string>
     <string name="recentlyadded">"最近追加したアイテム"</string>
-    <string name="recentlyadded_title">"最近追加した項目"</string>
+    <string name="recentlyadded_title">"最近追加したアイテム"</string>
     <string name="podcasts_listitem">"ポッドキャスト"</string>
     <string name="podcasts_title">"ポッドキャスト"</string>
     <string name="sdcard_missing_title">"SDカードがありません"</string>
@@ -136,4 +136,8 @@
     <string name="sort_by_artist">"アーティスト"</string>
     <string name="music_picker_title">"音楽トラックを選択"</string>
     <string name="gadget_track">"トラック<xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for fail_to_start_stream (3605390187703912835) -->
+    <skip />
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values-ko-keyshidden/strings.xml b/res/values-ko-keyshidden/strings.xml
index 4a452df..3f071b8 100644
--- a/res/values-ko-keyshidden/strings.xml
+++ b/res/values-ko-keyshidden/strings.xml
@@ -16,6 +16,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="create_playlist_create_text_prompt">"키보드를 사용하여 새 재생 목록에 이름을 지정하거나 \'저장\'을 선택하여 \'%s\'(이)라고 지정합니다."</string>
-    <string name="rename_playlist_same_prompt">"키보드를 사용하여 \'<xliff:g id="PLAYLIST">%s</xliff:g>\' 재생 목록에 새 이름을 지정합니다."</string>
-    <string name="rename_playlist_diff_prompt">"키보드를 사용하여 \'<xliff:g id="PLAYLIST">%s</xliff:g>\' 재생 목록에 새 이름을 지정하거나 \'저장\'을 선택하여 \'%s\'(이)라고 지정합니다."</string>
+    <string name="rename_playlist_same_prompt">"키보드를 사용하여 재생 목록 \'<xliff:g id="PLAYLIST">%s</xliff:g>\'에 새 이름을 지정합니다."</string>
+    <string name="rename_playlist_diff_prompt">"키보드를 사용하여 재생 목록 \'<xliff:g id="PLAYLIST">%s</xliff:g>\'에 새 이름을 지정하거나 \'저장\'을 선택하여 \'%s\'(이)라고 지정합니다."</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 2d96a00..71c1dc7 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -15,21 +15,21 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="onesong">"1개의 노래"</string>
+    <string name="onesong">"노래 1곡"</string>
   <plurals name="Nsongs">
-    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g>개의 노래"</item>
+    <item quantity="other">"노래 <xliff:g id="COUNT">%d</xliff:g>곡"</item>
   </plurals>
   <plurals name="Nsongscomp">
     <item quantity="other">"노래 <xliff:g id="TOTAL_COUNT">%1$d</xliff:g>곡 중 <xliff:g id="COUNT_FOR_ARTIST">%2$d</xliff:g>곡"</item>
   </plurals>
   <plurals name="Nalbums">
-    <item quantity="one">"1개의 앨범"</item>
-    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g>개의 앨범"</item>
+    <item quantity="one">"앨범 1개"</item>
+    <item quantity="other">"앨범 <xliff:g id="COUNT">%d</xliff:g>개"</item>
   </plurals>
     <string name="goto_start">"라이브러리"</string>
     <string name="goto_playback">"재생"</string>
     <string name="party_shuffle">"파티 셔플"</string>
-    <string name="party_shuffle_off">"파티 셔플 해제"</string>
+    <string name="party_shuffle_off">"파티 셔플 사용 안함"</string>
     <string name="delete_item">"삭제"</string>
     <string name="shuffle_all">"모두 셔플"</string>
     <string name="play_all">"모두 재생"</string>
@@ -38,8 +38,8 @@
     <string name="delete_song_desc">"\'<xliff:g id="SONG">%s</xliff:g>\'이(가) SD 카드에서 완전히 삭제됩니다."</string>
     <string name="delete_confirm_button_text">"확인"</string>
   <plurals name="NNNtracksdeleted">
-    <item quantity="one">"노래 1개가 삭제되었습니다."</item>
-    <item quantity="other">"<xliff:g id="SONGS_TO_DELETE">%d</xliff:g>개의 노래가 삭제되었습니다."</item>
+    <item quantity="one">"노래 1곡이 삭제되었습니다."</item>
+    <item quantity="other">"노래 <xliff:g id="SONGS_TO_DELETE">%d</xliff:g>곡이 삭제되었습니다."</item>
   </plurals>
     <string name="scanning">"SD 카드 스캔 중..."</string>
     <string name="nowplaying_title">"지금 재생 중"</string>
@@ -59,7 +59,7 @@
     <string name="no_videos_title">"동영상 없음"</string>
     <string name="no_playlists_title">"재생 목록 없음"</string>
     <string name="delete_playlist_menu">"삭제"</string>
-    <string name="edit_playlist_menu">"편집"</string>
+    <string name="edit_playlist_menu">"수정"</string>
     <string name="rename_playlist_menu">"이름 바꾸기"</string>
     <string name="playlist_deleted_message">"재생 목록이 삭제되었습니다."</string>
     <string name="playlist_renamed_message">"재생 목록 이름이 변경되었습니다."</string>
@@ -68,29 +68,29 @@
     <string name="podcasts_listitem">"Podcast"</string>
     <string name="podcasts_title">"Podcast"</string>
     <string name="sdcard_missing_title">"SD 카드 없음"</string>
-    <string name="sdcard_missing_message">"전화에 SD 카드가 삽입되어 있지 않습니다."</string>
+    <string name="sdcard_missing_message">"휴대전화에 SD 카드가 삽입되어 있지 않습니다."</string>
     <string name="sdcard_busy_title">"SD 카드를 사용할 수 없음"</string>
     <string name="sdcard_busy_message">"SD 카드가 사용 중입니다."</string>
     <string name="sdcard_error_title">"SD 카드 오류"</string>
     <string name="sdcard_error_message">"SD 카드에 오류가 발생했습니다."</string>
     <string name="unknown_artist_name">"알 수 없는 아티스트"</string>
     <string name="unknown_album_name">"알 수 없는 앨범"</string>
-    <string name="shuffle_on_notif">"셔플이 설정되었습니다."</string>
-    <string name="shuffle_off_notif">"셔플이 해제되었습니다."</string>
-    <string name="repeat_off_notif">"반복이 해제되었습니다."</string>
-    <string name="repeat_current_notif">"현재 노래를 반복 중입니다."</string>
-    <string name="repeat_all_notif">"모든 노래를 반복 중입니다."</string>
-    <string name="ringtone_menu">"전화 벨소리로 사용"</string>
+    <string name="shuffle_on_notif">"셔플을 사용합니다."</string>
+    <string name="shuffle_off_notif">"셔플을 사용하지 않습니다."</string>
+    <string name="repeat_off_notif">"반복을 사용하지 않습니다."</string>
+    <string name="repeat_current_notif">"현재 노래를 반복합니다."</string>
+    <string name="repeat_all_notif">"모든 노래를 반복합니다."</string>
+    <string name="ringtone_menu">"휴대전화 벨소리로 사용"</string>
     <string name="ringtone_menu_short">"벨소리로 사용"</string>
-    <string name="ringtone_set">"\'%s\'이(가) 전화 벨소리로 설정되었습니다."</string>
+    <string name="ringtone_set">"\'%s\'이(가) 휴대전화 벨소리로 설정되었습니다."</string>
     <string name="play_selection">"재생"</string>
     <string name="add_to_playlist">"재생 목록에 추가"</string>
     <string name="queue">"현재 재생 목록"</string>
     <string name="new_playlist">"새로 만들기"</string>
     <string name="new_playlist_name_template">"새 재생 목록 <xliff:g id="NUMBER">%d</xliff:g>"</string>
   <plurals name="NNNtrackstoplaylist">
-    <item quantity="one">"노래 1개가 재생 목록에 추가되었습니다."</item>
-    <item quantity="other">"%d개의 노래가 재생 목록에 추가되었습니다."</item>
+    <item quantity="one">"재생 목록에 노래 1곡이 추가되었습니다."</item>
+    <item quantity="other">"노래 %d곡이 재생 목록에 추가되었습니다."</item>
   </plurals>
     <string name="emptyplaylist">"선택한 재생 목록이 비어 있습니다."</string>
     <string name="create_playlist_create_text">"저장"</string>
@@ -126,9 +126,9 @@
     <string name="remove_from_playlist">"재생 목록에서 삭제"</string>
     <string name="streamloadingtext">"<xliff:g id="HOST">%s</xliff:g>에 연결 중"</string>
     <string name="mediasearch">"다음을 사용하여 %s 검색:"</string>
-    <string name="working_artists">"아티스트…"</string>
-    <string name="working_albums">"앨범…"</string>
-    <string name="working_songs">"노래…"</string>
+    <string name="working_artists">"아티스트..."</string>
+    <string name="working_albums">"앨범..."</string>
+    <string name="working_songs">"노래..."</string>
     <string name="working_playlists">"재생 목록..."</string>
     <string name="loading">"로드 중"</string>
     <string name="sort_by_track">"트랙"</string>
@@ -136,4 +136,8 @@
     <string name="sort_by_artist">"아티스트"</string>
     <string name="music_picker_title">"음악 트랙 선택"</string>
     <string name="gadget_track">"트랙 <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for fail_to_start_stream (3605390187703912835) -->
+    <skip />
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 4adf891..907977f 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -136,4 +136,8 @@
     <string name="sort_by_artist">"Artister"</string>
     <string name="music_picker_title">"Velg musikkspor"</string>
     <string name="gadget_track">"Spor <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for fail_to_start_stream (3605390187703912835) -->
+    <skip />
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 830b1f7..e2e747e 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -136,4 +136,7 @@
     <string name="sort_by_artist">"Artiesten"</string>
     <string name="music_picker_title">"Muziektrack selecteren"</string>
     <string name="gadget_track">"Track <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <string name="fail_to_start_stream">"Het afspelen van de aangevraagde stream is mislukt."</string>
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 1b5a390..01b2879 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -28,8 +28,8 @@
   </plurals>
     <string name="goto_start">"Biblioteka"</string>
     <string name="goto_playback">"Odtwórz"</string>
-    <string name="party_shuffle">"Losowo w trybie imprezy"</string>
-    <string name="party_shuffle_off">"Wyłączono losowe odtwarzanie w trybie imprezy"</string>
+    <string name="party_shuffle">"Losowo – tryb imprezy"</string>
+    <string name="party_shuffle_off">"Wyłącz tryb imprezy"</string>
     <string name="delete_item">"Usuń"</string>
     <string name="shuffle_all">"Wszystkie losowo"</string>
     <string name="play_all">"Odtwórz wszystko"</string>
@@ -90,7 +90,7 @@
     <string name="new_playlist_name_template">"Nowa playlista <xliff:g id="NUMBER">%d</xliff:g>"</string>
   <plurals name="NNNtrackstoplaylist">
     <item quantity="one">"Dodano 1 utwór do playlisty."</item>
-    <item quantity="other">"%d utworów dodano do listy odtwarzania."</item>
+    <item quantity="other">"Utworów dodanych do playlisty: %d."</item>
   </plurals>
     <string name="emptyplaylist">"Wybrana playlista jest pusta."</string>
     <string name="create_playlist_create_text">"Zapisz"</string>
@@ -129,11 +129,14 @@
     <string name="working_artists">"Wykonawcy…"</string>
     <string name="working_albums">"Albumy…"</string>
     <string name="working_songs">"Utwory…"</string>
-    <string name="working_playlists">"Listy odtwarzania..."</string>
+    <string name="working_playlists">"Playlisty…"</string>
     <string name="loading">"Ładowanie"</string>
     <string name="sort_by_track">"Utwory"</string>
     <string name="sort_by_album">"Albumy"</string>
     <string name="sort_by_artist">"Wykonawcy"</string>
     <string name="music_picker_title">"Wybierz utwór muzyczny"</string>
-    <string name="gadget_track">"Ścieżka <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <string name="gadget_track">"Utwór <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <string name="fail_to_start_stream">"Nie można odtworzyć żądanego strumienia."</string>
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values/dimens.xml b/res/values-pt-finger/strings2.xml
similarity index 68%
copy from res/values/dimens.xml
copy to res/values-pt-finger/strings2.xml
index 539b64f..838dac5 100644
--- a/res/values/dimens.xml
+++ b/res/values-pt-finger/strings2.xml
@@ -1,20 +1,19 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!-- Copyright (C) 2009 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.
 -->
-
-<resources>
-    <!-- Size of widget album art cutout -->
-    <dimen name="appwidget_cutout">198dip</dimen>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="notification_artist_album">"<xliff:g id="ALBUM">%2$s</xliff:g>"\n"<xliff:g id="ARTIST">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-pt-keyshidden/strings.xml b/res/values-pt-keyshidden/strings.xml
index 98cb644..98d976f 100644
--- a/res/values-pt-keyshidden/strings.xml
+++ b/res/values-pt-keyshidden/strings.xml
@@ -15,7 +15,7 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="create_playlist_create_text_prompt">"Abra o teclado e dê um nome à sua nova Lista de reprodução ou selecione Salvar para nomeá-la \"%s\"."</string>
-    <string name="rename_playlist_same_prompt">"Abra o teclado para dar um novo nome à lista de reprodução \"<xliff:g id="PLAYLIST">%s</xliff:g>\"."</string>
-    <string name="rename_playlist_diff_prompt">"Abra o teclado e para dar um novo nome à lista de reprodução \"<xliff:g id="PLAYLIST">%s</xliff:g>\" ou selecione Salvar para nomeá-la \"%s\"."</string>
+    <string name="create_playlist_create_text_prompt">"Abra o teclado para dar um nome à sua nova Lista de reprodução ou selecione Salvar para nomeá-la \"%s\"."</string>
+    <string name="rename_playlist_same_prompt">"Abra o teclado para dar um nome à nova lista de reprodução \"<xliff:g id="PLAYLIST">%s</xliff:g>\"."</string>
+    <string name="rename_playlist_diff_prompt">"Abra o teclado para dar um novo nome à lista de reprodução \"<xliff:g id="PLAYLIST">%s</xliff:g>\" ou selecione Salvar para nomeá-la \"%s\"."</string>
 </resources>
diff --git a/res/values/dimens.xml b/res/values-pt-rPT-finger/strings2.xml
similarity index 67%
copy from res/values/dimens.xml
copy to res/values-pt-rPT-finger/strings2.xml
index 539b64f..838dac5 100644
--- a/res/values/dimens.xml
+++ b/res/values-pt-rPT-finger/strings2.xml
@@ -1,20 +1,19 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!-- Copyright (C) 2009 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.
 -->
-
-<resources>
-    <!-- Size of widget album art cutout -->
-    <dimen name="appwidget_cutout">198dip</dimen>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="notification_artist_album">"<xliff:g id="ALBUM">%2$s</xliff:g>"\n"<xliff:g id="ARTIST">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-pt-rPT-keysexposed/strings.xml b/res/values-pt-rPT-keysexposed/strings.xml
new file mode 100644
index 0000000..f85aa8e
--- /dev/null
+++ b/res/values-pt-rPT-keysexposed/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="create_playlist_create_text_prompt">"Nome da lista de reprodução"</string>
+    <string name="rename_playlist_same_prompt">"Mudar o nome de \"<xliff:g id="PLAYLIST">%s</xliff:g>\" para"</string>
+    <string name="rename_playlist_diff_prompt">"Mudar o nome de \"<xliff:g id="PLAYLIST">%s</xliff:g>\" para"</string>
+</resources>
diff --git a/res/values-pt-rPT-keyshidden/strings.xml b/res/values-pt-rPT-keyshidden/strings.xml
new file mode 100644
index 0000000..6616e52
--- /dev/null
+++ b/res/values-pt-rPT-keyshidden/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="create_playlist_create_text_prompt">"Abra o teclado para dar um nome à nova lista de reprodução ou seleccione Guardar para a guardar com o nome \"%s\"."</string>
+    <string name="rename_playlist_same_prompt">"Abra o teclado para dar um novo nome à lista de reprodução \"<xliff:g id="PLAYLIST">%s</xliff:g>\"."</string>
+    <string name="rename_playlist_diff_prompt">"Abra o teclado para dar um novo nome à lista de reprodução \"<xliff:g id="PLAYLIST">%s</xliff:g>\" ou seleccione Guardar para a guardar com o nome \"%s\"."</string>
+</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..9380085
--- /dev/null
+++ b/res/values-pt-rPT/strings.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="onesong">"1 música"</string>
+  <plurals name="Nsongs">
+    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> músicas"</item>
+  </plurals>
+  <plurals name="Nsongscomp">
+    <item quantity="other">"<xliff:g id="COUNT_FOR_ARTIST">%2$d</xliff:g> de <xliff:g id="TOTAL_COUNT">%1$d</xliff:g> músicas"</item>
+  </plurals>
+  <plurals name="Nalbums">
+    <item quantity="one">"1 álbum"</item>
+    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> álbuns"</item>
+  </plurals>
+    <string name="goto_start">"Biblioteca"</string>
+    <string name="goto_playback">"Reprodução"</string>
+    <string name="party_shuffle">"Lista·aleatória"</string>
+    <string name="party_shuffle_off">"Lista·aleatória·desactivada"</string>
+    <string name="delete_item">"Eliminar"</string>
+    <string name="shuffle_all">"Reproduzir todas aleatoriamente"</string>
+    <string name="play_all">"Reproduzir todas"</string>
+    <string name="delete_artist_desc">"Todas as músicas de <xliff:g id="ARTIST">%s</xliff:g> serão eliminadas definitivamente do cartão SD."</string>
+    <string name="delete_album_desc">"O álbum \"<xliff:g id="ALBUM">%s</xliff:g>\" inteiro será eliminado definitivamente do cartão SD."</string>
+    <string name="delete_song_desc">"\"<xliff:g id="SONG">%s</xliff:g>\" será eliminada definitivamente do cartão SD."</string>
+    <string name="delete_confirm_button_text">"OK"</string>
+  <plurals name="NNNtracksdeleted">
+    <item quantity="one">"Foi eliminada 1 música."</item>
+    <item quantity="other">"Foram eliminadas <xliff:g id="SONGS_TO_DELETE">%d</xliff:g> músicas."</item>
+  </plurals>
+    <string name="scanning">"A analisar o cartão SD..."</string>
+    <string name="nowplaying_title">"Em reprodução"</string>
+    <string name="partyshuffle_title">"Lista aleatória"</string>
+    <string name="artists_title">"Artistas"</string>
+    <string name="albums_menu">"Álbuns"</string>
+    <string name="albums_title">"Álbuns"</string>
+    <string name="tracks_menu">"Músicas"</string>
+    <string name="tracks_title">"Músicas"</string>
+    <string name="playlists_menu">"Listas de reprodução"</string>
+    <string name="playlists_title">"Listas de reprodução"</string>
+    <string name="videos_title">"Vídeos"</string>
+    <string name="all_title">"Todo o conteúdo multimédia"</string>
+    <string name="browse_menu">"Artistas"</string>
+    <string name="search_title">"Pesquisar"</string>
+    <string name="no_tracks_title">"Sem músicas"</string>
+    <string name="no_videos_title">"Sem vídeos"</string>
+    <string name="no_playlists_title">"Sem listas de reprodução"</string>
+    <string name="delete_playlist_menu">"Eliminar"</string>
+    <string name="edit_playlist_menu">"Editar"</string>
+    <string name="rename_playlist_menu">"Mudar o nome"</string>
+    <string name="playlist_deleted_message">"Lista de reprodução eliminada."</string>
+    <string name="playlist_renamed_message">"Nome da lista de reprodução alterado."</string>
+    <string name="recentlyadded">"Adicionadas recentemente"</string>
+    <string name="recentlyadded_title">"Adicionadas recentemente"</string>
+    <string name="podcasts_listitem">"Podcasts"</string>
+    <string name="podcasts_title">"Podcasts"</string>
+    <string name="sdcard_missing_title">"Sem cartão SD"</string>
+    <string name="sdcard_missing_message">"O telefone não tem um cartão SD inserido."</string>
+    <string name="sdcard_busy_title">"Cartão SD indisponível"</string>
+    <string name="sdcard_busy_message">"Lamentamos, mas o cartão SD está ocupado."</string>
+    <string name="sdcard_error_title">"Erro do cartão SD"</string>
+    <string name="sdcard_error_message">"Ocorreu um erro com o cartão SD."</string>
+    <string name="unknown_artist_name">"Artista desconhecido"</string>
+    <string name="unknown_album_name">"Álbum desconhecido"</string>
+    <string name="shuffle_on_notif">"A reprodução aleatória está activada"</string>
+    <string name="shuffle_off_notif">"A reprodução aleatória está desactivada."</string>
+    <string name="repeat_off_notif">"A repetição está desactivada."</string>
+    <string name="repeat_current_notif">"Repetir a música actual."</string>
+    <string name="repeat_all_notif">"A repetir todas as músicas."</string>
+    <string name="ringtone_menu">"Utilizar como toque do telefone"</string>
+    <string name="ringtone_menu_short">"Utilizar como toque"</string>
+    <string name="ringtone_set">"\"%s\" definida como toque do telefone."</string>
+    <string name="play_selection">"Reproduzir"</string>
+    <string name="add_to_playlist">"Adicionar à lista de reprodução"</string>
+    <string name="queue">"Lista de reprodução actual"</string>
+    <string name="new_playlist">"Novo"</string>
+    <string name="new_playlist_name_template">"Nova lista de reprodução <xliff:g id="NUMBER">%d</xliff:g>"</string>
+  <plurals name="NNNtrackstoplaylist">
+    <item quantity="one">"Uma música adicionada à lista de reprodução."</item>
+    <item quantity="other">"%d músicas adicionadas à lista de reprodução."</item>
+  </plurals>
+    <string name="emptyplaylist">"A lista de reprodução seleccionada está vazia."</string>
+    <string name="create_playlist_create_text">"Guardar"</string>
+    <string name="create_playlist_overwrite_text">"Substituir"</string>
+    <string name="service_start_error_title">"Problemas de reprodução"</string>
+    <string name="service_start_error_msg">"Lamentamos, mas não foi possível reproduzir a música."</string>
+    <string name="service_start_error_button">"OK"</string>
+  <string-array name="weeklist">
+    <item>"1 semana"</item>
+    <item>"2 semanas"</item>
+    <item>"3 semanas"</item>
+    <item>"4 semanas"</item>
+    <item>"5 semanas"</item>
+    <item>"6 semanas"</item>
+    <item>"7 semanas"</item>
+    <item>"8 semanas"</item>
+    <item>"9 semanas"</item>
+    <item>"10 semanas"</item>
+    <item>"11 semanas"</item>
+    <item>"12 semanas"</item>
+  </string-array>
+    <string name="weekpicker_set">"Concluído"</string>
+    <string name="weekpicker_title">"Definir a hora"</string>
+    <string name="save_as_playlist">"Guardar como lista de reprodução"</string>
+    <string name="clear_playlist">"Limpar a lista de reprodução"</string>
+    <string name="musicbrowserlabel">"Música"</string>
+    <string name="musicshortcutlabel">"Lista de reprodução de músicas"</string>
+    <string name="mediaplaybacklabel">"Música"</string>
+    <string name="videobrowserlabel">"Vídeos"</string>
+    <string name="mediapickerlabel">"Música"</string>
+    <string name="playback_failed">"Lamentamos, mas o leitor não suporta este tipo de ficheiros de áudio."</string>
+    <string name="cancel">"Cancelar"</string>
+    <string name="remove_from_playlist">"Remover da lista de reprodução"</string>
+    <string name="streamloadingtext">"A ligar a <xliff:g id="HOST">%s</xliff:g>"</string>
+    <string name="mediasearch">"Procurar %s utilizando:"</string>
+    <string name="working_artists">"Artistas..."</string>
+    <string name="working_albums">"Álbuns..."</string>
+    <string name="working_songs">"Músicas..."</string>
+    <string name="working_playlists">"Listas de reprodução..."</string>
+    <string name="loading">"A carregar"</string>
+    <string name="sort_by_track">"Faixas"</string>
+    <string name="sort_by_album">"Álbuns"</string>
+    <string name="sort_by_artist">"Artistas"</string>
+    <string name="music_picker_title">"Seleccionar faixa de música"</string>
+    <string name="gadget_track">"Faixa <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for fail_to_start_stream (3605390187703912835) -->
+    <skip />
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
+</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index d89fe93..bc61ab4 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -19,29 +19,31 @@
   <plurals name="Nsongs">
     <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> músicas"</item>
   </plurals>
-    <!-- no translation found for Nsongscomp:other (7162294486622945550) -->
+  <plurals name="Nsongscomp">
+    <item quantity="other">"<xliff:g id="COUNT_FOR_ARTIST">%2$d</xliff:g> de <xliff:g id="TOTAL_COUNT">%1$d</xliff:g> músicas"</item>
+  </plurals>
   <plurals name="Nalbums">
     <item quantity="one">"1 álbum"</item>
     <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> álbuns"</item>
   </plurals>
     <string name="goto_start">"Biblioteca"</string>
     <string name="goto_playback">"Reprodução"</string>
-    <string name="party_shuffle">"Ordem aleatória para festas"</string>
-    <string name="party_shuffle_off">"Ordem aleatória para festas desativada"</string>
+    <string name="party_shuffle">"Coleção aleatória"</string>
+    <string name="party_shuffle_off">"Coleção aleatória desativada"</string>
     <string name="delete_item">"Excluir"</string>
-    <string name="shuffle_all">"Todas as músicas em ordem aleatória"</string>
+    <string name="shuffle_all">"Reproduzir aleatoriamente"</string>
     <string name="play_all">"Reproduzir tudo"</string>
-    <string name="delete_artist_desc">"Todas as músicas de <xliff:g id="ARTIST">%s</xliff:g> serão excluídas permanentemente do cartão SD."</string>
-    <string name="delete_album_desc">"Todo o álbum \"<xliff:g id="ALBUM">%s</xliff:g>\" será excluído permanentemente do cartão SD."</string>
+    <string name="delete_artist_desc">"Todas as músicas do <xliff:g id="ARTIST">%s</xliff:g> serão permanentemente excluídas do cartão SD."</string>
+    <string name="delete_album_desc">"Todo o álbum \"<xliff:g id="ALBUM">%s</xliff:g>\" será permanentemente excluído do cartão SD."</string>
     <string name="delete_song_desc">"\"<xliff:g id="SONG">%s</xliff:g>\" será permanentemente excluída do cartão SD."</string>
     <string name="delete_confirm_button_text">"OK"</string>
   <plurals name="NNNtracksdeleted">
     <item quantity="one">"1 música foi excluída."</item>
     <item quantity="other">"<xliff:g id="SONGS_TO_DELETE">%d</xliff:g> músicas foram excluídas."</item>
   </plurals>
-    <string name="scanning">"Examinando cartão SD…"</string>
-    <string name="nowplaying_title">"Reproduzindo"</string>
-    <string name="partyshuffle_title">"Ordem aleatória para festas"</string>
+    <string name="scanning">"Verificando o cartão SD…"</string>
+    <string name="nowplaying_title">"Em reprodução"</string>
+    <string name="partyshuffle_title">"Coleção aleatória"</string>
     <string name="artists_title">"Artistas"</string>
     <string name="albums_menu">"Álbuns"</string>
     <string name="albums_title">"Álbuns"</string>
@@ -52,38 +54,35 @@
     <string name="videos_title">"Vídeos"</string>
     <string name="all_title">"Todas as mídias"</string>
     <string name="browse_menu">"Artistas"</string>
-    <string name="search_title">"Procurar"</string>
-    <string name="no_tracks_title">"Não há músicas"</string>
-    <string name="no_videos_title">"Não há vídeos"</string>
-    <string name="no_playlists_title">"Nenhuma lista de reprodução"</string>
+    <string name="search_title">"Pesquisar"</string>
+    <string name="no_tracks_title">"Sem músicas"</string>
+    <string name="no_videos_title">"Sem vídeos"</string>
+    <string name="no_playlists_title">"Sem listas de reprodução"</string>
     <string name="delete_playlist_menu">"Excluir"</string>
     <string name="edit_playlist_menu">"Editar"</string>
     <string name="rename_playlist_menu">"Renomear"</string>
     <string name="playlist_deleted_message">"Lista de reprodução excluída."</string>
     <string name="playlist_renamed_message">"Lista de reprodução renomeada."</string>
-    <string name="recentlyadded">"Adicionados recentemente"</string>
-    <!-- no translation found for recentlyadded_title (3153322287249901914) -->
-    <skip />
-    <!-- no translation found for podcasts_listitem (8657809279717670634) -->
-    <skip />
-    <!-- no translation found for podcasts_title (4928414142496858304) -->
-    <skip />
-    <string name="sdcard_missing_title">"Não há cartão SD"</string>
-    <string name="sdcard_missing_message">"O telefone não tem um cartão SD inserido."</string>
-    <string name="sdcard_busy_title">"O cartão SD não está disponível"</string>
-    <string name="sdcard_busy_message">"Desculpe, o cartão SD está cheio."</string>
+    <string name="recentlyadded">"Adicionado recentemente"</string>
+    <string name="recentlyadded_title">"Adicionado recentemente"</string>
+    <string name="podcasts_listitem">"Podcasts"</string>
+    <string name="podcasts_title">"Podcasts"</string>
+    <string name="sdcard_missing_title">"Sem cartão SD"</string>
+    <string name="sdcard_missing_message">"O seu telefone não tem um cartão SD inserido."</string>
+    <string name="sdcard_busy_title">"Cartão SD não disponível"</string>
+    <string name="sdcard_busy_message">"Desculpe, o seu cartão SD está ocupado."</string>
     <string name="sdcard_error_title">"Erro do cartão SD"</string>
-    <string name="sdcard_error_message">"Ocorreu um erro no cartão SD."</string>
+    <string name="sdcard_error_message">"Foi encontrado um erro no seu cartão SD."</string>
     <string name="unknown_artist_name">"Artista desconhecido"</string>
     <string name="unknown_album_name">"Álbum desconhecido"</string>
-    <string name="shuffle_on_notif">"Ordem aleatória ativada."</string>
-    <string name="shuffle_off_notif">"Ordem aleatória desativada."</string>
-    <string name="repeat_off_notif">"Repetição desativada."</string>
-    <string name="repeat_current_notif">"Repetir música atual."</string>
-    <string name="repeat_all_notif">"Repetir todas as músicas."</string>
-    <string name="ringtone_menu">"Usar como ringtone do telefone"</string>
-    <string name="ringtone_menu_short">"Usar como ringtone"</string>
-    <string name="ringtone_set">"\"%s\" foi definido como ringtone do telefone."</string>
+    <string name="shuffle_on_notif">"A reprodução aleatória está ativada."</string>
+    <string name="shuffle_off_notif">"A reprodução aleatória está desativada."</string>
+    <string name="repeat_off_notif">"A repetição está desativada."</string>
+    <string name="repeat_current_notif">"Repetindo a música atual."</string>
+    <string name="repeat_all_notif">"Repetindo todas as músicas."</string>
+    <string name="ringtone_menu">"Usar como toque do telefone"</string>
+    <string name="ringtone_menu_short">"Usar como toque"</string>
+    <string name="ringtone_set">"\"%s\" definido como toque do telefone."</string>
     <string name="play_selection">"Reproduzir"</string>
     <string name="add_to_playlist">"Adicionar à lista de reprodução"</string>
     <string name="queue">"Lista de reprodução atual"</string>
@@ -96,7 +95,7 @@
     <string name="emptyplaylist">"A lista de reprodução selecionada está vazia."</string>
     <string name="create_playlist_create_text">"Salvar"</string>
     <string name="create_playlist_overwrite_text">"Substituir"</string>
-    <string name="service_start_error_title">"Problema com a reprodução"</string>
+    <string name="service_start_error_title">"Problema na reprodução"</string>
     <string name="service_start_error_msg">"Desculpe, não foi possível reproduzir a música."</string>
     <string name="service_start_error_button">"OK"</string>
   <string-array name="weeklist">
@@ -114,7 +113,7 @@
     <item>"12 semanas"</item>
   </string-array>
     <string name="weekpicker_set">"Concluído"</string>
-    <string name="weekpicker_title">"Definir tempo"</string>
+    <string name="weekpicker_title">"Definir o período"</string>
     <string name="save_as_playlist">"Salvar como lista de reprodução"</string>
     <string name="clear_playlist">"Limpar lista de reprodução"</string>
     <string name="musicbrowserlabel">"Música"</string>
@@ -125,25 +124,20 @@
     <string name="playback_failed">"Desculpe, o player não suporta este tipo de arquivo de áudio."</string>
     <string name="cancel">"Cancelar"</string>
     <string name="remove_from_playlist">"Remover da lista de reprodução"</string>
-    <string name="streamloadingtext">"Conectando a <xliff:g id="HOST">%s</xliff:g>"</string>
-    <string name="mediasearch">"Pesquisar por %s usando:"</string>
+    <string name="streamloadingtext">"Conectando-se a <xliff:g id="HOST">%s</xliff:g>"</string>
+    <string name="mediasearch">"Pesquisar %s usando:"</string>
     <string name="working_artists">"Artistas…"</string>
-    <string name="working_albums">"Álbuns…"</string>
+    <string name="working_albums">"Álbuns..."</string>
     <string name="working_songs">"Músicas…"</string>
-    <!-- no translation found for working_playlists (4424950806134653351) -->
-    <skip />
-    <!-- no translation found for loading (3267924133697717662) -->
-    <skip />
-    <!-- no translation found for sort_by_track (7662999005554152565) -->
-    <skip />
-    <!-- no translation found for sort_by_album (2912837715658975248) -->
-    <skip />
-    <!-- no translation found for sort_by_artist (4607024967813199992) -->
-    <skip />
-    <!-- no translation found for music_picker_title (1561623486324013570) -->
-    <skip />
-    <!-- no translation found for gadget_track (3186569295893300114) -->
-    <skip />
+    <string name="working_playlists">"Listas de reprodução..."</string>
+    <string name="loading">"Carregando"</string>
+    <string name="sort_by_track">"Faixas"</string>
+    <string name="sort_by_album">"Álbuns"</string>
+    <string name="sort_by_artist">"Artistas"</string>
+    <string name="music_picker_title">"Selecione a faixa de música"</string>
+    <string name="gadget_track">"Faixa <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
     <!-- no translation found for fail_to_start_stream (3605390187703912835) -->
     <skip />
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values-ru-keysexposed/strings.xml b/res/values-ru-keysexposed/strings.xml
index f87495e..97e8979 100644
--- a/res/values-ru-keysexposed/strings.xml
+++ b/res/values-ru-keysexposed/strings.xml
@@ -16,6 +16,6 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="create_playlist_create_text_prompt">"Название плейлиста"</string>
-    <string name="rename_playlist_same_prompt">"Переименовать \"<xliff:g id="PLAYLIST">%s</xliff:g>\" в"</string>
-    <string name="rename_playlist_diff_prompt">"Переименовать \"<xliff:g id="PLAYLIST">%s</xliff:g>\" в"</string>
+    <string name="rename_playlist_same_prompt">"Новое название \"<xliff:g id="PLAYLIST">%s</xliff:g>\" в"</string>
+    <string name="rename_playlist_diff_prompt">"Новое название \"<xliff:g id="PLAYLIST">%s</xliff:g>\" в"</string>
 </resources>
diff --git a/res/values-ru-keyshidden/strings.xml b/res/values-ru-keyshidden/strings.xml
index 8be9846..ee9a619 100644
--- a/res/values-ru-keyshidden/strings.xml
+++ b/res/values-ru-keyshidden/strings.xml
@@ -15,7 +15,7 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="create_playlist_create_text_prompt">"Введите название нового плейлиста с клавиатуры или нажмите Сохранить, чтобы назвать его \"%s\"."</string>
-    <string name="rename_playlist_same_prompt">"Введите новое название плейлиста \"<xliff:g id="PLAYLIST">%s</xliff:g>\" с клавиатуры."</string>
-    <string name="rename_playlist_diff_prompt">"Введите новое название плейлиста \"<xliff:g id="PLAYLIST">%s</xliff:g>\" с клавиатуры или нажмите Сохранить, чтобы назвать его \"%s\"."</string>
+    <string name="create_playlist_create_text_prompt">"Откройте клавиатуру, чтобы ввести название для нового плейлиста или нажмите \"Сохранить\", чтобы сохранить плейлист под названием \"%s\"."</string>
+    <string name="rename_playlist_same_prompt">"Откройте клавиатуру, чтобы ввести новое название для плейлиста \"<xliff:g id="PLAYLIST">%s</xliff:g>\"."</string>
+    <string name="rename_playlist_diff_prompt">"Откройте клавиатуру, чтобы ввести другое название для плейлиста <xliff:g id="PLAYLIST">%s</xliff:g> или нажмите \"Сохранить\", чтобы сохранить плейлист под названием \"%s\"."</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index cbdac78..93344a5 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -28,23 +28,23 @@
   </plurals>
     <string name="goto_start">"Библиотека"</string>
     <string name="goto_playback">"Воспроизведение"</string>
-    <string name="party_shuffle">"Вечеринка"</string>
-    <string name="party_shuffle_off">"Режим вечеринки отключен"</string>
+    <string name="party_shuffle">"Перемешать любимые"</string>
+    <string name="party_shuffle_off">"Режим случайного воспроизведения любимых композиций отключен"</string>
     <string name="delete_item">"Удалить"</string>
     <string name="shuffle_all">"Перемешать все"</string>
     <string name="play_all">"Воспроизвести все"</string>
-    <string name="delete_artist_desc">"Все композиции артиста <xliff:g id="ARTIST">%s</xliff:g> будут удалены с карты SD."</string>
-    <string name="delete_album_desc">"Весь альбом \"<xliff:g id="ALBUM">%s</xliff:g>\" будет удален с карты SD."</string>
-    <string name="delete_song_desc">"Композиция \"<xliff:g id="SONG">%s</xliff:g>\" будет удалена с карты SD."</string>
+    <string name="delete_artist_desc">"Все композиции артиста <xliff:g id="ARTIST">%s</xliff:g> будут навсегда удалены с SD-карты."</string>
+    <string name="delete_album_desc">"Весь альбом \"<xliff:g id="ALBUM">%s</xliff:g>\" будет навсегда удален с SD-карты."</string>
+    <string name="delete_song_desc">"Композиция \"<xliff:g id="SONG">%s</xliff:g>\" будет навсегда удалена с SD-карты."</string>
     <string name="delete_confirm_button_text">"ОК"</string>
   <plurals name="NNNtracksdeleted">
-    <item quantity="one">"1 композиция была удалена."</item>
-    <item quantity="other">"Композиции (<xliff:g id="SONGS_TO_DELETE">%d</xliff:g>) были удалены."</item>
+    <item quantity="one">"1 композиция удалена"</item>
+    <item quantity="other">"Удалено композиций: <xliff:g id="SONGS_TO_DELETE">%d</xliff:g>."</item>
   </plurals>
-    <string name="scanning">"Сканирование карты SD…"</string>
-    <string name="nowplaying_title">"Воспроизводится"</string>
-    <string name="partyshuffle_title">"Вечеринка"</string>
-    <string name="artists_title">"Артисты"</string>
+    <string name="scanning">"Сканирование SD-карты…"</string>
+    <string name="nowplaying_title">"Сейчас воспроизводится"</string>
+    <string name="partyshuffle_title">"Перемешать любимые"</string>
+    <string name="artists_title">"Исполнители"</string>
     <string name="albums_menu">"Альбомы"</string>
     <string name="albums_title">"Альбомы"</string>
     <string name="tracks_menu">"Композиции"</string>
@@ -52,12 +52,12 @@
     <string name="playlists_menu">"Плейлисты"</string>
     <string name="playlists_title">"Плейлисты"</string>
     <string name="videos_title">"Видео"</string>
-    <string name="all_title">"Все мультимедийное содержание"</string>
-    <string name="browse_menu">"Артисты"</string>
+    <string name="all_title">"Все типы"</string>
+    <string name="browse_menu">"Исполнители"</string>
     <string name="search_title">"Поиск"</string>
     <string name="no_tracks_title">"Нет композиций"</string>
-    <string name="no_videos_title">"Нет видео"</string>
-    <string name="no_playlists_title">"Нет плейлистов"</string>
+    <string name="no_videos_title">"Видео отсутствует"</string>
+    <string name="no_playlists_title">"Нет плейлистов."</string>
     <string name="delete_playlist_menu">"Удалить"</string>
     <string name="edit_playlist_menu">"Изменить"</string>
     <string name="rename_playlist_menu">"Переименовать"</string>
@@ -67,22 +67,22 @@
     <string name="recentlyadded_title">"Недавно добавленные"</string>
     <string name="podcasts_listitem">"Подкасты"</string>
     <string name="podcasts_title">"Подкасты"</string>
-    <string name="sdcard_missing_title">"Нет карты SD"</string>
-    <string name="sdcard_missing_message">"В телефоне не установлена карта SD."</string>
-    <string name="sdcard_busy_title">"Карта SD недоступна"</string>
-    <string name="sdcard_busy_message">"К сожалению, карта SD занята."</string>
-    <string name="sdcard_error_title">"Ошибка карты SD"</string>
-    <string name="sdcard_error_message">"Ошибка при доступе к карте SD."</string>
-    <string name="unknown_artist_name">"Неизвестный артист"</string>
+    <string name="sdcard_missing_title">"SD-карта отсутствует."</string>
+    <string name="sdcard_missing_message">"В телефоне отсутствует SD-карта."</string>
+    <string name="sdcard_busy_title">"SD-карта недоступна"</string>
+    <string name="sdcard_busy_message">"SD-карта занята."</string>
+    <string name="sdcard_error_title">"Ошибка SD-карты"</string>
+    <string name="sdcard_error_message">"Ошибка SD-карты."</string>
+    <string name="unknown_artist_name">"Неизвестный исполнитель"</string>
     <string name="unknown_album_name">"Неизвестный альбом"</string>
-    <string name="shuffle_on_notif">"Перемешивание включено."</string>
-    <string name="shuffle_off_notif">"Перемешивание отключено."</string>
-    <string name="repeat_off_notif">"Повтор отключен."</string>
-    <string name="repeat_current_notif">"Повтор текущей композиции."</string>
+    <string name="shuffle_on_notif">"Режим случайного воспроизведения включен."</string>
+    <string name="shuffle_off_notif">"Режим случайного воспроизведения отключен."</string>
+    <string name="repeat_off_notif">"Режим повторного воспроизведения отключен."</string>
+    <string name="repeat_current_notif">"Повторение текущей композиции."</string>
     <string name="repeat_all_notif">"Повтор всех композиций."</string>
     <string name="ringtone_menu">"Использовать как мелодию звонка телефона"</string>
     <string name="ringtone_menu_short">"Использовать как мелодию звонка"</string>
-    <string name="ringtone_set">"Установлена мелодия звонка телефона: \"%s\"."</string>
+    <string name="ringtone_set">"Композиция \"%s\" установлена в качестве мелодии звонка."</string>
     <string name="play_selection">"Воспроизвести"</string>
     <string name="add_to_playlist">"Добавить в плейлист"</string>
     <string name="queue">"Текущий плейлист"</string>
@@ -90,13 +90,13 @@
     <string name="new_playlist_name_template">"Новый плейлист <xliff:g id="NUMBER">%d</xliff:g>"</string>
   <plurals name="NNNtrackstoplaylist">
     <item quantity="one">"1 композиция добавлена в плейлист."</item>
-    <item quantity="other">"Композиции (%d) добавлены в плейлист."</item>
+    <item quantity="other">"Добавлено композиций в плейлист: %d."</item>
   </plurals>
     <string name="emptyplaylist">"Выбранный плейлист пуст."</string>
     <string name="create_playlist_create_text">"Сохранить"</string>
     <string name="create_playlist_overwrite_text">"Перезаписать"</string>
-    <string name="service_start_error_title">"Проблема с воспроизведением"</string>
-    <string name="service_start_error_msg">"К сожалению, воспроизвести композицию не удалось."</string>
+    <string name="service_start_error_title">"Сбой при воспроизведении"</string>
+    <string name="service_start_error_msg">"Воспроизвести композицию невозможно."</string>
     <string name="service_start_error_button">"ОК"</string>
   <string-array name="weeklist">
     <item>"1 неделя"</item>
@@ -113,7 +113,7 @@
     <item>"12 недель"</item>
   </string-array>
     <string name="weekpicker_set">"Готово"</string>
-    <string name="weekpicker_title">"Выбор времени"</string>
+    <string name="weekpicker_title">"Установить время"</string>
     <string name="save_as_playlist">"Сохранить как плейлист"</string>
     <string name="clear_playlist">"Очистить плейлист"</string>
     <string name="musicbrowserlabel">"Музыка"</string>
@@ -121,14 +121,14 @@
     <string name="mediaplaybacklabel">"Музыка"</string>
     <string name="videobrowserlabel">"Видео"</string>
     <string name="mediapickerlabel">"Музыка"</string>
-    <string name="playback_failed">"Извините, проигрыватель не поддерживает этот тип аудиофайлов."</string>
+    <string name="playback_failed">"Этот тип аудиофайла не поддерживается проигрывателем."</string>
     <string name="cancel">"Отмена"</string>
     <string name="remove_from_playlist">"Удалить из плейлиста"</string>
-    <string name="streamloadingtext">"Идет подключение к хосту <xliff:g id="HOST">%s</xliff:g>"</string>
+    <string name="streamloadingtext">"Подключение к <xliff:g id="HOST">%s</xliff:g>"</string>
     <string name="mediasearch">"Поиск %s с помощью:"</string>
-    <string name="working_artists">"Артисты…"</string>
+    <string name="working_artists">"Исполнители..."</string>
     <string name="working_albums">"Альбомы…"</string>
-    <string name="working_songs">"Композиции…"</string>
+    <string name="working_songs">"Композиции..."</string>
     <string name="working_playlists">"Плейлисты..."</string>
     <string name="loading">"Идет загрузка"</string>
     <string name="sort_by_track">"Дорожки"</string>
@@ -136,4 +136,8 @@
     <string name="sort_by_artist">"Артисты"</string>
     <string name="music_picker_title">"Выбрать музыкальную дорожку"</string>
     <string name="gadget_track">"Трек <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for fail_to_start_stream (3605390187703912835) -->
+    <skip />
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values/dimens.xml b/res/values-sv-finger/strings2.xml
similarity index 68%
copy from res/values/dimens.xml
copy to res/values-sv-finger/strings2.xml
index 539b64f..838dac5 100644
--- a/res/values/dimens.xml
+++ b/res/values-sv-finger/strings2.xml
@@ -1,20 +1,19 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!-- Copyright (C) 2009 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.
 -->
-
-<resources>
-    <!-- Size of widget album art cutout -->
-    <dimen name="appwidget_cutout">198dip</dimen>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="notification_artist_album">"<xliff:g id="ALBUM">%2$s</xliff:g>"\n"<xliff:g id="ARTIST">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-sv-keysexposed/strings.xml b/res/values-sv-keysexposed/strings.xml
new file mode 100644
index 0000000..b1da478
--- /dev/null
+++ b/res/values-sv-keysexposed/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="create_playlist_create_text_prompt">"Spellistans namn"</string>
+    <string name="rename_playlist_same_prompt">"Ändra namnet \"<xliff:g id="PLAYLIST">%s</xliff:g>\" till"</string>
+    <string name="rename_playlist_diff_prompt">"Ändra namnet \"<xliff:g id="PLAYLIST">%s</xliff:g>\" till"</string>
+</resources>
diff --git a/res/values-sv-keyshidden/strings.xml b/res/values-sv-keyshidden/strings.xml
new file mode 100644
index 0000000..a670044
--- /dev/null
+++ b/res/values-sv-keyshidden/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="create_playlist_create_text_prompt">"Öppna tangentbordet om du vill ange ett namn på spellistan. Om du väljer Spara får den namnet \"%s\"."</string>
+    <string name="rename_playlist_same_prompt">"Öppna tangentbordet om du vill ange ett namn på spellistan <xliff:g id="PLAYLIST">%s</xliff:g>."</string>
+    <string name="rename_playlist_diff_prompt">"Öppna tangentbordet om du vill ange ett nytt namn på spellistan <xliff:g id="PLAYLIST">%s</xliff:g>. Om du väljer Spara får den namnet \"%s\"."</string>
+</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
new file mode 100644
index 0000000..edeb2c4
--- /dev/null
+++ b/res/values-sv/strings.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="onesong">"1 låt"</string>
+  <plurals name="Nsongs">
+    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> låtar"</item>
+  </plurals>
+  <plurals name="Nsongscomp">
+    <item quantity="other">"<xliff:g id="COUNT_FOR_ARTIST">%2$d</xliff:g> av <xliff:g id="TOTAL_COUNT">%1$d</xliff:g> låtar"</item>
+  </plurals>
+  <plurals name="Nalbums">
+    <item quantity="one">"1 album"</item>
+    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> album"</item>
+  </plurals>
+    <string name="goto_start">"Bibliotek"</string>
+    <string name="goto_playback">"Uppspelning"</string>
+    <string name="party_shuffle">"Blanda alla spår"</string>
+    <string name="party_shuffle_off">"Blandar inte hela listan"</string>
+    <string name="delete_item">"Ta bort"</string>
+    <string name="shuffle_all">"Blanda hela listan"</string>
+    <string name="play_all">"Spela alla"</string>
+    <string name="delete_artist_desc">"Alla låtar av <xliff:g id="ARTIST">%s</xliff:g> tas bort från SD-kortet permanent."</string>
+    <string name="delete_album_desc">"Hela albumet <xliff:g id="ALBUM">%s</xliff:g> tas bort från SD-kortet permanent."</string>
+    <string name="delete_song_desc">"\"<xliff:g id="SONG">%s</xliff:g>\" tas bort från SD-kortet permanent."</string>
+    <string name="delete_confirm_button_text">"OK"</string>
+  <plurals name="NNNtracksdeleted">
+    <item quantity="one">"1 låt togs bort."</item>
+    <item quantity="other">"<xliff:g id="SONGS_TO_DELETE">%d</xliff:g> låtar togs bort."</item>
+  </plurals>
+    <string name="scanning">"Skannar SD-kort…"</string>
+    <string name="nowplaying_title">"Nu spelas"</string>
+    <string name="partyshuffle_title">"Blanda alla spår"</string>
+    <string name="artists_title">"Artister"</string>
+    <string name="albums_menu">"Album"</string>
+    <string name="albums_title">"Album"</string>
+    <string name="tracks_menu">"Låtar"</string>
+    <string name="tracks_title">"Låtar"</string>
+    <string name="playlists_menu">"Spellistor"</string>
+    <string name="playlists_title">"Spellistor"</string>
+    <string name="videos_title">"Videor"</string>
+    <string name="all_title">"Alla media"</string>
+    <string name="browse_menu">"Artister"</string>
+    <string name="search_title">"Sök"</string>
+    <string name="no_tracks_title">"Inga låtar"</string>
+    <string name="no_videos_title">"Inga videor"</string>
+    <string name="no_playlists_title">"Ingen spellista"</string>
+    <string name="delete_playlist_menu">"Ta bort"</string>
+    <string name="edit_playlist_menu">"Redigera"</string>
+    <string name="rename_playlist_menu">"Byt namn"</string>
+    <string name="playlist_deleted_message">"Spellista har tagits bort."</string>
+    <string name="playlist_renamed_message">"Nytt namn på spellista."</string>
+    <string name="recentlyadded">"Nyligen tillagda"</string>
+    <string name="recentlyadded_title">"Nyligen tillagda"</string>
+    <string name="podcasts_listitem">"Podsändningar"</string>
+    <string name="podcasts_title">"Podsändningar"</string>
+    <string name="sdcard_missing_title">"Inget SD-kort"</string>
+    <string name="sdcard_missing_message">"Det finns inget SD-kort i telefonen."</string>
+    <string name="sdcard_busy_title">"SD-kort ej tillgängligt"</string>
+    <string name="sdcard_busy_message">"Ditt SD-kort är tyvärr upptaget."</string>
+    <string name="sdcard_error_title">"SD-kortfel"</string>
+    <string name="sdcard_error_message">"Ett fel upptäcktes på ditt SD-kort."</string>
+    <string name="unknown_artist_name">"Okänd artist"</string>
+    <string name="unknown_album_name">"Okänt album"</string>
+    <string name="shuffle_on_notif">"Blandar spår."</string>
+    <string name="shuffle_off_notif">"Blandar inte spår."</string>
+    <string name="repeat_off_notif">"Upprepning är aktiverat."</string>
+    <string name="repeat_current_notif">"Upprepa aktuell låt."</string>
+    <string name="repeat_all_notif">"Upprepa alla låtar."</string>
+    <string name="ringtone_menu">"Använd som ringsignal"</string>
+    <string name="ringtone_menu_short">"Använd som ringsignal"</string>
+    <string name="ringtone_set">"\"%s\" vald som ringsignal."</string>
+    <string name="play_selection">"Spela"</string>
+    <string name="add_to_playlist">"Lägg till i spellista"</string>
+    <string name="queue">"Aktuell spellista"</string>
+    <string name="new_playlist">"Ny"</string>
+    <string name="new_playlist_name_template">"Ny spellista <xliff:g id="NUMBER">%d</xliff:g>"</string>
+  <plurals name="NNNtrackstoplaylist">
+    <item quantity="one">"1 låt har lagts till i spellistan."</item>
+    <item quantity="other">"%d låtar har lagts till i spellistan."</item>
+  </plurals>
+    <string name="emptyplaylist">"Den valda spellistan är tom."</string>
+    <string name="create_playlist_create_text">"Spara"</string>
+    <string name="create_playlist_overwrite_text">"Skriv över"</string>
+    <string name="service_start_error_title">"Problem med uppspelningen"</string>
+    <string name="service_start_error_msg">"Det gick tyvärr inte att spela låten."</string>
+    <string name="service_start_error_button">"OK"</string>
+  <string-array name="weeklist">
+    <item>"1 vecka"</item>
+    <item>"2 veckor"</item>
+    <item>"3 veckor"</item>
+    <item>"4 veckor"</item>
+    <item>"5 veckor"</item>
+    <item>"6 veckor"</item>
+    <item>"7 veckor"</item>
+    <item>"8 veckor"</item>
+    <item>"9 veckor"</item>
+    <item>"10 veckor"</item>
+    <item>"11 veckor"</item>
+    <item>"12 veckor"</item>
+  </string-array>
+    <string name="weekpicker_set">"Färdig"</string>
+    <string name="weekpicker_title">"Ange tid"</string>
+    <string name="save_as_playlist">"Spara som spellista"</string>
+    <string name="clear_playlist">"Rensa spellista"</string>
+    <string name="musicbrowserlabel">"Musik"</string>
+    <string name="musicshortcutlabel">"Musikspellista"</string>
+    <string name="mediaplaybacklabel">"Musik"</string>
+    <string name="videobrowserlabel">"Videor"</string>
+    <string name="mediapickerlabel">"Musik"</string>
+    <string name="playback_failed">"Spelaren stöder tyvärr inte den här typen av ljudfiler."</string>
+    <string name="cancel">"Avbryt"</string>
+    <string name="remove_from_playlist">"Ta bort från spellista"</string>
+    <string name="streamloadingtext">"Ansluter till <xliff:g id="HOST">%s</xliff:g>"</string>
+    <string name="mediasearch">"Sök efter %s med:"</string>
+    <string name="working_artists">"Artister…"</string>
+    <string name="working_albums">"Album…"</string>
+    <string name="working_songs">"Låtar…"</string>
+    <string name="working_playlists">"Spellistor…"</string>
+    <string name="loading">"Läser in"</string>
+    <string name="sort_by_track">"Spår"</string>
+    <string name="sort_by_album">"Album"</string>
+    <string name="sort_by_artist">"Artister"</string>
+    <string name="music_picker_title">"Välj musikspår"</string>
+    <string name="gadget_track">"Spår <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for fail_to_start_stream (3605390187703912835) -->
+    <skip />
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
+</resources>
diff --git a/res/values/dimens.xml b/res/values-tr-finger/strings2.xml
similarity index 68%
copy from res/values/dimens.xml
copy to res/values-tr-finger/strings2.xml
index 539b64f..838dac5 100644
--- a/res/values/dimens.xml
+++ b/res/values-tr-finger/strings2.xml
@@ -1,20 +1,19 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <!-- Copyright (C) 2009 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.
 -->
-
-<resources>
-    <!-- Size of widget album art cutout -->
-    <dimen name="appwidget_cutout">198dip</dimen>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="notification_artist_album">"<xliff:g id="ALBUM">%2$s</xliff:g>"\n"<xliff:g id="ARTIST">%1$s</xliff:g>"</string>
 </resources>
diff --git a/res/values-tr-keysexposed/strings.xml b/res/values-tr-keysexposed/strings.xml
new file mode 100644
index 0000000..7b52d00
--- /dev/null
+++ b/res/values-tr-keysexposed/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="create_playlist_create_text_prompt">"Şarkı listesi adı"</string>
+    <string name="rename_playlist_same_prompt">"\"<xliff:g id="PLAYLIST">%s</xliff:g>\" listesini şu şekilde yeniden adlandır:"</string>
+    <string name="rename_playlist_diff_prompt">"\"<xliff:g id="PLAYLIST">%s</xliff:g>\" listesini şu şekilde yeniden adlandır:"</string>
+</resources>
diff --git a/res/values-tr-keyshidden/strings.xml b/res/values-tr-keyshidden/strings.xml
new file mode 100644
index 0000000..958b1f4
--- /dev/null
+++ b/res/values-tr-keyshidden/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="create_playlist_create_text_prompt">"Yeni şarkı listenize bir ad vermek için tuş takımını açın veya \"%s\" olarak adlandırmak üzere Kaydet\'i seçin."</string>
+    <string name="rename_playlist_same_prompt">"\"<xliff:g id="PLAYLIST">%s</xliff:g>\" şarkı listesine yeni bir ad vermek için tuş takımını açın."</string>
+    <string name="rename_playlist_diff_prompt">"\"<xliff:g id="PLAYLIST">%s</xliff:g>\" şarkı listesine yeni bir ad vermek için tuş takımını açın veya \"%s\" olarak adlandırmak üzere Kaydet\'i seçin."</string>
+</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
new file mode 100644
index 0000000..d96fa1e
--- /dev/null
+++ b/res/values-tr/strings.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2009 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.
+-->
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="onesong">"1 şarkı"</string>
+  <plurals name="Nsongs">
+    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> şarkı"</item>
+  </plurals>
+  <plurals name="Nsongscomp">
+    <item quantity="other">"<xliff:g id="COUNT_FOR_ARTIST">%2$d</xliff:g> / <xliff:g id="TOTAL_COUNT">%1$d</xliff:g> şarkı"</item>
+  </plurals>
+  <plurals name="Nalbums">
+    <item quantity="one">"1 albüm"</item>
+    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> albüm"</item>
+  </plurals>
+    <string name="goto_start">"Kitaplık"</string>
+    <string name="goto_playback">"Yürüt"</string>
+    <string name="party_shuffle">"Karışık albüm oluşturma"</string>
+    <string name="party_shuffle_off">"Karışık albüm oluşturma kapalı"</string>
+    <string name="delete_item">"Sil"</string>
+    <string name="shuffle_all">"Tümünü karıştır"</string>
+    <string name="play_all">"Tümünü yürüt"</string>
+    <string name="delete_artist_desc">"<xliff:g id="ARTIST">%s</xliff:g> sanatçısına ait tüm şarkılar SD karttan kalıcı olarak silinecek."</string>
+    <string name="delete_album_desc">"\"<xliff:g id="ALBUM">%s</xliff:g>\" albümünün tamamı SD kattan silinecek."</string>
+    <string name="delete_song_desc">"\"<xliff:g id="SONG">%s</xliff:g>\" SD karttan kalıcı olarak silinecek."</string>
+    <string name="delete_confirm_button_text">"Tamam"</string>
+  <plurals name="NNNtracksdeleted">
+    <item quantity="one">"1 şarkı silindi."</item>
+    <item quantity="other">"<xliff:g id="SONGS_TO_DELETE">%d</xliff:g> şarkı silindi."</item>
+  </plurals>
+    <string name="scanning">"SD kart taranıyor..."</string>
+    <string name="nowplaying_title">"Şimdi yürütülüyor"</string>
+    <string name="partyshuffle_title">"Karışık albüm oluşturma"</string>
+    <string name="artists_title">"Sanatçılar"</string>
+    <string name="albums_menu">"Albümler"</string>
+    <string name="albums_title">"Albümler"</string>
+    <string name="tracks_menu">"Şarkılar"</string>
+    <string name="tracks_title">"Şarkılar"</string>
+    <string name="playlists_menu">"Şarkı listeleri"</string>
+    <string name="playlists_title">"Şarkı listeleri"</string>
+    <string name="videos_title">"Videolar"</string>
+    <string name="all_title">"Tüm medya"</string>
+    <string name="browse_menu">"Sanatçılar"</string>
+    <string name="search_title">"Ara"</string>
+    <string name="no_tracks_title">"Şarkı yok"</string>
+    <string name="no_videos_title">"Video yok"</string>
+    <string name="no_playlists_title">"Şarkı listesi yok"</string>
+    <string name="delete_playlist_menu">"Sil"</string>
+    <string name="edit_playlist_menu">"Düzenle"</string>
+    <string name="rename_playlist_menu">"Yeniden adlandır"</string>
+    <string name="playlist_deleted_message">"Şarkı listesi silindi."</string>
+    <string name="playlist_renamed_message">"Şarkı listesi yeniden adlandırıldı."</string>
+    <string name="recentlyadded">"En son eklenen"</string>
+    <string name="recentlyadded_title">"En son eklenen"</string>
+    <string name="podcasts_listitem">"Podcast\'ler"</string>
+    <string name="podcasts_title">"Podcast\'ler"</string>
+    <string name="sdcard_missing_title">"SD kart yok"</string>
+    <string name="sdcard_missing_message">"Telefonunuza takılı bir SD kart yok."</string>
+    <string name="sdcard_busy_title">"SD kart kullanılamıyor"</string>
+    <string name="sdcard_busy_message">"Maalesef, SD kartınız meşgul."</string>
+    <string name="sdcard_error_title">"SD kart hatası"</string>
+    <string name="sdcard_error_message">"SD kartınızda bir hatayla karşılaşıldı."</string>
+    <string name="unknown_artist_name">"Bilinmeyen sanatçı"</string>
+    <string name="unknown_album_name">"Bilinmeyen albüm"</string>
+    <string name="shuffle_on_notif">"Karıştırma açık."</string>
+    <string name="shuffle_off_notif">"Karıştırma kapalı."</string>
+    <string name="repeat_off_notif">"Tekrarlama kapalı."</string>
+    <string name="repeat_current_notif">"Geçerli şarkı tekrarlanıyor."</string>
+    <string name="repeat_all_notif">"Tüm şarkılar tekrarlanıyor."</string>
+    <string name="ringtone_menu">"Telefon zil sesi olarak kullan"</string>
+    <string name="ringtone_menu_short">"Zil sesi olarak kullan"</string>
+    <string name="ringtone_set">"\"%s\" telefon zil sesi olarak ayarlanmış."</string>
+    <string name="play_selection">"Yürüt"</string>
+    <string name="add_to_playlist">"Şarkı listesine ekle"</string>
+    <string name="queue">"Geçerli şarkı listesi"</string>
+    <string name="new_playlist">"Yeni"</string>
+    <string name="new_playlist_name_template">"Yeni şarkı listesi <xliff:g id="NUMBER">%d</xliff:g>"</string>
+  <plurals name="NNNtrackstoplaylist">
+    <item quantity="one">"Şarkı listesine 1 şarkı eklendi."</item>
+    <item quantity="other">"Şarkı listesine %d şarkı eklendi."</item>
+  </plurals>
+    <string name="emptyplaylist">"Seçilen şarkı listesi boş."</string>
+    <string name="create_playlist_create_text">"Kaydet"</string>
+    <string name="create_playlist_overwrite_text">"Üzerine yaz"</string>
+    <string name="service_start_error_title">"Yürütme sorunu"</string>
+    <string name="service_start_error_msg">"Maalesef, şarkı yürütülemedi."</string>
+    <string name="service_start_error_button">"Tamam"</string>
+  <string-array name="weeklist">
+    <item>"1 hafta"</item>
+    <item>"2 hafta"</item>
+    <item>"3 hafta"</item>
+    <item>"4 hafta"</item>
+    <item>"5 hafta"</item>
+    <item>"6 hafta"</item>
+    <item>"7 hafta"</item>
+    <item>"8 hafta"</item>
+    <item>"9 hafta"</item>
+    <item>"10 hafta"</item>
+    <item>"11 hafta"</item>
+    <item>"12 hafta"</item>
+  </string-array>
+    <string name="weekpicker_set">"Bitti"</string>
+    <string name="weekpicker_title">"Saati ayarla"</string>
+    <string name="save_as_playlist">"Şarkı listesi olarak kaydet"</string>
+    <string name="clear_playlist">"Şarkı listesini temizle"</string>
+    <string name="musicbrowserlabel">"Müzik"</string>
+    <string name="musicshortcutlabel">"Müzik şarkı listesi"</string>
+    <string name="mediaplaybacklabel">"Müzik"</string>
+    <string name="videobrowserlabel">"Videolar"</string>
+    <string name="mediapickerlabel">"Müzik"</string>
+    <string name="playback_failed">"Maalesef, bu oynatıcı bu tür ses dosyalarını desteklemiyor."</string>
+    <string name="cancel">"İptal"</string>
+    <string name="remove_from_playlist">"Şarkı listesinden kaldır"</string>
+    <string name="streamloadingtext">"Şuraya bağlanılıyor: <xliff:g id="HOST">%s</xliff:g>"</string>
+    <string name="mediasearch">"Şunu kullanarak %s için arama yap:"</string>
+    <string name="working_artists">"Sanatçılar..."</string>
+    <string name="working_albums">"Albümler..."</string>
+    <string name="working_songs">"Şarkılar..."</string>
+    <string name="working_playlists">"Şarkı listeleri..."</string>
+    <string name="loading">"Yükleniyor"</string>
+    <string name="sort_by_track">"Parçalar"</string>
+    <string name="sort_by_album">"Albümler"</string>
+    <string name="sort_by_artist">"Sanatçılar"</string>
+    <string name="music_picker_title">"Müzik parçasını seç"</string>
+    <string name="gadget_track">"Parça <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for fail_to_start_stream (3605390187703912835) -->
+    <skip />
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
+</resources>
diff --git a/res/values-zh-rCN-keyshidden/strings.xml b/res/values-zh-rCN-keyshidden/strings.xml
index 787bade..47face8 100644
--- a/res/values-zh-rCN-keyshidden/strings.xml
+++ b/res/values-zh-rCN-keyshidden/strings.xml
@@ -15,7 +15,7 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="create_playlist_create_text_prompt">"打开键盘以为新播放列表命名,或选择“保存”将其命名为“%s”。"</string>
-    <string name="rename_playlist_same_prompt">"打开键盘以赋予播放列表“<xliff:g id="PLAYLIST">%s</xliff:g>”新名称。"</string>
-    <string name="rename_playlist_diff_prompt">"打开键盘以赋予播放列表“<xliff:g id="PLAYLIST">%s</xliff:g>”新名称,或选择“保存”将其命名为“%s”。"</string>
+    <string name="create_playlist_create_text_prompt">"打开键盘为新的播放列表创建名称,或选择“保存”将其命名为“%s”。"</string>
+    <string name="rename_playlist_same_prompt">"打开键盘为“<xliff:g id="PLAYLIST">%s</xliff:g>”播放列表创建一个新名称。"</string>
+    <string name="rename_playlist_diff_prompt">"打开键盘为“<xliff:g id="PLAYLIST">%s</xliff:g>”播放列表创建一个新名称,或选择“保存”将其命名为“%s”。"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index fb7ca95..76fd5bd 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -23,8 +23,8 @@
     <item quantity="other">"共 <xliff:g id="TOTAL_COUNT">%1$d</xliff:g> 首歌曲,其中 <xliff:g id="COUNT_FOR_ARTIST">%2$d</xliff:g> 首"</item>
   </plurals>
   <plurals name="Nalbums">
-    <item quantity="one">"1 个专辑"</item>
-    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> 个专辑"</item>
+    <item quantity="one">"1 张专辑"</item>
+    <item quantity="other">"<xliff:g id="COUNT">%d</xliff:g> 张专辑"</item>
   </plurals>
     <string name="goto_start">"音乐库"</string>
     <string name="goto_playback">"播放"</string>
@@ -33,16 +33,16 @@
     <string name="delete_item">"删除"</string>
     <string name="shuffle_all">"全部随机播放"</string>
     <string name="play_all">"全部播放"</string>
-    <string name="delete_artist_desc">"<xliff:g id="ARTIST">%s</xliff:g>的所有歌曲都会从 SD 卡中永久删除。"</string>
-    <string name="delete_album_desc">"整个专辑“<xliff:g id="ALBUM">%s</xliff:g>”会从 SD 卡中永久删除。"</string>
-    <string name="delete_song_desc">"“<xliff:g id="SONG">%s</xliff:g>”会从 SD 卡中永久删除。"</string>
+    <string name="delete_artist_desc">"将会从 SD 卡上永久删除<xliff:g id="ARTIST">%s</xliff:g>的所有歌曲。"</string>
+    <string name="delete_album_desc">"将会从 SD 卡上永久删除整张“<xliff:g id="ALBUM">%s</xliff:g>”专辑。"</string>
+    <string name="delete_song_desc">"将会从 SD 卡上永久删除“<xliff:g id="SONG">%s</xliff:g>”。"</string>
     <string name="delete_confirm_button_text">"确定"</string>
   <plurals name="NNNtracksdeleted">
-    <item quantity="one">"已删除 1 首歌曲。"</item>
-    <item quantity="other">"已删除 <xliff:g id="SONGS_TO_DELETE">%d</xliff:g> 首歌曲。"</item>
+    <item quantity="one">"1 首歌曲已删除。"</item>
+    <item quantity="other">"<xliff:g id="SONGS_TO_DELETE">%d</xliff:g> 首歌曲已删除。"</item>
   </plurals>
     <string name="scanning">"正在扫描 SD 卡..."</string>
-    <string name="nowplaying_title">"正在播放"</string>
+    <string name="nowplaying_title">"当前正在播放"</string>
     <string name="partyshuffle_title">"派对随机播放"</string>
     <string name="artists_title">"艺术家"</string>
     <string name="albums_menu">"专辑"</string>
@@ -61,42 +61,42 @@
     <string name="delete_playlist_menu">"删除"</string>
     <string name="edit_playlist_menu">"编辑"</string>
     <string name="rename_playlist_menu">"重命名"</string>
-    <string name="playlist_deleted_message">"已删除播放列表。"</string>
-    <string name="playlist_renamed_message">"已重命名播放列表。"</string>
-    <string name="recentlyadded">"最近添加的歌曲"</string>
-    <string name="recentlyadded_title">"最近添加的"</string>
+    <string name="playlist_deleted_message">"播放列表已删除。"</string>
+    <string name="playlist_renamed_message">"播放列表已重命名。"</string>
+    <string name="recentlyadded">"最近添加的文件"</string>
+    <string name="recentlyadded_title">"最近添加的文件"</string>
     <string name="podcasts_listitem">"播客"</string>
     <string name="podcasts_title">"播客"</string>
     <string name="sdcard_missing_title">"无 SD 卡"</string>
-    <string name="sdcard_missing_message">"您的手机未插入 SD 卡。"</string>
+    <string name="sdcard_missing_message">"手机中未插入 SD 卡。"</string>
     <string name="sdcard_busy_title">"SD 卡不可用"</string>
-    <string name="sdcard_busy_message">"很抱歉,SD 卡正忙。"</string>
+    <string name="sdcard_busy_message">"抱歉,SD 卡正忙。"</string>
     <string name="sdcard_error_title">"SD 卡错误"</string>
-    <string name="sdcard_error_message">"SD 卡出现错误。"</string>
+    <string name="sdcard_error_message">"SD 卡上出现错误。"</string>
     <string name="unknown_artist_name">"未知艺术家"</string>
     <string name="unknown_album_name">"未知专辑"</string>
     <string name="shuffle_on_notif">"随机播放已打开。"</string>
     <string name="shuffle_off_notif">"随机播放已关闭。"</string>
-    <string name="repeat_off_notif">"重复播放已关闭。"</string>
-    <string name="repeat_current_notif">"正在重复播放当前的歌曲。"</string>
-    <string name="repeat_all_notif">"重复播放所有歌曲。"</string>
+    <string name="repeat_off_notif">"重复已关闭。"</string>
+    <string name="repeat_current_notif">"重复当前歌曲。"</string>
+    <string name="repeat_all_notif">"重复所有歌曲。"</string>
     <string name="ringtone_menu">"用作手机铃声"</string>
     <string name="ringtone_menu_short">"用作铃声"</string>
-    <string name="ringtone_set">"“%s”已设为手机铃声。"</string>
+    <string name="ringtone_set">"已将“%s”设置为手机铃声。"</string>
     <string name="play_selection">"播放"</string>
-    <string name="add_to_playlist">"添加至播放列表"</string>
-    <string name="queue">"当前的播放列表"</string>
+    <string name="add_to_playlist">"添加到播放列表"</string>
+    <string name="queue">"当前播放列表"</string>
     <string name="new_playlist">"新建"</string>
-    <string name="new_playlist_name_template">"新播放列表 <xliff:g id="NUMBER">%d</xliff:g>"</string>
+    <string name="new_playlist_name_template">"新建播放列表 <xliff:g id="NUMBER">%d</xliff:g>"</string>
   <plurals name="NNNtrackstoplaylist">
-    <item quantity="one">"已向播放列表添加了 1 首歌曲。"</item>
-    <item quantity="other">"%d 首歌曲已添加至播放列表。"</item>
+    <item quantity="one">"已将 1 首歌曲添加到播放列表。"</item>
+    <item quantity="other">"%d 首歌曲已添加到播放列表。"</item>
   </plurals>
-    <string name="emptyplaylist">"选择的播放列表为空。"</string>
+    <string name="emptyplaylist">"选定的播放列表为空。"</string>
     <string name="create_playlist_create_text">"保存"</string>
     <string name="create_playlist_overwrite_text">"覆盖"</string>
     <string name="service_start_error_title">"播放问题"</string>
-    <string name="service_start_error_msg">"很抱歉,无法播放此歌曲。"</string>
+    <string name="service_start_error_msg">"抱歉,无法播放此歌曲。"</string>
     <string name="service_start_error_button">"确定"</string>
   <string-array name="weeklist">
     <item>"1 周"</item>
@@ -121,11 +121,11 @@
     <string name="mediaplaybacklabel">"音乐"</string>
     <string name="videobrowserlabel">"视频"</string>
     <string name="mediapickerlabel">"音乐"</string>
-    <string name="playback_failed">"很抱歉,此播放器不支持这种类型的音频文件。"</string>
+    <string name="playback_failed">"抱歉,播放器不支持此类型的音频文件。"</string>
     <string name="cancel">"取消"</string>
     <string name="remove_from_playlist">"从播放列表中删除"</string>
-    <string name="streamloadingtext">"正连接至 <xliff:g id="HOST">%s</xliff:g>"</string>
-    <string name="mediasearch">"使用以下内容搜索 %s:"</string>
+    <string name="streamloadingtext">"正在连接 <xliff:g id="HOST">%s</xliff:g>"</string>
+    <string name="mediasearch">"搜索%s所用的工具:"</string>
     <string name="working_artists">"艺术家..."</string>
     <string name="working_albums">"专辑..."</string>
     <string name="working_songs">"歌曲..."</string>
@@ -136,4 +136,8 @@
     <string name="sort_by_artist">"艺术家"</string>
     <string name="music_picker_title">"选择曲目"</string>
     <string name="gadget_track">"曲目 <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <!-- no translation found for fail_to_start_stream (3605390187703912835) -->
+    <skip />
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 505b61c..47ff27f 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -136,4 +136,7 @@
     <string name="sort_by_artist">"演出者"</string>
     <string name="music_picker_title">"選取音樂曲目"</string>
     <string name="gadget_track">"音軌 <xliff:g id="TRACK_NUMBER">%d</xliff:g>"</string>
+    <string name="fail_to_start_stream">"無法播放您要求的串流媒體。"</string>
+    <!-- no translation found for search_settings_description (6520975349259883368) -->
+    <skip />
 </resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 9a7806a..07a5839 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -16,6 +16,5 @@
 
 <resources>
     <color name="appwidget_text">#ff000000</color>
-    <color name="appwidget_shadow">#ffffffff</color>
 </resources>
 
diff --git a/src/com/android/music/AlbumBrowserActivity.java b/src/com/android/music/AlbumBrowserActivity.java
index 0d6c150..2a55d08 100644
--- a/src/com/android/music/AlbumBrowserActivity.java
+++ b/src/com/android/music/AlbumBrowserActivity.java
@@ -253,13 +253,13 @@
         switch (item.getItemId()) {
             case PLAY_SELECTION: {
                 // play the selected album
-                int [] list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
+                long [] list = MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId));
                 MusicUtils.playAll(this, list, 0);
                 return true;
             }
 
             case QUEUE: {
-                int [] list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
+                long [] list = MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId));
                 MusicUtils.addToCurrentPlaylist(this, list);
                 return true;
             }
@@ -272,18 +272,18 @@
             }
 
             case PLAYLIST_SELECTED: {
-                int [] list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
-                int playlist = item.getIntent().getIntExtra("playlist", 0);
+                long [] list = MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId));
+                long playlist = item.getIntent().getLongExtra("playlist", 0);
                 MusicUtils.addToPlaylist(this, list, playlist);
                 return true;
             }
             case DELETE_ITEM: {
-                int [] list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
+                long [] list = MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId));
                 String f = getString(R.string.delete_album_desc); 
                 String desc = String.format(f, mCurrentAlbumName);
                 Bundle b = new Bundle();
                 b.putString("description", desc);
-                b.putIntArray("items", list);
+                b.putLongArray("items", list);
                 Intent intent = new Intent();
                 intent.setClass(this, DeleteItems.class);
                 intent.putExtras(b);
@@ -332,8 +332,8 @@
                 if (resultCode == RESULT_OK) {
                     Uri uri = intent.getData();
                     if (uri != null) {
-                        int [] list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
-                        MusicUtils.addToPlaylist(this, list, Integer.parseInt(uri.getLastPathSegment()));
+                        long [] list = MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId));
+                        MusicUtils.addToPlaylist(this, list, Long.parseLong(uri.getLastPathSegment()));
                     }
                 }
                 break;
@@ -573,16 +573,15 @@
             // We don't actually need the path to the thumbnail file,
             // we just use it to see if there is album art or not
             String art = cursor.getString(mAlbumArtIndex);
+            long aid = cursor.getLong(0);
             if (unknown || art == null || art.length() == 0) {
                 iv.setImageDrawable(null);
             } else {
-                int artIndex = cursor.getInt(0);
-                Drawable d = MusicUtils.getCachedArtwork(context, artIndex, mDefaultAlbumIcon);
+                Drawable d = MusicUtils.getCachedArtwork(context, aid, mDefaultAlbumIcon);
                 iv.setImageDrawable(d);
             }
             
-            int currentalbumid = MusicUtils.getCurrentAlbumId();
-            int aid = cursor.getInt(0);
+            long currentalbumid = MusicUtils.getCurrentAlbumId();
             iv = vh.play_indicator;
             if (currentalbumid == aid) {
                 iv.setImageDrawable(mNowPlayingOverlay);
diff --git a/src/com/android/music/ArtistAlbumBrowserActivity.java b/src/com/android/music/ArtistAlbumBrowserActivity.java
index 35bf54e..8165979 100644
--- a/src/com/android/music/ArtistAlbumBrowserActivity.java
+++ b/src/com/android/music/ArtistAlbumBrowserActivity.java
@@ -348,20 +348,20 @@
         switch (item.getItemId()) {
             case PLAY_SELECTION: {
                 // play everything by the selected artist
-                int [] list =
+                long [] list =
                     mCurrentArtistId != null ?
-                    MusicUtils.getSongListForArtist(this, Integer.parseInt(mCurrentArtistId))
-                    : MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
+                    MusicUtils.getSongListForArtist(this, Long.parseLong(mCurrentArtistId))
+                    : MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId));
                         
                 MusicUtils.playAll(this, list, 0);
                 return true;
             }
 
             case QUEUE: {
-                int [] list =
+                long [] list =
                     mCurrentArtistId != null ?
-                    MusicUtils.getSongListForArtist(this, Integer.parseInt(mCurrentArtistId))
-                    : MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
+                    MusicUtils.getSongListForArtist(this, Long.parseLong(mCurrentArtistId))
+                    : MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId));
                 MusicUtils.addToCurrentPlaylist(this, list);
                 return true;
             }
@@ -374,30 +374,30 @@
             }
 
             case PLAYLIST_SELECTED: {
-                int [] list =
+                long [] list =
                     mCurrentArtistId != null ?
-                    MusicUtils.getSongListForArtist(this, Integer.parseInt(mCurrentArtistId))
-                    : MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
-                int playlist = item.getIntent().getIntExtra("playlist", 0);
+                    MusicUtils.getSongListForArtist(this, Long.parseLong(mCurrentArtistId))
+                    : MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId));
+                long playlist = item.getIntent().getLongExtra("playlist", 0);
                 MusicUtils.addToPlaylist(this, list, playlist);
                 return true;
             }
             
             case DELETE_ITEM: {
-                int [] list;
+                long [] list;
                 String desc;
                 if (mCurrentArtistId != null) {
-                    list = MusicUtils.getSongListForArtist(this, Integer.parseInt(mCurrentArtistId));
+                    list = MusicUtils.getSongListForArtist(this, Long.parseLong(mCurrentArtistId));
                     String f = getString(R.string.delete_artist_desc);
                     desc = String.format(f, mCurrentArtistName);
                 } else {
-                    list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
+                    list = MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId));
                     String f = getString(R.string.delete_album_desc); 
                     desc = String.format(f, mCurrentAlbumName);
                 }
                 Bundle b = new Bundle();
                 b.putString("description", desc);
-                b.putIntArray("items", list);
+                b.putLongArray("items", list);
                 Intent intent = new Intent();
                 intent.setClass(this, DeleteItems.class);
                 intent.putExtras(b);
@@ -453,13 +453,13 @@
                 if (resultCode == RESULT_OK) {
                     Uri uri = intent.getData();
                     if (uri != null) {
-                        int [] list = null;
+                        long [] list = null;
                         if (mCurrentArtistId != null) {
-                            list = MusicUtils.getSongListForArtist(this, Integer.parseInt(mCurrentArtistId));
+                            list = MusicUtils.getSongListForArtist(this, Long.parseLong(mCurrentArtistId));
                         } else if (mCurrentAlbumId != null) {
-                            list = MusicUtils.getSongListForAlbum(this, Integer.parseInt(mCurrentAlbumId));
+                            list = MusicUtils.getSongListForAlbum(this, Long.parseLong(mCurrentAlbumId));
                         }
-                        MusicUtils.addToPlaylist(this, list, Integer.parseInt(uri.getLastPathSegment()));
+                        MusicUtils.addToPlaylist(this, list, Long.parseLong(uri.getLastPathSegment()));
                     }
                 }
                 break;
@@ -644,8 +644,8 @@
             
             vh.line2.setText(songs_albums);
             
-            int currentartistid = MusicUtils.getCurrentArtistId();
-            int artistid = cursor.getInt(mGroupArtistIdIdx);
+            long currentartistid = MusicUtils.getCurrentArtistId();
+            long artistid = cursor.getLong(mGroupArtistIdIdx);
             if (currentartistid == artistid && !isexpanded) {
                 vh.play_indicator.setImageDrawable(mNowPlayingOverlay);
             } else {
@@ -701,13 +701,13 @@
                 iv.setBackgroundDrawable(mDefaultAlbumIcon);
                 iv.setImageDrawable(null);
             } else {
-                int artIndex = cursor.getInt(0);
+                long artIndex = cursor.getLong(0);
                 Drawable d = MusicUtils.getCachedArtwork(context, artIndex, mDefaultAlbumIcon);
                 iv.setImageDrawable(d);
             }
 
-            int currentalbumid = MusicUtils.getCurrentAlbumId();
-            int aid = cursor.getInt(0);
+            long currentalbumid = MusicUtils.getCurrentAlbumId();
+            long aid = cursor.getLong(0);
             iv = vh.play_indicator;
             if (currentalbumid == aid) {
                 iv.setImageDrawable(mNowPlayingOverlay);
@@ -720,7 +720,7 @@
         @Override
         protected Cursor getChildrenCursor(Cursor groupCursor) {
             
-            int id = groupCursor.getInt(groupCursor.getColumnIndexOrThrow(MediaStore.Audio.Artists._ID));
+            long id = groupCursor.getLong(groupCursor.getColumnIndexOrThrow(MediaStore.Audio.Artists._ID));
             
             String[] cols = new String[] {
                     MediaStore.Audio.Albums._ID,
diff --git a/src/com/android/music/DeleteItems.java b/src/com/android/music/DeleteItems.java
index 15e681f..6cb2527 100644
--- a/src/com/android/music/DeleteItems.java
+++ b/src/com/android/music/DeleteItems.java
@@ -40,7 +40,7 @@
 {
     private TextView mPrompt;
     private Button mButton;
-    private int [] mItemList;
+    private long [] mItemList;
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -64,7 +64,7 @@
 
         Bundle b = getIntent().getExtras();
         String desc = b.getString("description");
-        mItemList = b.getIntArray("items");
+        mItemList = b.getLongArray("items");
         
         mPrompt.setText(desc);
     }
diff --git a/src/com/android/music/IMediaPlaybackService.aidl b/src/com/android/music/IMediaPlaybackService.aidl
index 1d27057..be48247 100644
--- a/src/com/android/music/IMediaPlaybackService.aidl
+++ b/src/com/android/music/IMediaPlaybackService.aidl
@@ -23,7 +23,7 @@
 {
     void openFile(String path, boolean oneShot);
     void openFileAsync(String path);
-    void open(in int [] list, int position);
+    void open(in long [] list, int position);
     int getQueuePosition();
     boolean isPlaying();
     void stop();
@@ -36,19 +36,19 @@
     long seek(long pos);
     String getTrackName();
     String getAlbumName();
-    int getAlbumId();
+    long getAlbumId();
     String getArtistName();
-    int getArtistId();
-    void enqueue(in int [] list, int action);
-    int [] getQueue();
+    long getArtistId();
+    void enqueue(in long [] list, int action);
+    long [] getQueue();
     void moveQueueItem(int from, int to);
     void setQueuePosition(int index);
     String getPath();
-    int getAudioId();
+    long getAudioId();
     void setShuffleMode(int shufflemode);
     int getShuffleMode();
     int removeTracks(int first, int last);
-    int removeTrack(int id);
+    int removeTrack(long id);
     void setRepeatMode(int repeatmode);
     int getRepeatMode();
     int getMediaMountedCount();
diff --git a/src/com/android/music/MediaPlaybackActivity.java b/src/com/android/music/MediaPlaybackActivity.java
index 8f47a40..1273a35 100644
--- a/src/com/android/music/MediaPlaybackActivity.java
+++ b/src/com/android/music/MediaPlaybackActivity.java
@@ -22,6 +22,7 @@
 import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.ContentResolver;
+import android.content.ContentUris;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -29,6 +30,7 @@
 import android.content.ServiceConnection;
 import android.content.res.Configuration;
 import android.content.res.Resources;
+import android.database.Cursor;
 import android.graphics.Bitmap;
 import android.media.AudioManager;
 import android.media.MediaFile;
@@ -269,15 +271,38 @@
         String artist;
         String album;
         String song;
+        long audioid;
         
         try {
             artist = mService.getArtistName();
             album = mService.getAlbumName();
             song = mService.getTrackName();
+            audioid = mService.getAudioId();
         } catch (RemoteException ex) {
             return true;
         }
-        
+
+        if (MediaFile.UNKNOWN_STRING.equals(album) &&
+                MediaFile.UNKNOWN_STRING.equals(artist) &&
+                song != null &&
+                song.startsWith("recording")) {
+            // not music
+            return false;
+        }
+        Cursor c = MusicUtils.query(this,
+                ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, audioid),
+                new String[] {MediaStore.Audio.Media.IS_MUSIC}, null, null, null);
+        boolean ismusic = true;
+        if (c != null) {
+            if (c.moveToFirst()) {
+                ismusic = c.getInt(0) != 0;
+            }
+            c.close();
+        }
+        if (!ismusic) {
+            return false;
+        }
+
         boolean knownartist =
             (artist != null) && !MediaFile.UNKNOWN_STRING.equals(artist);
 
@@ -566,21 +591,21 @@
                 }
 
                 case PLAYLIST_SELECTED: {
-                    int [] list = new int[1];
+                    long [] list = new long[1];
                     list[0] = MusicUtils.getCurrentAudioId();
-                    int playlist = item.getIntent().getIntExtra("playlist", 0);
+                    long playlist = item.getIntent().getLongExtra("playlist", 0);
                     MusicUtils.addToPlaylist(this, list, playlist);
                     return true;
                 }
                 
                 case DELETE_ITEM: {
                     if (mService != null) {
-                        int [] list = new int[1];
+                        long [] list = new long[1];
                         list[0] = MusicUtils.getCurrentAudioId();
                         Bundle b = new Bundle();
                         b.putString("description", getString(R.string.delete_song_desc,
                                 mService.getTrackName()));
-                        b.putIntArray("items", list);
+                        b.putLongArray("items", list);
                         intent = new Intent();
                         intent.setClass(this, DeleteItems.class);
                         intent.putExtras(b);
@@ -603,7 +628,7 @@
             case NEW_PLAYLIST:
                 Uri uri = intent.getData();
                 if (uri != null) {
-                    int [] list = new int[1];
+                    long [] list = new long[1];
                     list[0] = MusicUtils.getCurrentAudioId();
                     int playlist = Integer.parseInt(uri.getLastPathSegment());
                     MusicUtils.addToPlaylist(this, list, playlist);
@@ -1209,6 +1234,15 @@
         }
     };
 
+    private static class AlbumSongIdWrapper {
+        public long albumid;
+        public long songid;
+        AlbumSongIdWrapper(long aid, long sid) {
+            albumid = aid;
+            songid = sid;
+        }
+    }
+    
     private void updateTrackInfo() {
         if (mService == null) {
             return;
@@ -1220,13 +1254,16 @@
                 return;
             }
             
-            if (mService.getAudioId() < 0 && path.toLowerCase().startsWith("http://")) {
+            long songid = mService.getAudioId(); 
+            if (songid < 0 && path.toLowerCase().startsWith("http://")) {
+                // Once we can get album art and meta data from MediaPlayer, we
+                // can show that info again when streaming.
                 ((View) mArtistName.getParent()).setVisibility(View.INVISIBLE);
                 ((View) mAlbumName.getParent()).setVisibility(View.INVISIBLE);
                 mAlbum.setVisibility(View.GONE);
                 mTrackName.setText(path);
                 mAlbumArtHandler.removeMessages(GET_ALBUM_ART);
-                mAlbumArtHandler.obtainMessage(GET_ALBUM_ART, -1, 0).sendToTarget();
+                mAlbumArtHandler.obtainMessage(GET_ALBUM_ART, new AlbumSongIdWrapper(-1, -1)).sendToTarget();
             } else {
                 ((View) mArtistName.getParent()).setVisibility(View.VISIBLE);
                 ((View) mAlbumName.getParent()).setVisibility(View.VISIBLE);
@@ -1236,7 +1273,7 @@
                 }
                 mArtistName.setText(artistName);
                 String albumName = mService.getAlbumName();
-                int albumid = mService.getAlbumId();
+                long albumid = mService.getAlbumId();
                 if (MediaFile.UNKNOWN_STRING.equals(albumName)) {
                     albumName = getString(R.string.unknown_album_name);
                     albumid = -1;
@@ -1244,7 +1281,7 @@
                 mAlbumName.setText(albumName);
                 mTrackName.setText(mService.getTrackName());
                 mAlbumArtHandler.removeMessages(GET_ALBUM_ART);
-                mAlbumArtHandler.obtainMessage(GET_ALBUM_ART, albumid, 0).sendToTarget();
+                mAlbumArtHandler.obtainMessage(GET_ALBUM_ART, new AlbumSongIdWrapper(albumid, songid)).sendToTarget();
                 mAlbum.setVisibility(View.VISIBLE);
             }
             mDuration = mService.duration();
@@ -1255,22 +1292,24 @@
     }
     
     public class AlbumArtHandler extends Handler {
-        private int mAlbumId = -1;
+        private long mAlbumId = -1;
         
         public AlbumArtHandler(Looper looper) {
             super(looper);
         }
+        @Override
         public void handleMessage(Message msg)
         {
-            int albumid = msg.arg1;
+            long albumid = ((AlbumSongIdWrapper) msg.obj).albumid;
+            long songid = ((AlbumSongIdWrapper) msg.obj).songid;
             if (msg.what == GET_ALBUM_ART && (mAlbumId != albumid || albumid < 0)) {
                 // while decoding the new image, show the default album art
                 Message numsg = mHandler.obtainMessage(ALBUM_ART_DECODED, null);
                 mHandler.removeMessages(ALBUM_ART_DECODED);
                 mHandler.sendMessageDelayed(numsg, 300);
-                Bitmap bm = MusicUtils.getArtwork(MediaPlaybackActivity.this, albumid);
+                Bitmap bm = MusicUtils.getArtwork(MediaPlaybackActivity.this, songid, albumid);
                 if (bm == null) {
-                    bm = MusicUtils.getArtwork(MediaPlaybackActivity.this, -1);
+                    bm = MusicUtils.getArtwork(MediaPlaybackActivity.this, songid, -1);
                     albumid = -1;
                 }
                 if (bm != null) {
diff --git a/src/com/android/music/MediaPlaybackService.java b/src/com/android/music/MediaPlaybackService.java
index 23ca124..83bc800 100644
--- a/src/com/android/music/MediaPlaybackService.java
+++ b/src/com/android/music/MediaPlaybackService.java
@@ -108,9 +108,9 @@
     private int mShuffleMode = SHUFFLE_NONE;
     private int mRepeatMode = REPEAT_NONE;
     private int mMediaMountedCount = 0;
-    private int [] mAutoShuffleList = null;
+    private long [] mAutoShuffleList = null;
     private boolean mOneShot;
-    private int [] mPlayList = null;
+    private long [] mPlayList = null;
     private int mPlayListLen = 0;
     private Vector<Integer> mHistory = new Vector<Integer>(MAX_HISTORY_SIZE);
     private Cursor mCursor;
@@ -359,12 +359,12 @@
             // on the phone)
             int len = mPlayListLen;
             for (int i = 0; i < len; i++) {
-                int n = mPlayList[i];
+                long n = mPlayList[i];
                 if (n == 0) {
                     q.append("0;");
                 } else {
                     while (n != 0) {
-                        int digit = n & 0xf;
+                        int digit = (int)(n & 0xf);
                         n >>= 4;
                         q.append(hexdigits[digit]);
                     }
@@ -654,7 +654,7 @@
     private void notifyChange(String what) {
         
         Intent i = new Intent(what);
-        i.putExtra("id", Integer.valueOf(getAudioId()));
+        i.putExtra("id", Long.valueOf(getAudioId()));
         i.putExtra("artist", getArtistName());
         i.putExtra("album",getAlbumName());
         i.putExtra("track", getTrackName());
@@ -675,7 +675,7 @@
             // reallocate at 2x requested size so we don't
             // need to grow and copy the array for every
             // insert
-            int [] newlist = new int[size * 2];
+            long [] newlist = new long[size * 2];
             int len = mPlayList != null ? mPlayList.length : mPlayListLen;
             for (int i = 0; i < len; i++) {
                 newlist[i] = mPlayList[i];
@@ -687,7 +687,7 @@
     }
     
     // insert the list of songs at the specified position in the playlist
-    private void addToPlayList(int [] list, int position) {
+    private void addToPlayList(long [] list, int position) {
         int addlen = list.length;
         if (position < 0) { // overwrite
             mPlayListLen = 0;
@@ -720,7 +720,7 @@
      * @param list The list of tracks to append.
      * @param action NOW, NEXT or LAST
      */
-    public void enqueue(int [] list, int action) {
+    public void enqueue(long [] list, int action) {
         synchronized(this) {
             if (action == NEXT && mPlayPos + 1 < mPlayListLen) {
                 addToPlayList(list, mPlayPos + 1);
@@ -753,12 +753,12 @@
      * specified position is 0.
      * @param list The new list of tracks.
      */
-    public void open(int [] list, int position) {
+    public void open(long [] list, int position) {
         synchronized (this) {
             if (mShuffleMode == SHUFFLE_AUTO) {
                 mShuffleMode = SHUFFLE_NORMAL;
             }
-            int oldId = getAudioId();
+            long oldId = getAudioId();
             int listlength = list.length;
             boolean newlist = true;
             if (mPlayListLen == listlength) {
@@ -805,7 +805,7 @@
                 index2 = mPlayListLen - 1;
             }
             if (index1 < index2) {
-                int tmp = mPlayList[index1];
+                long tmp = mPlayList[index1];
                 for (int i = index1; i < index2; i++) {
                     mPlayList[i] = mPlayList[i+1];
                 }
@@ -816,7 +816,7 @@
                         mPlayPos--;
                 }
             } else if (index2 < index1) {
-                int tmp = mPlayList[index1];
+                long tmp = mPlayList[index1];
                 for (int i = index1; i > index2; i--) {
                     mPlayList[i] = mPlayList[i-1];
                 }
@@ -835,10 +835,10 @@
      * Returns the current play list
      * @return An array of integers containing the IDs of the tracks in the play list
      */
-    public int [] getQueue() {
+    public long [] getQueue() {
         synchronized (this) {
             int len = mPlayListLen;
-            int [] list = new int[len];
+            long [] list = new long[len];
             for (int i = 0; i < len; i++) {
                 list[i] = mPlayList[i];
             }
@@ -941,7 +941,7 @@
                             mCursor.moveToNext();
                             ensurePlayListCapacity(1);
                             mPlayListLen = 1;
-                            mPlayList[0] = mCursor.getInt(IDCOLIDX);
+                            mPlayList[0] = mCursor.getLong(IDCOLIDX);
                             mPlayPos = 0;
                         }
                     }
@@ -1283,7 +1283,7 @@
         for (int i = 0; i < to_add; i++) {
             // pick something at random from the list
             int idx = mRand.nextInt(mAutoShuffleList.length);
-            Integer which = mAutoShuffleList[idx];
+            long which = mAutoShuffleList[idx];
             ensurePlayListCapacity(mPlayListLen + 1);
             mPlayList[mPlayListLen++] = which;
             notify = true;
@@ -1320,10 +1320,10 @@
                 return false;
             }
             int len = c.getCount();
-            int[] list = new int[len];
+            long [] list = new long[len];
             for (int i = 0; i < len; i++) {
                 c.moveToNext();
-                list[i] = c.getInt(0);
+                list[i] = c.getLong(0);
             }
             mAutoShuffleList = list;
             return true;
@@ -1397,7 +1397,7 @@
      * @param id The id to be removed
      * @return how many instances of the track were removed
      */
-    public int removeTrack(int id) {
+    public int removeTrack(long id) {
         int numremoved = 0;
         synchronized (this) {
             for (int i = 0; i < mPlayListLen; i++) {
@@ -1466,7 +1466,7 @@
      * Returns the rowid of the currently playing file, or -1 if
      * no file is currently playing.
      */
-    public int getAudioId() {
+    public long getAudioId() {
         synchronized (this) {
             if (mPlayPos >= 0 && mPlayer.isInitialized()) {
                 return mPlayList[mPlayPos];
@@ -1508,12 +1508,12 @@
         }
     }
     
-    public int getArtistId() {
+    public long getArtistId() {
         synchronized (this) {
             if (mCursor == null) {
                 return -1;
             }
-            return mCursor.getInt(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST_ID));
+            return mCursor.getLong(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST_ID));
         }
     }
 
@@ -1526,12 +1526,12 @@
         }
     }
 
-    public int getAlbumId() {
+    public long getAlbumId() {
         synchronized (this) {
             if (mCursor == null) {
                 return -1;
             }
-            return mCursor.getInt(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID));
+            return mCursor.getLong(mCursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ALBUM_ID));
         }
     }
 
@@ -1764,7 +1764,7 @@
         {
             mService.get().open(path, oneShot);
         }
-        public void open(int [] list, int position) {
+        public void open(long [] list, int position) {
             mService.get().open(list, position);
         }
         public int getQueuePosition() {
@@ -1797,19 +1797,19 @@
         public String getAlbumName() {
             return mService.get().getAlbumName();
         }
-        public int getAlbumId() {
+        public long getAlbumId() {
             return mService.get().getAlbumId();
         }
         public String getArtistName() {
             return mService.get().getArtistName();
         }
-        public int getArtistId() {
+        public long getArtistId() {
             return mService.get().getArtistId();
         }
-        public void enqueue(int [] list , int action) {
+        public void enqueue(long [] list , int action) {
             mService.get().enqueue(list, action);
         }
-        public int [] getQueue() {
+        public long [] getQueue() {
             return mService.get().getQueue();
         }
         public void moveQueueItem(int from, int to) {
@@ -1818,7 +1818,7 @@
         public String getPath() {
             return mService.get().getPath();
         }
-        public int getAudioId() {
+        public long getAudioId() {
             return mService.get().getAudioId();
         }
         public long position() {
@@ -1839,7 +1839,7 @@
         public int removeTracks(int first, int last) {
             return mService.get().removeTracks(first, last);
         }
-        public int removeTrack(int id) {
+        public int removeTrack(long id) {
             return mService.get().removeTrack(id);
         }
         public void setRepeatMode(int repeatmode) {
diff --git a/src/com/android/music/MusicUtils.java b/src/com/android/music/MusicUtils.java
index ea20794..2d85926 100644
--- a/src/com/android/music/MusicUtils.java
+++ b/src/com/android/music/MusicUtils.java
@@ -16,21 +16,7 @@
 
 package com.android.music;
 
-import java.io.File;
-import java.io.FileDescriptor;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Arrays;
-import java.util.Formatter;
-import java.util.HashMap;
-import java.util.Locale;
-
 import android.app.Activity;
-import android.app.ExpandableListActivity;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.ContentUris;
@@ -49,12 +35,10 @@
 import android.graphics.PixelFormat;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
-import android.media.MediaFile;
-import android.media.MediaScanner;
 import android.net.Uri;
-import android.os.RemoteException;
 import android.os.Environment;
 import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
 import android.provider.MediaStore;
 import android.provider.Settings;
 import android.util.Log;
@@ -64,6 +48,16 @@
 import android.widget.TextView;
 import android.widget.Toast;
 
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Arrays;
+import java.util.Formatter;
+import java.util.HashMap;
+import java.util.Locale;
+
 public class MusicUtils {
 
     private static final String TAG = "MusicUtils";
@@ -195,7 +189,7 @@
         }
     }
     
-    public static int getCurrentAlbumId() {
+    public static long getCurrentAlbumId() {
         if (sService != null) {
             try {
                 return sService.getAlbumId();
@@ -205,7 +199,7 @@
         return -1;
     }
 
-    public static int getCurrentArtistId() {
+    public static long getCurrentArtistId() {
         if (MusicUtils.sService != null) {
             try {
                 return sService.getArtistId();
@@ -215,7 +209,7 @@
         return -1;
     }
 
-    public static int getCurrentAudioId() {
+    public static long getCurrentAudioId() {
         if (MusicUtils.sService != null) {
             try {
                 return sService.getAudioId();
@@ -250,14 +244,14 @@
         return false;
     }
 
-    private final static int [] sEmptyList = new int[0];
+    private final static long [] sEmptyList = new long[0];
     
-    public static int [] getSongListForCursor(Cursor cursor) {
+    public static long [] getSongListForCursor(Cursor cursor) {
         if (cursor == null) {
             return sEmptyList;
         }
         int len = cursor.getCount();
-        int [] list = new int[len];
+        long [] list = new long[len];
         cursor.moveToFirst();
         int colidx = -1;
         try {
@@ -266,13 +260,13 @@
             colidx = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID);
         }
         for (int i = 0; i < len; i++) {
-            list[i] = cursor.getInt(colidx);
+            list[i] = cursor.getLong(colidx);
             cursor.moveToNext();
         }
         return list;
     }
 
-    public static int [] getSongListForArtist(Context context, int id) {
+    public static long [] getSongListForArtist(Context context, long id) {
         final String[] ccols = new String[] { MediaStore.Audio.Media._ID };
         String where = MediaStore.Audio.Media.ARTIST_ID + "=" + id + " AND " + 
         MediaStore.Audio.Media.IS_MUSIC + "=1";
@@ -281,14 +275,14 @@
                 MediaStore.Audio.Media.ALBUM_KEY + ","  + MediaStore.Audio.Media.TRACK);
         
         if (cursor != null) {
-            int [] list = getSongListForCursor(cursor);
+            long [] list = getSongListForCursor(cursor);
             cursor.close();
             return list;
         }
         return sEmptyList;
     }
 
-    public static int [] getSongListForAlbum(Context context, int id) {
+    public static long [] getSongListForAlbum(Context context, long id) {
         final String[] ccols = new String[] { MediaStore.Audio.Media._ID };
         String where = MediaStore.Audio.Media.ALBUM_ID + "=" + id + " AND " + 
                 MediaStore.Audio.Media.IS_MUSIC + "=1";
@@ -296,20 +290,20 @@
                 ccols, where, null, MediaStore.Audio.Media.TRACK);
 
         if (cursor != null) {
-            int [] list = getSongListForCursor(cursor);
+            long [] list = getSongListForCursor(cursor);
             cursor.close();
             return list;
         }
         return sEmptyList;
     }
 
-    public static int [] getSongListForPlaylist(Context context, long plid) {
+    public static long [] getSongListForPlaylist(Context context, long plid) {
         final String[] ccols = new String[] { MediaStore.Audio.Playlists.Members.AUDIO_ID };
         Cursor cursor = query(context, MediaStore.Audio.Playlists.Members.getContentUri("external", plid),
                 ccols, null, null, MediaStore.Audio.Playlists.Members.DEFAULT_SORT_ORDER);
         
         if (cursor != null) {
-            int [] list = getSongListForCursor(cursor);
+            long [] list = getSongListForCursor(cursor);
             cursor.close();
             return list;
         }
@@ -317,13 +311,13 @@
     }
     
     public static void playPlaylist(Context context, long plid) {
-        int [] list = getSongListForPlaylist(context, plid);
+        long [] list = getSongListForPlaylist(context, plid);
         if (list != null) {
             playAll(context, list, -1, false);
         }
     }
 
-    public static int [] getAllSongs(Context context) {
+    public static long [] getAllSongs(Context context) {
         Cursor c = query(context, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
                 new String[] {MediaStore.Audio.Media._ID}, MediaStore.Audio.Media.IS_MUSIC + "=1",
                 null, null);
@@ -332,10 +326,10 @@
                 return null;
             }
             int len = c.getCount();
-            int[] list = new int[len];
+            long [] list = new long[len];
             for (int i = 0; i < len; i++) {
                 c.moveToNext();
-                list[i] = c.getInt(0);
+                list[i] = c.getLong(0);
             }
 
             return list;
@@ -377,7 +371,7 @@
                 cur.moveToFirst();
                 while (! cur.isAfterLast()) {
                     Intent intent = new Intent();
-                    intent.putExtra("playlist", cur.getInt(0));
+                    intent.putExtra("playlist", cur.getLong(0));
 //                    if (cur.getInt(0) == mLastPlaylistSelected) {
 //                        sub.add(0, MusicBaseActivity.PLAYLIST_SELECTED, cur.getString(1)).setIntent(intent);
 //                    } else {
@@ -399,7 +393,7 @@
         return;
     }
     
-    public static void deleteTracks(Context context, int [] list) {
+    public static void deleteTracks(Context context, long [] list) {
         
         String [] cols = new String [] { MediaStore.Audio.Media._ID, 
                 MediaStore.Audio.Media.DATA, MediaStore.Audio.Media.ALBUM_ID };
@@ -423,10 +417,10 @@
                 c.moveToFirst();
                 while (! c.isAfterLast()) {
                     // remove from current playlist
-                    int id = c.getInt(0);
+                    long id = c.getLong(0);
                     sService.removeTrack(id);
                     // remove from album art cache
-                    int artIndex = c.getInt(2);
+                    long artIndex = c.getLong(2);
                     synchronized(sArtCache) {
                         sArtCache.remove(artIndex);
                     }
@@ -466,7 +460,7 @@
         context.getContentResolver().notifyChange(Uri.parse("content://media"), null);
     }
     
-    public static void addToCurrentPlaylist(Context context, int [] list) {
+    public static void addToCurrentPlaylist(Context context, long [] list) {
         if (sService == null) {
             return;
         }
@@ -479,7 +473,7 @@
         }
     }
     
-    public static void addToPlaylist(Context context, int [] ids, long playlistid) {
+    public static void addToPlaylist(Context context, long [] ids, long playlistid) {
         if (ids == null) {
             // this shouldn't happen (the menuitems shouldn't be visible
             // unless the selected item represents something playable
@@ -661,17 +655,17 @@
         playAll(context, cursor, position, false);
     }
     
-    public static void playAll(Context context, int [] list, int position) {
+    public static void playAll(Context context, long [] list, int position) {
         playAll(context, list, position, false);
     }
     
     private static void playAll(Context context, Cursor cursor, int position, boolean force_shuffle) {
     
-        int [] list = getSongListForCursor(cursor);
+        long [] list = getSongListForCursor(cursor);
         playAll(context, list, position, force_shuffle);
     }
     
-    private static void playAll(Context context, int [] list, int position, boolean force_shuffle) {
+    private static void playAll(Context context, long [] list, int position, boolean force_shuffle) {
         if (list.length == 0 || sService == null) {
             Log.d("MusicUtils", "attempt to play empty song list");
             // Don't try to play empty playlists. Nothing good will come of it.
@@ -683,13 +677,13 @@
             if (force_shuffle) {
                 sService.setShuffleMode(MediaPlaybackService.SHUFFLE_NORMAL);
             }
-            int curid = sService.getAudioId();
+            long curid = sService.getAudioId();
             int curpos = sService.getQueuePosition();
             if (position != -1 && curpos == position && curid == list[position]) {
                 // The selected file is the file that's currently playing;
                 // figure out if we need to restart with a new playlist,
                 // or just launch the playback activity.
-                int [] playlist = sService.getQueue();
+                long [] playlist = sService.getQueue();
                 if (Arrays.equals(list, playlist)) {
                     // we don't need to set a new list, but we should resume playback if needed
                     sService.play();
@@ -740,12 +734,11 @@
     }
     
     private static int sArtId = -2;
-    private static byte [] mCachedArt;
     private static Bitmap mCachedBit = null;
     private static final BitmapFactory.Options sBitmapOptionsCache = new BitmapFactory.Options();
     private static final BitmapFactory.Options sBitmapOptions = new BitmapFactory.Options();
     private static final Uri sArtworkUri = Uri.parse("content://media/external/audio/albumart");
-    private static final HashMap<Integer, Drawable> sArtCache = new HashMap<Integer, Drawable>();
+    private static final HashMap<Long, Drawable> sArtCache = new HashMap<Long, Drawable>();
     private static int sArtCacheId = -1;
     
     static {
@@ -777,7 +770,7 @@
         }
     }
     
-    public static Drawable getCachedArtwork(Context context, int artIndex, BitmapDrawable defaultArtwork) {
+    public static Drawable getCachedArtwork(Context context, long artIndex, BitmapDrawable defaultArtwork) {
         Drawable d = null;
         synchronized(sArtCache) {
             d = sArtCache.get(artIndex);
@@ -807,7 +800,7 @@
     // Get album art for specified album. This method will not try to
     // fall back to getting artwork directly from the file, nor will
     // it attempt to repair the database.
-    private static Bitmap getArtworkQuick(Context context, int album_id, int w, int h) {
+    private static Bitmap getArtworkQuick(Context context, long album_id, int w, int h) {
         // NOTE: There is in fact a 1 pixel border on the right side in the ImageView
         // used to display this drawable. Take it into account now, so we don't have to
         // scale later.
@@ -865,27 +858,18 @@
     /** Get album art for specified album. You should not pass in the album id
      * for the "unknown" album here (use -1 instead)
      */
-    public static Bitmap getArtwork(Context context, int album_id) {
-        return getArtwork(context, album_id, true);
-    }
-    
-    /** Get album art for specified album. You should not pass in the album id
-     * for the "unknown" album here (use -1 instead)
-     */
-    public static Bitmap getArtwork(Context context, int album_id, boolean allowDefault) {
+    public static Bitmap getArtwork(Context context, long song_id, long album_id) {
 
         if (album_id < 0) {
             // This is something that is not in the database, so get the album art directly
             // from the file.
-            Bitmap bm = getArtworkFromFile(context, null, -1);
-            if (bm != null) {
-                return bm;
+            if (song_id >= 0) {
+                Bitmap bm = getArtworkFromFile(context, song_id, -1);
+                if (bm != null) {
+                    return bm;
+                }
             }
-            if (allowDefault) {
-                return getDefaultArtwork(context);
-            } else {
-                return null;
-            }
+            return getDefaultArtwork(context);
         }
 
         ContentResolver res = context.getContentResolver();
@@ -898,61 +882,16 @@
             } catch (FileNotFoundException ex) {
                 // The album art thumbnail does not actually exist. Maybe the user deleted it, or
                 // maybe it never existed to begin with.
-                Bitmap bm = getArtworkFromFile(context, null, album_id);
+                Bitmap bm = getArtworkFromFile(context, song_id, album_id);
                 if (bm != null) {
                     if (bm.getConfig() == null) {
                         bm = bm.copy(Bitmap.Config.RGB_565, false);
                         if (bm == null) {
-                            if (allowDefault) {
-                                return getDefaultArtwork(context);
-                            } else {
-                                return null;
-                            }
+                            return getDefaultArtwork(context);
                         }
                     }
-                    // Put the newly found artwork in the database.
-                    // Note that this shouldn't be done for the "unknown" album,
-                    // but if this method is called correctly, that won't happen.
-                    
-                    // first write it somewhere
-                    String file = Environment.getExternalStorageDirectory()
-                        + "/albumthumbs/" + String.valueOf(System.currentTimeMillis());
-                    if (ensureFileExists(file)) {
-                        try {
-                            OutputStream outstream = new FileOutputStream(file);
-                            boolean success = bm.compress(Bitmap.CompressFormat.JPEG, 75, outstream);
-                            outstream.close();
-                            if (success) {
-                                ContentValues values = new ContentValues();
-                                values.put("album_id", album_id);
-                                values.put("_data", file);
-                                Uri newuri = res.insert(sArtworkUri, values);
-                                if (newuri == null) {
-                                    // Failed to insert in to the database. The most likely
-                                    // cause of this is that the item already existed in the
-                                    // database, and the most likely cause of that is that
-                                    // the album was scanned before, but the user deleted the
-                                    // album art from the sd card.
-                                    // We can ignore that case here, since the media provider
-                                    // will regenerate the album art for those entries when
-                                    // it detects this.
-                                    success = false;
-                                }
-                            }
-                            if (!success) {
-                                File f = new File(file);
-                                f.delete();
-                            }
-                        } catch (FileNotFoundException e) {
-                            Log.e(TAG, "error creating file", e);
-                        } catch (IOException e) {
-                            Log.e(TAG, "error creating file", e);
-                        }
-                    }
-                } else if (allowDefault) {
-                    bm = getDefaultArtwork(context);
                 } else {
-                    bm = null;
+                    bm = getDefaultArtwork(context);
                 }
                 return bm;
             } finally {
@@ -967,168 +906,39 @@
         
         return null;
     }
-
-    // copied from MediaProvider
-    private static boolean ensureFileExists(String path) {
-        File file = new File(path);
-        if (file.exists()) {
-            return true;
-        } else {
-            // we will not attempt to create the first directory in the path
-            // (for example, do not create /sdcard if the SD card is not mounted)
-            int secondSlash = path.indexOf('/', 1);
-            if (secondSlash < 1) return false;
-            String directoryPath = path.substring(0, secondSlash);
-            File directory = new File(directoryPath);
-            if (!directory.exists())
-                return false;
-            file.getParentFile().mkdirs();
-            try {
-                return file.createNewFile();
-            } catch(IOException ioe) {
-                Log.d(TAG, "File creation failed for " + path);
-            }
-            return false;
-        }
-    }
     
     // get album art for specified file
     private static final String sExternalMediaUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI.toString();
-    private static Bitmap getArtworkFromFile(Context context, Uri uri, int albumid) {
+    private static Bitmap getArtworkFromFile(Context context, long songid, long albumid) {
         Bitmap bm = null;
         byte [] art = null;
         String path = null;
 
-        if (sArtId == albumid) {
-            //Log.i("@@@@@@ ", "reusing cached data", new Exception());
-            if (mCachedBit != null) {
-                return mCachedBit;
-            }
-            art = mCachedArt;
-        } else {
-            // try reading embedded artwork
-            if (uri == null) {
-                try {
-                    int curalbum = sService.getAlbumId();
-                    if (curalbum == albumid || albumid < 0) {
-                        path = sService.getPath();
-                        if (path != null) {
-                            uri = Uri.parse(path);
-                        }
-                    }
-                } catch (RemoteException ex) {
-                    return null;
-                } catch (NullPointerException ex) {
-                    return null;
-                }
-            }
-            if (uri == null) {
-                if (albumid >= 0) {
-                    Cursor c = query(context,MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
-                            new String[] { MediaStore.Audio.Media._ID, MediaStore.Audio.Media.ALBUM },
-                            MediaStore.Audio.Media.ALBUM_ID + "=?", new String [] {String.valueOf(albumid)},
-                            null);
-                    if (c != null) {
-                        if (c.moveToFirst()) {
-                            int trackid = c.getInt(0);
-                            uri = ContentUris.withAppendedId(
-                                    MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, trackid);
-                            if (MediaFile.UNKNOWN_STRING.equals(c.getString(1))) {
-                                albumid = -1;
-                            }
-                        }
-                        c.close();
-                    }
-                }
-            }
-            if (uri != null) {
-                MediaScanner scanner = new MediaScanner(context);
-                ParcelFileDescriptor pfd = null;
-                try {
-                    pfd = context.getContentResolver().openFileDescriptor(uri, "r");
-                    if (pfd != null) {
-                        FileDescriptor fd = pfd.getFileDescriptor();
-                        art = scanner.extractAlbumArt(fd);
-                    }
-                } catch (IOException ex) {
-                } catch (SecurityException ex) {
-                } finally {
-                    try {
-                        if (pfd != null) {
-                            pfd.close();
-                        }
-                    } catch (IOException ex) {
-                    }
-                }
-            }
+        if (albumid < 0 && songid < 0) {
+            throw new IllegalArgumentException("Must specify an album or a song id");
         }
-        // if no embedded art exists, look for AlbumArt.jpg in same directory as the media file
-        if (art == null && path != null) {
-            if (path.startsWith(sExternalMediaUri)) {
-                // get the real path
-                Cursor c = query(context,Uri.parse(path),
-                        new String[] { MediaStore.Audio.Media.DATA},
-                        null, null, null);
-                if (c != null) {
-                    c.moveToFirst();
-                    if (!c.isAfterLast()) {
-                        path = c.getString(0);
-                    }
-                    c.close();
+
+        try {
+            if (albumid < 0) {
+                Uri uri = Uri.parse("content://media/external/audio/media/" + songid + "/albumart");
+                ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r");
+                if (pfd != null) {
+                    FileDescriptor fd = pfd.getFileDescriptor();
+                    bm = BitmapFactory.decodeFileDescriptor(fd);
+                }
+            } else {
+                Uri uri = ContentUris.withAppendedId(sArtworkUri, albumid);
+                ParcelFileDescriptor pfd = context.getContentResolver().openFileDescriptor(uri, "r");
+                if (pfd != null) {
+                    FileDescriptor fd = pfd.getFileDescriptor();
+                    bm = BitmapFactory.decodeFileDescriptor(fd);
                 }
             }
-            int lastSlash = path.lastIndexOf('/');
-            if (lastSlash > 0) {
-                String artPath = path.substring(0, lastSlash + 1) + "AlbumArt.jpg";
-                File file = new File(artPath);
-                if (file.exists()) {
-                    art = new byte[(int)file.length()];
-                    FileInputStream stream = null;
-                    try {
-                        stream = new FileInputStream(file);
-                        stream.read(art);
-                    } catch (IOException ex) {
-                        art = null;
-                    } finally {
-                        try {
-                            if (stream != null) {
-                                stream.close();
-                            }
-                        } catch (IOException ex) {
-                        }
-                    }
-                } else {
-                    // TODO: try getting album art from the web
-                }
-            }
+        } catch (FileNotFoundException ex) {
+            //
         }
-        
-        if (art != null) {
-            try {
-                // get the size of the bitmap
-                BitmapFactory.Options opts = new BitmapFactory.Options();
-                opts.inJustDecodeBounds = true;
-                opts.inSampleSize = 1;
-                BitmapFactory.decodeByteArray(art, 0, art.length, opts);
-                
-                // request a reasonably sized output image
-                // TODO: don't hardcode the size
-                while (opts.outHeight > 320 || opts.outWidth > 320) {
-                    opts.outHeight /= 2;
-                    opts.outWidth /= 2;
-                    opts.inSampleSize *= 2;
-                }
-                
-                // get the image for real now
-                opts.inJustDecodeBounds = false;
-                bm = BitmapFactory.decodeByteArray(art, 0, art.length, opts);
-                if (albumid != -1) {
-                    sArtId = albumid;
-                }
-                mCachedArt = art;
-                mCachedBit = bm;
-            } catch (Exception e) {
-            }
+        if (bm != null) {
+            mCachedBit = bm;
         }
         return bm;
     }
diff --git a/src/com/android/music/PlaylistBrowserActivity.java b/src/com/android/music/PlaylistBrowserActivity.java
index da934b2..d85f07d 100644
--- a/src/com/android/music/PlaylistBrowserActivity.java
+++ b/src/com/android/music/PlaylistBrowserActivity.java
@@ -100,7 +100,7 @@
                     } else if (id == PODCASTS_PLAYLIST) {
                         playPodcasts();
                     } else if (id == ALL_SONGS_PLAYLIST) {
-                        int [] list = MusicUtils.getAllSongs(PlaylistBrowserActivity.this);
+                        long [] list = MusicUtils.getAllSongs(PlaylistBrowserActivity.this);
                         if (list != null) {
                             MusicUtils.playAll(PlaylistBrowserActivity.this, list, 0);
                         }
@@ -384,10 +384,10 @@
         }
         try {
             int len = cursor.getCount();
-            int [] list = new int[len];
+            long [] list = new long[len];
             for (int i = 0; i < len; i++) {
                 cursor.moveToNext();
-                list[i] = cursor.getInt(0);
+                list[i] = cursor.getLong(0);
             }
             MusicUtils.playAll(this, list, 0);
         } catch (SQLiteException ex) {
@@ -409,10 +409,10 @@
         }
         try {
             int len = cursor.getCount();
-            int [] list = new int[len];
+            long [] list = new long[len];
             for (int i = 0; i < len; i++) {
                 cursor.moveToNext();
-                list[i] = cursor.getInt(0);
+                list[i] = cursor.getLong(0);
             }
             MusicUtils.playAll(this, list, 0);
         } catch (SQLiteException ex) {
diff --git a/src/com/android/music/QueryBrowserActivity.java b/src/com/android/music/QueryBrowserActivity.java
index a67790a..99fae16 100644
--- a/src/com/android/music/QueryBrowserActivity.java
+++ b/src/com/android/music/QueryBrowserActivity.java
@@ -100,7 +100,7 @@
             if (path.startsWith("content://media/external/audio/media/")) {
                 // This is a specific file
                 String id = uri.getLastPathSegment();
-                int [] list = new int[] { Integer.valueOf(id) };
+                long [] list = new long[] { Long.valueOf(id) };
                 MusicUtils.playAll(this, list, 0);
                 finish();
                 return;
@@ -254,7 +254,7 @@
             intent.putExtra("album", Long.valueOf(id).toString());
             startActivity(intent);
         } else if (position >= 0 && id >= 0){
-            int [] list = new int[] { (int) id };
+            long [] list = new long[] { id };
             MusicUtils.playAll(this, list, 0);
         } else {
             Log.e("QueryBrowser", "invalid position/id: " + position + "/" + id);
diff --git a/src/com/android/music/RepeatingImageButton.java b/src/com/android/music/RepeatingImageButton.java
index 08c951c..b4e7733 100644
--- a/src/com/android/music/RepeatingImageButton.java
+++ b/src/com/android/music/RepeatingImageButton.java
@@ -82,6 +82,19 @@
     }
 
     @Override
+    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        switch (keyCode) {
+            case KeyEvent.KEYCODE_DPAD_CENTER:
+            case KeyEvent.KEYCODE_ENTER:
+                // need to call super to make long press work, but return
+                // true so that the application doesn't get the down event.
+                super.onKeyDown(keyCode, event);
+                return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+    @Override
     public boolean onKeyUp(int keyCode, KeyEvent event) {
         switch (keyCode) {
         case KeyEvent.KEYCODE_DPAD_CENTER:
diff --git a/src/com/android/music/TrackBrowserActivity.java b/src/com/android/music/TrackBrowserActivity.java
index 1f1adf6..f11c880 100644
--- a/src/com/android/music/TrackBrowserActivity.java
+++ b/src/com/android/music/TrackBrowserActivity.java
@@ -144,7 +144,8 @@
                 MediaStore.Audio.Media.ARTIST_ID,
                 MediaStore.Audio.Media.DURATION,
                 MediaStore.Audio.Playlists.Members.PLAY_ORDER,
-                MediaStore.Audio.Playlists.Members.AUDIO_ID
+                MediaStore.Audio.Playlists.Members.AUDIO_ID,
+                MediaStore.Audio.Media.IS_MUSIC
         };
 
         setContentView(R.layout.media_picker_activity);
@@ -462,7 +463,7 @@
                 if (from < to) {
                     // move the item to somewhere later in the list
                     mTrackCursor.moveToPosition(to);
-                    int toidx = mTrackCursor.getInt(colidx);
+                    long toidx = mTrackCursor.getLong(colidx);
                     mTrackCursor.moveToPosition(from);
                     values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, toidx);
                     wherearg[0] = mTrackCursor.getString(0);
@@ -476,7 +477,7 @@
                 } else if (from > to) {
                     // move the item to somewhere earlier in the list
                     mTrackCursor.moveToPosition(to);
-                    int toidx = mTrackCursor.getInt(colidx);
+                    long toidx = mTrackCursor.getLong(colidx);
                     mTrackCursor.moveToPosition(from);
                     values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, toidx);
                     wherearg[0] = mTrackCursor.getString(0);
@@ -558,6 +559,33 @@
         }
     };
 
+    // Cursor should be positioned on the entry to be checked
+    // Returns false if the entry matches the naming pattern used for recordings,
+    // or if it is marked as not music in the database.
+    private boolean isMusic(Cursor c) {
+        int titleidx = c.getColumnIndex(MediaStore.Audio.Media.TITLE);
+        int albumidx = c.getColumnIndex(MediaStore.Audio.Media.ALBUM);
+        int artistidx = c.getColumnIndex(MediaStore.Audio.Media.ARTIST);
+
+        String title = c.getString(titleidx);
+        String album = c.getString(albumidx);
+        String artist = c.getString(artistidx);
+        if (MediaFile.UNKNOWN_STRING.equals(album) &&
+                MediaFile.UNKNOWN_STRING.equals(artist) &&
+                title != null &&
+                title.startsWith("recording")) {
+            // not music
+            return false;
+        }
+
+        int ismusic_idx = c.getColumnIndex(MediaStore.Audio.Media.IS_MUSIC);
+        boolean ismusic = true;
+        if (ismusic_idx >= 0) {
+            ismusic = mTrackCursor.getInt(ismusic_idx) != 0;
+        }
+        return ismusic;
+    }
+
     @Override
     public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfoIn) {
         menu.add(0, PLAY_SELECTION, 0, R.string.play_selection);
@@ -568,17 +596,20 @@
         }
         menu.add(0, USE_AS_RINGTONE, 0, R.string.ringtone_menu);
         menu.add(0, DELETE_ITEM, 0, R.string.delete_item);
-        menu.add(0, SEARCH, 0, R.string.search_title);
         AdapterContextMenuInfo mi = (AdapterContextMenuInfo) menuInfoIn;
         mSelectedPosition =  mi.position;
         mTrackCursor.moveToPosition(mSelectedPosition);
         try {
             int id_idx = mTrackCursor.getColumnIndexOrThrow(
                     MediaStore.Audio.Playlists.Members.AUDIO_ID);
-            mSelectedId = mTrackCursor.getInt(id_idx);
+            mSelectedId = mTrackCursor.getLong(id_idx);
         } catch (IllegalArgumentException ex) {
             mSelectedId = mi.id;
         }
+        // only add the 'search' menu if the selected item is music
+        if (isMusic(mTrackCursor)) {
+            menu.add(0, SEARCH, 0, R.string.search_title);
+        }
         mCurrentAlbumName = mTrackCursor.getString(mTrackCursor.getColumnIndexOrThrow(
                 MediaStore.Audio.Media.ALBUM));
         mCurrentArtistNameForAlbum = mTrackCursor.getString(mTrackCursor.getColumnIndexOrThrow(
@@ -599,7 +630,7 @@
             }
 
             case QUEUE: {
-                int [] list = new int[] { (int) mSelectedId };
+                long [] list = new long[] { mSelectedId };
                 MusicUtils.addToCurrentPlaylist(this, list);
                 return true;
             }
@@ -612,8 +643,8 @@
             }
 
             case PLAYLIST_SELECTED: {
-                int [] list = new int[] { (int) mSelectedId };
-                int playlist = item.getIntent().getIntExtra("playlist", 0);
+                long [] list = new long[] { mSelectedId };
+                long playlist = item.getIntent().getLongExtra("playlist", 0);
                 MusicUtils.addToPlaylist(this, list, playlist);
                 return true;
             }
@@ -624,13 +655,13 @@
                 return true;
 
             case DELETE_ITEM: {
-                int [] list = new int[1];
+                long [] list = new long[1];
                 list[0] = (int) mSelectedId;
                 Bundle b = new Bundle();
                 String f = getString(R.string.delete_song_desc); 
                 String desc = String.format(f, mCurrentTrackName);
                 b.putString("description", desc);
-                b.putIntArray("items", list);
+                b.putLongArray("items", list);
                 Intent intent = new Intent();
                 intent.setClass(this, DeleteItems.class);
                 intent.putExtras(b);
@@ -877,7 +908,7 @@
                 if (resultCode == RESULT_OK) {
                     Uri uri = intent.getData();
                     if (uri != null) {
-                        int [] list = new int[] { (int) mSelectedId };
+                        long [] list = new long[] { mSelectedId };
                         MusicUtils.addToPlaylist(this, list, Integer.valueOf(uri.getLastPathSegment()));
                     }
                 }
@@ -887,7 +918,7 @@
                 if (resultCode == RESULT_OK) {
                     Uri uri = intent.getData();
                     if (uri != null) {
-                        int [] list = MusicUtils.getSongListForCursor(mTrackCursor);
+                        long [] list = MusicUtils.getSongListForCursor(mTrackCursor);
                         int plid = Integer.parseInt(uri.getLastPathSegment());
                         MusicUtils.addToPlaylist(this, list, plid);
                     }
@@ -1024,7 +1055,7 @@
             try {
                 mNowPlaying = mService.getQueue();
             } catch (RemoteException ex) {
-                mNowPlaying = new int[0];
+                mNowPlaying = new long[0];
             }
             mSize = mNowPlaying.length;
             if (mSize == 0) {
@@ -1051,11 +1082,11 @@
             }
             
             int size = mCurrentPlaylistCursor.getCount();
-            mCursorIdxs = new int[size];
+            mCursorIdxs = new long[size];
             mCurrentPlaylistCursor.moveToFirst();
             int colidx = mCurrentPlaylistCursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID);
             for (int i = 0; i < size; i++) {
-                mCursorIdxs[i] = mCurrentPlaylistCursor.getInt(colidx);
+                mCursorIdxs[i] = mCurrentPlaylistCursor.getLong(colidx);
                 mCurrentPlaylistCursor.moveToNext();
             }
             mCurrentPlaylistCursor.moveToFirst();
@@ -1068,7 +1099,7 @@
             try {
                 int removed = 0;
                 for (int i = mNowPlaying.length - 1; i >= 0; i--) {
-                    int trackid = mNowPlaying[i];
+                    long trackid = mNowPlaying[i];
                     int crsridx = Arrays.binarySearch(mCursorIdxs, trackid);
                     if (crsridx < 0) {
                         //Log.i("@@@@@", "item no longer exists in db: " + trackid);
@@ -1084,7 +1115,7 @@
                     }
                 }
             } catch (RemoteException ex) {
-                mNowPlaying = new int[0];
+                mNowPlaying = new long[0];
             }
         }
 
@@ -1108,7 +1139,7 @@
             // in queue-order, so we need to figure out where in the cursor we
             // should be.
            
-            int newid = mNowPlaying[newPosition];
+            long newid = mNowPlaying[newPosition];
             int crsridx = Arrays.binarySearch(mCursorIdxs, newid);
             mCurrentPlaylistCursor.moveToPosition(crsridx);
             mCurPos = newPosition;
@@ -1235,8 +1266,8 @@
         private String [] mCols;
         private Cursor mCurrentPlaylistCursor;     // updated in onMove
         private int mSize;          // size of the queue
-        private int[] mNowPlaying;
-        private int[] mCursorIdxs;
+        private long[] mNowPlaying;
+        private long[] mCursorIdxs;
         private int mCurPos;
         private IMediaPlaybackService mService;
     }
@@ -1381,7 +1412,7 @@
             vh.line2.setText(vh.buffer2, 0, len);
 
             ImageView iv = vh.play_indicator;
-            int id = -1;
+            long id = -1;
             if (MusicUtils.sService != null) {
                 // TODO: IPC call on each bind??
                 try {
@@ -1406,7 +1437,7 @@
             // playlist mode (except when you're viewing the "current playlist",
             // which is not really a playlist)
             if ( (mIsNowPlaying && cursor.getPosition() == id) ||
-                 (!mIsNowPlaying && !mDisableNowPlayingIndicator && cursor.getInt(mAudioIdIdx) == id)) {
+                 (!mIsNowPlaying && !mDisableNowPlayingIndicator && cursor.getLong(mAudioIdIdx) == id)) {
                 iv.setImageResource(R.drawable.indicator_ic_mp_playing_list);
                 iv.setVisibility(View.VISIBLE);
             } else {