diff --git a/data/sound-juicer.ui b/data/sound-juicer.ui
index d38ab3b..f514590 100644
--- a/data/sound-juicer.ui
+++ b/data/sound-juicer.ui
@@ -1,124 +1,148 @@
-<?xml version="1.0"?>
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
   <requires lib="gtk+" version="2.16"/>
-  <!-- interface-naming-policy project-wide -->
   <object class="GtkWindow" id="main_window">
     <property name="width_request">500</property>
     <property name="height_request">420</property>
+    <property name="can_focus">False</property>
     <property name="title" translatable="yes">Sound Juicer</property>
-    <signal name="destroy" handler="on_destroy_signal"/>
-    <signal name="delete_event" handler="on_delete_event"/>
+    <signal name="destroy" handler="on_destroy_signal" swapped="no"/>
+    <signal name="delete-event" handler="on_delete_event" swapped="no"/>
     <child>
       <object class="GtkVBox" id="vbox1">
         <property name="visible">True</property>
-        <property name="orientation">vertical</property>
+        <property name="can_focus">False</property>
         <child>
           <object class="GtkMenuBar" id="menubar1">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <child>
               <object class="GtkMenuItem" id="menuitem1">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="use_action_appearance">False</property>
                 <property name="label" translatable="yes">_Disc</property>
                 <property name="use_underline">True</property>
                 <child type="submenu">
                   <object class="GtkMenu" id="menuitem1_menu">
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkImageMenuItem" id="play_menuitem">
                         <property name="label">_Play / Pause</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <accelerator key="p" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_play_activate"/>
+                        <signal name="activate" handler="on_play_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="next_track_menuitem">
                         <property name="label">_Next Track</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" translatable="yes">Skip to the next track</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <accelerator key="N" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_next_track_activate"/>
+                        <signal name="activate" handler="on_next_track_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="previous_track_menuitem">
                         <property name="label">Pre_vious Track</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="tooltip_text" translatable="yes">Skip to the previous track</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <accelerator key="B" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_previous_track_activate"/>
+                        <signal name="activate" handler="on_previous_track_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkMenuItem" id="eject">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="label" translatable="yes">E_ject</property>
                         <property name="use_underline">True</property>
                         <accelerator key="J" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_eject_activate"/>
+                        <signal name="activate" handler="on_eject_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkMenuItem" id="submit">
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="label" translatable="yes">_Submit Track Names...</property>
                         <property name="use_underline">True</property>
                         <accelerator key="S" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_submit_activate"/>
+                        <signal name="activate" handler="on_submit_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="extract_menuitem">
                         <property name="label">sj-stock-extract</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
-                        <signal name="activate" handler="on_extract_activate"/>
+                        <signal name="activate" handler="on_extract_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="re-read">
                         <property name="label">_Re-read Disc</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <accelerator key="R" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_reread_activate"/>
+                        <signal name="activate" handler="on_reread_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkMenuItem" id="duplicate_menuitem">
                         <property name="visible">True</property>
                         <property name="sensitive">False</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="label" translatable="yes">_Duplicate Disc</property>
                         <property name="use_underline">True</property>
-                        <signal name="activate" handler="on_duplicate_activate"/>
+                        <signal name="activate" handler="on_duplicate_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkSeparatorMenuItem" id="separator2">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="quit">
                         <property name="label">gtk-quit</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
-                        <signal name="activate" handler="on_quit_activate"/>
+                        <signal name="activate" handler="on_quit_activate" swapped="no"/>
                       </object>
                     </child>
                   </object>
@@ -128,40 +152,50 @@
             <child>
               <object class="GtkMenuItem" id="menuitem2">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="use_action_appearance">False</property>
                 <property name="label" translatable="yes">_Edit</property>
                 <property name="use_underline">True</property>
                 <child type="submenu">
                   <object class="GtkMenu" id="menuitem2_menu">
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkMenuItem" id="select_all">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="label" translatable="yes">_Select All</property>
                         <property name="use_underline">True</property>
                         <accelerator key="A" signal="activate" modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_select_all_activate"/>
+                        <signal name="activate" handler="on_select_all_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkMenuItem" id="deselect_all">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="label" translatable="yes">_Deselect All</property>
                         <property name="use_underline">True</property>
                         <accelerator key="A" signal="activate" modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
-                        <signal name="activate" handler="on_deselect_all_activate"/>
+                        <signal name="activate" handler="on_deselect_all_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkSeparatorMenuItem" id="separator1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="edit_preferences">
                         <property name="label">gtk-preferences</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
-                        <signal name="activate" handler="on_edit_preferences_cb"/>
+                        <signal name="activate" handler="on_edit_preferences_cb" swapped="no"/>
                       </object>
                     </child>
                   </object>
@@ -171,27 +205,34 @@
             <child>
               <object class="GtkMenuItem" id="menuitem4">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="use_action_appearance">False</property>
                 <property name="label" translatable="yes">_Help</property>
                 <property name="use_underline">True</property>
                 <child type="submenu">
                   <object class="GtkMenu" id="menuitem4_menu">
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkImageMenuItem" id="contents">
                         <property name="label">_Contents</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
                         <accelerator key="F1" signal="activate"/>
-                        <signal name="activate" handler="on_contents_activate"/>
+                        <signal name="activate" handler="on_contents_activate" swapped="no"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="about">
                         <property name="label">gtk-about</property>
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="use_underline">True</property>
                         <property name="use_stock">True</property>
-                        <signal name="activate" handler="on_about_activate"/>
+                        <signal name="activate" handler="on_about_activate" swapped="no"/>
                       </object>
                     </child>
                   </object>
@@ -208,46 +249,53 @@
         <child>
           <object class="GtkEventBox" id="message_area_eventbox">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <child>
               <placeholder/>
             </child>
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
         <child>
           <object class="GtkVBox" id="vbox2">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="border_width">8</property>
-            <property name="orientation">vertical</property>
             <property name="spacing">8</property>
             <child>
               <object class="GtkTable" id="table1">
                 <property name="visible">True</property>
-                <property name="n_rows">4</property>
+                <property name="can_focus">False</property>
+                <property name="n_rows">5</property>
                 <property name="n_columns">2</property>
                 <property name="column_spacing">12</property>
                 <property name="row_spacing">6</property>
                 <child>
                   <object class="GtkHBox" id="hbox1">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                     <property name="spacing">12</property>
                     <child>
                       <object class="GtkEntry" id="genre_entry">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <signal name="changed" handler="on_genre_edit_changed"/>
