diff --git a/modules/calendar/e-cal-shell-content.c b/modules/calendar/e-cal-shell-content.c
index 689b5cf..6c9bbfb 100644
--- a/modules/calendar/e-cal-shell-content.c
+++ b/modules/calendar/e-cal-shell-content.c
@@ -24,6 +24,8 @@
 #include <string.h>
 #include <glib/gi18n.h>
 
+#include <libedataserverui/e-source-selector.h>
+
 #include "e-util/e-binding.h"
 #include "e-util/gconf-bridge.h"
 #include "widgets/menus/gal-view-etable.h"
@@ -38,6 +40,8 @@
 #include "calendar/gui/e-day-view.h"
 #include "calendar/gui/e-week-view.h"
 
+#include "e-cal-shell-sidebar.h"
+
 #define E_CAL_SHELL_CONTENT_GET_PRIVATE(obj) \
 	(G_TYPE_INSTANCE_GET_PRIVATE \
 	((obj), E_TYPE_CAL_SHELL_CONTENT, ECalShellContentPrivate))
@@ -211,6 +215,16 @@ cal_shell_content_get_focus_location (ECalShellContent *cal_shell_content)
 }
 
 static void
+primary_selection_changed_cb (GnomeCalendar *gcal, ESourceSelector *selector)
+{
+	ESource *source;
+
+	source = e_source_selector_peek_primary_selection (selector);
+	if (source)
+		gnome_calendar_set_default_source (gcal, source);
+}
+
+static void
 cal_shell_content_set_property (GObject *object,
                                 guint property_id,
                                 const GValue *value,
@@ -321,6 +335,7 @@ cal_shell_content_constructed (GObject *object)
 	EShellWindow *shell_window;
 	EShellContent *foreign_content;
 	EShellView *foreign_view;
+	ESourceSelector *selector;
 	GnomeCalendar *calendar;
 	GalViewInstance *view_instance;
 	GConfBridge *bridge;
@@ -407,6 +422,15 @@ cal_shell_content_constructed (GObject *object)
 		priv->calendar, "view",
 		priv->notebook, "page");
 
+	selector = e_cal_shell_sidebar_get_selector (E_CAL_SHELL_SIDEBAR (e_shell_view_get_shell_sidebar (shell_view)));
+	g_signal_connect_swapped (
+		selector, "primary-selection-changed",
+		G_CALLBACK (primary_selection_changed_cb),
+		calendar);
+
+	/* update internal structures too */
+	primary_selection_changed_cb (calendar, selector);
+
 	container = priv->vpaned;
 
 	widget = gtk_vbox_new (FALSE, 0);
diff --git a/shell/e-shell-view.c b/shell/e-shell-view.c
index 0bfa17c..10da223 100644
--- a/shell/e-shell-view.c
+++ b/shell/e-shell-view.c
@@ -407,14 +407,14 @@ shell_view_constructed (GObject *object)
 	shell_view->priv->shell_taskbar = g_object_ref_sink (widget);
 	gtk_widget_show (widget);
 
-	widget = shell_view_class->new_shell_content (shell_view);
-	shell_view->priv->shell_content = g_object_ref_sink (widget);
-	gtk_widget_show (widget);
-
 	widget = shell_view_class->new_shell_sidebar (shell_view);
 	shell_view->priv->shell_sidebar = g_object_ref_sink (widget);
 	gtk_widget_show (widget);
 
+	widget = shell_view_class->new_shell_content (shell_view);
+	shell_view->priv->shell_content = g_object_ref_sink (widget);
+	gtk_widget_show (widget);
+
 	/* Size group should be safe to unreference now. */
 	g_object_unref (shell_view->priv->size_group);
 	shell_view->priv->size_group = NULL;
