Index: Slim/Buttons/ScreenSaver.pm
===================================================================
--- Slim/Buttons/ScreenSaver.pm	(revision 9652)
+++ Slim/Buttons/ScreenSaver.pm	(working copy)
@@ -44,9 +44,9 @@
 			$client->update();
 
 			# pass along ir code to new mode if requested
-			if (defined $functarg && $functarg eq 'passback') {
+#			if (defined $functarg && $functarg eq 'passback') {
 				Slim::Hardware::IR::resendButton($client);
-			}
+#			}
 		}
 	);
 }
@@ -77,11 +77,6 @@
 	my $timeout = $client->prefGet("screensavertimeout");
 	my $irtime = Slim::Hardware::IR::lastIRTime($client);
 	
-	# if we are already in now playing, jump back screensaver is redundant and confusing
-	if ($saver eq 'screensaver' && $mode eq 'playlist') {
-		$saver = 'playlist'; 
-	}
-	
 	# dim the screen if we're not playing...  will restore brightness on next IR input.
 	# only ned to do this once, but its hard to ensure all cases, so it might be repeated.
 	if ( $timeout && $display->brightness() && 
@@ -102,7 +97,9 @@
 		# don't change modes when none (just dim) is the screensaver.
 	} elsif ($timeout && 
 			$irtime < $now - $timeout && 
-			$mode ne $saver &&
+			(($mode ne $saver) || 
+				# in case the saver is 'now playing' and we're browsing another song
+				($saver eq 'playlist' && !Slim::Buttons::Playlist::showingNowPlaying($client))) &&
 			$mode ne 'screensaver' && # just in case it falls into default, we dont want recursive pushModes
 			$mode ne 'block' &&
 			$client->power()) {
@@ -110,11 +107,10 @@
 		# we only go into screensaver mode if we've timed out 
 		# and we're not off or blocked
 		if ($saver eq 'playlist') {
-			if ($mode eq 'playlist') {
-				Slim::Buttons::Playlist::jump($client);
-			} else {
-				Slim::Buttons::Common::pushMode($client,'playlist');
+			if ($mode ne 'playlist') {
+				Slim::Buttons::Common::setMode($client,'playlist');
 			}
+			Slim::Buttons::Common::pushMode($client,'screensaver');
 		} else {
 			if (Slim::Buttons::Common::validMode($saver)) {
 				Slim::Buttons::Common::pushMode($client, $saver);