+                        <signal name="changed" handler="on_genre_edit_changed" swapped="no"/>
                       </object>
                       <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
                         <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkLabel" id="label4">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="xalign">0</property>
                         <property name="label" translatable="yes">_Year:</property>
@@ -262,6 +310,7 @@
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">1</property>
                       </packing>
                     </child>
@@ -274,16 +323,18 @@
                         <accessibility>
                           <relation type="labelled-by" target="label4"/>
                         </accessibility>
-                        <signal name="changed" handler="on_year_edit_changed"/>
+                        <signal name="changed" handler="on_year_edit_changed" swapped="no"/>
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">2</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkLabel" id="label6">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
                         <property name="xalign">0</property>
                         <property name="label" translatable="yes">Disc:</property>
@@ -298,6 +349,7 @@
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">3</property>
                       </packing>
                     </child>
@@ -309,10 +361,11 @@
                         <accessibility>
                           <relation type="labelled-by" target="label6"/>
                         </accessibility>
-                        <signal name="changed" handler="on_disc_number_edit_changed"/>
+                        <signal name="changed" handler="on_disc_number_edit_changed" swapped="no"/>
                       </object>
                       <packing>
                         <property name="expand">False</property>
+                        <property name="fill">True</property>
                         <property name="position">4</property>
                       </packing>
                     </child>
@@ -320,8 +373,8 @@
                   <packing>
                     <property name="left_attach">1</property>
                     <property name="right_attach">2</property>
-                    <property name="top_attach">2</property>
-                    <property name="bottom_attach">3</property>
+                    <property name="top_attach">3</property>
+                    <property name="bottom_attach">4</property>
                     <property name="x_options">GTK_SHRINK | GTK_FILL</property>
                     <property name="y_options">GTK_SHRINK | GTK_FILL</property>
                   </packing>
@@ -329,6 +382,7 @@
                 <child>
                   <object class="GtkLabel" id="label1">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">_Title:</property>
                     <property name="use_underline">True</property>
@@ -346,7 +400,7 @@
                   <object class="GtkEntry" id="title_entry">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
-                    <signal name="changed" handler="on_title_edit_changed" after="yes"/>
+                    <signal name="changed" handler="on_title_edit_changed" after="yes" swapped="no"/>
                   </object>
                   <packing>
                     <property name="left_attach">1</property>
@@ -357,6 +411,7 @@
                 <child>
                   <object class="GtkLabel" id="label2">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">_Artist:</property>
                     <property name="use_underline">True</property>
@@ -376,7 +431,7 @@
                   <object class="GtkEntry" id="artist_entry">
                     <property name="visible">True</property>
                     <property name="can_focus">True</property>
-                    <signal name="changed" handler="on_artist_edit_changed" after="yes"/>
+                    <signal name="changed" handler="on_artist_edit_changed" after="yes" swapped="no"/>
                   </object>
                   <packing>
                     <property name="left_attach">1</property>
@@ -387,8 +442,42 @@
                   </packing>
                 </child>
                 <child>
+                  <object class="GtkLabel" id="label3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xalign">0</property>
+                    <property name="label" translatable="yes">_Composer:</property>
+                    <property name="use_underline">True</property>
+                    <property name="mnemonic_widget">composer_entry</property>
+                    <attributes>
+                      <attribute name="weight" value="bold"/>
+                    </attributes>
+                  </object>
+                  <packing>
+                    <property name="top_attach">2</property>
+                    <property name="bottom_attach">3</property>
+                    <property name="x_options">GTK_FILL</property>
+                    <property name="y_options"></property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkEntry" id="composer_entry">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <signal name="changed" handler="on_composer_edit_changed" after="yes" swapped="no"/>
+                  </object>
+                  <packing>
+                    <property name="left_attach">1</property>
+                    <property name="right_attach">2</property>
+                    <property name="top_attach">2</property>
+                    <property name="bottom_attach">3</property>
+                    <property name="y_options"></property>
+                  </packing>
+                </child>
+                <child>
                   <object class="GtkLabel" id="label31">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">_Genre:</property>
                     <property name="use_underline">True</property>
@@ -398,15 +487,16 @@
                     </attributes>
                   </object>
                   <packing>
-                    <property name="top_attach">2</property>
-                    <property name="bottom_attach">3</property>
+                    <property name="top_attach">3</property>
+                    <property name="bottom_attach">4</property>
                     <property name="x_options">GTK_FILL</property>
                     <property name="y_options"></property>
                   </packing>
                 </child>
                 <child>
-                  <object class="GtkLabel" id="label3">
+                  <object class="GtkLabel" id="label5">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">Duration:</property>
                     <accessibility>
@@ -417,8 +507,8 @@
                     </attributes>
                   </object>
                   <packing>
-                    <property name="top_attach">3</property>
-                    <property name="bottom_attach">4</property>
+                    <property name="top_attach">4</property>
+                    <property name="bottom_attach">5</property>
                     <property name="x_options">GTK_FILL</property>
                     <property name="y_options"></property>
                   </packing>
@@ -437,8 +527,8 @@
                   <packing>
                     <property name="left_attach">1</property>
                     <property name="right_attach">2</property>
-                    <property name="top_attach">3</property>
-                    <property name="bottom_attach">4</property>
+                    <property name="top_attach">4</property>
+                    <property name="bottom_attach">5</property>
                     <property name="x_options">GTK_FILL</property>
                     <property name="y_options"></property>
                   </packing>
@@ -446,6 +536,7 @@
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
@@ -453,8 +544,6 @@
               <object class="GtkScrolledWindow" id="scrolledwindow1">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">automatic</property>
-                <property name="vscrollbar_policy">automatic</property>
                 <property name="shadow_type">in</property>
                 <child>
                   <object class="GtkTreeView" id="track_listview">
@@ -467,22 +556,29 @@
                         <property name="AtkObject::accessible-name" translatable="yes">Tracks</property>
                       </object>
                     </child>
