Index: src/Extensions/Banshee.NowPlaying/Makefile.am
===================================================================
--- src/Extensions/Banshee.NowPlaying/Makefile.am	(revision 4384)
+++ src/Extensions/Banshee.NowPlaying/Makefile.am	(working copy)
@@ -16,6 +16,7 @@
 	Banshee.NowPlaying/OverlayWindow.cs \
 	Banshee.NowPlaying/ScreensaverManager.cs \
 	Banshee.NowPlaying/VideoDisplay.cs \
+	Banshee.NowPlaying/VisualizationConfigBox.cs \
 	Banshee.NowPlaying/XOverlayVideoDisplay.cs
 
 RESOURCES =  \
Index: src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.mdp
===================================================================
--- src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.mdp	(revision 4384)
+++ src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying.mdp	(working copy)
@@ -24,6 +24,7 @@
     <File name="Banshee.NowPlaying/NowPlayingContents.cs" subtype="Code" buildaction="Compile" />
     <File name="Banshee.NowPlaying/NowPlayingTrackInfoDisplay.cs" subtype="Code" buildaction="Compile" />
     <File name="Resources/idle-logo.png" subtype="Code" buildaction="EmbedAsResource" />
+    <File name="Banshee.NowPlaying/VisualizationConfigBox.cs" subtype="Code" buildaction="Compile" />
   </Contents>
   <References>
     <ProjectReference type="Project" localcopy="True" refto="Banshee.Core" />
Index: src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/VisualizationConfigBox.cs
===================================================================
--- src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/VisualizationConfigBox.cs	(revision 0)
+++ src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/VisualizationConfigBox.cs	(revision 0)
@@ -0,0 +1,160 @@
+// 
+// VisualizationConfigBox.cs
+//
+// Author:
+//   Alexander Hixon <hixon.alexander@mediati.org>
+//
+// Copyright (C) 2008 Alexander Hixon
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+
+using Mono.Unix;
+using Gtk;
+
+using Banshee.ServiceStack;
+
+namespace Banshee.NowPlaying
+{
+    public class VisualizationConfigBox : HBox
+    {
+        private int height;
+        private int width;
+        private int fps;
+        private string vis_name;
+        private int vis_id;
+        
+        public string ActiveVisualizationName {
+            get { return vis_name; }
+        }
+        
+        public int ActiveVisualization {
+            get { return vis_id; }
+        }
+        
+        // These match both Totem and Rhythmbox.
+        private int [][] size_matrix = {
+            new int [] { 200, 150, 10 }, /* small */
+            new int [] { 320, 240, 20 }, /* normal */
+            new int [] { 640, 480, 25 }, /* large */
+            new int [] { 800, 600, 30 }  /* extra large */
+        };
+        
+        private int active_size = 1;
+        public int ActiveSize {
+            get { return active_size; }
+        }
+        
+        private string [] visualizations;
+        public string [] Visualizations {
+            get { return visualizations; }
+        }
+        
+        public VisualizationConfigBox ()
+        {
+            vis_id = 0;
+            UpdateQuality ();
+            
+            visualizations = ServiceManager.PlayerEngine.ActiveEngine.Visualizations;
+            if (visualizations != null && visualizations.Length > 0) {
+                BuildBox ();
+                vis_name = visualizations [vis_id];
+            }
+        }
+        
+        public VisualizationConfigBox (VisualizationConfigBox box)
+        {
+            active_size = box.ActiveSize;
+            vis_id = box.ActiveVisualization;
+            vis_name = box.ActiveVisualizationName;
+            visualizations = box.Visualizations;
+            
+            UpdateQuality ();
+            
+            if (visualizations != null && visualizations.Length > 0) {
+                BuildBox ();
+            }
+        }
+        
+        private void BuildBox ()
+        {
+            Label vis_label = new Label (Catalog.GetString ("Visualization:"));
+            vis_label.Show ();
+            
+            ComboBox vis_selection = ComboBox.NewText ();
+            foreach (string visualisation in visualizations) {
+                vis_selection.AppendText (visualisation);
+            }
+            
+            vis_selection.Active = vis_id;
+            vis_selection.Changed += OnVisualizationChanged;
+            vis_selection.Show ();
+            
+            Label quality_label = new Label (Catalog.GetString ("Quality:"));
+            quality_label.Show ();
+            
+            ComboBox quality_selection = ComboBox.NewText ();
+            quality_selection.AppendText (Catalog.GetString ("Small"));
+            quality_selection.AppendText (Catalog.GetString ("Normal"));
+            quality_selection.AppendText (Catalog.GetString ("Large"));
+            quality_selection.AppendText (Catalog.GetString ("Extra Large"));
+            quality_selection.Active = active_size;
+            quality_selection.Changed += OnQualityChanged;
+            quality_selection.Show ();
+            
+            /*Button fullscreen = new Button ("gtk-fullscreen");
+            fullscreen.Show ();*/
+            
+            PackStart (vis_label, false, false, 6);
+            PackStart (vis_selection, true, true, 6);
+            PackStart (quality_label, false, false, 0);
+            PackStart (quality_selection, false, false, 6);
+            /*PackStart (fullscreen, false, false, 6);*/
+        }
+        
+#region Callbacks
+        private void OnVisualizationChanged (object o, EventArgs args)
+        {
+            vis_id = (o as ComboBox).Active;
+            vis_name = visualizations [vis_id];
+            ServiceManager.PlayerEngine.ActiveEngine.SetCurrentVisualization (vis_name, width, height, fps);
+        }
+        
+        private void OnQualityChanged (object o, EventArgs args)
+        {
+            int idx = (o as ComboBox).Active;
+            active_size = idx;
+            UpdateQuality ();
+            
+            ServiceManager.PlayerEngine.ActiveEngine.SetCurrentVisualization (vis_name, width, height, fps);
+        }
+        
+        private void UpdateQuality ()
+        {
+            width = size_matrix [active_size][0];
+            height = size_matrix [active_size][1];
+            fps = size_matrix [active_size][2];
+        }
+#endregion
+    }
+}
+
Index: src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs
===================================================================
--- src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs	(revision 4384)
+++ src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingInterface.cs	(working copy)
@@ -46,7 +46,12 @@
         private FullscreenAdapter fullscreen_adapter;
         private ScreensaverManager screensaver;
         private NowPlayingContents contents;
