diff --git a/src/ai.c b/src/ai.c
index 7dafe70..e142b12 100644
--- a/src/ai.c
+++ b/src/ai.c
@@ -653,7 +653,7 @@ static int ai_pushtask(lua_State* L) {
   /* Parse basic parameters. */
   if(lua_isnumber(L, 1)) pos = (int) lua_tonumber(L, 1);
   else LLUA_INVALID_PARAMETER();
-  if(lua_isstring(L, 2)) func = (char*)lua_tostring(L, 1);
+  if(lua_isstring(L, 2)) func = (char*)lua_tostring(L, 2);
   else LLUA_INVALID_PARAMETER();
 
   t = MALLOC_L(Task);
diff --git a/src/map.c b/src/map.c
index be5bc0f..7371372 100644
--- a/src/map.c
+++ b/src/map.c
@@ -155,6 +155,10 @@ static void map_update(void) {
   unsigned int services;
   char buf[128];
 
+  /* Needs map to update. */
+  if(map_wid <= 0)
+    return;
+
   sys = &systems_stack[map_selected];
 
   /* Right text. */
@@ -510,19 +514,17 @@ void map_clear(void) {
   map_selectCur();
 }
 
+/**
+ * @fn static void map_selectCur(void)
+ *
+ * @brief Try to select the current system.
+ */
 static void map_selectCur(void) {
-  int i;
-  if(cur_system != NULL) {
-    for(i = 0; i < systems_nstack; i++) {
-      if(&systems_stack[i] == cur_system) {
-        map_selected = i;
-        break;
-      }
-    }
-  } else {
+  if(cur_system != NULL)
+    map_selected = cur_system - systems_stack;
+  else
     /* Probably going to seg fault now.. */
     map_selected = -1;
-  }
 }
 
 /* Update the map after a jump. */
@@ -566,7 +568,11 @@ void map_jump(void) {
  *    @param sys System to select.
  */
 void map_select(StarSystem* sys) {
-  map_selected = sys - systems_stack;
+  if(sys == NULL)
+    map_selectCur();
+  else
+    map_selected = sys - systems_stack;
+  map_update();
 }
 
 /* A* Algorithm fo shortest path finding. */
diff --git a/src/player.c b/src/player.c
index cd310df..8b5627e 100644
--- a/src/player.c
+++ b/src/player.c
@@ -1776,8 +1776,13 @@ void player_targetHyperspace(void) {
   else
     player_playSound(snd_nav, 1);
 
-  if((hyperspace_target != -1) && map_isOpen())
-    map_select(&systems_stack[cur_system->jumps[hyperspace_target]]);
+  /* Map gets special treatment if open. */
+  if(map_isOpen()) {
+    if(hyperspace_target == -1)
+      map_select(NULL);
+    else
+      map_select(&systems_stack[cur_system->jumps[hyperspace_target]]);
+  }
 }
 
 /**