-                    <signal name="cursor_changed" handler="on_tracklist_row_selected"/>
-                    <signal name="row_activated" handler="on_tracklist_row_activate"/>
+                    <signal name="cursor-changed" handler="on_tracklist_row_selected" swapped="no"/>
+                    <signal name="row-activated" handler="on_tracklist_row_activate" swapped="no"/>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection" id="treeview-selection1"/>
+                    </child>
                   </object>
                 </child>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">1</property>
               </packing>
             </child>
             <child>
               <object class="GtkHBox" id="hbox10">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkHButtonBox" id="hbuttonbox1">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="spacing">6</property>
                     <property name="layout_style">end</property>
                     <child>
@@ -492,8 +588,9 @@
                         <property name="can_focus">True</property>
                         <property name="can_default">True</property>
                         <property name="receives_default">False</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="use_stock">True</property>
-                        <signal name="clicked" handler="on_play_activate"/>
+                        <signal name="clicked" handler="on_play_activate" swapped="no"/>
                       </object>
                       <packing>
                         <property name="expand">False</property>
@@ -508,8 +605,9 @@
                         <property name="can_focus">True</property>
                         <property name="can_default">True</property>
                         <property name="receives_default">False</property>
+                        <property name="use_action_appearance">False</property>
                         <property name="use_stock">True</property>
-                        <signal name="clicked" handler="on_extract_activate"/>
+                        <signal name="clicked" handler="on_extract_activate" swapped="no"/>
                       </object>
                       <packing>
                         <property name="expand">False</property>
@@ -520,6 +618,7 @@
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
@@ -533,11 +632,13 @@
                         <property name="AtkObject::accessible-name" translatable="yes">Track Progress</property>
                       </object>
                     </child>
-                    <signal name="button_press_event" handler="on_seek_press"/>
-                    <signal name="value_changed" handler="on_seek_moved"/>
-                    <signal name="button_release_event" handler="on_seek_release"/>
+                    <signal name="button-press-event" handler="on_seek_press" swapped="no"/>
+                    <signal name="button-release-event" handler="on_seek_release" swapped="no"/>
+                    <signal name="value-changed" handler="on_seek_moved" swapped="no"/>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">2</property>
                   </packing>
                 </child>
@@ -547,6 +648,7 @@
                     <property name="can_focus">True</property>
                     <property name="receives_default">True</property>
                     <property name="has_tooltip">True</property>
+                    <property name="use_action_appearance">False</property>
                     <property name="relief">none</property>
                     <property name="focus_on_click">False</property>
                     <property name="orientation">vertical</property>
@@ -554,10 +656,11 @@
 audio-volume-high
 audio-volume-low
 audio-volume-medium</property>
-                    <signal name="value_changed" handler="on_volume_changed"/>
+                    <signal name="value-changed" handler="on_volume_changed" swapped="no"/>
                   </object>
                   <packing>
                     <property name="expand">False</property>
+                    <property name="fill">True</property>
                     <property name="position">2</property>
                   </packing>
                 </child>
@@ -571,6 +674,8 @@ audio-volume-medium</property>
             </child>
           </object>
           <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
             <property name="position">2</property>
           </packing>
         </child>
@@ -578,13 +683,16 @@ audio-volume-medium</property>
           <object class="GtkHBox" id="hbox13">
             <property name="height_request">22</property>
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <child>
               <object class="GtkAlignment" id="alignment1">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
                 <property name="top_padding">2</property>
                 <property name="bottom_padding">2</property>
                 <child>
                   <object class="GtkProgressBar" id="progress_bar">
+                    <property name="can_focus">False</property>
                     <property name="pulse_step">0.10000000149</property>
                   </object>
                 </child>
@@ -598,8 +706,11 @@ audio-volume-medium</property>
             <child>
               <object class="GtkStatusbar" id="status_bar">
                 <property name="visible">True</property>
+                <property name="can_focus">False</property>
               </object>
               <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
                 <property name="position">1</property>
               </packing>
             </child>
@@ -614,59 +725,20 @@ audio-volume-medium</property>
     </child>
   </object>
   <object class="GtkDialog" id="multiple_dialog">
+    <property name="can_focus">False</property>
     <property name="border_width">5</property>
     <property name="title" translatable="yes">Multiple Albums Found</property>
     <property name="type_hint">dialog</property>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox2">
+      <object class="GtkBox" id="dialog-vbox2">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
-        <child>
-          <object class="GtkVBox" id="vbox4">
-            <property name="visible">True</property>
-            <property name="border_width">5</property>
-            <property name="orientation">vertical</property>
-            <property name="spacing">6</property>
-            <child>
-              <object class="GtkLabel" id="label10">
-                <property name="visible">True</property>
-                <property name="label" translatable="yes">This CD could be more than one album. Please select which album it is below and press &lt;i&gt;Continue&lt;/i&gt;.</property>
-                <property name="use_markup">True</property>
-                <property name="wrap">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkScrolledWindow" id="scrolledwindow2">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">automatic</property>
-                <property name="vscrollbar_policy">automatic</property>
-                <property name="shadow_type">in</property>
-                <child>
-                  <object class="GtkTreeView" id="albums_listview">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="position">1</property>
-          </packing>
-        </child>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area2">
+          <object class="GtkButtonBox" id="dialog-action_area2">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="ok_button">
@@ -675,18 +747,22 @@ audio-volume-medium</property>
                 <property name="can_default">True</property>
                 <property name="has_default">True</property>
                 <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
                 <child>
                   <object class="GtkAlignment" id="alignment2">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xscale">0</property>
                     <property name="yscale">0</property>
                     <child>
                       <object class="GtkHBox" id="hbox2">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="spacing">2</property>
                         <child>
                           <object class="GtkImage" id="image16">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="stock">gtk-go-forward</property>
                           </object>
                           <packing>
@@ -698,6 +774,7 @@ audio-volume-medium</property>
                         <child>
                           <object class="GtkLabel" id="label11">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="label" translatable="yes">_Continue</property>
                             <property name="use_underline">True</property>
                           </object>
@@ -721,10 +798,59 @@ audio-volume-medium</property>
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="pack_type">end</property>
             <property name="position">0</property>
           </packing>
         </child>
+        <child>
+          <object class="GtkVBox" id="vbox4">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="border_width">5</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkLabel" id="label10">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">This CD could be more than one album. Please select which album it is below and press &lt;i&gt;Continue&lt;/i&gt;.</property>
+                <property name="use_markup">True</property>
+                <property name="wrap">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkScrolledWindow" id="scrolledwindow2">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="shadow_type">in</property>
+                <child>
+                  <object class="GtkTreeView" id="albums_listview">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection" id="treeview-selection2"/>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
       </object>
     </child>
     <action-widgets>
