diff --git a/src/player.c b/src/player.c
index 9c86f28..d0dfb3a 100644
--- a/src/player.c
+++ b/src/player.c
@@ -39,7 +39,7 @@ void player_think(Pilot* player) {
   if(player_turn)
     player->solid->dir_vel -= player->ship->turn * player_turn;
 
-  //if(player_primary) pilot_shoot(player, 0);
+  if(player_primary) pilot_shoot(player, 0);
 
   vect_pset(&player->solid->force, player->ship->thrust * player_acc, player->solid->dir);
 }
diff --git a/src/weapon.c b/src/weapon.c
index e3199fc..2653e6c 100644
--- a/src/weapon.c
+++ b/src/weapon.c
@@ -91,15 +91,18 @@ static void weapon_update(Weapon* w, const double dt) {
 static Weapon* weapon_create(const Outfit* outfit, const double dir, const Vec2* pos, const Vec2* vel) {
   Vec2 v;
   double mass = 1; // Presumer lasers have a mass of 1.
+  double rdir = dir; // Real direction (accuracy).
   Weapon* w = MALLOC_L(Weapon);
   w->outfit = outfit; // Non-Changeable.
   w->update = weapon_update;
+  w->timer = SDL_GetTicks();
   w->think = NULL;
 
   switch(outfit->type) {
     case OUTFIT_TYPE_BOLT:
-      vect_cset(&v, VY(*vel)+outfit->speed*cos(dir), VANGLE(*vel)+outfit->speed*sin(dir));
-      w->solid = solid_create(mass, dir, pos, &v);
+      rdir += RNG(-outfit->accuracy/2., outfit->accuracy/2.)/180.*M_PI;
+      vect_cset(&v, VX(*vel)+outfit->speed*cos(rdir), VANGLE(*vel)+outfit->speed*sin(rdir));
+      w->solid = solid_create(mass, rdir, pos, &v);
       break;
     default:
       break;
@@ -165,11 +168,11 @@ static void weapon_destroy(Weapon* w, WeaponLayer layer) {
       nlayer = &nfrontLayer;
       break;
   }
-  for(i = 0; wlayer[i] != w; i++) // Get us to the current posision.
+  for(i = 0; wlayer[i] != w; i++); // Get us to the current posision.
   weapon_free(wlayer[i]);
   (*nlayer)--;
   
-  for(; (*nlayer); i++)
+  for(; i < (*nlayer); i++)
     wlayer[i] = wlayer[i+1];
 }