+        private Hyena.Widgets.AnimatedVBox anim_vbox;
         
+        private VisualizationConfigBox vis_box;
+        private VisualizationConfigBox old_box;
+
+        
         public NowPlayingInterface ()
         {
             GtkElementsService service = ServiceManager.Get<GtkElementsService> ();
@@ -63,12 +68,22 @@
             video_window.Realize ();
             video_window.Add (contents);
             
+            vis_box = new VisualizationConfigBox ();
+            vis_box.BorderWidth = 3;
+            vis_box.Show ();
+            
+            anim_vbox = new Hyena.Widgets.AnimatedVBox ();
+            anim_vbox.StartPadding = 3;
+            anim_vbox.Show ();
+            
             frame = new Hyena.Widgets.RoundedFrame ();
             frame.SetFillColor (new Cairo.Color (0, 0, 0));
             frame.DrawBorder = false;
             frame.Show ();
             
+            ShowVisualizationBox ();
             PackStart (frame, true, true, 0);
+            PackStart (anim_vbox, false, false, 0);
             
             fullscreen_adapter = new FullscreenAdapter ();
             screensaver = new ScreensaverManager ();
@@ -108,6 +123,27 @@
             base.OnUnrealized ();
         }
 
+        public void ShowVisualizationBox ()
+        {
+            if (!anim_vbox.Contains (vis_box)) {
+                if (old_box != null) {
+                    vis_box = new VisualizationConfigBox (old_box);
+                    old_box.Dispose ();
+                }
+                
+                anim_vbox.Add (vis_box);
+            }
+        }
+        
+        public void HideVisualizationBox ()
+        {
+            if (anim_vbox.Contains (vis_box)) {
+                anim_vbox.Remove (vis_box, Hyena.Widgets.Easing.QuadraticOut);
+                old_box = vis_box;
+           }
+        }
+
+        
 #region Video Fullscreen Override
 
         private ViewActions.FullscreenHandler previous_fullscreen_handler;
