diff --git a/src/pilot.c b/src/pilot.c
index 0809b85..fbfb588 100644
--- a/src/pilot.c
+++ b/src/pilot.c
@@ -37,6 +37,7 @@ extern void ai_think(Pilot* pilot); // Ai.c
 extern void ai_create(Pilot* pilot); // ai.c
 extern void player_think(Pilot* pilot); // Player.c
 extern void player_brokeHyperspace(void); // Player.c
+extern double player_faceHyperspace(void); // Player.c
 extern int gui_load(const char* name); // Player.c
 // Internal.
 static void pilot_shootWeapon(Pilot* p, PilotOutfit* w, const unsigned int t);
@@ -368,6 +369,8 @@ static void pilot_update(Pilot* pilot, const double dt) {
 
 // Pilot is getting ready or is in, hyperspace.
 static void pilot_hyperspace(Pilot* p) {
+	double diff;
+
   if(pilot_isFlag(p, PILOT_HYPERSPACE)) {
     // Pilot is actually in hyperspace.
     if(SDL_GetTicks() > p->ptimer) {
@@ -387,7 +390,6 @@ static void pilot_hyperspace(Pilot* p) {
     }
   } else {
     // Pilot is getting ready for hyperspace.
-    double diff;
     
     if(VMOD(p->solid->vel) > MIN_VEL_ERR) {
       diff = pilot_face(p, VANGLE(p->solid->vel) + M_PI);
@@ -396,7 +398,10 @@ static void pilot_hyperspace(Pilot* p) {
       	vect_pset(&p->solid->force, p->ship->thrust, p->solid->dir);
     } else {
       vectnull(&p->solid->force); // Stop accelerating.
-      diff = pilot_face(p, VANGLE(p->solid->pos));
+			
+			// Player should actually face the system she's headed to.
+			if(p == player) diff = player_faceHyperspace();
+			else diff = pilot_face(p, VANGLE(p->solid->pos));
 
       if(ABS(diff) < MAX_DIR_ERR) {
         // We should prepare for the jump now.
diff --git a/src/pilot.h b/src/pilot.h
index 6d421c2..b484f29 100644
--- a/src/pilot.h
+++ b/src/pilot.h
@@ -20,9 +20,9 @@
 #define PILOT_DISABLED_ARMOUR 0.2 // Based on armour percentage.
 
 // Flags.
-#define pilot_isFlag(p,f)   (p->flags & f)
-#define pilot_setFlag(p,f)  (p->flags |= f)
-#define pilot_rmFlag(p,f)   (p->flags ^= f)
+#define pilot_isFlag(p,f)   (p->flags & (f))
+#define pilot_setFlag(p,f)  (p->flags |= (f))
+#define pilot_rmFlag(p,f)   (p->flags ^= (f))
 // Creation.
 #define PILOT_PLAYER        (1<<0)  // Pilot is a player.
 #define PILOT_HASTURRET			(1<<20) // Pilit has turrets.
diff --git a/src/player.c b/src/player.c
index 6d74290..c1939db 100644
--- a/src/player.c
+++ b/src/player.c
@@ -983,7 +983,11 @@ void player_targetHyperspace(void) {
 
 // Actually attempt to jump into hyperspace.
 void player_jump(void) {
-  if(hyperspace_target == -1) return;
+  if((hyperspace_target == -1) ||
+				pilot_isFlag(player, PILOT_HYP_PREP) ||
+				pilot_isFlag(player, PILOT_HYP_BEGIN) ||
+				pilot_isFlag(player, PILOT_HYPERSPACE))
+		return;
 
   int i = space_hyperspace(player);
 
@@ -1010,6 +1014,17 @@ void player_brokeHyperspace(void) {
   player_message("BANG!");
 }
 
+// Make the player face her hyperspace target.
+double player_faceHyperspace(void) {
+	double a;
+	a = ANGLE(systems_stack[cur_system->jumps[hyperspace_target]].pos.x -
+				cur_system->pos.x,
+				systems_stack[cur_system->jumps[hyperspace_target]].pos.y -
+				cur_system->pos.y);
+	
+	return pilot_face(player, a);
+}
+
 // Take a screenshot.
 static int screenshot_cur = 0;
 void player_screenshot(void) {