@@ -732,30 +858,78 @@ audio-volume-medium</property>
     </action-widgets>
   </object>
   <object class="GtkDialog" id="prefs_dialog">
+    <property name="can_focus">False</property>
     <property name="border_width">5</property>
     <property name="title" translatable="yes">Preferences</property>
     <property name="resizable">False</property>
     <property name="type_hint">dialog</property>
-    <signal name="delete_event" handler="gtk_widget_hide_on_delete"/>
+    <signal name="delete-event" handler="gtk_widget_hide_on_delete" swapped="no"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox4">
+      <object class="GtkBox" id="dialog-vbox4">
         <property name="visible">True</property>
+        <property name="can_focus">False</property>
         <property name="orientation">vertical</property>
         <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area4">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="prefs_help">
+                <property name="label">gtk-help</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="prefs_close">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_action_appearance">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
         <child>
           <object class="GtkVBox" id="vbox11">
             <property name="visible">True</property>
+            <property name="can_focus">False</property>
             <property name="border_width">5</property>
-            <property name="orientation">vertical</property>
             <property name="spacing">18</property>
             <child>
               <object class="GtkVBox" id="frame_device">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkLabel" id="label32">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">Device</property>
                     <attributes>
@@ -771,10 +945,12 @@ audio-volume-medium</property>
                 <child>
                   <object class="GtkAlignment" id="alignment5">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="left_padding">12</property>
                     <child>
                       <object class="GtkTable" id="table7">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="n_rows">3</property>
                         <property name="n_columns">2</property>
                         <property name="column_spacing">12</property>
@@ -782,6 +958,7 @@ audio-volume-medium</property>
                         <child>
                           <object class="GtkLabel" id="cd_label">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
                             <property name="label" translatable="yes">CD _drive:</property>
                             <property name="use_underline">True</property>
@@ -792,23 +969,12 @@ audio-volume-medium</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="BraseroDriveSelection" id="cd_option">
-                            <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                          </object>
-                          <packing>
-                            <property name="left_attach">1</property>
-                            <property name="right_attach">2</property>
-                            <property name="x_options">GTK_FILL</property>
-                            <property name="y_options"></property>
-                          </packing>
-                        </child>
-                        <child>
                           <object class="GtkCheckButton" id="check_eject">
                             <property name="label" translatable="yes">_Eject after extracting tracks</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
+                            <property name="use_action_appearance">False</property>
                             <property name="use_underline">True</property>
                             <property name="draw_indicator">True</property>
                           </object>
@@ -827,6 +993,7 @@ audio-volume-medium</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
+                            <property name="use_action_appearance">False</property>
                             <property name="use_underline">True</property>
                             <property name="draw_indicator">True</property>
                           </object>
@@ -852,23 +1019,27 @@ audio-volume-medium</property>
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">0</property>
               </packing>
             </child>
             <child>
               <object class="GtkVBox" id="frame_folder">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkLabel" id="label33">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">Music Folder</property>
                     <attributes>
@@ -884,14 +1055,17 @@ audio-volume-medium</property>
                 <child>
                   <object class="GtkAlignment" id="alignment10">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="left_padding">12</property>
                     <child>
                       <object class="GtkHBox" id="hbox9">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="spacing">12</property>
                         <child>
                           <object class="GtkLabel" id="path_label">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
                             <property name="label" translatable="yes">_Folder:</property>
                             <property name="use_underline">True</property>
@@ -900,18 +1074,22 @@ audio-volume-medium</property>
                           </object>
                           <packing>
                             <property name="expand">False</property>
+                            <property name="fill">True</property>
                             <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
                           <object class="GtkFileChooserButton" id="path_chooser">
                             <property name="visible">True</property>
-                            <property name="local_only">False</property>
+                            <property name="can_focus">False</property>
                             <property name="action">select-folder</property>
+                            <property name="local_only">False</property>
                             <property name="title" translatable="yes">Select A Folder</property>
-                            <signal name="current_folder_changed" handler="prefs_base_folder_changed"/>
+                            <signal name="current-folder-changed" handler="prefs_base_folder_changed" swapped="no"/>
                           </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">1</property>
                           </packing>
                         </child>
@@ -919,23 +1097,27 @@ audio-volume-medium</property>
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">1</property>
               </packing>
             </child>
             <child>
               <object class="GtkVBox" id="frame_names">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkLabel" id="label34">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">Track Names</property>
                     <attributes>
@@ -951,10 +1133,12 @@ audio-volume-medium</property>
                 <child>
                   <object class="GtkAlignment" id="alignment11">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="left_padding">12</property>
                     <child>
                       <object class="GtkTable" id="table6">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="n_rows">4</property>
                         <property name="n_columns">2</property>
                         <property name="column_spacing">12</property>
@@ -962,6 +1146,7 @@ audio-volume-medium</property>
                         <child>
                           <object class="GtkLabel" id="folder_label">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
                             <property name="label" translatable="yes">Folder hie_rarchy:</property>
                             <property name="use_underline">True</property>
@@ -975,6 +1160,7 @@ audio-volume-medium</property>
                         <child>
                           <object class="GtkLabel" id="file_label">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
                             <property name="label" translatable="yes">File _name:</property>
                             <property name="use_underline">True</property>
@@ -990,6 +1176,7 @@ audio-volume-medium</property>
                         <child>
                           <object class="GtkComboBox" id="path_option">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <child>
                               <object class="GtkCellRendererText" id="cellrenderertext2"/>
                               <attributes>
@@ -1006,6 +1193,7 @@ audio-volume-medium</property>
                         <child>
                           <object class="GtkComboBox" id="file_option">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <child>
                               <object class="GtkCellRendererText" id="cellrenderertext1"/>
                               <attributes>
@@ -1024,6 +1212,7 @@ audio-volume-medium</property>
                         <child>
                           <object class="GtkLabel" id="path_example_label">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
                             <property name="use_markup">True</property>
                             <property name="ellipsize">end</property>
@@ -1044,6 +1233,7 @@ audio-volume-medium</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
                             <property name="receives_default">False</property>