Index: src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs
===================================================================
--- src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs	(revision 4384)
+++ src/Extensions/Banshee.NowPlaying/Banshee.NowPlaying/NowPlayingSource.cs	(working copy)
@@ -96,11 +96,17 @@
         private void CheckForSwitch ()
         {
             TrackInfo current_track = ServiceManager.PlaybackController.CurrentTrack;
-            if (current_track != null && transitioned_track != current_track && 
+            if (current_track != null &&  
                 (current_track.MediaAttributes & TrackMediaAttributes.VideoStream) != 0) {
-                ServiceManager.SourceManager.SetActiveSource (this);
+                if (transitioned_track != current_track) {
+                    ServiceManager.SourceManager.SetActiveSource (this);
+                }
+                
+                now_playing_interface.HideVisualizationBox ();
+            } else {
+                now_playing_interface.ShowVisualizationBox ();
             }
-
+            
             if ((current_track.MediaAttributes & TrackMediaAttributes.VideoStream) != 0) {
                 OnUserNotifyUpdated ();
             }
Index: src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs
===================================================================
--- src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs	(revision 4384)
+++ src/Core/Banshee.Services/Banshee.MediaEngine/PlayerEngine.cs	(working copy)
@@ -197,6 +197,11 @@
             OnEventChanged (PlayerEvent.TrackInfoUpdated);
         }
         
+        public virtual void SetCurrentVisualization (string name, int width, int height, int fps)
+        {
+        }
+
+        
         public TrackInfo CurrentTrack {
             get { return current_track; }
         }
@@ -258,5 +263,10 @@
         public virtual IntPtr VideoWindow {
             set { }
         }
+        
+        public virtual string [] Visualizations {
+            get { return null; }
+        }
+
     }
 }
Index: src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs
===================================================================
--- src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs	(revision 4384)
+++ src/Backends/Banshee.GStreamer/Banshee.GStreamer/PlayerEngine.cs	(working copy)
@@ -436,6 +436,30 @@
             set { bp_replaygain_set_enabled (handle, value); }
         }
         
+        public override void SetCurrentVisualization (string name, int width, int height, int fps)
+        {
+            bp_visualization_set_active (handle, name, width, height, fps);
+        }
+        
+        public override string [] Visualizations {
+            get {
+                // Yes, this is yucky, but it's *much* cleaner than trying
+                // to marshal string arrays nicely. :)
+                
+                string [] ret = null;
+                int count = bp_visualization_get_count (handle);
+                
+                if (count > 0) {
+                    ret = new string [count];
+                    for (int i = 0; i < count; i++) {
+                        ret [i] = bp_visualization_get_name (handle, i);
+                    }
+                }
+                
+                return ret;
+            }
+        }
+        
 #region Preferences
 
         private PreferenceBase replaygain_preference;
@@ -576,5 +600,14 @@
         
         [DllImport ("libbanshee")]
         private static extern bool bp_replaygain_get_enabled (HandleRef player);
+        
+        [DllImport ("libbanshee")]
+        private static extern void bp_visualization_set_active (HandleRef engine, string name, int width, int height, int fps);
+        
+        [DllImport ("libbanshee")]
+        private static extern int bp_visualization_get_count (HandleRef engine);
+        
+        [DllImport ("libbanshee")]
+        private static extern string bp_visualization_get_name (HandleRef engine, int count);
     }
 }
