Index: data/data/traps.xml
===================================================================
--- data/data/traps.xml	(revision 2454)
+++ data/data/traps.xml	(working copy)
@@ -10,52 +10,60 @@
 
     <sprite name="smasher">
       <image file="../images/traps/smasher.png">
-        <grid array="6,1"  height="189" width="282" x="0" y="0" />
+        <grid pos="0,0" size="282,189" array="6,1" />
       </image>
     </sprite>
 
     <sprite name="hammer">
-      <animation loop="no"/>
+      <animation speed="60" loop="no" />
       <image file="../images/traps/hammer.png">
-        <grid array="13,1"  height="181" width="151" x="0" y="0" />
+        <grid pos="0,0" size="151,181" array="13,1" />
       </image>
     </sprite>
 
     <sprite name="fake_exit">
       <translation origin="bottom_center"/>
       <image file="../images/traps/fake_exit.png">
-        <grid array="9,1" height="112" tcol="0" width="75" x="0" y="0" />
+        <grid pos="0,0" size="75,112" array="9,1" />
       </image>
     </sprite>
 
     <sprite name="spike">
       <image file="../images/traps/spike.png">
-        <grid array="14,1" height="32" tcol="0" width="32" x="0" y="0" />
+        <grid pos="0,0" size="32,32" array="14,1" />
       </image>
     </sprite>
 
-    <sprite name="guillotinekill">
-      <image file="../images/traps/guillotinekill.png">
-        <grip array="12,2"  height="96" tcol="0" width="80" x="0" y="0" />
-      </image>
-    </sprite>
-    
+    <section name="guillotinekill">
+      <sprite name="left">
+        <image file="../images/traps/guillotinekill.png">
+          <grid pos="0,0" size="80,96" array="12,1" />
+        </image>
+      </sprite>
+        
+      <sprite name="right">
+        <image file="../images/traps/guillotinekill.png">
+          <grid pos="0,96" size="80,96" array="12,1" />
+        </image>
+      </sprite>
+    </section>
+
     <sprite name="guillotineidle">
       <image file="../images/traps/guillotineidle.png">
-        <grip array="7,1"  height="96"  tcol="0" width="80" x="0" y="0" />
+        <grid pos="0,0" size="80,96" array="7,1" />
       </image>
     </sprite>
-
+        
     <sprite name="laser_exit">
       <image file="../images/traps/laser_exit.png">
-        <grid array="6,1" height="60" tcol="0" width="75" x="0" y="0" />
+        <grid pos="0,0" size="75,60" array="6,1" />
       </image>
     </sprite>
 
     <sprite name="bumper">
       <translation origin="bottom_center"/>
       <image file="../images/traps/bumper.png">
-        <grid array="6,1" height="102" tcol="0" width="60" x="0" y="0" />
+        <grid pos="0,0" size="60,102" array="6,1" />
       </image>
     </sprite>
 
Index: src/worldobjs/guillotine.cxx
===================================================================
--- src/worldobjs/guillotine.cxx	(revision 2454)
+++ src/worldobjs/guillotine.cxx	(working copy)
@@ -28,21 +28,16 @@
 namespace WorldObjs {
 
 Guillotine::Guillotine(const FileReader& reader)
-  : surface  (Resource::load_sprite("traps/guillotinekill")),
-    idle_surf(Resource::load_sprite("traps/guillotineidle")),
+  : sprite_kill_right (Resource::load_sprite("traps/guillotinekill/right")),
+    sprite_kill_left (Resource::load_sprite("traps/guillotinekill/left")),
+    sprite_idle (Resource::load_sprite("traps/guillotineidle")),
     killing(false)
 {
   reader.read_vector("position", pos);
-
-  counter.set_size(surface.get_frame_count()/2);
-  counter.set_type(GameCounter::once);
-  counter.set_speed(0.7);
-  counter = 0;
-
-  idle_counter.set_size(idle_surf.get_frame_count());
-  idle_counter.set_type(GameCounter::loop);
-  idle_counter.set_speed(0.3);
-  idle_counter = 0;
+  
+  sprite_kill_right.set_play_loop(false);
+  sprite_kill_left.set_play_loop(false);
+  sprite_idle.set_play_loop(true);
 }
 
 void
@@ -50,11 +45,11 @@
 {
   if (killing) {
     if (direction.is_left())
-      gc.color().draw(surface, pos, counter);
+      gc.color().draw (sprite_kill_left, pos);
     else
-      gc.color().draw (surface, pos, counter + 12);
+      gc.color().draw (sprite_kill_right, pos);
   } else {
-    gc.color().draw (idle_surf, pos, idle_counter);
+    gc.color().draw (sprite_idle, pos);
   }
 }
 
@@ -68,19 +63,23 @@
 void
 Guillotine::update ()
 {
-  if (counter.finished()) {
-    counter = 0;
+  // Only have to check one sprite because they update simultaneously
+  if (sprite_kill_left.is_finished())
     killing = false;
-  }
 
   PinguHolder* holder = world->get_pingus();
   for (PinguIter pingu = holder->begin (); pingu != holder->end (); ++pingu)
     catch_pingu(*pingu);
 
   if (killing) {
-    ++counter;
+    // Update both sprites so they finish at the same time.
+    sprite_kill_left.update();
+    sprite_kill_right.update();
+    // FIXME: Should be a different sound
+    if (sprite_kill_left.get_current_frame() == 7)
+       WorldObj::get_world()->play_sound("splash", pos);
   } else {
-    ++idle_counter;
+    sprite_idle.update();
   }
 }
 
@@ -95,6 +94,8 @@
 	  killing = true;
 	  pingu->set_status(PS_DEAD);
 	  direction = pingu->direction;
+    sprite_kill_left.restart();
+    sprite_kill_right.restart();
 	}
     }
 }
Index: src/worldobjs/guillotine.hxx
===================================================================
--- src/worldobjs/guillotine.hxx	(revision 2454)
+++ src/worldobjs/guillotine.hxx	(working copy)
@@ -37,12 +37,11 @@
 class Guillotine : public WorldObj
 {
 private:
-  CL_Sprite   surface;
-  CL_Sprite   idle_surf;
+  CL_Sprite   sprite_kill_right;
+  CL_Sprite   sprite_kill_left;  
+  CL_Sprite   sprite_idle;
   Vector      pos;
   Direction   direction;
-  GameCounter counter;
-  GameCounter idle_counter;
 
   bool killing;
 




