Index: bindings/python/rb.override
===================================================================
--- bindings/python/rb.override	(revision 5904)
+++ bindings/python/rb.override	(working copy)
@@ -274,7 +274,7 @@
     gboolean playing = FALSE;
     GError *error = NULL;
 
-    rb_shell_player_get_playing(RB_SHELL_PLAYER(self->obj), &playing, &error);
+    rb_shell_player_get_playing(RB_SHELL_PLAYER(self->obj), &playing);
 
     if (pyg_error_check(&error))
         return NULL;
Index: shell/rb-shell.c
===================================================================
--- shell/rb-shell.c	(revision 5904)
+++ shell/rb-shell.c	(working copy)
@@ -2102,7 +2102,7 @@
 	char *elapsed_string;
 	GString *secondary;
 
-	rb_shell_player_get_playing (shell->priv->player_shell, &playing, NULL);
+	rb_shell_player_get_playing (shell->priv->player_shell, &playing);
 	elapsed_string = rb_shell_player_get_playing_time_string (shell->priv->player_shell);
 
 	secondary = g_string_sized_new (100);
@@ -2143,7 +2143,7 @@
 		gboolean playing;
 		char *title;
 
-		rb_shell_player_get_playing (shell->priv->player_shell, &playing, NULL);
+		rb_shell_player_get_playing (shell->priv->player_shell, &playing);
 
 		if (shell->priv->cached_title &&
 		    !strcmp (shell->priv->cached_title, window_title) &&
Index: shell/rb-shell-player.c
===================================================================
--- shell/rb-shell-player.c	(revision 5904)
+++ shell/rb-shell-player.c	(working copy)
@@ -1556,7 +1556,8 @@
 rb_shell_player_open_location (RBShellPlayer *player,
 			       RhythmDBEntry *entry,
 			       PlaybackStartType play_type,
-			       GError **error)
+			       GError **error,
+			       gboolean open_and_play)
 {
 	char *location;
 	gboolean was_playing;
@@ -1603,7 +1604,13 @@
 		rhythmdb_entry_ref (entry);
 		ret = ret && rb_player_open (player->priv->mmplayer, location, entry, (GDestroyNotify) rhythmdb_entry_unref, error);
 
+		// in order to support consistancy of the "playing" state in the next/previous functionality
+		// a conditional statement is placed here to only assert a play on when requested
 		ret = ret && rb_player_play (player->priv->mmplayer, crossfade, error);
+		
+		if(!open_and_play){
+			rb_player_pause (player->priv->mmplayer);
+		}
 	}
 
 	g_free (location);
@@ -1681,7 +1688,8 @@
 				   RhythmDBEntry *entry,
 				   gboolean out_of_order,
 				   gboolean wait_for_eos,
-				   GError **error)
+				   GError **error,
+				   gboolean open_and_play)
 {
 	GError *tmp_error = NULL;
 	GValue val = {0,};
@@ -1724,7 +1732,7 @@
 		}
 	}
 
