diff --git a/ajax/checkrequests.php b/ajax/checkrequests.php
new file mode 100644
index 0000000..fb6e9a6
--- /dev/null
+++ b/ajax/checkrequests.php
@@ -0,0 +1,14 @@
+<?php
+	require '../php/utils.php';
+	$user = get_users($_GET['id']);
+	
+	echo '{ ';
+	$first = true;
+	foreach ($user as $prop => $value) {
+		if (!$first) echo ', ';
+		else $first = false;
+		if ($prop == "nomcomplet") echo '"'.$prop.'": "'.$value.'"';
+		else echo '"'.$prop.'": '.$value;
+	}
+	echo ' }';
+?>
diff --git a/ajax/getusers.php b/ajax/getusers.php
new file mode 100644
index 0000000..cb8520d
--- /dev/null
+++ b/ajax/getusers.php
@@ -0,0 +1,5 @@
+<?php
+	require '../php/utils.php';
+	$users = get_users(0);
+	foreach ($users as $user) echo "<option value='".$user->id."'>".$user->nomcomplet."</option>\n";
+?>
diff --git a/ajax/victiminfo.php b/ajax/victiminfo.php
new file mode 100644
index 0000000..2396bb8
--- /dev/null
+++ b/ajax/victiminfo.php
@@ -0,0 +1,9 @@
+<?php
+	require '../php/utils.php';
+	$user = get_users($_GET['userid']);
+	$victim = get_users($user->quimata);
+?>
+
+<img width="300px" src="./imgs/<?=$victim->id?>.png" />
+<h2 id="victim_name"><?=$victim->nomcomplet?></h2>
+<h3><span id="victim_curs"><?=$victim->curs?></span>-<span id="victim_grau"><?=$victim->grau?></span></h3>
diff --git a/css/main.css b/css/main.css
index 8ba3b54..2e47813 100644
--- a/css/main.css
+++ b/css/main.css
@@ -18,4 +18,4 @@
 
 button#lose {
 	background-color: red;
-}
\ No newline at end of file
+}
diff --git a/index.php b/index.php
index 9f363ab..92c6850 100644
--- a/index.php
+++ b/index.php
@@ -22,7 +22,7 @@
 		</div>
 		
 		<script>
