diff --git a/src/b_bot.c b/src/b_bot.c
index 0f2c80d55b73f7515be7afbe135d27f34de1f79e..9565b0e0928ef08672977fa638af386527253f6d 100644
--- a/src/b_bot.c
+++ b/src/b_bot.c
@@ -212,7 +212,7 @@ boolean B_CheckRespawn(player_t *player)
 
 	// Check if Sonic is busy first.
 	// If he's doing any of these things, he probably doesn't want to see us.
-	if (sonic->player->pflags & (PF_GLIDING|PF_SLIDING|PF_NIGHTSMODE)
+	if (sonic->player->pflags & (PF_GLIDING|PF_SLIDING|PF_BOUNCING|PF_NIGHTSMODE)
 	|| (sonic->player->panim != PA_IDLE && sonic->player->panim != PA_WALK)
 	|| (sonic->player->powers[pw_carry]))
 		return false;
diff --git a/src/r_things.c b/src/r_things.c
index fcc4d310373d88af50e26b706916b0c7d9a676f8..d5e3689594d96fba57257e24bfe21f001c2b85d6 100644
--- a/src/r_things.c
+++ b/src/r_things.c
@@ -2627,16 +2627,16 @@ void SetPlayerSkinByNum(INT32 playernum, INT32 skinnum)
 				player->mo->color = newcolor;
 			P_SetScale(player->mo, player->mo->scale);
 			player->mo->radius = FixedMul(skin->radius, player->mo->scale);
+
+			P_SetPlayerMobjState(player->mo, player->mo->state-states); // Prevent visual errors when switching between skins with differing number of frames
 		}
 		return;
 	}
-	else if (skinnum >= 0 && skinnum < numskins)
-		skinnum = 255; // Cheeky emulation.
 
 	if (P_IsLocalPlayer(player))
-		CONS_Alert(CONS_WARNING, M_GetText("Skin %d not found\n"), skinnum);
+		CONS_Alert(CONS_WARNING, M_GetText("Requested skin not found\n"));
 	else if(server || adminplayer == consoleplayer)
-		CONS_Alert(CONS_WARNING, "Player %d (%s) skin %d not found\n", playernum, player_names[playernum], skinnum);
+		CONS_Alert(CONS_WARNING, "Player %d (%s) skin not found\n", playernum, player_names[playernum]);
 	SetPlayerSkinByNum(playernum, 0); // not found put the sonic skin
 }