diff --git a/extras/conf/SRB2-22.cfg b/extras/conf/SRB2-22.cfg
index d936721b63e3bfcf63f4760308d26daab03da40b..99d2fa492264c793e0354b91ed7d4ad3a26ed96a 100644
--- a/extras/conf/SRB2-22.cfg
+++ b/extras/conf/SRB2-22.cfg
@@ -4218,6 +4218,15 @@ thingtypes
 			flags4text = "[4] Ignore gravity";
 			flags8text = "[8] Rotate 22.5° CCW";
 		}
+		557
+		{
+			arrow = 1;
+			title = "Diagonal Blue Spring";
+			sprite = "BSPRD2";
+			width = 16;
+			flags4text = "[4] Ignore gravity";
+			flags8text = "[8] Rotate 22.5° CCW";
+		}
 		558
 		{
 			arrow = 1;
diff --git a/src/p_mobj.c b/src/p_mobj.c
index 7fa51111d357dcf26b0fe4d4b20a1e7e6f0cece7..f1dc5d76058089bf5869bf75aab042ba61d671ee 100644
--- a/src/p_mobj.c
+++ b/src/p_mobj.c
@@ -11558,7 +11558,9 @@ You should think about modifying the deathmatch starts to take full advantage of
 
 	if (i == MT_ROSY)
 	{
-		if (mariomode)
+		if (!(gametype == GT_COOP || (mthing->options & MTF_EXTRA)))
+			return; // she doesn't hang out here
+		else if (mariomode)
 			i = MT_TOAD; // don't remove on penalty of death
 		else if (!(netgame || multiplayer) && players[consoleplayer].skin == 5)
 			return; // no doubles
@@ -12682,7 +12684,7 @@ ML_EFFECT5 : Don't stop thinking when too far away
 	{
 		if (mthing->options & MTF_AMBUSH)
 		{
-			if (i == MT_YELLOWDIAG || i == MT_REDDIAG)
+			if (i == MT_YELLOWDIAG || i == MT_REDDIAG || i == MT_BLUEDIAG)
 				mobj->angle += ANGLE_22h;
 
 			if (i == MT_YELLOWHORIZ || i == MT_REDHORIZ || i == MT_BLUEHORIZ)
@@ -12721,7 +12723,7 @@ ML_EFFECT5 : Don't stop thinking when too far away
 
 		if (mthing->options & MTF_OBJECTSPECIAL)
 		{
-			if (i == MT_YELLOWDIAG || i == MT_REDDIAG)
+			if (i == MT_YELLOWDIAG || i == MT_REDDIAG || i == MT_BLUEDIAG)
 				mobj->flags |= MF_NOGRAVITY;
 
 			if ((mobj->flags & MF_MONITOR) && mobj->info->speed != 0)