Index: libbanshee/banshee-player-visualization.c
===================================================================
--- libbanshee/banshee-player-visualization.c	(revision 0)
+++ libbanshee/banshee-player-visualization.c	(revision 0)
@@ -0,0 +1,185 @@
+//
+// banshee-player-visualization.c
+//
+// Authors:
+//   Alexander Hixon <ahixon@gnome.org>
+//
+// Copyright (C) 2008 Alexander Hixon
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#include "banshee-player-private.h"
+
+// Visualization defaults
+#define DEFAULT_FPS 20
+#define DEFAULT_WIDTH 320
+#define DEFAULT_HEIGHT 240
+
+// ---------------------------------------------------------------------------
+// Internal Functions
+// ---------------------------------------------------------------------------
+
+static gboolean
+_bp_filter_visualizations (GstPluginFeature * feature, gpointer data)
+{
+    GstElementFactory *f;
+
+    if (!GST_IS_ELEMENT_FACTORY (feature))
+        return FALSE;
+    f = GST_ELEMENT_FACTORY (feature);
+        if (!g_strrstr (gst_element_factory_get_klass (f), "Visualization"))
+    return FALSE;
+
+    return TRUE;
+}
+
+void
+_bp_visualization_pipeline_setup (BansheePlayer *player)
+{
+    GList *feature;
+    gchar *default_vis;
+	
+	player->visualizations = gst_registry_feature_filter(gst_registry_get_default(),
+                           _bp_filter_visualizations, FALSE, NULL);
+    
+    // Set first as default
+    if (player->visualizations != NULL && g_list_length (player->visualizations) > 0) {
+        feature = g_list_first (player->visualizations);
+        default_vis = GST_PLUGIN_FEATURE_NAME (GST_ELEMENT_FACTORY (feature->data));
+        bp_visualization_set_active (player, default_vis, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_FPS);
+    }
+}
+
+
+// ---------------------------------------------------------------------------
+// Public Functions
+// ---------------------------------------------------------------------------
+
+P_INVOKE void
+bp_visualization_set_active (BansheePlayer *player, const gchar *name, gint width, gint height, gint fps)
+{
+    bp_debug ("Setting active visualization: %s", name);
+    
+    GList *feature;
+    GstElementFactory *tmp;
+    GstElementFactory *fac = NULL;
+    GstElement *vis_bin;
+    GstElement *vis_element;
+    GstElement *vis_capsfilter;
+    GstPad *pad;
+    GstCaps *caps;
+    
+    if (player == NULL || name == NULL || player->visualizations == NULL) {
+        return;
+    }
+    
+    for (feature = player->visualizations; feature; feature = feature->next) {
+        tmp = GST_ELEMENT_FACTORY(feature->data);
+        if (!strcmp(GST_PLUGIN_FEATURE_NAME(tmp), name))
+            fac = tmp;
+    }
+    
+    vis_element = gst_element_factory_create (fac, "vis_element");
+    if (vis_element == NULL) {
+        return;
+    }
+    
+    vis_capsfilter = gst_element_factory_make("capsfilter", "vis_capsfilter");
+    g_return_if_fail(GST_IS_ELEMENT(vis_capsfilter));
+
+    vis_bin = gst_bin_new ("vis_bin");
+    g_return_if_fail(GST_IS_ELEMENT (vis_bin));
+
+    gst_bin_add_many(GST_BIN(vis_bin), vis_element, vis_capsfilter, NULL);
+
+    /* Sink ghostpad */
+    pad = gst_element_get_pad(vis_element, "sink");
+    gst_element_add_pad(vis_bin, gst_ghost_pad_new("sink", pad));
+    gst_object_unref(pad);
+
+    /* Source ghostpad, link with vis_element */
+    pad = gst_element_get_pad(vis_capsfilter, "src");
+    gst_element_add_pad(vis_bin, gst_ghost_pad_new("src", pad));
+    gst_element_link_pads(vis_element, "src", vis_capsfilter, "sink");
+    gst_object_unref (pad);
+
+    /* Get allowed output caps from visualization element */
+    pad = gst_element_get_pad(vis_element, "src");
+    caps = gst_pad_get_allowed_caps(pad);
+    gst_object_unref(pad);
+
+    /* Can we fixate ? */
+    if (caps && !gst_caps_is_fixed(caps)) {
+        guint i;
+
+        caps = gst_caps_make_writable(caps);
+
+        /* Get visualization size */
+        for (i = 0; i < gst_caps_get_size (caps); ++i) {
+            GstStructure *s = gst_caps_get_structure (caps, i);
+
+            /* Fixate */
+            gst_structure_fixate_field_nearest_int(s, "width", width);
+            gst_structure_fixate_field_nearest_int(s, "height", height);
+            gst_structure_fixate_field_nearest_fraction(s, "framerate", fps, 1);
+        }
+
+        /* set this */
+        g_object_set(vis_capsfilter, "caps", caps, NULL);
+    }
+    
+    if (vis_bin != NULL) {
+        g_object_set (G_OBJECT (player->playbin), "vis-plugin", vis_bin, NULL);
+    }
+}
+
+P_INVOKE gchar *
+bp_visualization_get_name (BansheePlayer *player, gint index)
+{
+    GList *feature;
+    gchar *ret;
+    
+    if (player == NULL || index < 0) {
+        return NULL;
+    }
+
+    feature = g_list_nth (player->visualizations, index);
+    if (feature != NULL) {
+        ret = g_strdup (GST_PLUGIN_FEATURE_NAME (GST_ELEMENT_FACTORY (feature->data)));
+    } else {
+        return NULL;
+    }
+    
+    //bp_debug ("Getting name of visualization %d: %s", index, ret);
+    
+    return ret;
+}
+
+P_INVOKE gint
+bp_visualization_get_count (BansheePlayer *player)
+{
+    if (player == NULL) {
+        return 0;
+    }
+    
+    return g_list_length (player->visualizations);
+}
+
Index: libbanshee/banshee-player.c
===================================================================
--- libbanshee/banshee-player.c	(revision 4384)
+++ libbanshee/banshee-player.c	(working copy)
@@ -106,6 +106,10 @@
         g_free (player->cdda_device);
     }
     
