diff --git a/dat/fleet.xml b/dat/fleet.xml
index 895b4e5..aac64d7 100644
--- a/dat/fleet.xml
+++ b/dat/fleet.xml
@@ -15,21 +15,21 @@
   </pilots>
  </fleet>
  <fleet name="Trader Llama">
-  <ai>Trader</ai>
+  <ai>merchant</ai>
   <faction>Trader</faction>
   <pilots>
    <pilot chance="100">Llama</pilot>
   </pilots>
  </fleet>
  <fleet name="Trader Mule">
-  <ai>Trader</ai>
+  <ai>merchant</ai>
   <faction>Trader</faction>
   <pilots>
    <pilot chance="100">Mule</pilot>
   </pilots>
  </fleet>
  <fleet name="Sml Trader Convoy">
-  <ai>Trader</ai>
+  <ai>merchant</ai>
   <faction>Trader</faction>
   <pilots>
    <pilot chance="80">Llama</pilot>
diff --git a/src/dialogue.c b/src/dialogue.c
index 38b1865..213b9c5 100644
--- a/src/dialogue.c
+++ b/src/dialogue.c
@@ -210,9 +210,13 @@ char* dialogue_input(char* title, int min, int max, const char* fmt, ...) {
   window_setAccept(input_wid, dialogue_inputClose);
   window_setCancel(input_wid, dialogue_inputCancel);
 
-  /* Input. */
+  /* Text. */
   window_addText(input_wid, 30, -30, 200, h, 0, "txtInput",
       &gl_smallFont, &cDConsole, msg);
+  
+  /* Input. */
+  window_addInput(input_wid, 20, -50-h, 200, 20, "inpInput", max, 1);
+  /* Button. */
   window_addButton(input_wid, -20, 20, 80, 30,
       "btnClose", "Done", dialogue_inputClose);
 
diff --git a/src/weapon.c b/src/weapon.c
index d4bc2c0..42dfe4b 100644
--- a/src/weapon.c
+++ b/src/weapon.c
@@ -1,3 +1,12 @@
+/**
+ * @file weapon.c
+ *
+ * @brief Handle all the weapons in game.
+ *
+ * Weapons are what gets created when a pilot shoots. They are based on
+ * the outfit that created them.
+ */
+
 #include <math.h>
 #include <malloc.h>
 #include <string.h>
@@ -14,14 +23,14 @@
 #include "opengl.h"
 #include "weapon.h"
 
-#define weapon_isSmart(w) (w->think != NULL)
+#define weapon_isSmart(w) (w->think != NULL) /**< Checks if the weapon w is smart. */
 
-#define WEAPON_CHUNK          128 /* Size to increment array with. */
+#define WEAPON_CHUNK          128 /**< Size to increment array with. */
 
 /* Weapon status. */
-#define WEAPON_STATUS_OK        0 /* Weapon is fine. */
-#define WEAPON_STATUS_JAMMED    1 /* Got jammed. */
-#define WEAPON_STATUS_UNJAMMED  2 /* Surviving jaming. */
+#define WEAPON_STATUS_OK        0 /**< Weapon is fine. */
+#define WEAPON_STATUS_JAMMED    1 /**< Got jammed. */
+#define WEAPON_STATUS_UNJAMMED  2 /**< Surviving jaming. */
 
 /* OpenGL stuff. */
 extern Vec2* gl_camera;
@@ -37,34 +46,39 @@ extern unsigned int player_target;
 /* Ai stuff. */
 extern void ai_attacked(Pilot* attacked, const unsigned int attacker);
 
+/**
+ * @struct Weapon
+ *
+ * @brief In-game representation of a weapon.
+ */
 typedef struct Weapon_ {
-  Solid* solid; /* Actually has its own solid. :D */
-  int ID;       /**< Only used for beam weapons. */
+  Solid* solid;         /**< Actually has its own solid. :D */
+  int ID;               /**< Only used for beam weapons. */
 
-  unsigned int faction; /* Faction of pilot that shot the weapon. */
-  unsigned int parent;  /* The pilot that just shot at you! */
-  unsigned int target;  /* Target to hit. Only used by seeking stuff. */
-  const Outfit* outfit; /* Related outfit that fired. */
+  unsigned int faction; /**< Faction of pilot that shot the weapon. */
+  unsigned int parent;  /**< The pilot that just shot at you! */
+  unsigned int target;  /**< Target to hit. Only used by seeking stuff. */
+  const Outfit* outfit; /**< Related outfit that fired. */
 
   int voice;            /**< Weapons voice. */
-  double lockon;        /* Some weapons have a lockon delay. */
-  double timer;         /* Mainly used to see when the weapon was fired. */
+  double lockon;        /**< Some weapons have a lockon delay. */
+  double timer;         /**< Mainly used to see when the weapon was fired. */
 
   /* Update position and render. */
-  void(*update)(struct Weapon_*, const double, WeaponLayer); /* Position update and render. */
-  void(*think)(struct Weapon_*, const double); /* Some missiles need to be inteligent.a */
+  void(*update)(struct Weapon_*, const double, WeaponLayer); /**< Update the weapon. */
+  void(*think)(struct Weapon_*, const double); /**< For the smart missiles. */
 
-  char status;  /* Weapon status - to check for jamming. */
+  char status;          /**< Weapon status - to check for jamming. */
 } Weapon;
 
 /* Behind Pilot layer. */
-static Weapon** wbackLayer = NULL; /* Behind pilots. */
-static int nwbackLayer     = 0;    /* Number of elements. */
-static int mwbackLayer     = 0;    /* Allocated memory size. */
+static Weapon** wbackLayer = NULL;    /**< Behind pilots. */
+static int nwbackLayer     = 0;       /**< Number of elements. */
+static int mwbackLayer     = 0;       /**< Allocated memory size. */
 /* Behind player layer. */
-static Weapon** wfrontLayer = NULL;  /* Behind pilots. */
-static int nwfrontLayer    = 0;    /* Number of elements. */
-static int mwfrontLayer    = 0;    /* Allocated memory size. */
+static Weapon** wfrontLayer = NULL;   /**< Infront of pilots, behind player. */
+static int nwfrontLayer    = 0;       /**< Number of elements. */
+static int mwfrontLayer    = 0;       /**< Allocated memory size. */
 
 /* Internal stuff. */
 static int beam_idgen = 0;          /**< Beam identifier generator. */
@@ -86,16 +100,10 @@ static void weapon_free(Weapon* w);
 /* Think. */
 static void think_seeker(Weapon* w, const double dt);
 static void think_beam(Weapon* w, const double dt);
-/*static void think_smart(Weapon* w, const double dt);*/
 /* Extern. */
 void weapon_minimap(const double res, const double w,
     const double h, const RadarShape shape);
 
-/* Draw the minimap weapons (player.c). */
-#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)) /**< Set a pixel if within range. */
 /**
  * @fn void weapon_minimap(const double res, const double w,
  *               const double h, const RadarShape shape)
@@ -106,6 +114,10 @@ void weapon_minimap(const double res, const double w,
  *    @param h Height of minimap.
  *    @param shape Shape of the minimap.
  */
+#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)) /**< Set a pixel if within range. */
 void weapon_minimap(const double res, const double w,
     const double h, const RadarShape shape) {
   int i, rc;
@@ -127,7 +139,13 @@ void weapon_minimap(const double res, const double w,
 }
 #undef PIXEL
 
-/* Seeker brain, You get what you pay for. :) */
+/**
+ * @fn static void think_seeker(Weapon* w, const double dt)
+ *
+ * @brief The AI of seeker missiles.
+ *    @param w Weapon to do the thinking.
+ *    @param dt Current delta tick.
+ */
 static void think_seeker(Weapon* w, const double dt) {
   double diff;
   double vel;
@@ -263,13 +281,24 @@ static void think_beam(Weapon* w, const double dt) {
   }
 }
 
-/* Update all the weapon layers. */
+/**
+ * @fn void weapons_update(const double dt)
+ *
+ * @brief Update all the weapon layers.
+ *    @param dt Current delta tick.
+ */
 void weapons_update(const double dt) {
   weapons_updateLayer(dt, WEAPON_LAYER_BG);
   weapons_updateLayer(dt, WEAPON_LAYER_FG);
 }
 
-/* Update all weapons in the layer. */
+/**
+ * @fn static void weapons_updateLayer(const double dt, const WeaponLayer layer)
+ *
+ * @brief Update all the weapons in the layer.
+ *    @param dt Current delta tick.
+ *    @param layer Layer to update.
+ */
 static void weapons_updateLayer(const double dt, const WeaponLayer layer) {
   Weapon** wlayer;
   int* nlayer;
@@ -336,7 +365,12 @@ static void weapons_updateLayer(const double dt, const WeaponLayer layer) {
   }
 }
 
-/* Render all the weapons. */
+/**
+ * @fn void weapons_render(const WeaponLayer layer)
+ *
+ * @brief Render all the weapons in a layer.
+ *    @param layer Layer to render.
+ */
 void weapons_render(const WeaponLayer layer) {
   Weapon** wlayer;
   int* nlayer;
@@ -356,7 +390,12 @@ void weapons_render(const WeaponLayer layer) {
     weapon_render(wlayer[i]);
 }
 
-/* Render the weapons. */
+/**
+ * @fn static void weapon_render(const Weapon* w)
+ *
+ * @brief Render an individual weapon.
+ *    @param w Weapon to render.
+ */
 static void weapon_render(const Weapon* w) {
   int sx, sy;
   double x, y;
@@ -445,7 +484,14 @@ static void weapon_render(const Weapon* w) {
   }
 }
 
-/* Update the weapon. */
+/**
+ * @fn static void weapon_update(Weapon* w, const double dt, WeaponLayer layer)
+ *
+ * @brief Updates an individual weapon.
+ *    @param w Weapon to update.
+ *    @param dt Current delta tick.
+ *    @param layer Layer to which the weapon belongs.
+ */
 static void weapon_update(Weapon* w, const double dt, WeaponLayer layer) {
   int i, wsx, wsy, psx, psy;
   glTexture* gfx;
@@ -591,6 +637,19 @@ static void weapon_hitBeam(Weapon* w, Pilot* p, WeaponLayer layer,
       outfit_damageType(w->outfit), outfit_damage(w->outfit)*dt);
 }
 
+/**
+ * @fn static Weapon* weapon_create(const Outfit* outfit, const double dir, const Vec2* pos,
+ *                            const Vec2* vel, unsigned int parent, const unsigned int target)
+ *
+ * @brief Create a new weapon.
+ *    @param outfit Outfit which spawned the weapon.
+ *    @param dir Direction the shooter is facing.
+ *    @param pos Position of the shooter.
+ *    @param vel Velocity of the shooter.
+ *    @param parent Shooter ID.
+ *    @param target Target ID of the shooter.
+ *    @return A pointer to the newly created weapon.
+ */
 static Weapon* weapon_create(const Outfit* outfit, const double dir, const Vec2* pos,
                              const Vec2* vel, unsigned int parent, const unsigned int target) {
   Vec2 v;
@@ -715,7 +774,18 @@ static Weapon* weapon_create(const Outfit* outfit, const double dir, const Vec2*
   return w;
 }
 
-/* Add a new weapon. */
+/**
+ * @fn void weapon_add(const Outfit* outfit, const double dir, const Vec2* pos,
+ *               const Vec2* vel, unsigned int parent, unsigned int target)
+ *
+ * @brief Create a new weapon.
+ *    @param outfit Outfit which spawns the weapon.
+ *    @param dir Direction of the shooter.
+ *    @param pos Position of the shooter.
+ *    @param vel Velocity of the shooter.
+ *    @param parent Pilot ID of the shooter.
+ *    @param target Target ID that is getting shot.
+ */
 void weapon_add(const Outfit* outfit, const double dir, const Vec2* pos,
                 const Vec2* vel, unsigned int parent, unsigned int target) {
 
@@ -873,7 +943,13 @@ void beam_end(const unsigned int parent, int beam) {
   }
 }
 
-/* Destroy the weapon. */
+/**
+ * @fn static void weapon_destroy(Weapon* w, WeaponLayer layer)
+ *
+ * @brief Destroys a weapon.
+ *    @param w Weapon to destroy.
+ *    @param layer Layer to which the weapon belongs.
+ */
 static void weapon_destroy(Weapon* w, WeaponLayer layer) {
   int i;
   Weapon** wlayer;
@@ -914,13 +990,22 @@ static void weapon_destroy(Weapon* w, WeaponLayer layer) {
     wlayer[i] = wlayer[i+1];
 }
 
-/* Clear the weapon. */
+/**
+ * @fn static void weapon_free(Weapon* w)
+ *
+ * @brief Free the weapon.
+ *    @param w Weapon to free.
+ */
 static void weapon_free(Weapon* w) {
   solid_free(w->solid);
   free(w);
 }
 
-/* Clear all the weapons, do not free the layers. */
+/**
+ * @fn void weapon_clear(void)
+ *
+ * @brief Clear all the weapons, does *not* free the layers.
+ */
 void weapon_clear(void) {
   int i;
   for(i = 0; i < nwbackLayer; i++)
@@ -931,9 +1016,24 @@ void weapon_clear(void) {
   nwfrontLayer = 0;
 }
 
+/**
+ * @fn void weapon_exit(void)
+ *
+ * @brief Destroy all the weapons and free it all.
+ */
 void weapon_exit(void) {
   weapon_clear();
-  free(wbackLayer);
-  free(wfrontLayer);
+
+  if(wbackLayer != NULL) {
+    free(wbackLayer);
+    wbackLayer = NULL;
+    mwbackLayer = 0;
+  }
+
+  if(wfrontLayer != NULL) {
+    free(wfrontLayer);
+    wfrontLayer = NULL;
+    mwfrontLayer = 0;
+  }
 }