diff --git a/src/dehacked.c b/src/dehacked.c
index eedffb6b1d5530f0af011c19b8b59e4b67ecd273..dba759894ab2e857e14dd3d1d34fc508ba7136e4 100644
--- a/src/dehacked.c
+++ b/src/dehacked.c
@@ -769,7 +769,8 @@ static void readthing(MYFILE *f, INT32 num)
 static void readskincolor(MYFILE *f, INT32 num)
 {
 	char *s = Z_Malloc(MAXLINELEN, PU_STATIC, NULL);
-	char *word, *word2, *word3;
+	char *word = s;
+	char *word2;
 	char *tmp;
 
 	Color_cons_t[num].value = num;
@@ -781,32 +782,31 @@ static void readskincolor(MYFILE *f, INT32 num)
 			if (s[0] == '\n')
 				break;
 
+			// First remove trailing newline, if there is one
+			tmp = strchr(s, '\n');
+			if (tmp)
+				*tmp = '\0';
+
 			tmp = strchr(s, '#');
 			if (tmp)
 				*tmp = '\0';
 			if (s == tmp)
 				continue; // Skip comment lines, but don't break.
 
-			word = strtok(s, " ");
-			if (word)
-				strupr(word);
+			// Get the part before the " = "
+			tmp = strchr(s, '=');
+			if (tmp)
+				*(tmp-1) = '\0';
 			else
 				break;
+			strupr(word);
 
-			word2 = strtok(NULL, " = ");
-			if (word2) {
-				word3 = Z_StrDup(word2);
-				strupr(word2);
-			} else
-				break;
-			if (word2[strlen(word2)-1] == '\n')
-				word2[strlen(word2)-1] = '\0';
-			if (word3[strlen(word3)-1] == '\n')
-				word3[strlen(word3)-1] = '\0';
+			// Now get the part after
+			word2 = tmp += 2;
 
 			if (fastcmp(word, "NAME"))
 			{
-				deh_strlcpy(skincolors[num].name, word3,
+				deh_strlcpy(skincolors[num].name, word2,
 					sizeof (skincolors[num].name), va("Skincolor %d: name", num));
 			}
 			else if (fastcmp(word, "RAMP"))
diff --git a/src/p_enemy.c b/src/p_enemy.c
index 75d32c50616da692ed88c94a7e736126823f4f77..146c8f1aac484c3304e608eec6c30ba8255a40c9 100644
--- a/src/p_enemy.c
+++ b/src/p_enemy.c
@@ -5213,7 +5213,7 @@ void A_SignPlayer(mobj_t *actor)
 
 	actor->tracer->color = signcolor;
 	if (signcolor && signcolor < numskincolors)
-		signframe += (15 - skincolors[signcolor].invshade);
+		signframe += (15 - skincolors[facecolor].invshade);
 	actor->tracer->frame = signframe;
 }