diff --git a/extras/conf/SRB2-22.cfg b/extras/conf/SRB2-22.cfg
index f316cd032713086ebe4f83e9a81445cc43947034..7a8f31d5a622c2bf2993b61e13c0ab68c138a410 100644
--- a/extras/conf/SRB2-22.cfg
+++ b/extras/conf/SRB2-22.cfg
@@ -3,6 +3,7 @@
 	For Sonic Robo Blast 2 Version 2.2
 	Contributors (alphabetical):
 	* Foxboy
+	* FuriousFox
 	* JJames19119
 	* Kalaron
 	* Kristos
@@ -44,27 +45,32 @@ formatinterface = "SRB2MapSetIO";
 //Sky textures for vanilla maps
 defaultskytextures
 {
-	SKY1 = "MAP01,MAP02,MAP03,MAP50,MAPA1,MAPA2,MAPA5,MAPA6,MAPA9,MAPAA,MAPAB,MAPAC,MAPAD,MAPAE,MAPAG,MAPAJ,MAPAK,MAPF0,MAPF1,MAPFA,MAPM0,MAPM8,MAPMA,MAPMB,MAPMC";
-	SKY4 = "MAP04,MAP06,MAP51,MAPF8,MAPM1";
-	SKY6 = "MAP05";
-	SKY7 = "MAP07,MAP08,MAP09,MAP52,MAPM2,MAPM5";
-	SKY10 = "MAP12,MAP53,MAPM3";
-	SKY11 = "MAP10,MAP11,MAP16,MAP55,MAPF2,MAPF5,MAPF6,MAPF9,MAPM7";
-	SKY13 = "MAP13,MAP54,MAPAS";
-	SKY21 = "MAPAF,MAPF7,MAPM4";
-	SKY22 = "MAP22,MAP23,MAP24,MAP25,MAP56,MAPAN,MAPAO,MAPF4,MAPM6";
-	SKY29 = "MAP58,MAPAV";
+	SKY1 = "MAP01,MAP02,MAP03,MAP33,MAP50,MAP60,MAPF0,MAPM0";
+	SKY2 = "MAPM7,MAPMB";
+	SKY4 = "MAP04,MAP06,MAP61,MAPF6,MAPM1";
+	SKY6 = "MAP05,MAP51,MAPMA";
+	SKY7 = "MAPM2,MAPM5";
+	SKY8 = "MAP07,MAP08,MAP09,MAP52,MAP62,MAPF1";
+	SKY10 = "MAP10,MAP12,MAP53,MAP63,MAPM3";
+	SKY11 = "MAP11,MAPF7";
+	SKY13 = "MAP13,MAP64";
+	SKY14 = "MAP14";
+	SKY15 = "MAP15,MAP54";
+	SKY17 = "MAP70";
+	SKY20 = "MAP32,MAP55,MAP65,MAPF2,MAPF5";
+	SKY21 = "MAPM4";
+	SKY22 = "MAP22,MAP23,MAP25,MAP26,MAP27,MAP56,MAP66,MAPF4,MAPM6";
 	SKY30 = "MAP30";
-	SKY35 = "MAP41";
-	SKY40 = "MAP40";
-	SKY55 = "MAPF3,MAPM9";
-	SKY66 = "MAPAT";
-	SKY99 = "MAP57";
-	SKY103 = "MAPA3,MAPA4,MAPAU";
-	SKY107 = "MAPA7,MAPA8";
-	SKY117 = "MAPAH,MAPAI";
-	SKY127 = "MAPAR";
-	SKY132 = "MAPAW";
+	SKY31 = "MAP31";
+	SKY35 = "MAP42";
+	SKY40 = "MAP41,MAP71,MAPM9";
+	SKY55 = "MAPF3,MAPM8";
+	SKY68 = "MAPF8";
+	SKY99 = "MAP57,MAPZ0";
+	SKY159 = "MAP16";
+	SKY172 = "MAP40";
+	SKY300 = "MAP72";
+	SKY301 = "MAP73";
 }
 
 // Default lump name for new map
@@ -90,9 +96,9 @@ skins
 	Sonic;
 	Tails;
 	Knuckles;
-	Metalsonic;
-	Fang;
 	Amy;
+	Fang;
+	Metalsonic;
 }
 
 // Gametypes
@@ -3422,7 +3428,7 @@ thingtypes
 		121
 		{
 			title = "Minus";
-			sprite = "MNUSA1";
+			sprite = "MNUSA0";
 			width = 24;
 			height = 32;
 		}
@@ -3457,6 +3463,13 @@ thingtypes
 			height = 34;
 			flags8text = "[8] Start on fire";
 		}
+		137
+		{
+			title = "Dragonbomber";
+			sprite = "DRABA1";
+			width = 28;
+			height = 48;
+		}
 		105
 		{
 			title = "Jetty-Syn Bomber";
@@ -5726,6 +5739,24 @@ thingtypes
 			width = 24;
 			height = 32;
 		}
