Index: src/game/bg_pmove.c
===================================================================
--- src/game/bg_pmove.c (revision 174:b994a2789d5f)
+++ src/game/bg_pmove.c (revision 183:72b70f3b0e29)
@@ -666,9 +666,4 @@
 static qboolean PM_CheckJump( void )
 {
-  vec3_t normal;
-  vec3_t vmagnitude;
-  double magnitude;
-  int i;
-
   if( BG_Class( pm->ps->stats[ STAT_CLASS ] )->jumpMagnitude == 0.0f )
     return qfalse;
@@ -725,17 +720,16 @@
 
   // jump away from wall
-  BG_GetClientNormal( pm->ps, normal );
-
-  magnitude = BG_Class( pm->ps->stats[ STAT_CLASS ] )->jumpMagnitude;
-  VectorScale( normal, magnitude, vmagnitude );
-  VectorMA( pm->ps->velocity, magnitude, normal, pm->ps->velocity );
-  for( i=0; i < 3; i++)
-  {
-    if( vmagnitude[i] > 0 )
-      pm->ps->velocity[i] = ( pm->ps->velocity[i] > vmagnitude[i] ) ? pm->ps->velocity[i] : vmagnitude[i];
-	else if( vmagnitude[i] < 0 )
-      pm->ps->velocity[i] = ( pm->ps->velocity[i] < vmagnitude[i] ) ? pm->ps->velocity[i] : vmagnitude[i];
-
-  }
+  if( pm->ps->stats[ STAT_STATE ] & SS_WALLCLIMBING )
+  {
+    vec3_t normal = { 0, 0, -1 };
+
+    if( !( pm->ps->stats[ STAT_STATE ] & SS_WALLCLIMBINGCEILING ) )
+      VectorCopy( pm->ps->grapplePoint, normal );
+
+    VectorMA( pm->ps->velocity, BG_Class(
+          pm->ps->stats[ STAT_CLASS ] )->jumpMagnitude, normal, pm->ps->velocity );
+  }
+  else
+    pm->ps->velocity[ 2 ] = BG_Class( pm->ps->stats[ STAT_CLASS ] )->jumpMagnitude;
 
   PM_AddEvent( EV_JUMP );
