diff --git a/src/p_saveg.c b/src/p_saveg.c
index 4d958f924712cee32ad1b29467fcda62a58b8eaa..ffca42cd36c46e045c9a452b3d4c3d0f36e7649a 100644
--- a/src/p_saveg.c
+++ b/src/p_saveg.c
@@ -2281,16 +2281,23 @@ static void SavePlaneDisplaceThinker(const thinker_t *th, const UINT8 type)
 	WRITEUINT8(save_p, ht->type);
 }
 
-static inline void SaveDynamicSlopeThinker(const thinker_t *th, const UINT8 type)
+static inline void SaveDynamicLineSlopeThinker(const thinker_t *th, const UINT8 type)
 {
-	const dynplanethink_t* ht = (const void*)th;
+	const dynlineplanethink_t* ht = (const void*)th;
 
 	WRITEUINT8(save_p, type);
 	WRITEUINT8(save_p, ht->type);
 	WRITEUINT32(save_p, SaveSlope(ht->slope));
 	WRITEUINT32(save_p, SaveLine(ht->sourceline));
 	WRITEFIXED(save_p, ht->extent);
+}
+
+static inline void SaveDynamicVertexSlopeThinker(const thinker_t *th, const UINT8 type)
+{
+	const dynvertexplanethink_t* ht = (const void*)th;
 
+	WRITEUINT8(save_p, type);
+	WRITEUINT32(save_p, SaveSlope(ht->slope));
 	WRITEMEM(save_p, ht->tags, sizeof(ht->tags));
     WRITEMEM(save_p, ht->vex, sizeof(ht->vex));
 }
@@ -2617,12 +2624,12 @@ static void P_NetArchiveThinkers(void)
 			}
 			else if (th->function.acp1 == (actionf_p1)T_DynamicSlopeLine)
 			{
-				SaveDynamicSlopeThinker(th, tc_dynslopeline);
+				SaveDynamicLineSlopeThinker(th, tc_dynslopeline);
 				continue;
 			}
 			else if (th->function.acp1 == (actionf_p1)T_DynamicSlopeVert)
 			{
-				SaveDynamicSlopeThinker(th, tc_dynslopevert);
+				SaveDynamicVertexSlopeThinker(th, tc_dynslopevert);
 				continue;
 			}
 #ifdef PARANOIA
@@ -3447,15 +3454,24 @@ static inline thinker_t* LoadPlaneDisplaceThinker(actionf_p1 thinker)
 	return &ht->thinker;
 }
 
