diff --git a/harkka3/samson/assets/sounds/fart-01.mp3 b/harkka3/samson/assets/sounds/fart-01.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..5281d53ae2cf9f7a142e419ca0297ef667101a88
Binary files /dev/null and b/harkka3/samson/assets/sounds/fart-01.mp3 differ
diff --git a/harkka3/samson/assets/sounds/fart-03.mp3 b/harkka3/samson/assets/sounds/fart-03.mp3
new file mode 100644
index 0000000000000000000000000000000000000000..620f15813bc9c707d0256c654e251499e938d34a
Binary files /dev/null and b/harkka3/samson/assets/sounds/fart-03.mp3 differ
diff --git a/harkka3/samson/assets/sprites/button1.png b/harkka3/samson/assets/sprites/button1.png
new file mode 100644
index 0000000000000000000000000000000000000000..290756463c4845d973e60686791e585057a71e0e
Binary files /dev/null and b/harkka3/samson/assets/sprites/button1.png differ
diff --git a/harkka3/samson/assets/sprites/button2.png b/harkka3/samson/assets/sprites/button2.png
new file mode 100644
index 0000000000000000000000000000000000000000..83e27a8b84628b80d3cb100e7876e3700fe9afdb
Binary files /dev/null and b/harkka3/samson/assets/sprites/button2.png differ
diff --git a/harkka3/samson/assets/sprites/button3.png b/harkka3/samson/assets/sprites/button3.png
new file mode 100644
index 0000000000000000000000000000000000000000..b54dc6ffcbcd23410bf2fd818f7f1f2859c6fc1f
Binary files /dev/null and b/harkka3/samson/assets/sprites/button3.png differ
diff --git a/harkka3/samson/state2.js b/harkka3/samson/state2.js
index bb54baa95865e5bcabd9cd90750660b45afb1ea3..ae1514c3e64750e315889a8a8e15265aefcda854 100644
--- a/harkka3/samson/state2.js
+++ b/harkka3/samson/state2.js
@@ -1,5 +1,5 @@
 demo.state2 = function(){};
-var barrel, bullets, velocity = 1000, nextFire = 0, fireRate = 200, enemy;
+var barrel, bullets, velocity = 1000, nextFire = 0, fireRate = 200, enemy, bullet, enemyGroup;
 
 demo.state2.prototype = {
     preload: function(){
@@ -30,24 +30,52 @@ demo.state2.prototype = {
         barrel.anchor.setTo(0, 0.5);
         barrel.scale.setTo(0.5);
 
-        enemy = game.add.sprite(100, 200, 'alien');
+        enemy = game.add.sprite(200, 400, 'alien');
+        enemy.anchor.setTo(0.5, 0.5);
+        enemy.scale.setTo(0.7, 0.7);
+        game.physics.enable(enemy);
+
+        enemyGroup = game.add.group();
+        enemyGroup.enableBody = true;
+        enemyGroup.physicsBodyType = Phaser.Physics.ARCADE;
+
+        for (let i = 0; i < 3; i++) {
+            enemyGroup.create(1300, 350 * i + 100, 'alien');
+        }
+
+        enemyGroup.setAll('anchor.y', 0.5);
+        enemyGroup.setAll('anchor.x', 0.5);
+        enemyGroup.setAll('scale.y', 0.4);
+        enemyGroup.setAll('scale.x', 0.4);
     },
     update: function(){
         barrel.rotation = game.physics.arcade.angleToPointer(barrel);
         if(game.input.activePointer.isDown) {
             this.fire();
         }
+
+        game.physics.arcade.overlap(bullets, enemy, this.hitEnemy);
+        game.physics.arcade.overlap(bullets, enemyGroup, this.hitGroup);
     },
     fire: function() {
         if (game.time.now > nextFire) {
             nextFire = game.time.now + fireRate;
             console.log('firing');
-            var bullet = bullets.getFirstDead();
+            bullet = bullets.getFirstDead();
             bullet.reset(barrel.x, barrel.y);
 
             game.physics.arcade.moveToPointer(bullet, velocity);
             bullet.rotation = game.physics.arcade.angleToPointer(bullet);
         }
         
+    },
+    hitEnemy: function(){
+        console.log('hit');
+        enemy.kill();
+        bullet.kill();
+    },
+    hitGroup: function(b, e){
+        b.kill();
+        e.kill();
     }
 }
\ No newline at end of file
diff --git a/harkka3/samson/state3.js b/harkka3/samson/state3.js
index c803491387866fe2a35a26d21d9bae9cd8841017..73c096b88eee56de3ab1f6597b2b38973ef1c170 100644
--- a/harkka3/samson/state3.js
+++ b/harkka3/samson/state3.js
@@ -1,9 +1,44 @@
 demo.state3 = function(){};
+var sound;
+
 demo.state3.prototype = {
-    preload: function(){},
+    preload: function(){
+        game.load.image('button1', 'assets/sprites/button1.png');
+        game.load.image('button2', 'assets/sprites/button2.png');
+        game.load.image('button3', 'assets/sprites/button3.png');
+        game.load.audio('farts', 'assets/sounds/fart-03.mp3');
+    },
     create: function(){
         game.stage.backgroundColor = '#cc3300';
         addChangeStateEventListeners();
+
+        sound = game.add.audio('farts');
+        sound.addMarker('low', 0, 0.5);
+        sound.addMarker('high', 0.5, 1);
+
+        var b1 = game.add.button(100, 100, 'button1', function(){
+            changeState(null, 1);
+        });
+        var b2 = game.add.button(400, 400, 'button2', function(){
+            changeState(null, 2);
+        });
+        var b3 = game.add.button(700, 700, 'button3');
+
+        b1.onInputDown.add(this.tint, b1);
+        b2.onInputDown.add(this.tint, b2);
+        b3.onInputDown.add(this.tint, b3);
+
+        b1.onInputUp.add(this.untint, b1);
+        b2.onInputUp.add(this.untint, b2);
+        b3.onInputUp.add(this.untint, b3);
+    },
+    tint: function(){
+        this.tint = 0xbbbbbb;
+        sound.play('low');
+    },
+    untint: function(){
+        this.tint = 0xffffff;
+        sound.play('high');
     },
     update: function(){}
 }
\ No newline at end of file