+                            <property name="use_action_appearance">False</property>
                             <property name="use_underline">True</property>
                             <property name="draw_indicator">True</property>
                           </object>
@@ -1066,23 +1256,27 @@ audio-volume-medium</property>
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">2</property>
               </packing>
             </child>
             <child>
               <object class="GtkVBox" id="frame_format">
                 <property name="visible">True</property>
-                <property name="orientation">vertical</property>
+                <property name="can_focus">False</property>
                 <property name="spacing">6</property>
                 <child>
                   <object class="GtkLabel" id="label35">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="xalign">0</property>
                     <property name="label" translatable="yes">Format</property>
                     <attributes>
@@ -1098,14 +1292,17 @@ audio-volume-medium</property>
                 <child>
                   <object class="GtkAlignment" id="alignment8">
                     <property name="visible">True</property>
+                    <property name="can_focus">False</property>
                     <property name="left_padding">12</property>
                     <child>
                       <object class="GtkHBox" id="hbox8">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="spacing">12</property>
                         <child>
                           <object class="GtkLabel" id="profile_label">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="xalign">0</property>
                             <property name="label" translatable="yes">O_utput Format:</property>
                             <property name="use_underline">True</property>
@@ -1119,12 +1316,15 @@ audio-volume-medium</property>
                         <child>
                           <object class="GtkHBox" id="hack_hbox">
                             <property name="visible">True</property>
+                            <property name="can_focus">False</property>
                             <property name="spacing">6</property>
                             <child>
                               <placeholder/>
                             </child>
                           </object>
                           <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
                             <property name="position">1</property>
                           </packing>
                         </child>
@@ -1132,62 +1332,25 @@ audio-volume-medium</property>
                     </child>
                   </object>
                   <packing>
+                    <property name="expand">True</property>
+                    <property name="fill">True</property>
                     <property name="position">1</property>
                   </packing>
                 </child>
               </object>
               <packing>
                 <property name="expand">False</property>
+                <property name="fill">True</property>
                 <property name="position">3</property>
               </packing>
             </child>
           </object>
           <packing>
             <property name="expand">False</property>
+            <property name="fill">True</property>
             <property name="position">1</property>
           </packing>
         </child>
-        <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area4">
-            <property name="visible">True</property>
-            <property name="layout_style">end</property>
-            <child>
-              <object class="GtkButton" id="prefs_help">
-                <property name="label">gtk-help</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkButton" id="prefs_close">
-                <property name="label">gtk-close</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-              </object>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">1</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="expand">False</property>
-            <property name="pack_type">end</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
       </object>
     </child>
     <action-widgets>
diff --git a/libjuicer/sj-extractor.c b/libjuicer/sj-extractor.c
index 10523d4..fa6c562 100644
--- a/libjuicer/sj-extractor.c
+++ b/libjuicer/sj-extractor.c
@@ -522,6 +522,13 @@ sj_extractor_extract_track (SjExtractor *extractor, const TrackDetails *track, G
                                GST_TAG_DURATION, track->duration * GST_SECOND,
                                NULL);
 