-static inline thinker_t* LoadDynamicSlopeThinker(actionf_p1 thinker)
+static inline thinker_t* LoadDynamicLineSlopeThinker(actionf_p1 thinker)
 {
-	dynplanethink_t* ht = Z_Malloc(sizeof(*ht), PU_LEVSPEC, NULL);
+	dynlineplanethink_t* ht = Z_Malloc(sizeof(*ht), PU_LEVSPEC, NULL);
 	ht->thinker.function.acp1 = thinker;
 
 	ht->type = READUINT8(save_p);
 	ht->slope = LoadSlope(READUINT32(save_p));
 	ht->sourceline = LoadLine(READUINT32(save_p));
 	ht->extent = READFIXED(save_p);
+	return &ht->thinker;
+}
+
+static inline thinker_t* LoadDynamicVertexSlopeThinker(actionf_p1 thinker)
+{
+	dynvertexplanethink_t* ht = Z_Malloc(sizeof(*ht), PU_LEVSPEC, NULL);
+	ht->thinker.function.acp1 = thinker;
+
+	ht->slope = LoadSlope(READUINT32(save_p));
 	READMEM(save_p, ht->tags, sizeof(ht->tags));
 	READMEM(save_p, ht->vex, sizeof(ht->vex));
 	return &ht->thinker;
@@ -3770,11 +3786,11 @@ static void P_NetUnArchiveThinkers(void)
 					break;
 
 				case tc_dynslopeline:
-					th = LoadDynamicSlopeThinker((actionf_p1)T_DynamicSlopeLine);
+					th = LoadDynamicLineSlopeThinker((actionf_p1)T_DynamicSlopeLine);
 					break;
 
 				case tc_dynslopevert:
-					th = LoadDynamicSlopeThinker((actionf_p1)T_DynamicSlopeVert);
+					th = LoadDynamicVertexSlopeThinker((actionf_p1)T_DynamicSlopeVert);
 					break;
 
 				case tc_scroll:
diff --git a/src/p_slopes.c b/src/p_slopes.c
index c0cc3a98e693fe3b5bd12331c8a452b9101e7ba4..415642abfc219cdc9dfafa69f39294770ef2f7a2 100644
--- a/src/p_slopes.c
+++ b/src/p_slopes.c
@@ -121,7 +121,7 @@ static void ReconfigureViaConstants (pslope_t *slope, const fixed_t a, const fix
 }
 
 /// Recalculate dynamic slopes.
-void T_DynamicSlopeLine (dynplanethink_t* th)
+void T_DynamicSlopeLine (dynlineplanethink_t* th)
 {
 	pslope_t* slope = th->slope;
 	line_t* srcline = th->sourceline;
@@ -161,7 +161,7 @@ void T_DynamicSlopeLine (dynplanethink_t* th)
 }
 
 /// Mapthing-defined
-void T_DynamicSlopeVert (dynplanethink_t* th)
+void T_DynamicSlopeVert (dynvertexplanethink_t* th)
 {
 	pslope_t* slope = th->slope;
 
@@ -180,28 +180,26 @@ void T_DynamicSlopeVert (dynplanethink_t* th)
 	ReconfigureViaVertexes(slope, th->vex[0], th->vex[1], th->vex[2]);
 }
 
-static inline void P_AddDynSlopeThinker (pslope_t* slope, dynplanetype_t type, line_t* sourceline, fixed_t extent, const INT16 tags[3], const vector3_t vx[3])
+static inline void P_AddDynLineSlopeThinker (pslope_t* slope, dynplanetype_t type, line_t* sourceline, fixed_t extent)
 {
-	dynplanethink_t* th = Z_Calloc(sizeof (*th), PU_LEVSPEC, NULL);
-	switch (type)
-	{
-	case DP_VERTEX:
-		th->thinker.function.acp1 = (actionf_p1)T_DynamicSlopeVert;
-		memcpy(th->tags, tags, sizeof(th->tags));
-		memcpy(th->vex, vx, sizeof(th->vex));
-		break;
-	default:
-		th->thinker.function.acp1 = (actionf_p1)T_DynamicSlopeLine;
-		th->sourceline = sourceline;
-		th->extent = extent;
-	}
-
+	dynlineplanethink_t* th = Z_Calloc(sizeof (*th), PU_LEVSPEC, NULL);
+	th->thinker.function.acp1 = (actionf_p1)T_DynamicSlopeLine;
 	th->slope = slope;
 	th->type = type;
-
+	th->sourceline = sourceline;
+	th->extent = extent;
 	P_AddThinker(THINK_DYNSLOPE, &th->thinker);
 }
 
+static inline void P_AddDynVertexSlopeThinker (pslope_t* slope, const INT16 tags[3], const vector3_t vx[3])
+{
+	dynvertexplanethink_t* th = Z_Calloc(sizeof (*th), PU_LEVSPEC, NULL);
+	th->thinker.function.acp1 = (actionf_p1)T_DynamicSlopeVert;
+	th->slope = slope;
+	memcpy(th->tags, tags, sizeof(th->tags));
+	memcpy(th->vex, vx, sizeof(th->vex));
+	P_AddThinker(THINK_DYNSLOPE, &th->thinker);
+}
 
 /// Create a new slope and add it to the slope list.
 static inline pslope_t* Slope_Add (const UINT8 flags)
@@ -358,7 +356,7 @@ static void line_SpawnViaLine(const int linenum, const boolean spawnthinker)
 			P_CalculateSlopeNormal(fslope);
 
 			if (spawnthinker && (flags & SL_DYNAMIC))
-				P_AddDynSlopeThinker(fslope, DP_FRONTFLOOR, line, extent, NULL, NULL);
+				P_AddDynLineSlopeThinker(fslope, DP_FRONTFLOOR, line, extent);
 		}
 		if(frontceil)
 		{
@@ -375,7 +373,7 @@ static void line_SpawnViaLine(const int linenum, const boolean spawnthinker)
 			P_CalculateSlopeNormal(cslope);
 
 			if (spawnthinker && (flags & SL_DYNAMIC))
-				P_AddDynSlopeThinker(cslope, DP_FRONTCEIL, line, extent, NULL, NULL);
+				P_AddDynLineSlopeThinker(cslope, DP_FRONTCEIL, line, extent);
 		}
 	}
 	if(backfloor || backceil)
