diff --git a/src/generic_system_view.cpp b/src/generic_system_view.cpp
index 5021ccb..1a3df94 100644
--- a/src/generic_system_view.cpp
+++ b/src/generic_system_view.cpp
@@ -1,6 +1,7 @@
 #include "l3d.h"
 #include "generic_system_view.h"
 #include "sector_view.h"
+#include "sector.h"
 
 GenericSystemView::GenericSystemView(void) : View() {
   px = py = pidx = 0xdeadbeef;
@@ -29,9 +30,14 @@ void GenericSystemView::Draw3D(void) {
 
   if(s && !s->IsSystem(px, py, pidx)) {
     s->GetPos(&px, &py, &pidx);
+    Sector sec(px, py);
+    Sector psec(L3D::playerLoc.secX, L3D::playerLoc.secY);
+    const float dist = Sector::DistanceBetween(&sec, pidx, &psec, L3D::playerLoc.sysIdx);
+    char buf[256];
+    snprintf(buf, sizeof(buf), "Dist. %.2f light years.", dist);
 
     m_systemName->SetText(s->rootBody->name);
-    m_distance->SetText("Dist. XX.XX light years.");
+    m_distance->SetText(buf);
     m_starType->SetText(s->rootBody->GetAstroDescription());
     m_shortDesc->SetText("Short description of system");
 
diff --git a/src/info_view.cpp b/src/info_view.cpp
index 965ed5d..273121d 100644
--- a/src/info_view.cpp
+++ b/src/info_view.cpp
@@ -33,6 +33,10 @@ void InfoView::UpdateInfo(void) {
                              stats.free_capacity, stats.used_capacity,
                              stats.total_mass);
   nfo += std::string(buf);
+
+  snprintf(buf, sizeof(buf), "\n\nHyperspace range: %.2f light years.", stats.hyperspace_range);
+  nfo += std::string(buf);
+
   info1->SetText(nfo);
 }
 
diff --git a/src/l3d.h b/src/l3d.h
index 6273839..bd81df3 100644
--- a/src/l3d.h
+++ b/src/l3d.h
@@ -5,6 +5,7 @@
 #include "gui.h"
 #include "view.h"
 #include "mtrand.h"
+#include "star_system.h"
 
 class Player;
 class SectorView;
@@ -69,6 +70,7 @@ public:
   static View* GetView(void)            { return current_view; }
   static StarSystem* GetSelectedSystem(void);
 
+  static systemloc_t        playerLoc;
   static Player*            player;
   static SectorView*        sector_view;
   static SystemInfoView*    system_info_view;
diff --git a/src/main.cpp b/src/main.cpp
index d4f350a..e80af8e 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -46,6 +46,7 @@ MTRand            L3D::rng;
 double            L3D::gameTime;
 float             L3D::frameTime;
 GLUquadric*       L3D::gluQuadric;
+systemloc_t       L3D::playerLoc;
 
 void L3D::Init(IniConfig& config) {
   int width  = config.Int("ScrWidth");
@@ -186,7 +187,7 @@ void L3D::MainLoop(void) {
   Space::AddBody(player);
 
   for(int i = 0; i < 4; i++) {
-    Ship* body = new Ship(ShipType::LADYBIRD);
+    Ship* body = new Ship(ShipType::SLEEK/*LADYBIRD*/);
     char buf[64];
     snprintf(buf, sizeof(buf), "X%c-0%02d", "A"+i, i);
     body->SetLabel(buf);
@@ -325,6 +326,7 @@ void L3D::HyperspaceTo(StarSystem* dest) {
   Space::BuildSystem(dest);
   float ang = rng(M_PI);
   L3D::player->SetPosition(vector3d(sin(ang)*8*AU, cos(ang)*8*AU, 0));
+  dest->GetPos(&L3D::playerLoc);
 }
 
 IniConfig::IniConfig(const char* filename) {
diff --git a/src/sector.cpp b/src/sector.cpp
index fe7ebc3..cbf1d39 100644
--- a/src/sector.cpp
+++ b/src/sector.cpp
@@ -8,15 +8,16 @@ static const char* sys_names[SYS_NAME_FLAGS] =
 
 Sector::Sector(int x, int y) {
   unsigned long _init[2] = { x, y };
+  sx = x; sy = y;
   MTRand rand(_init, 2);
 
   m_numSystems = rand(3,6);
 
   for(int i = 0; i < m_numSystems; i++) {
     System s;
-    s.p.x = rand(1.0);
-    s.p.y = rand(1.0);
-    s.p.z = 20.0*(rand(1.0)-0.5);
+    s.p.x = rand(SIZE);
+    s.p.y = rand(SIZE);
+    s.p.z = rand(2*SIZE)-SIZE;
     s.name = GenName(rand);
 
     float spec = rand(1.0);
@@ -41,10 +42,16 @@ Sector::Sector(int x, int y) {
   }
 }
 
+float Sector::DistanceBetween(const Sector* a, int sysIdxA, const Sector* b, int sysIdxB) {
+  vector3f dv = a->m_systems[sysIdxA].p - b->m_systems[sysIdxB].p;
+  dv += Sector::SIZE*vector3f(a->sx - b->sx, a->sy - b->sy, 0);
+  return dv.Length();
+}
+
 std::string Sector::GenName(MTRand& rand) {
   std::string name;
 
-  int len = rand(2, 4);
+  int len = rand(2, 3);
   for(int i = 0; i < len; i++) {
     name += sys_names[rand(0, SYS_NAME_FLAGS-1)];
   }
diff --git a/src/sector.h b/src/sector.h
index d15db5b..ae1f041 100644
--- a/src/sector.h
+++ b/src/sector.h
@@ -6,7 +6,10 @@
 
 class Sector {
 public:
+  /* Lightyears. */
+  enum { SIZE=8 };
   Sector(int x, int y);
+  static float DistanceBetween(const Sector* a, int sysIdxA, const Sector* b, int sysIdxB);
 
   int m_numSystems;
   struct System {
@@ -18,5 +21,6 @@ public:
 
 private:
   std::string GenName(MTRand& rand);
+  int sx, sy;
 };
 
diff --git a/src/sector_view.cpp b/src/sector_view.cpp
index 8b7c45b..baea27b 100644
--- a/src/sector_view.cpp
+++ b/src/sector_view.cpp
@@ -4,6 +4,7 @@
 #include "sector_view.h"
 #include "sector.h"
 #include "system_info_view.h"
+#include "player.h"
 
 SectorView::SectorView(void) : GenericSystemView() {
   SetTransparency(true);
@@ -50,7 +51,6 @@ bool SectorView::GetSelectedSystem(int* sector_x, int* sector_y, int* system_idx
   return m_selected != -1;
 }
 
-#define SEC_SIZE    8
 #define DRAW_RAD    2
 
 #define FFRAC(_x)   ((_x)-floor(_x))
@@ -73,13 +73,13 @@ void SectorView::Draw3D(void) {
   glTranslatef(0, 0, -10-10*m_zoom);
   glRotatef(m_rot_x, 1, 0, 0);
   glRotatef(m_rot_z, 0, 0, 1);
-  glTranslatef(-FFRAC(m_px)*SEC_SIZE, -FFRAC(m_py)*SEC_SIZE, 0);
+  glTranslatef(-FFRAC(m_px)*Sector::SIZE, -FFRAC(m_py)*Sector::SIZE, 0);
   glDisable(GL_LIGHTING);
 
   for(int sx = -DRAW_RAD; sx <= DRAW_RAD; sx++) {
     for(int sy = -DRAW_RAD; sy <= DRAW_RAD; sy++) {
       glPushMatrix();
-      glTranslatef(sx*SEC_SIZE, sy*SEC_SIZE, 0);
+      glTranslatef(sx*Sector::SIZE, sy*Sector::SIZE, 0);
       DrawSector(m_secx+sx, m_secy+sy);
       glPopMatrix();
     }
@@ -111,9 +111,9 @@ void SectorView::DrawSector(int sx, int sy) {
   glColor3f(0, .8, 0);
   glBegin(GL_LINE_LOOP);
     glVertex3f(0, 0, 0);
-    glVertex3f(0, SEC_SIZE, 0);
-    glVertex3f(SEC_SIZE, SEC_SIZE, 0);
-    glVertex3f(SEC_SIZE, 0, 0);
+    glVertex3f(0, Sector::SIZE, 0);
+    glVertex3f(Sector::SIZE, Sector::SIZE, 0);
+    glVertex3f(Sector::SIZE, 0, 0);
   glEnd();
 
   if(!(sx || sy)) glColor3f(1, 1, 0);
@@ -121,7 +121,7 @@ void SectorView::DrawSector(int sx, int sy) {
   for(std::vector<Sector::System>::iterator i = s.m_systems.begin(); i != s.m_systems.end(); ++i) {
     glColor3fv(StarSystem::starColors[(*i).primaryStarClass]);
     glPushMatrix();
-    glTranslatef((*i).p.x*SEC_SIZE, (*i).p.y*SEC_SIZE, 0);
+    glTranslatef((*i).p.x, (*i).p.y, 0);
     glBegin(GL_LINES);
       glVertex3f(0, 0, 0);
       glVertex3f(0, 0, (*i).p.z);
@@ -132,12 +132,32 @@ void SectorView::DrawSector(int sx, int sy) {
     glRotatef(-m_rot_z, 0, 0, 1);
     glRotatef(-m_rot_x, 1, 0, 0);
     glCallList(m_gluDiskDlist);
+    /* Player location indicator. */
+    if((sx == L3D::playerLoc.secX) && (sy == L3D::playerLoc.secY) && (num == L3D::playerLoc.sysIdx)) {
+      shipstats_t stats;
+      L3D::player->CalcStats(&stats);
+      glColor3f(0, 0, 1);
+      glBegin(GL_LINE_LOOP);
+        /* Draw a lovely circle around our beloved player. */
+        for(float theta = 0; theta < 2*M_PI; theta += 0.05*M_PI) {
+          glVertex3f(stats.hyperspace_range*sin(theta), stats.hyperspace_range*cos(theta), 0);
+        }
+      glEnd();
+
+      glPushMatrix();
+      glDepthRange(0.2, 1.2);
+      glColor3f(3, 3, 3);
+      glCallList(m_gluDiskDlist);
+      glPopMatrix();
+    }
     /* Selected indicator. */
     if((sx == m_secx) && (sy == m_secy) && (num == m_selected)) {
+      glDepthRange(0.1, 1.1);
       glColor3f(0, 0.8, 0);
       glScalef(2, 2, 2);
       glCallList(m_gluDiskDlist);
     }
+    glDepthRange(0, 1);
     glPopMatrix();
     glColor3f(.7, .7, .7);
     PutText((*i).name);
@@ -169,8 +189,8 @@ void SectorView::Update(void) {
   m_secy = (int)floor(m_py);
 
   Sector s = Sector(m_secx, m_secy);
-  float px = FFRAC(m_px);
-  float py = FFRAC(m_py);
+  float px = FFRAC(m_px)*Sector::SIZE;
+  float py = FFRAC(m_py)*Sector::SIZE;
 
   m_selected = -1;
   float min_dist = FLT_MAX;
diff --git a/src/ship.cpp b/src/ship.cpp
index a1a19f3..063b606 100644
--- a/src/ship.cpp
+++ b/src/ship.cpp
@@ -50,6 +50,10 @@ void Ship::CalcStats(shipstats_t* stats) {
   }
   stats->free_capacity = stats->max_capacity - stats->used_capacity;
   stats->total_mass = stats->used_capacity + stype.hullMass;
+
+  Equip::Type t = m_equipment.Get(Equip::SLOT_ENGINE);
+  float hyperclass = EquipType::types[t].pval;
+  stats->hyperspace_range = 200 * hyperclass * hyperclass / stats->total_mass;
 }
 
 void Ship::AITurn(void) {
diff --git a/src/ship_type.cpp b/src/ship_type.cpp
index c2f7bc2..755f977 100644
--- a/src/ship_type.cpp
+++ b/src/ship_type.cpp
@@ -49,22 +49,22 @@ const EquipType EquipType::types[] = {
   { 
     "None",
     Equip::SLOT_ENGINE,
-    0,
+    0, 0
   },
   {
     "Interplanetary Drive",
     Equip::SLOT_ENGINE,
-    1
+    1, 0
   },
   {
     "Class 1 Hyperdrive",
     Equip::SLOT_ENGINE,
-    4
+    4, 1
   },
   {
     "1MW beam laser",
     Equip::SLOT_LASER,
-    1
+    1, 1
   }
 };
 
diff --git a/src/ship_type.h b/src/ship_type.h
index 73c3b08..731e2e5 100644
--- a/src/ship_type.h
+++ b/src/ship_type.h
@@ -56,7 +56,7 @@ struct EquipType {
   const char* name;
   Equip::Slot slot;
   int         mass;
-
+  int         pval; /* Used for general 'power' attribute.. */
   static const EquipType types[];
 };
 
diff --git a/src/star_system.cpp b/src/star_system.cpp
index 2a8242d..12eacaa 100644
--- a/src/star_system.cpp
+++ b/src/star_system.cpp
@@ -236,9 +236,9 @@ void StarSystem::SBody::EliminateBadChildren(void) {
 
 StarSystem::StarSystem(int sector_x, int sector_y, int system_idx) {
   unsigned long _init[3] = { system_idx, sector_x, sector_y };
-  m_sectorX   = sector_x;
-  m_sectorY   = sector_y;
-  m_systemIdx = system_idx;
+  loc.secX    = sector_x;
+  loc.secY    = sector_y;
+  loc.sysIdx  = system_idx;
   rootBody    = 0;
   if(system_idx == -1) return;
   rand.seed(_init, 3);
@@ -442,7 +442,7 @@ StarSystem::~StarSystem(void) {
 }
 
 bool StarSystem::IsSystem(int sector_x, int sector_y, int system_idx) {
-  return (sector_x == m_sectorX) && (sector_y == m_sectorY) && (system_idx == m_systemIdx);
+  return(sector_x == loc.secX) && (sector_y == loc.secY) && (system_idx == loc.sysIdx);
 }
 
 StarSystem::SBody::~SBody(void) {
diff --git a/src/star_system.h b/src/star_system.h
index af14855..56b9659 100644
--- a/src/star_system.h
+++ b/src/star_system.h
@@ -13,14 +13,19 @@
 #define AU              149598000000.0
 #define G               6.67428e-11
 
+struct systemloc_t {
+  int secX, secY, sysIdx;
+};
+
 /* All masses are in Kg, all lengths in meters. */
 class StarSystem {
 public:
   StarSystem(int sector_x, int sector_y, int system_idx);
   ~StarSystem(void);
   bool IsSystem(int sector_x, int sector_y, int system_idx);
+  void GetPos(systemloc_t* l) { *l = loc; };
   void GetPos(int* sec_x, int* sec_y, int* sys_idx) {
-    *sec_x = m_sectorX; *sec_y = m_sectorY; *sys_idx = m_systemIdx;
+    *sec_x = loc.secX; *sec_y = loc.secY, *sys_idx = loc.sysIdx;
   }
 
   static float starColors[7][3];
@@ -84,7 +89,7 @@ public:
   SBody* rootBody;
 
 private:
-  int m_sectorX, m_sectorY, m_systemIdx;
+  systemloc_t loc;
 
   MTRand rand;
 };