diff --git a/src/music_track_listener.py b/src/music_track_listener.py
index 51446ddff2cc35f8c2911c3796654bf0911f351d..525ccd269a96cd747dd2a88308392c8fe3411988 100644
--- a/src/music_track_listener.py
+++ b/src/music_track_listener.py
@@ -40,32 +40,77 @@ class MusicTrackListener(gobject.GObject):
 		bus.add_signal_receiver(self._rhythmbox_music_track_change_cb,
 			'playingUriChanged', 'org.gnome.Rhythmbox.Player')
 
-	def _muine_music_track_change_cb(self, arg):
-		d = dict((x.strip() for x in  s1.split(':', 1)) for s1 in arg.split('\n'))
+	def _muine_properties_extract(self, song_string):
+		d = dict((x.strip() for x in  s1.split(':', 1)) for s1 in song_string.split('\n'))
 		info = MusicTrackInfo()
 		info.title = d['title']
 		info.album = d['album']
 		info.artist = d['artist']
 		info.duration = int(d['duration'])
 		info.track_number = int(d['track_number'])
+		return info
+
+	def _muine_music_track_change_cb(self, arg):
+		info = self._muine_properties_extract(arg)
 		self.emit('music-track-changed', info)
 
-	def _rhythmbox_music_track_change_cb(self, uri):
-		bus = dbus.SessionBus()
-		rbshellobj = bus.get_object('org.gnome.Rhythmbox', '/org/gnome/Rhythmbox/Shell')
-		rbshell = rbshell = dbus.Interface(rbshellobj, 'org.gnome.Rhythmbox.Shell')
-		props = rbshell.getSongProperties(uri)
+	def _rhythmbox_properties_extract(self, props):
 		info = MusicTrackInfo()
 		info.title = props['title']
 		info.album = props['album']
 		info.artist = props['artist']
 		info.duration = int(props['duration'])
 		info.track_number = int(props['track-number'])
+		return info
+	
+	def _rhythmbox_music_track_change_cb(self, uri):
+		bus = dbus.SessionBus()
+		rbshellobj = bus.get_object('org.gnome.Rhythmbox', '/org/gnome/Rhythmbox/Shell')
+		rbshell = dbus.Interface(rbshellobj, 'org.gnome.Rhythmbox.Shell')
+		props = rbshell.getSongProperties(uri)
+		info = self._rhythmbox_properties_extract(props)
 		self.emit('music-track-changed', info)
 
+	def get_playing_track(self):
+		'''Return a MusicTrackInfo for the currently playing
+		song, or None if no song is playing'''
+
+		bus = dbus.SessionBus()
+
+		## Check Muine playing track
+		if dbus.dbus_bindings.bus_name_has_owner(bus.get_connection(),
+			'org.gnome.Muine'):
+			obj = bus.get_object('org.gnome.Muine', '/org/gnome/Muine/Player')
+			player = dbus.Interface(obj, 'org.gnome.Muine.Player')
+			if player.GetPlaying():
+				song_string = player.GetCurrentSong()
+				song = self._muine_properties_extract(song_string)
+				return song
+
+		## Check Rhythmbox playing song
+		if dbus.dbus_bindings.bus_name_has_owner(bus.get_connection(),
+			'org.gnome.Rhythmbox'):
+			rbshellobj = bus.get_object('org.gnome.Rhythmbox', '/org/gnome/Rhythmbox/Shell')
+			player = dbus.Interface(
+				bus.get_object('org.gnome.Rhythmbox', '/org/gnome/Rhythmbox/Player'),
+				'org.gnome.Rhythmbox.Player')
+			rbshell = dbus.Interface(rbshellobj, 'org.gnome.Rhythmbox.Shell')
+			uri = player.getPlayingUri()
+			props = rbshell.getSongProperties(uri)
+			info = self._rhythmbox_properties_extract(props)
+			return info
+
+		return None
+
 # here we test :)
 if __name__ == '__main__':
 	def music_track_change_cb(listener, music_track_info):
 		print music_track_info.title
-	MusicTrackListener.get().connect('music-track-changed', music_track_change_cb)
+	listener = MusicTrackListener.get()
+	listener.connect('music-track-changed', music_track_change_cb)
+	track = listener.get_playing_track()
+	if track is None:
+		print 'Now not playing anything'
+	else:
+		print 'Now playing: "%s" by %s' % (track.title, track.artist)
 	gobject.MainLoop().run()
diff --git a/src/roster_window.py b/src/roster_window.py
index 9c343e6130e65328c6f12660ff735710c045f553..1707eeb3a97d391a6aa48b27713977da19199433 100644
--- a/src/roster_window.py
+++ b/src/roster_window.py
@@ -2394,6 +2394,8 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
 				listener = MusicTrackListener.get()
 				self._music_track_changed_signal = listener.connect(
 					'music-track-changed', self._music_track_changed)
+				track = listener.get_playing_track()
+					self._music_track_changed(listener, track)
 		else:
 			if self._music_track_changed_signal is not None:
 				listener = MusicTrackListener.get()
@@ -3900,8 +3902,11 @@ _('If "%s" accepts this request you will know his or her status.') % jid)
 		self.draw_roster()
 
 		## Music Track notifications
-		self.enable_syncing_status_msg_from_current_music_track(gajim.config.get(
-			'set_status_msg_from_current_music_track'))
+		## FIXME: we use a timeout because changing status of
+		## accounts has no effect until they are connected.
+		gobject.timeout_add(1000,
+			self.enable_syncing_status_msg_from_current_music_track,
+			gajim.config.get('set_status_msg_from_current_music_track'))
 
 		if gajim.config.get('show_roster_on_startup'):
 			self.window.show_all()