@@ -415,7 +413,7 @@ static void line_SpawnViaLine(const int linenum, const boolean spawnthinker)
 			P_CalculateSlopeNormal(fslope);
 
 			if (spawnthinker && (flags & SL_DYNAMIC))
-				P_AddDynSlopeThinker(fslope, DP_BACKFLOOR, line, extent, NULL, NULL);
+				P_AddDynLineSlopeThinker(fslope, DP_BACKFLOOR, line, extent);
 		}
 		if(backceil)
 		{
@@ -432,7 +430,7 @@ static void line_SpawnViaLine(const int linenum, const boolean spawnthinker)
 			P_CalculateSlopeNormal(cslope);
 
 			if (spawnthinker && (flags & SL_DYNAMIC))
-				P_AddDynSlopeThinker(cslope, DP_BACKCEIL, line, extent, NULL, NULL);
+				P_AddDynLineSlopeThinker(cslope, DP_BACKCEIL, line, extent);
 		}
 	}
 }
@@ -476,7 +474,7 @@ static pslope_t *MakeViaMapthings(INT16 tag1, INT16 tag2, INT16 tag3, UINT8 flag
 	ReconfigureViaVertexes(ret, vx[0], vx[1], vx[2]);
 
 	if (spawnthinker && (flags & SL_DYNAMIC))
-		P_AddDynSlopeThinker(ret, DP_VERTEX, NULL, 0, tags, vx);
+		P_AddDynVertexSlopeThinker(ret, tags, vx);
 
 	return ret;
 }
diff --git a/src/p_slopes.h b/src/p_slopes.h
index 43cd3edb0d9009f341b9ab82c168c3429c3521a5..45588d4639098a2af81801a549d5547809a88b2c 100644
--- a/src/p_slopes.h
+++ b/src/p_slopes.h
@@ -95,26 +95,26 @@ typedef enum {
 	DP_FRONTCEIL,
 	DP_BACKFLOOR,
 	DP_BACKCEIL,
-	DP_VERTEX
 } dynplanetype_t;
 
 /// Permit slopes to be dynamically altered through a thinker.
 typedef struct
 {
 	thinker_t thinker;
-
-	pslope_t* slope;
+	pslope_t *slope;
 	dynplanetype_t type;
-
-	// Used by line slopes.
-	line_t* sourceline;
+	line_t *sourceline;
 	fixed_t extent;
+} dynlineplanethink_t;
 
-	// Used by mapthing vertex slopes.
+typedef struct
+{
+	thinker_t thinker;
+	pslope_t *slope;
 	INT16 tags[3];
 	vector3_t vex[3];
-} dynplanethink_t;
+} dynvertexplanethink_t;
 
-void T_DynamicSlopeLine (dynplanethink_t* th);
-void T_DynamicSlopeVert (dynplanethink_t* th);
+void T_DynamicSlopeLine (dynlineplanethink_t* th);
+void T_DynamicSlopeVert (dynvertexplanethink_t* th);
 #endif // #ifndef P_SLOPES_H__