+     if (track->composer != NULL && strcmp (track->composer, "") != 0) {
+        gst_tag_setter_add_tags (tagger,
+                            GST_TAG_MERGE_APPEND,
+                            GST_TAG_COMPOSER, track->composer,
+                            NULL);
+      }
+
       if (track->album->album_id != NULL && strcmp (track->album->album_id, "") != 0) {
         gst_tag_setter_add_tags (tagger,
                             GST_TAG_MERGE_APPEND,
diff --git a/libjuicer/sj-metadata-musicbrainz3.c b/libjuicer/sj-metadata-musicbrainz3.c
index ee96946..ac4093d 100644
--- a/libjuicer/sj-metadata-musicbrainz3.c
+++ b/libjuicer/sj-metadata-musicbrainz3.c
@@ -111,7 +111,7 @@ make_album_from_release (MbRelease *release)
   AlbumDetails *album;
   char buffer[512];
   MbArtist artist;
-  char *new_title;
+  char *new_title, *classical_artist;
   int i;
 
   g_assert (release);
@@ -120,17 +120,23 @@ make_album_from_release (MbRelease *release)
 
   GET_ID (album->album_id, mb_release_get_id, release);
   GET (album->title, mb_release_get_title, release);
-  new_title = sj_metadata_helper_scan_disc_number (album->title, &album->disc_number);
-  if (new_title) {
+  sj_metadata_helper_scan_album_title (album->title, &new_title, &classical_artist, &album->disc_number);
+  if (new_title) { // this should always be true
     g_free (album->title);
     album->title = new_title;
   }
 
   artist = mb_release_get_artist (release);
   GET_ID (album->artist_id, mb_artist_get_id, artist);
-  GET (album->artist, mb_artist_get_name, artist);
-  GET (album->artist_sortname, mb_artist_get_sortname, artist);
-
+  if (classical_artist) {
+    GET (album->composer, mb_artist_get_name, artist);
+    album->artist = g_strdup(classical_artist);
+    g_free(classical_artist);
+  } else {
+    GET (album->artist, mb_artist_get_name, artist);
+    GET (album->artist_sortname, mb_artist_get_sortname, artist);
+  }
+ 
   if (mb_release_get_num_release_events (release) >= 1) {
     MbReleaseEvent event;
     char *date = NULL;
@@ -183,15 +189,29 @@ make_album_from_release (MbRelease *release)
     GET_ID (track->track_id, mb_track_get_id, mbt);
 
     GET (track->title, mb_track_get_title, mbt);
+    sj_metadata_helper_scan_title (track->title, &new_title, &classical_artist);
+    if (new_title) {
+      g_free(track->title);
+      track->title = new_title;
+    }
+ 
     track->duration = mb_track_get_duration (mbt) / 1000;
 
     artist = mb_track_get_artist (mbt);
     if (artist == NULL)
       artist = mb_release_get_artist (release);
     GET_ID (track->artist_id, mb_artist_get_id, artist);
-    GET (track->artist, mb_artist_get_name, artist);
-    GET (track->artist_sortname, mb_artist_get_sortname, artist);
-
+    if (classical_artist || album->composer) {
+      GET (track->composer, mb_artist_get_name, artist);
+      track->artist = (classical_artist) ? g_strdup(classical_artist) : g_strdup(album->artist);
+    } else {
+      GET (track->artist, mb_artist_get_name, artist);
+      GET (track->artist_sortname, mb_artist_get_sortname, artist);
+    }
+    if (classical_artist) {
+      g_free (classical_artist);
+    }
+    
     album->tracks = g_list_append (album->tracks, track);
   }
 
diff --git a/libjuicer/sj-metadata.c b/libjuicer/sj-metadata.c
index 797c9ff..1b04219 100644
--- a/libjuicer/sj-metadata.c
+++ b/libjuicer/sj-metadata.c
@@ -115,37 +115,75 @@ sj_metadata_list_albums (SjMetadata *metadata, char **url, GError **error)
   return SJ_METADATA_GET_CLASS (metadata)->list_albums (metadata, url, error);
 }
 
-char *
-sj_metadata_helper_scan_disc_number (const char *album_title, int *disc_number)
-{
-  GRegex *disc_regex;
+static void
+sj_metadata_helper_scan_disc_number (char *album_title, int *disc_number) {
+  GRegex *regex;
   GMatchInfo *info;
-  char *new_title;
-  int num;
+  int pos;
+  char *s;
 
-  disc_regex = g_regex_new (".+( \\(disc (\\d+).*)", 0, 0, NULL);
-  new_title = NULL;
   *disc_number = 0;
 
-  if (g_regex_match (disc_regex, album_title, 0, &info)) {
-    int pos = 0;
-    char *s;
+  /* get disc number if there is one */
+  regex = g_regex_new (".*[^ ](\\s*\\(disc\\s*(\\d+)\\s*\\))", G_REGEX_CASELESS, 0, NULL);
+  if (g_regex_match (regex, album_title, 0, &info)) {
+    s = g_match_info_fetch (info, 2);
+    *disc_number = atoi (s);
+    g_free (s);
+    /* shorten string so we don't match disc number later */
+    g_match_info_fetch_pos (info, 1, &pos, NULL);
+    album_title[pos] = 0; 
+    g_match_info_free (info);
+  }
+  g_regex_unref (regex);
+  return;
+}
+
+void
+sj_metadata_helper_scan_title (const char *title, char **new_title, char** artist) {
+  GRegex *regex;
+  GMatchInfo *info;
+
+  char *str = g_strdup(title);
+  *new_title = NULL;
+  *artist = NULL;
 
+  /* get artist if in brackets */
+  regex = g_regex_new (".*[^ ](\\s*\\(\\s*(.*[^ ])\\s*\\)\\s*$)", 0, 0, NULL);
+  if (g_regex_match (regex, str, 0, &info)) {
+    *artist = g_match_info_fetch (info, 2);
+    int pos;
     g_match_info_fetch_pos (info, 1, &pos, NULL);
-    if (pos) {
-      new_title = g_strndup (album_title, pos);
-    }
+    str[pos] = 0; 
+    g_match_info_free (info);
+  }
+  g_regex_unref (regex);
 
-    s = g_match_info_fetch (info, 2);
-    num = atoi (s);
-    *disc_number = num;
-    g_free (s);
+  /* get album title without enclosing whitespace */
+  regex = g_regex_new ("\\s*(.*[^ ])", 0, 0, NULL);
+  if (g_regex_match (regex, str, 0, &info)) {
+    *new_title = g_match_info_fetch (info, 1);
+    g_match_info_free (info);
   }
+  g_regex_unref (regex);
+  g_free (str);
+  return;
+}
+
+void
+sj_metadata_helper_scan_album_title (const char *album_title, char** new_title, char** artist, int *disc_number)
+{
+  char *str = g_strdup(album_title);
+
+  /* get disc number if there is one */
+  sj_metadata_helper_scan_disc_number(str, disc_number);
+
+  /* scan title for classical artist info */
+  sj_metadata_helper_scan_title(str, new_title, artist);
 
-  g_match_info_free (info);
-  g_regex_unref (disc_regex);
+  g_free (str);
 
-  return new_title;
+  return;
 }
 
 GDate *
diff --git a/libjuicer/sj-metadata.h b/libjuicer/sj-metadata.h
index f7a58d2..37e142e 100644
--- a/libjuicer/sj-metadata.h
+++ b/libjuicer/sj-metadata.h
@@ -50,7 +50,8 @@ void sj_metadata_set_proxy (SjMetadata *metadata, const char* proxy);
 void sj_metadata_set_proxy_port (SjMetadata *metadata, const int proxy_port);
 GList * sj_metadata_list_albums (SjMetadata *metadata, char **url, GError **error);
 
-char * sj_metadata_helper_scan_disc_number (const char *album_title, int *disc_number);
+void sj_metadata_helper_scan_album_title (const char *album_title, char **title, char **artist, int *disc_number);
+void sj_metadata_helper_scan_title (const char *title, char **new_title, char **artist);
 GDate * sj_metadata_helper_scan_date (const char *date);
 gboolean sj_metadata_helper_check_media (const char *cdrom, GError **error);
 
diff --git a/libjuicer/sj-structures.c b/libjuicer/sj-structures.c
index 3d23ce6..85e6087 100644
--- a/libjuicer/sj-structures.c
+++ b/libjuicer/sj-structures.c
@@ -32,6 +32,7 @@ void track_details_free(TrackDetails *track)
   g_return_if_fail (track != NULL);
   g_free (track->title);
   g_free (track->artist);
+  g_free (track->composer);
   g_free (track->track_id);
   g_free (track->artist_id);
   g_free (track->artist_sortname);
@@ -46,6 +47,7 @@ void album_details_free(AlbumDetails *album)
   g_return_if_fail (album != NULL);
   g_free (album->title);
   g_free (album->artist);
+  g_free (album->composer);
   g_free (album->genre);
   g_free (album->album_id);
   if (album->release_date) g_date_free (album->release_date);
diff --git a/libjuicer/sj-structures.h b/libjuicer/sj-structures.h
index 07ccc60..ec0ad55 100644
--- a/libjuicer/sj-structures.h
+++ b/libjuicer/sj-structures.h
@@ -45,6 +45,7 @@ struct _TrackDetails {
   char *title;
   char *artist;
   char* artist_sortname; /* Can be NULL, so fall back onto artist */
+  char* composer;
   int duration; /* seconds */
   char* track_id;
   char* artist_id;
@@ -54,6 +55,7 @@ struct _AlbumDetails {
   char* title;
   char* artist;
   char* artist_sortname;
+  char* composer;
   char *genre;
   int   number; /* number of tracks in the album */
   int   disc_number;
diff --git a/src/sj-main.c b/src/sj-main.c
index ded7300..ce7b458 100644
--- a/src/sj-main.c
+++ b/src/sj-main.c
@@ -63,6 +63,7 @@ static void set_duplication (gboolean enable);
 /* Prototypes for the signal blocking/unblocking in update_ui_for_album */
 G_MODULE_EXPORT void on_title_edit_changed(GtkEditable *widget, gpointer user_data);
 G_MODULE_EXPORT void on_artist_edit_changed(GtkEditable *widget, gpointer user_data);
+G_MODULE_EXPORT void on_composer_edit_changed(GtkEditable *widget, gpointer user_data);
 G_MODULE_EXPORT void on_year_edit_changed(GtkEditable *widget, gpointer user_data);
 G_MODULE_EXPORT void on_disc_number_edit_changed(GtkEditable *widget, gpointer user_data);
 
@@ -75,7 +76,7 @@ GConfClient *gconf_client;
 
 GtkWidget *main_window;
 static GtkWidget *message_area_eventbox;
-static GtkWidget *title_entry, *artist_entry, *duration_label, *genre_entry, *year_entry, *disc_number_entry;
+static GtkWidget *title_entry, *artist_entry, *composer_entry, *duration_label, *genre_entry, *year_entry, *disc_number_entry;
 static GtkWidget *track_listview, *extract_button, *play_button;
 static GtkWidget *status_bar;
 static GtkWidget *extract_menuitem, *play_menuitem, *next_menuitem, *prev_menuitem, *select_all_menuitem, *deselect_all_menuitem;
@@ -83,7 +84,7 @@ static GtkWidget *submit_menuitem;
 static GtkWidget *duplicate, *eject;
 GtkListStore *track_store;
 static BaconMessageConnection *connection;
-GtkCellRenderer *toggle_renderer, *title_renderer, *artist_renderer;
+GtkCellRenderer *toggle_renderer, *title_renderer, *artist_renderer, *composer_renderer;
 
 GtkWidget *current_message_area;
 
@@ -464,12 +465,14 @@ static void update_ui_for_album (AlbumDetails *album)
     gtk_list_store_clear (track_store);
     gtk_entry_set_text (GTK_ENTRY (title_entry), "");
     gtk_entry_set_text (GTK_ENTRY (artist_entry), "");
+    gtk_entry_set_text (GTK_ENTRY (composer_entry), "");
     gtk_entry_set_text (GTK_ENTRY (genre_entry), "");
     gtk_entry_set_text (GTK_ENTRY (year_entry), "");
     gtk_entry_set_text (GTK_ENTRY (disc_number_entry), "");
     gtk_label_set_text (GTK_LABEL (duration_label), "");
     gtk_widget_set_sensitive (title_entry, FALSE);
     gtk_widget_set_sensitive (artist_entry, FALSE);
+    gtk_widget_set_sensitive (composer_entry, FALSE);
     gtk_widget_set_sensitive (genre_entry, FALSE);
     gtk_widget_set_sensitive (year_entry, FALSE);
     gtk_widget_set_sensitive (disc_number_entry, FALSE);
@@ -489,10 +492,12 @@ static void update_ui_for_album (AlbumDetails *album)
 
     g_signal_handlers_block_by_func (title_entry, on_title_edit_changed, NULL);
     g_signal_handlers_block_by_func (artist_entry, on_artist_edit_changed, NULL);
+    g_signal_handlers_block_by_func (composer_entry, on_composer_edit_changed, NULL);
     g_signal_handlers_block_by_func (year_entry, on_year_edit_changed, NULL);
     g_signal_handlers_block_by_func (disc_number_entry, on_disc_number_edit_changed, NULL);
     gtk_entry_set_text (GTK_ENTRY (title_entry), album->title);
     gtk_entry_set_text (GTK_ENTRY (artist_entry), album->artist);
+    gtk_entry_set_text (GTK_ENTRY (composer_entry), album->composer);
     if (album->disc_number) {
       gtk_entry_set_text (GTK_ENTRY (disc_number_entry), g_strdup_printf ("%d", album->disc_number));
     }
@@ -501,6 +506,7 @@ static void update_ui_for_album (AlbumDetails *album)
     }
     g_signal_handlers_unblock_by_func (title_entry, on_title_edit_changed, NULL);
     g_signal_handlers_unblock_by_func (artist_entry, on_artist_edit_changed, NULL);
+    g_signal_handlers_unblock_by_func (composer_entry, on_composer_edit_changed, NULL);
     g_signal_handlers_unblock_by_func (year_entry, on_year_edit_changed, NULL);
     g_signal_handlers_unblock_by_func (disc_number_entry, on_disc_number_edit_changed, NULL);
     /* Clear the genre field, it's from the user */
@@ -508,6 +514,7 @@ static void update_ui_for_album (AlbumDetails *album)
 
     gtk_widget_set_sensitive (title_entry, TRUE);
     gtk_widget_set_sensitive (artist_entry, TRUE);
+    gtk_widget_set_sensitive (composer_entry, TRUE);
     gtk_widget_set_sensitive (genre_entry, TRUE);
     gtk_widget_set_sensitive (year_entry, TRUE);
     gtk_widget_set_sensitive (disc_number_entry, TRUE);
@@ -532,6 +539,7 @@ static void update_ui_for_album (AlbumDetails *album)
                           COLUMN_NUMBER, track->number,
                           COLUMN_TITLE, track->title,
                           COLUMN_ARTIST, track->artist,
+			  COLUMN_COMPOSER, track->composer,
                           COLUMN_DURATION, track->duration,
                           COLUMN_DETAILS, track,
                           -1);
@@ -1320,8 +1328,8 @@ static void on_extract_toggled (GtkCellRendererToggle *cellrenderertoggle,
 }
 
 /**
- * Callback when the title or artist cells are edited in the list. column_data
- * contains the column number in the model which was modified.
+ * Callback when the title, artist or composer cells are edited in the list. 
+ * column_data contains the column number in the model which was modified.
  */
 static void on_cell_edited (GtkCellRendererText *renderer,
                  gchar *path, gchar *string,
@@ -1330,14 +1338,11 @@ static void on_cell_edited (GtkCellRendererText *renderer,
   ViewColumn column = GPOINTER_TO_INT (column_data);
   GtkTreeIter iter;
   TrackDetails *track;
-  char *artist, *title;
 
   if (!gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (track_store), &iter, path))
     return;
   gtk_tree_model_get (GTK_TREE_MODEL (track_store), &iter,
-                      COLUMN_ARTIST, &artist,
-                      COLUMN_TITLE, &title,
-                      COLUMN_DETAILS, &track,
+                       COLUMN_DETAILS, &track,
                       -1);
   switch (column) {
   case COLUMN_TITLE:
@@ -1350,11 +1355,14 @@ static void on_cell_edited (GtkCellRendererText *renderer,
     track->artist = g_strdup (string);
     gtk_list_store_set (track_store, &iter, COLUMN_ARTIST, track->artist, -1);
     break;
+  case COLUMN_COMPOSER:
+    g_free (track->composer);
+    track->composer = g_strdup (string);
+    gtk_list_store_set (track_store, &iter, COLUMN_COMPOSER, track->composer, -1);
+    break;
   default:
     g_warning (_("Unknown column %d was edited"), column);
   }
-  g_free (artist);
-  g_free (title);
 
   return;
 }
@@ -1446,6 +1454,42 @@ G_MODULE_EXPORT void on_artist_edit_changed(GtkEditable *widget, gpointer user_d
   g_free (former_album_artist);
 }
 
+G_MODULE_EXPORT void on_composer_edit_changed(GtkEditable *widget, gpointer user_data) {
+  GtkTreeIter iter;
+  TrackDetails *track;
+  gchar *current_track_composer, *former_album_composer = NULL;
+
+  g_return_if_fail (current_album != NULL);
+
+  remove_musicbrainz_ids (current_album);
+
+  if (current_album->composer) {
+    former_album_composer = current_album->composer;
+  }
+  current_album->composer = gtk_editable_get_chars (widget, 0, -1); /* get all the characters */
+
+  if (!gtk_tree_model_get_iter_first (GTK_TREE_MODEL (track_store), &iter)) {
+    g_free (former_album_composer);
+    return;
+  }
+
+  /* Set the composer field in each tree row */
+  do {
+    gtk_tree_model_get (GTK_TREE_MODEL (track_store), &iter, COLUMN_COMPOSER, &current_track_composer, -1);
+    /* Change track composer if it matched album composer before the change */
+    if ((strcasecmp (current_track_composer, former_album_composer) == 0) || (strcasecmp (current_track_composer, current_album->composer) == 0)) {
+      gtk_tree_model_get (GTK_TREE_MODEL (track_store), &iter, COLUMN_DETAILS, &track, -1);
+
+      g_free (track->composer);
+      track->composer = g_strdup (current_album->composer);
+
+      gtk_list_store_set (track_store, &iter, COLUMN_COMPOSER, track->composer, -1);
+    }
+  } while (gtk_tree_model_iter_next (GTK_TREE_MODEL (track_store), &iter));
+
+  g_free (former_album_composer);
+}
+
 G_MODULE_EXPORT void on_genre_edit_changed(GtkEditable *widget, gpointer user_data) {
   g_return_if_fail (current_album != NULL);
   if (current_album->genre) {
@@ -1722,6 +1766,7 @@ int main (int argc, char **argv)
   submit_menuitem       = GET_WIDGET ("submit");
   title_entry           = GET_WIDGET ("title_entry");
   artist_entry          = GET_WIDGET ("artist_entry");
+  composer_entry        = GET_WIDGET ("composer_entry");
   duration_label        = GET_WIDGET ("duration_label");
   genre_entry           = GET_WIDGET ("genre_entry");
   year_entry            = GET_WIDGET ("year_entry");
@@ -1760,7 +1805,7 @@ int main (int argc, char **argv)
 
   setup_genre_entry (genre_entry);
 
-  track_store = gtk_list_store_new (COLUMN_TOTAL, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_POINTER);
+  track_store = gtk_list_store_new (COLUMN_TOTAL, G_TYPE_INT, G_TYPE_BOOLEAN, G_TYPE_INT, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT, G_TYPE_POINTER);
   gtk_tree_view_set_model (GTK_TREE_VIEW (track_listview), GTK_TREE_MODEL (track_store));
   {
     GtkTreeViewColumn *column;
@@ -1810,6 +1855,17 @@ int main (int argc, char **argv)
     g_object_set (G_OBJECT (artist_renderer), "editable", TRUE, NULL);
     gtk_tree_view_append_column (GTK_TREE_VIEW (track_listview), column);
 
+    composer_renderer = gtk_cell_renderer_text_new ();
+    column = gtk_tree_view_column_new_with_attributes (_("Composer"),
+                                                       composer_renderer,
+                                                       "text", COLUMN_COMPOSER,
+                                                       NULL);
+    gtk_tree_view_column_set_resizable (column, TRUE);
+    gtk_tree_view_column_set_expand (column, TRUE);
+    g_signal_connect (composer_renderer, "edited", G_CALLBACK (on_cell_edited), GUINT_TO_POINTER (COLUMN_COMPOSER));
+    g_object_set (G_OBJECT (composer_renderer), "editable", TRUE, NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (track_listview), column);
+
     renderer = gtk_cell_renderer_text_new ();
     column = gtk_tree_view_column_new_with_attributes (_("Duration"),
                                                        renderer,
diff --git a/src/sound-juicer.h b/src/sound-juicer.h
index 3568de7..cea723d 100644
--- a/src/sound-juicer.h
+++ b/src/sound-juicer.h
@@ -65,6 +65,7 @@ typedef enum {
   COLUMN_NUMBER,
   COLUMN_TITLE,
   COLUMN_ARTIST,
+  COLUMN_COMPOSER,
   COLUMN_DURATION,
   COLUMN_DETAILS,
   COLUMN_TOTAL
@@ -130,9 +131,9 @@ extern gboolean open_finished;
 extern gboolean autostart;
 
 /**
- * Toggle, Title and Artist Renderers
+ * Toggle, Title Artist and Composer Renderers
  */
-extern GtkCellRenderer *toggle_renderer, *title_renderer, *artist_renderer;
+extern GtkCellRenderer *toggle_renderer, *title_renderer, *artist_renderer, *composer_renderer;
 
 /**
  * Debug