+    if (player->visualizations != NULL) {
+    	g_list_free (player->visualizations);
+    }
+    
     _bp_pipeline_destroy (player);
     _bp_missing_elements_destroy (player);
     
Index: libbanshee/banshee-player-pipeline.c
===================================================================
--- libbanshee/banshee-player-pipeline.c	(revision 4384)
+++ libbanshee/banshee-player-pipeline.c	(working copy)
@@ -32,6 +32,7 @@
 #include "banshee-player-equalizer.h"
 #include "banshee-player-missing-elements.h"
 #include "banshee-player-replaygain.h"
+#include "banshee-player-visualization.h"
 
 // ---------------------------------------------------------------------------
 // Private Functions
@@ -269,6 +270,7 @@
     // Now allow specialized pipeline setups
     _bp_cdda_pipeline_setup (player);
     _bp_video_pipeline_setup (player, bus);
+    _bp_visualization_pipeline_setup (player);
 
     return TRUE;
 }
Index: libbanshee/banshee-player-visualization.h
===================================================================
--- libbanshee/banshee-player-visualization.h	(revision 0)
+++ libbanshee/banshee-player-visualization.h	(revision 0)
@@ -0,0 +1,37 @@
+//
+// banshee-player-visualization.h
+//
+// Author:
+//   Alexander Hixon <ahixon@gnome.org>
+//
+// Copyright (C) 2008 Alexander Hixon
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+#ifndef _BANSHEE_PLAYER_VISUALIZATION_H
+#define _BANSHEE_PLAYER_VISUALIZATION_H
+
+#include "banshee-player-private.h"
+
+void _bp_visualization_pipeline_setup (BansheePlayer *player);
+void bp_visualization_set_active (BansheePlayer *player, const gchar *name, gint width, gint height, gint fps);
+
+#endif /* _BANSHEE_PLAYER_VISUALIZATION_H */
Index: libbanshee/banshee-player-private.h
===================================================================
--- libbanshee/banshee-player-private.h	(revision 4384)
+++ libbanshee/banshee-player-private.h	(working copy)
@@ -83,6 +83,7 @@
     GstElement *preamp;
     gint equalizer_status;
     gdouble current_volume;
+    GList *visualizations;
     
     // Pipeline/Playback State
     GMutex *mutex;
Index: libbanshee/Makefile.am
===================================================================
--- libbanshee/Makefile.am	(revision 4384)
+++ libbanshee/Makefile.am	(working copy)
@@ -19,6 +19,7 @@
 	banshee-player-pipeline.c \
 	banshee-player-replaygain.c \
 	banshee-player-video.c \
+	banshee-player-visualization.c \
 	banshee-ripper.c \
 	banshee-tagger.c \
 	banshee-transcoder.c
@@ -32,6 +33,7 @@
 	banshee-player-private.h \
 	banshee-player-replaygain.h \
 	banshee-player-video.h \
+	banshee-player-visualization.h \
 	banshee-tagger.h
 
 libbanshee_la_LIBADD = \
