diff --git a/dat/gui.xml b/dat/gui.xml
index 7a13dbb..b348443 100644
--- a/dat/gui.xml
+++ b/dat/gui.xml
@@ -1,5 +1,9 @@
 <GUIs>
 	<gui name="simple" gfx="simple">
+    <offset>
+      <x>-75</x>
+      <y>0</y>
+    </offset>
 		<radar type="rectangle">
 			<w>128</w>
 			<h>128</h>
@@ -45,4 +49,54 @@
 			</health>
 		</target>
 	</gui>
+  <gui name="minimal" gfx="minimal">
+    <offset>
+      <x>-65</x>
+      <y>0</y>
+    </offset>
+		<radar type="circle">
+			<w>70</w>
+			<x>72</x>
+			<y>72</y>
+		</radar>
+		<health>
+			<shield>
+				<w>98</w>
+				<h>8</h>
+				<x>52</x>
+				<y>186</y>
+			</shield>
+			<armor>
+				<w>98</w>
+				<h>8</h>
+				<x>52</x>
+				<y>197</y>
+			</armor>
+			<energy>
+				<w>98</w>
+				<h>8</h>
+				<x>52</x>
+				<y>207</y>
+			</energy>
+		</health>
+		<target>
+			<gfx>
+				<x>34</x>
+				<y>273</y>                                                                
+			</gfx>
+			<name>
+				<x>40</x>
+				<y>260</y>
+			</name>
+			<faction>
+				<x>40</x>
+				<y>273</y>
+			</faction>
+			<health>
+				<x>40</x>
+				<y>370</y>
+			</health>
+		</target>
+	</gui>
+
 </GUIs>
diff --git a/dat/ship.xml b/dat/ship.xml
index 3a30994..e238189 100644
--- a/dat/ship.xml
+++ b/dat/ship.xml
@@ -2,7 +2,7 @@
 <Ships>
 	<ship name="Merchant Ship">
 		<GFX>ship</GFX>
-    <GUI>simple</GUI>
+    <GUI>minimal</GUI>
 		<class>1</class>
 		<movement>
 			<thrust>400</thrust>
diff --git a/gfx/gui/minimal.png b/gfx/gui/minimal.png
new file mode 100644
index 0000000..97eca1f
Binary files /dev/null and b/gfx/gui/minimal.png differ
diff --git a/gfx/gui/minimal_pilot.png b/gfx/gui/minimal_pilot.png
new file mode 100644
index 0000000..64635e0
Binary files /dev/null and b/gfx/gui/minimal_pilot.png differ
diff --git a/gfx/gui/minimal_planet.png b/gfx/gui/minimal_planet.png
new file mode 100644
index 0000000..e2b41d3
Binary files /dev/null and b/gfx/gui/minimal_planet.png differ
diff --git a/gfx/gui/simple.xcf b/gfx/gui/simple.xcf
deleted file mode 100644
index e9e2ad3..0000000
Binary files a/gfx/gui/simple.xcf and /dev/null differ
diff --git a/src/physics.c b/src/physics.c
index 03882f1..8ec9e45 100644
--- a/src/physics.c
+++ b/src/physics.c
@@ -2,6 +2,7 @@
 #include <stdlib.h>
 #include <assert.h>
 
+#include "main.h"
 #include "physics.h"
 
 // ================
diff --git a/src/physics.h b/src/physics.h
index 0fa1a8b..5ba2cb9 100644
--- a/src/physics.h
+++ b/src/physics.h
@@ -1,5 +1,6 @@
 #pragma once
-#include "main.h"
+
+#include <math.h>
 
 #define VX(v)     ((v).x)
 #define VY(v)     ((v).y)
@@ -9,7 +10,8 @@
 #define MOD(x,y)  (sqrt((x)*(x) + (y)*(y)))
 #define ANGLE(x,y)(((x)==0.) ? 0. : (((x)<0.)?atan((y)/(x))+M_PI:atan((y)/(x))))
 
-#define vect_dist(v,u) MOD((v)->x-(u)->x, (v)->y-(u)->y)
+#define vect_dist(v,u)  MOD((v)->x-(u)->x, (v)->y-(u)->y)
+#define vect_odist(v)   MOD((v)->x, (v)->y)
 
 // Misc
 double angle_diff(const double ref, double a);