+		1505
+		{
+			title = "Green Flame";
+			sprite = "CFLMA0E0";
+			width = 8;
+			height = 32;
+		}
+		1506
+		{
+			arrow = 1;
+			blocking = 2;
+			title = "Blue Gargoyle";
+			sprite = "BGARD1";
+			width = 16;
+			height = 40;
+			flags4text = "[4] Slides when pushed";
+			flags8text = "[8] Not pushable";
+		}
 	}
 
 	dreamhill
diff --git a/src/g_game.c b/src/g_game.c
index faaed13c732929d643908ea1f2e3f495ce3b940a..d0ea9728b52cc16b222696ed63fd9afcd8d28a00 100644
--- a/src/g_game.c
+++ b/src/g_game.c
@@ -2997,7 +2997,7 @@ boolean G_EnoughPlayersFinished(void)
 			continue;
 
 		total++;
-		if (players[i].pflags & PF_FINISHED)
+		if ((players[i].pflags & PF_FINISHED) || players[i].exiting)
 			exiting++;
 	}
 
diff --git a/src/hardware/hw_cache.c b/src/hardware/hw_cache.c
index 6eaafca6d0deec87da0404a1ecb508880e06494c..2d4704b8b1d55bf8127fd311f70c572e6fce0bcf 100644
--- a/src/hardware/hw_cache.c
+++ b/src/hardware/hw_cache.c
@@ -771,18 +771,25 @@ void HWR_InitTextureCache(void)
 	gr_textures2 = NULL;
 }
 
-
 // Callback function for HWR_FreeTextureCache.
 static void FreeMipmapColormap(INT32 patchnum, void *patch)
 {
-	GLPatch_t* const grpatch = patch;
+	GLPatch_t* const pat = patch;
 	(void)patchnum; //unused
-	while (grpatch->mipmap->nextcolormap)
+	while (pat->mipmap && pat->mipmap->nextcolormap) // The mipmap must be valid, obviously
 	{
-		GLMipmap_t *grmip = grpatch->mipmap->nextcolormap;
-		grpatch->mipmap->nextcolormap = grmip->nextcolormap;
-		if (grmip->grInfo.data) Z_Free(grmip->grInfo.data);
-		free(grmip);
+		// Confusing at first, but pat->mipmap->nextcolormap
+		// at the beginning of the loop is the first colormap
+		// from the linked list of colormaps
+		GLMipmap_t *next = pat->mipmap->nextcolormap;
+		// Set the first colormap
+		// to the one that comes after it
+		pat->mipmap->nextcolormap = next->nextcolormap;
+		// Free image data from memory
+		if (next->grInfo.data)
+			Z_Free(next->grInfo.data);
+		// Free the old colormap from memory
+		free(next);
 	}
 }
 
@@ -799,7 +806,7 @@ void HWR_FreeTextureCache(void)
 
 	// Alam: free the Z_Blocks before freeing it's users
 
-	// free all skin after each level: must be done after pfnClearMipMapCache!
+	// free all patch colormaps after each level: must be done after ClearMipMapCache!
 	for (i = 0; i < numwadfiles; i++)
 		M_AATreeIterate(wadfiles[i]->hwrcache, FreeMipmapColormap);
 
diff --git a/src/p_user.c b/src/p_user.c
index 7d7cc48c17508e8349729171bb159a91bafa30dd..8df21e58fa9ca6a093dda93888d2406dc01b190c 100644
--- a/src/p_user.c
+++ b/src/p_user.c
@@ -11470,7 +11470,7 @@ void P_PlayerThink(player_t *player)
 
 	if (player->pflags & PF_FINISHED)
 	{
-		if (cv_exitmove.value && !G_EnoughPlayersFinished())
+		if ((gametype == GT_COOP && cv_exitmove.value) && !G_EnoughPlayersFinished())
 			player->exiting = 0;
 		else
 			P_DoPlayerExit(player);
diff --git a/src/sounds.c b/src/sounds.c
index ba2402eb9119acf6b348b5d1505bb27cc4f66bf0..c9aff6edca7afd8dd8d82b4d2f62933975ee657c 100644
--- a/src/sounds.c
+++ b/src/sounds.c
@@ -92,7 +92,7 @@ sfxinfo_t S_sfx[NUMSFX] =
   {"pstop",  false, 100,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Crusher stomp"},
   {"steam1", false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Steam jet"}, // Tails 06-19-2001
   {"steam2", false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Steam jet"}, // Tails 06-19-2001
-  {"wbreak", false,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Wood breaking"},
+  {"wbreak",  true,  64,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Wood breaking"},
   {"ambmac", false,  60,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Machinery"},
   {"spsmsh", false,  60,  0, -1, NULL, 0,        -1,  -1, LUMPERROR, "Heavy impact"},