-			$.post("./php/getusers.php", function(data, status){
+			$.post("./ajax/getusers.php", function(data, status){
 				$("#list").html(data);
 			});
 		</script>
diff --git a/js/utils.js b/js/utils.js
index 228ffa4..42f720a 100644
--- a/js/utils.js
+++ b/js/utils.js
@@ -5,44 +5,52 @@
     return results === null ? '' : decodeURIComponent(results[1].replace(/\+/g, ' '));
 };
 
-function send_request(user, victim, msg) {
+function send_request(user, msg) {
 	$.ajax({
 		'url': './php/request.php', 
 		'type': 'GET',
 		'contentType': 'application/json; charset=utf-8',
 		'data': { 'user_id': user.id,
-				  'victim_id': victim.id,
 				  'user_quimata': user.quimata,
-				  'victim_quimata': victim.quimata,
 				  'msg': msg
 				}, 
 		'success': function(data) {
-			if (msg <= 2) $.notify('Confirmació enviada', 'success');
-			else $.notify('Resposta guardada', 'success');
+			$.notify('Resposta guardada', 'success');
 			console.log(data);
+			
+			if (msg == 'CONF KILL' || msg == 'CONF DEAD') {
+				$(".victima").fadeOut(400, function() {
+					$(".victima").load('./ajax/victiminfo.php?userid=' + user.id);
+					$(".victima").fadeIn(400);
+				});
+			}
 		},
 		'error': function(xhr, status, error) { 
-			console.log('Error! Torna-ho a intentar o contacta amb l\'Andreu: +34681236024');
-			console.log(xhr.responseText);
+			$.notify('Error! Torna-ho a intentar o contacta amb l\'Andreu: +34681236024');
+			console.log(error);
 		}
 	});
 }
 
-function check_requests(requested, user, victim) {	
+function check_requests(info, user) {	
 	let dead = false;
-	let killed = false;
 	
-	if (requested != 0) {
+	if (info.requested) {
 		// Check for requests
-		if(requested == 1) dead = confirm("El teu assassí ha dit que t'ha matat, és veritat?");
-		if(requested == 2) killed = confirm("En/na " + victim.nom + " ha dit que l'has matat, és veritat?");
-		
+		if(info.requested) dead = confirm("El teu assassí ha dit que t'ha matat, és veritat?");
+	
 		// Confirm/deny request
-		if (dead) send_request(user, victim, "CONF DEAD"); // confirm death
-		else if (killed) send_request(user, victim, "CONF KILL"); // confirm kill
-		else send_request(user, victim, "DENY REQ"); // deny kill/death
+		if (dead) send_request(user, "CONF DEAD"); // confirm death
+		else send_request(user, "DENY REQ"); // deny kill/death
 	}	
 
 	// Return mort
-	return dead;
+	return dead || info.mort;
+}
+
+function change_victim(user) {
+	$(".victima").fadeOut(400, function() {
+		$(".victima").load('./ajax/victiminfo.php?userid=' + user.id);
+		$(".victima").fadeIn(400);
+	});
 }
diff --git a/main.php b/main.php
index 5bf6765..820a18e 100644
--- a/main.php
+++ b/main.php
@@ -18,13 +18,11 @@
 				'id': <?=$user->id?>,
 				'quimata': <?=$user->quimata?>,
 				'requested': <?=$user->requested?>,
-				'mort': <?=$user->mort?>
-			};
-			
-			let victim = {
-				'id': <?=$victim->id?>,
-				'quimata': <?=$victim->quimata?>,
-				'nom': "<?=$victim->nom()?>"
+				'mort': <?=$user->mort?>,
+				
+				'nom': "<?=$user->nomcomplet?>",
+				'curs': <?=$user->curs?>,
+				'grau': <?=$user->grau?>
 			};
 		</script>
 	
@@ -43,23 +41,31 @@
 				</div>
 			</div>
 		</div>
-		<div id="butons">
-			<button id="win" onclick="js: send_request(user, victim, 'REQ KILL');">L'he matat</button>
-			<button id="lose" onclick="js: send_request(user, victim, 'REQ DEAD');">M'han matat</button>
+		<div id="butons" class="options">
+			<button id="win" onclick="js: send_request(user, 'REQ KILL');">L'he matat</button>
 		</div>
 		
 		<script>
 			$(document).ready(function() {
+				// Set interval of checking
 				let checking = setInterval(function() {
-					$.ajax({ url: "./php/checkrequests.php", data: { id: user.id }, type: 'GET',
-						success: function(data) {
-							$("#state").load("./php/checkrequests.php?id=" + user.id, function(response, status, xhr) {
-								console.log(response);
-								if (!user.mort) user.mort = check_requests(response, user, victim);
-								else clearInterval(checking);
-							});
-						}});
-				}, 1000);
+					$.ajax({
+						url: "./ajax/checkrequests.php",
+						data: { id: user.id },
+						type: 'GET',
+						success: function(response, status, xhr) {
+							let info = JSON.parse(response);
+							if (!user.mort) user.mort = check_requests(info, user);
+							else location.reload();
+														
+							if (info.quimata != user.quimata) {
+								change_victim(info);
+								user = info;
+							}
+							
+							console.log(response);
+					}});
+				}, 1500);
 			});
 		</script>
 	</body>
diff --git a/php/checkrequests.php b/php/checkrequests.php
deleted file mode 100644
index 4995ac4..0000000
--- a/php/checkrequests.php
+++ /dev/null
@@ -1,32 +0,0 @@
-<?php
-	// Get the id
-	$id = $_GET['id'];
-	
-	// Define MySQL login variables
-	$servername = "localhost"; // "fdb22.awardspace.net";
-	$username = "root"; // "3155560_users";
-	$password = ""; // "btechnoro@fox4news.info";
-
-	// Create connection
-	$conn = new mysqli($servername, $username, $password, "pastanaga");
-	if ($conn->connect_error) die("Connection failed: " . $conn->connect_error);
-	$conn->set_charset("utf8");
-	
-	// Do the query
-	$query = "SELECT requested FROM users WHERE id=".$id;
-	$state = 0;
-
-	// Fetch the information of the user
-	if ($result = $conn->query($query)) {
-		while ($row = $result->fetch_row()) $state = $row[0];
-		$result->close();
-	} else {
-		die("Wrong query: " . $query);
-	}
-
-	// Close connection
-	$conn->close();
-	
-	// Print the state
-	echo $state;
-?>
diff --git a/php/getusers.php b/php/getusers.php
deleted file mode 100644
index b23c8c0..0000000
--- a/php/getusers.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-	// Define MySQL login variables
-	$servername = "localhost"; // "fdb22.awardspace.net";
-	$username = "root"; // "3155560_users";
-	$password = ""; // "btechnoro@fox4news.info";
-
-	// Create connection
-	$conn = new mysqli($servername, $username, $password, "pastanaga");
-	if ($conn->connect_error) die("Connection failed: " . $conn->connect_error);
-	$conn->set_charset("utf8");
-	
-	// Do the query
-	$query = "SELECT * FROM users";
-
-	// Fetch the information of the user
-	if ($result = $conn->query($query)) {
-		while ($row = $result->fetch_row()) {
-			$id = $row[0];
-			$nomcomplet = $row[1];
-			$curs = $row[2];
-			$grau = $row[3];
-			$quimata = $row[4];
-			
-			// Echo the options
-			echo "<option value='".$id."'>".$nomcomplet."</option>\n";
-		}
-		$result->close();
-	} else {
-		die("Wrong query: " . $query);
-	}
-
-	// Close connection
-	$conn->close();
-?>
diff --git a/php/login.php b/php/login.php
index 2dd713e..4dd5ee7 100644
--- a/php/login.php
+++ b/php/login.php
@@ -1,55 +1,6 @@
 <?php
-	class User{
-		public $id;
-		public $nomcomplet;
-		public $curs;
-		public $grau;
-		public $quimata;
-		
-		public function nom() {
-			$noms = explode(" ", $this->nomcomplet);
-			return $noms[0];
-		}
-	}
-	
-	function get_user($id) {
-		$user = new User();
-		
-		// Define MySQL login variables
-		$servername = "localhost"; // "fdb22.awardspace.net";
-		$username = "root"; // "3155560_users";
-		$password = ""; // "btechnoro@fox4news.info";
-
-		// Create connection
-		$conn = new mysqli($servername, $username, $password, "pastanaga");
-		if ($conn->connect_error) die("Connection failed: " . $conn->connect_error);
-		$conn->set_charset("utf8");
-		
-		// Do the query
-		$query = "SELECT * FROM users WHERE id=".$id;
-
-		// Fetch the information of the user
-		if ($result = $conn->query($query)) {
-			while ($row = $result->fetch_row()) {
-				$user->id = $row[0];
-				$user->nomcomplet = $row[1];
-				$user->curs = $row[2];
-				$user->grau = $row[3];
-				$user->quimata = $row[4];
-				$user->requested = $row[5];
-				$user->mort = $row[6];
-			}
-			$result->close();
-		} else {
-			die("Wrong query: " . $query);
-		}
-
-		// Close connection
-		$conn->close();
-		
-		return $user;
-	}
-	
-	$user = get_user($_GET['user']);
-	$victim = get_user($user->quimata);
+	require 'utils.php';
+	$user = get_users($_GET['user']);
+	$victim = get_users($user->quimata);
+	if ($user->mort) die("Puto mort de merda");
 ?>
diff --git a/php/request.php b/php/request.php
index 1a34cdf..ae4e3bb 100644
--- a/php/request.php
+++ b/php/request.php
@@ -12,18 +12,16 @@
 	// Do the query
 	$query = "";
 	$query2 = "";
-	if ($_GET['msg'] == "REQ KILL") $query = "UPDATE users SET requested=1 WHERE id=".(int)$_GET['victim_id']; // request kill
+	
+	$victimid = "ANY (SELECT quimata FROM users WHERE id=".(int)$_GET['user_id'].")";
+	
+	if ($_GET['msg'] == "REQ KILL") $query = "UPDATE users SET requested=1 WHERE id=".$victimid; // request kill
 	if ($_GET['msg'] == "REQ DEAD") $query = "UPDATE users SET requested=2 WHERE quimata=".(int)$_GET['user_id']; // request dead
 	if ($_GET['msg'] == "CONF DEAD") {
 		// User gets killed
-		$query = "UPDATE users SET requested=0, quimata=".(int)$_GET['user_quimata']." WHERE quimata=".$_GET['user_id']; // assign new victim to killer
+		$query = "UPDATE users SET requested=0, quimata=".(int)$_GET['user_quimata']." WHERE quimata=".(int)$_GET['user_id']; // assign new victim to killer
 		$query2 = "UPDATE users SET quimata=0, mort=1 WHERE id=".(int)$_GET['user_id']; // confirm victim dead/killed
 	}
-	if ($_GET['msg'] == "CONF KILL") {
-		// Victim gets killed
-		$query = "UPDATE users SET requested=0, quimata=".(int)$_GET['victim_quimata']." WHERE quimata=".$_GET['victim_id']; // assign new victim to killer
-		$query2 = "UPDATE users SET quimata=0, mort=1 WHERE id=".(int)$_GET['victim_id']; // confirm victim dead/killed
-	}
 	if ($_GET['msg'] == "DENY REQ") $query = "UPDATE users SET requested=0 WHERE id=".(int)$_GET['user_id']; // deny request
 
 	// Fetch the information of the user
diff --git a/php/utils.php b/php/utils.php
new file mode 100644
index 0000000..c6147fd
--- /dev/null
+++ b/php/utils.php
@@ -0,0 +1,58 @@
+<?php
+	class User{
+		public $id;
+		public $nomcomplet;
+		public $curs;
+		public $grau;
+		public $quimata;
+		
+		public function nom() {
+			$noms = explode(" ", $this->nomcomplet);
+			return $noms[0];
+		}
+	}
+	
+	function get_users($id = 0) {
+		$users = [];
+		
+		// Define MySQL login variables
+		$servername = "localhost"; // "fdb22.awardspace.net";
+		$username = "root"; // "3155560_users";
+		$password = ""; // "btechnoro@fox4news.info";
+
+		// Create connection
+		$conn = new mysqli($servername, $username, $password, "pastanaga");
+		if ($conn->connect_error) die("Connection failed: " . $conn->connect_error);
+		$conn->set_charset("utf8");
+		
+		// Do the query
+		$query = "SELECT * FROM users";
+		if ($id > 0) $query .= " WHERE id=".$id;
+
+		// Fetch the information of the user
+		if ($result = $conn->query($query)) {
+			while ($row = $result->fetch_row()) {
+				$user = new User();
+				
+				$user->id = $row[0];
+				$user->nomcomplet = $row[1];
+				$user->curs = $row[2];
+				$user->grau = $row[3];
+				$user->quimata = $row[4];
+				$user->requested = $row[5];
+				$user->mort = $row[6];
+				
+				array_push($users, $user);
+			}
+			$result->close();
+		} else {
+			die("Wrong query: " . $query);
+		}
+
+		// Close connection
+		$conn->close();
+		
+		if ($id > 0) return $users[0];
+		else return $users;
+	}
+?>