diff --git a/src/player.c b/src/player.c
index 3c7e0eb..dfa3afc 100644
--- a/src/player.c
+++ b/src/player.c
@@ -49,10 +49,6 @@ static unsigned int player_target = PLAYER_ID; // Targetted pilot.
 extern Pilot** pilot_stack;
 extern int pilots;
 
-// Weapon stuff for GUI.
-extern void weapon_minimap(double res, double w, double h);
-extern void planets_minimap(double res, double w, double h);
-
 // GUI crap.
 // Need these offsets to render properly. -- Used in opengl.c
 // -- Colors.
@@ -74,8 +70,6 @@ Color cShield           = { .r = 0.2, .g = 0.2, .b = 0.8, .a = 1. };
 Color cArmor            = { .r = 0.5, .g = 0.5, .b = 0.5, .a = 1. };
 Color cEnergy           = { .r = 0.2, .g = 0.8, .b = 0.2, .a = 1. };
 
-typedef enum { RADAR_RECT, RADAR_CIRCLE } RadarShape;
-
 typedef struct {
   double w,h; // Dimensions.
   RadarShape shape;
@@ -123,7 +117,9 @@ typedef struct {
 static Msg* msg_stack;
 
 // External.
-extern void pilot_render(Pilot* pilot); // Extern is in Pilot.*
+extern void pilot_render(const Pilot* pilot); // Extern is in Pilot.*
+extern void weapon_minimap(const double res, const double w, const double h, const RadarShape shape); // weapon.c
+extern void planets_minimap(const double res, const double w, const double h, const RadarShape shape); // space.c
 // Internal.
 static void rect_parse(const xmlNodePtr parent, double* x, double* y, double* w, double* h);
 static int gui_parse(const xmlNodePtr parent, const char* name);
@@ -180,39 +176,34 @@ void player_render(void) {
   // -- Radar.
   glMatrixMode(GL_PROJECTION);
   glPushMatrix();
-  glTranslated(VX(gui.pos_radar) - gl_screen.w/2. + gui.radar.w/2.,
-        VY(gui.pos_radar) - gl_screen.h/2. - gui.radar.h/2., 0.);
-
-  switch(gui.radar.shape) {
-    case RADAR_RECT:
-      // Planets.
-      COLOR(cFriend);
-      planets_minimap(gui.radar.res, gui.radar.w, gui.radar.h);
+  if(gui.radar.shape == RADAR_RECT)
+    glTranslated(VX(gui.pos_radar) - gl_screen.w/2. + gui.radar.w/2.,
+          VY(gui.pos_radar) - gl_screen.h/2. - gui.radar.h/2., 0.);
+  else if(gui.radar.shape == RADAR_CIRCLE)
+    glTranslated(VX(gui.pos_radar) - gl_screen.w/2.,
+          VY(gui.pos_radar) - gl_screen.h/2., 0.);
   
-      // Weapons.
-      glBegin(GL_POINTS);
-        COLOR(cRadar_weap);
-        weapon_minimap(gui.radar.res, gui.radar.w, gui.radar.h);
-      glEnd(); // Put end to those points.
-      for(j = 0, i = 1; i < pilots; i++) {
-        // Skip the player.
-        if(pilot_stack[i]->id == player_target) j = i;
-        else gui_renderPilot(pilot_stack[i]);
-      }
-      // Render the targetted pilot.
-      if(j != 0) gui_renderPilot(pilot_stack[j]);
-      glBegin(GL_POINTS); // For ze player.
-      break;
-    case RADAR_CIRCLE:
-      glBegin(GL_POINTS);
-      for(i = 1; i < pilots; i++) {
-        p = pilot_stack[i];
-        COLOR(cNeutral);
-        glVertex2d((p->solid->pos.x - player->solid->pos.x) / gui.radar.res,
-              (p->solid->pos.y - player->solid->pos.y) / gui.radar.res);
-      }
-      break;
+  // Planets.
+  COLOR(cFriend);
+  planets_minimap(gui.radar.res, gui.radar.w, gui.radar.h, gui.radar.shape);
+
+  // Weapons.
+  glBegin(GL_POINTS);
+    COLOR(cRadar_weap);
+    weapon_minimap(gui.radar.res, gui.radar.w, gui.radar.h, gui.radar.shape);
+  glEnd();
+
+  // Render the pilots.
+  for(j = 0, i = 1; i < pilots; i++) {
+    // Skip the player.
+    if(pilot_stack[i]->id == player_target) j = i;
+    else gui_renderPilot(pilot_stack[i]);
   }
+  // Render the targetted pilot.
+  if(j != 0) gui_renderPilot(pilot_stack[j]);
+
+  // Player.
+  glBegin(GL_POINTS);
   // Player. -- Drawn last.
   COLOR(cRadar_player);
   glVertex2d(  0.,  2. ); // We represent the player with a small '+'
@@ -271,6 +262,7 @@ void player_render(void) {
 // Renders a pilot.
 static void gui_renderPilot(const Pilot* p) {
   int x, y, sx, sy;
+  double w, h;
 
   x = (p->solid->pos.x - player->solid->pos.x) / gui.radar.res;
   y = (p->solid->pos.y - player->solid->pos.y) / gui.radar.res;
@@ -279,9 +271,20 @@ static void gui_renderPilot(const Pilot* p) {
   if(sx < 1.) sx = 1.;
   if(sy < 1.) sy = 1.;
 
-  if((ABS(x) > gui.radar.w/2+sx) || (ABS(y) > gui.radar.h/2.+sy))
+  if(((gui.radar.shape == RADAR_RECT) && ((ABS(x) > gui.radar.w/2.+sx)
+        || (ABS(y) > gui.radar.h/2.+sy))) || ((gui.radar.shape == RADAR_CIRCLE) && 
+        ((x*x + y*y) > (int)(gui.radar.w*gui.radar.w))))
     return; // Pilot isn't in range.
 
+  if(gui.radar.shape == RADAR_RECT) {
+    w = gui.radar.w/2.;
+    h = gui.radar.h/2.;
+  }
+  else if(gui.radar.shape == RADAR_CIRCLE) {
+    w = gui.radar.w;
+    h = gui.radar.w;
+  }
+
   glBegin(GL_QUADS);
     // Colors.
     if(p->id == player_target) COLOR(cRadar_targ);
@@ -289,10 +292,10 @@ static void gui_renderPilot(const Pilot* p) {
     else COLOR(cNeutral);
 
     // Image.
-    glVertex2d(MAX(x-sx, -gui.radar.w/2.), MIN(y+sy,  gui.radar.h/2)); // Top left.
-    glVertex2d(MIN(x+sx,  gui.radar.w/2.), MIN(y+sy,  gui.radar.h/2)); // Top right.
-    glVertex2d(MIN(x+sx,  gui.radar.w/2.), MAX(y-sy, -gui.radar.h/2)); // Bottom right.
-    glVertex2d(MAX(x-sx, -gui.radar.w/2.), MAX(y-sy, -gui.radar.h/2)); // Bottom left.
+    glVertex2d(MAX(x-sx, -w), MIN(y+sy,  h)); // Top left.
+    glVertex2d(MIN(x+sx,  w), MIN(y+sy,  h)); // Top right.
+    glVertex2d(MIN(x+sx,  w), MAX(y-sy, -h)); // Bottom right.
+    glVertex2d(MAX(x-sx, -w), MAX(y-sy, -h)); // Bottom left.
   glEnd();
 }
 
@@ -458,13 +461,16 @@ static int gui_parse(const xmlNodePtr parent, const char* name) {
         gl_screen.w - gui.gfx_frame->w,  // x.
         gl_screen.h - gui.gfx_frame->h); // h.
 
-  // For rendering the player. Displaces it a little so it's centered onscreen.
-  gui_xoff = - gui.gfx_frame->w/2.;
-
   // Let's parse the data now.
   node = parent->children;
   do {
-    if(strcmp((char*)node->name, "radar")==0) {
+    // Offset.
+    if(strcmp((char*)node->name, "offset")==0) {
+      rect_parse(node, &x, &y, NULL, NULL);
+      gui_xoff = x;
+      gui_yoff = y;
+    }
+    else if(strcmp((char*)node->name, "radar")==0) {
       tmp = (char*)xmlGetProp(node, (xmlChar*)"type");
 
       // Make sure type is valid.
@@ -476,7 +482,11 @@ static int gui_parse(const xmlNodePtr parent, const char* name) {
       }
       free(tmp);
 
-      rect_parse(node, &x, &y, &gui.radar.w, &gui.radar.h);
+      // Load the appropriate measurements.
+      if(gui.radar.shape == RADAR_RECT)
+        rect_parse(node, &x, &y, &gui.radar.w, &gui.radar.h);
+      else if(gui.radar.shape == RADAR_CIRCLE)
+        rect_parse(node, &x, &y, &gui.radar.w, NULL);
       vect_csetmin(&gui.pos_radar,
             VX(gui.pos_frame) + x,
             VY(gui.pos_frame) + gui.gfx_frame->h - y);
diff --git a/src/player.h b/src/player.h
index 90589d2..ae1107b 100644
--- a/src/player.h
+++ b/src/player.h
@@ -2,8 +2,10 @@
 #include <SDL.h>
 #include "pilot.h"
 
+// The pilot.
 extern Pilot* pilot;
 
+typedef enum { RADAR_RECT, RADAR_CIRCLE } RadarShape; // For render functions.
 typedef enum { KEYBIND_NULL, KEYBIND_KEYBOARD, KEYBIND_JAXIS, KEYBIND_JBUTTON } KeybindType;
 
 // Render.
diff --git a/src/space.c b/src/space.c
index c560c3d..b1f8dda 100644
--- a/src/space.c
+++ b/src/space.c
@@ -8,6 +8,7 @@
 #include "pack.h"
 #include "space.h"
 #include "faction.h"
+#include "player.h"
 
 #define XML_NODE_START  1
 #define XML_NODE_TEST   3
@@ -56,12 +57,15 @@ extern void player_message(const char* fmt, ...);
 
 // Draw the planet. Used in planet.c
 // Matrix mode is already displaced to center of the minimap.
-#define PIXEL(x,y)  if(ABS(x)<w/2. && ABS(y)<h/2.) glVertex2i((x),(y))
-void planets_minimap(double res, double w, double h) {
+#define PIXEL(x,y)  if((shape == RADAR_RECT && ABS(x)<w/2. && ABS(y)<h/2.) || \
+      (shape == RADAR_CIRCLE && (((x)*(x)+(y)*(y)) < rc))) glVertex2i((x),(y))
+void planets_minimap(const double res, const double w, const double h, const RadarShape shape) {
   int i;
-  int cx, cy, x, y, r;
+  int cx, cy, x, y, r, rc;
   double p;
 
+  if(shape == RADAR_CIRCLE) rc = (int)(w*w);
+
   glBegin(GL_POINTS);
     glMatrixMode(GL_PROJECTION);
     for(i = 0; i < cur_system->nplanets; i++) {
diff --git a/src/weapon.c b/src/weapon.c
index a6c4051..f73288e 100644
--- a/src/weapon.c
+++ b/src/weapon.c
@@ -9,6 +9,7 @@
 #include "rng.h"
 #include "pilot.h"
 #include "collision.h"
+#include "player.h"
 #include "weapon.h"
 
 // Some stuff from pilot.
@@ -49,24 +50,27 @@ static void weapon_destroy(Weapon* w, WeaponLayer layer);
 static void weapon_free(Weapon* w);
 
 // Draw the minimap weapons (player.c).
-void weapon_minimap(double res, double w, double h) {
-  int i;
+#define PIXEL(x,y) if((shape == RADAR_RECT && ABS(x) < w/2. && ABS(y)<h/2.) || \
+      (shape == RADAR_CIRCLE && (((x)*(x)+(y)*(y))<rc))) glVertex2i((x),(y))
+void weapon_minimap(const double res, const double w, const double h, const RadarShape shape) {
+  int i, rc;
   double x, y;
+
+  if(shape == RADAR_CIRCLE) rc = (int)(w*w);
+
   for(i = 0; i < nwbackLayer; i++) {
     x = (wbackLayer[i]->solid->pos.x - player->solid->pos.x) / res;
     y = (wbackLayer[i]->solid->pos.y - player->solid->pos.y) / res;
-    if(ABS(x) < w/2. && ABS(y) < h/2.)
-      glVertex2d(x,y);
+    PIXEL(x,y);
   }
   
   for(i = 0; i < nwfrontLayer; i++) {
     x = (wfrontLayer[i]->solid->pos.x - player->solid->pos.x) / res;
     y = (wfrontLayer[i]->solid->pos.y - player->solid->pos.y) / res;
-    if(ABS(x) < w/2. && ABS(y) < h/2.)
-      glVertex2d(x,y);
-
+    PIXEL(x,y);
   }
 }
+#undef PIXEL
 
 // Update all weapons in the layer.
 void weapons_update(const double dt, WeaponLayer layer) {