diff --git a/nq/include/client.h b/nq/include/client.h
index 9dbb20bbf..771e917be 100644
--- a/nq/include/client.h
+++ b/nq/include/client.h
@@ -186,7 +186,7 @@ typedef struct {
 	float		crouch;			// Local amount for smoothing stepups
 
 	qboolean	paused;			// Sent over by server
-	qboolean	onground;
+	int			onground;
 	qboolean	inwater;
 
 	int			intermission;	// Don't change view angle, full screen, etc
diff --git a/nq/source/cl_parse.c b/nq/source/cl_parse.c
index fed31b3e1..5d28f4fc6 100644
--- a/nq/source/cl_parse.c
+++ b/nq/source/cl_parse.c
@@ -717,7 +717,7 @@ CL_ParseClientdata (void)
 		cl.stats[STAT_ITEMS] = i;
 	}
 
-	cl.onground = (bits & SU_ONGROUND) != 0;
+	cl.onground = (bits & SU_ONGROUND) ? 0 : -1;
 	cl.inwater = (bits & SU_INWATER) != 0;
 
 	if (bits & SU_WEAPONFRAME)
@@ -882,7 +882,7 @@ CL_ParseServerMessage (void)
 	else if (cl_shownet->int_val == 2)
 		Sys_Printf ("------------------\n");
 
-	cl.onground = false;				// unless the server says otherwise
+	cl.onground = -1;				// unless the server says otherwise
 
 	// parse the message
 	MSG_BeginReading (net_message);
diff --git a/nq/source/cl_view.c b/nq/source/cl_view.c
index af3033165..a9ce8dbf0 100644
--- a/nq/source/cl_view.c
+++ b/nq/source/cl_view.c
@@ -174,7 +174,7 @@ V_DriftPitch (void)
 {
 	float       delta, move;
 
-	if (noclip_anglehack || !cl.onground || cls.demoplayback) {
+	if (noclip_anglehack || cl.onground == -1 || cls.demoplayback) {
 		cl.driftmove = 0;
 		cl.pitchvel = 0;
 		return;
@@ -610,6 +610,7 @@ V_CalcRefdef (void)
 	vec3_t      angles;
 	vec3_t      forward, right, up;
 	vec_t      *origin = ent->origin;
+	vec_t      *viewangles = cl.viewangles;
 
 	V_DriftPitch ();
 
@@ -626,7 +627,7 @@ V_CalcRefdef (void)
 	r_data->refdef->vieworg[1] += 1.0 / 16;
 	r_data->refdef->vieworg[2] += 1.0 / 16;
 
-	VectorCopy (cl.viewangles, r_data->refdef->viewangles);
+	VectorCopy (viewangles, r_data->refdef->viewangles);
 	V_CalcViewRoll ();
 	V_AddIdle ();
 
@@ -651,7 +652,7 @@ V_CalcRefdef (void)
 	V_BoundOffsets ();
 
 	// set up gun position
-	VectorCopy (cl.viewangles, view->angles);
+	VectorCopy (viewangles, view->angles);
 
 	CalcGunAngle ();
 
@@ -687,7 +688,7 @@ V_CalcRefdef (void)
 			   r_data->refdef->viewangles);
 
 	// smooth out stair step ups
-	if (cl.onground && origin[2] - oldz > 0) {
+	if ((cl.onground != -1) && (origin[2] - oldz > 0)) {
 		float       steptime;
 
 		steptime = cl.time - cl.oldtime;
diff --git a/qw/source/cl_view.c b/qw/source/cl_view.c
index 826a1798c..60ffef1f7 100644
--- a/qw/source/cl_view.c
+++ b/qw/source/cl_view.c
@@ -617,12 +617,13 @@ V_CalcRefdef (void)
 	int         i;
 	vec3_t      forward, right, up;
 	vec_t      *origin = cl.simorg;
+	vec_t      *viewangles = cl.simangles;
 
 	V_DriftPitch ();
 
 	bob = V_CalcBob ();
 
-	// refresh position from simulated origin
+	// refresh position
 	VectorCopy (origin, r_data->refdef->vieworg);
 	r_data->refdef->vieworg[2] += cl.viewheight + bob;
 
@@ -633,12 +634,12 @@ V_CalcRefdef (void)
 	r_data->refdef->vieworg[1] += 1.0 / 16;
 	r_data->refdef->vieworg[2] += 1.0 / 16;
 
-	VectorCopy (cl.simangles, r_data->refdef->viewangles);
+	VectorCopy (viewangles, r_data->refdef->viewangles);
 	V_CalcViewRoll ();
 	V_AddIdle ();
 
 	// offsets
-	AngleVectors (cl.simangles, forward, right, up);
+	AngleVectors (viewangles, forward, right, up);
 
 	// don't allow cheats in multiplayer
 	// FIXME check for dead
@@ -653,7 +654,7 @@ V_CalcRefdef (void)
 	V_BoundOffsets ();
 
 	// set up gun position
-	VectorCopy (cl.simangles, view->angles);
+	VectorCopy (viewangles, view->angles);
 
 	CalcGunAngle ();