-	if (rb_shell_player_open_location (player, entry, play_type, &tmp_error) == FALSE) {
+	if (rb_shell_player_open_location (player, entry, play_type, &tmp_error, open_and_play) == FALSE) {
 		goto lose;
 	}
 
@@ -2031,6 +2039,7 @@
 {
 	RhythmDBEntry *entry = NULL;
 	RBSource *new_source;
+	gboolean playing = TRUE;
 
 	if (player->priv->current_playing_source == NULL) {
 		g_set_error (error,
@@ -2083,7 +2092,16 @@
 			swap_playing_source (player, new_source);
 
 		player->priv->jump_to_playing_entry = TRUE;
-		if (!rb_shell_player_set_playing_entry (player, entry, FALSE, FALSE, error)) {
+		
+		// check to see if the player is currently in the the state of playing
+		// so that we can continute to play if that is the case or simply move
+		// to the next entry without playing if not
+		if(!rb_shell_player_get_playing (player, &playing)) {
+			// if we do succeed in getting the state, let us assume we wish to play it
+			playing = TRUE;
+		}
+		
+		if (!rb_shell_player_set_playing_entry (player, entry, FALSE, FALSE, error, playing)) {
 			rhythmdb_entry_unref (entry);
 			return FALSE;
 		}
@@ -2108,6 +2126,7 @@
 	RBSource *new_source = NULL;
 	RhythmDBEntry *entry = NULL;
 	gboolean rv = TRUE;
+	gboolean playing = TRUE;
 
 	if (player->priv->source == NULL)
 		return TRUE;
@@ -2172,16 +2191,25 @@
 			rb_play_order_go_next (player->priv->queue_play_order);
 		}
 	}
-
+	
+	// check to see if the player is currently in the the state of playing
+	// so that we can continute to play if that is the case or simply move
+	// to the next entry without playing if not
+	if(!rb_shell_player_get_playing (player, &playing)) {
+		// if we do succeed in getting the state, let us assume we wish to play it
+		playing = TRUE;
+	}
+	
 	/* play the new entry */
 	if (entry != NULL) {
 		/* if the entry view containing the playing entry changed, update it */
 		if (new_source != player->priv->current_playing_source)
 			swap_playing_source (player, new_source);
 
-		player->priv->jump_to_playing_entry = TRUE;
-		if (!rb_shell_player_set_playing_entry (player, entry, FALSE, from_eos, error))
-			rv = FALSE;
+			player->priv->jump_to_playing_entry = TRUE;
+			if (!rb_shell_player_set_playing_entry (player, entry, FALSE, from_eos, error, playing))
+				rv = FALSE;
+		
 	} else {
 		g_set_error (error,
 			     RB_SHELL_PLAYER_ERROR,
@@ -2200,6 +2228,7 @@
 			rb_play_order_set_playing_entry (player->priv->play_order, NULL);
 		}
 	}
+	
 
 	if (entry != NULL) {
 		rhythmdb_entry_unref (entry);
@@ -2279,7 +2308,7 @@
 	rb_shell_player_set_playing_source (player, source);
 
 	player->priv->jump_to_playing_entry = FALSE;
-	if (!rb_shell_player_set_playing_entry (player, entry, TRUE, FALSE, &error)) {
+	if (!rb_shell_player_set_playing_entry (player, entry, TRUE, FALSE, &error, TRUE)) {
 		rb_shell_player_error (player, FALSE, error);
 		g_clear_error (&error);
 	}
@@ -2419,7 +2448,7 @@
 					swap_playing_source (player, new_source);
 
 				player->priv->jump_to_playing_entry = TRUE;
-				if (!rb_shell_player_set_playing_entry (player, entry, out_of_order, FALSE, error))
+				if (!rb_shell_player_set_playing_entry (player, entry, out_of_order, FALSE, error, TRUE))
 					ret = FALSE;
 			}
 		} else {
@@ -2761,7 +2790,7 @@
 	}
 
 	player->priv->jump_to_playing_entry = jump_to_entry;
-	if (!rb_shell_player_set_playing_entry (player, entry, TRUE, FALSE, &error)) {
+	if (!rb_shell_player_set_playing_entry (player, entry, TRUE, FALSE, &error, TRUE)) {
 		rb_shell_player_error (player, FALSE, error);
 		g_clear_error (&error);
 	}
@@ -2807,7 +2836,7 @@
 		rb_play_order_go_next (porder);
 
 		player->priv->jump_to_playing_entry = TRUE;	/* ? */
-		if (!rb_shell_player_set_playing_entry (player, entry, TRUE, FALSE, &error)) {
+		if (!rb_shell_player_set_playing_entry (player, entry, TRUE, FALSE, &error, TRUE)) {
 			rb_shell_player_error (player, FALSE, error);
 			g_clear_error (&error);
 		}
@@ -3250,8 +3279,7 @@
  **/
 gboolean
 rb_shell_player_get_playing (RBShellPlayer *player,
-			     gboolean *playing,
-			     GError **error)
+			     gboolean *playing)
 {
 	if (playing != NULL)
 		*playing = rb_player_playing (player->priv->mmplayer);
@@ -3675,7 +3703,7 @@
 	rb_shell_player_set_playing_entry (retry_data->player,
 					   retry_data->entry,
 					   FALSE, FALSE,
-					   &error);
+					   &error, TRUE);
 	if (error != NULL) {
 		rb_shell_player_error (retry_data->player, FALSE, error);
 		g_clear_error (&error);
Index: shell/rb-shell-player.h
===================================================================
--- shell/rb-shell-player.h	(revision 5904)
+++ shell/rb-shell-player.h	(working copy)
@@ -127,8 +127,7 @@
 long			rb_shell_player_get_playing_song_duration (RBShellPlayer *player);
 
 gboolean		rb_shell_player_get_playing	(RBShellPlayer *player,
-							 gboolean *playing,
-							 GError **error);
+							 gboolean *playing);
 
 gboolean		rb_shell_player_get_playing_path(RBShellPlayer *player,
 							 const gchar **path,
Index: plugins/lirc/rb-lirc-plugin.c
===================================================================
--- plugins/lirc/rb-lirc-plugin.c	(revision 5904)
+++ plugins/lirc/rb-lirc-plugin.c	(working copy)
@@ -137,7 +137,7 @@
 			break;
 		} else if (strcmp (str, RB_IR_COMMAND_PLAY) == 0) {
 			gboolean playing;
-			rb_shell_player_get_playing (plugin->shell_player, &playing, NULL);
+			rb_shell_player_get_playing (plugin->shell_player, &playing);
 			if (playing == FALSE)
 				rb_shell_player_playpause (plugin->shell_player, FALSE, NULL);
 		} else if (strcmp (str, RB_IR_COMMAND_PAUSE) == 0) {
