diff --git a/README.md b/README.md
index 4d56d6bcb264c73995b7e98c79fd9cad9a53c130..2af2839041769d70a7173928b0943292e85360a5 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,5 @@
-# TP2_Freenet_Go_Socket 
+# TP2 Freenet Go Socket
 
-Our amazing project !
\ No newline at end of file
+Groupe: MARTINOTY, Jérémy; RÜHL, Julian
+
+#
\ No newline at end of file
diff --git a/server/deploy.py b/server/deploy.py
index f9598fa40b9bf20db97e64bc13512f9cb0504a2d..da0a87531d70ad2b629b582fd0add3e2f5dfc132 100644
--- a/server/deploy.py
+++ b/server/deploy.py
@@ -59,7 +59,11 @@ for i in range(6):
     nodes.append(new_instance)
     print("Instance : " + instance_name + " created !")
 
+<<<<<<< Updated upstream
 print("Waiting 60 seconds for cloud-init completion...")
+=======
+print("Waiting 60 seconds for cloud-init completion...");
+>>>>>>> Stashed changes
 sleep(60)
 
 for instance in nodes:
diff --git a/server/server.go b/server/server.go
index 3bc1bffa27ff0c9c93b5c1212e0ea892b8d2c340..7e55958b213d051abe290efa48602c324ec2e7db 100644
--- a/server/server.go
+++ b/server/server.go
@@ -15,6 +15,7 @@ import (
 type Message struct {
 	Id    int
 	Key   int
+	Ttl   int
 	Type_ string
 }
 
@@ -32,32 +33,46 @@ type Contenu struct {
 var (
 	thisnode Node
 	port     string
-	contents  []Contenu
+	contents []Contenu
 	requests []Message
 )
 
-func createMessage(id int, key int, _type string) Message {
+func createMessage(id int, key int, ttl int, _type string) Message {
 	return Message{
 		Id:    id,
 		Key:   key,
+		Ttl:   ttl,
 		Type_: _type,
 	}
 }
 
-func createContenu(key int, origin string) {
+func createContenu(key int, origin string) Contenu {
 	return Contenu{
-		Key: key,
+		Key:    key,
 		Origin: origin,
 	}
 }
 
 func fillContents() {
-	rands := [10]int
-    rand.Seed(time.Now().UnixNano())
-    for i:=0; i<len(rands); i++ {
-        rands[i] = rand.Intn(100)
-		contents = append(contents, createContenu(v[i],node.Address))
-    }
+	var rands = [10]int{}
+
+	rand.Seed(time.Now().UnixNano())
+	for i := 0; i < len(rands); i++ {
+		rands[i] = rand.Intn(100)
+		contents = append(contents, createContenu(rands[i], thisnode.Address))
+	}
+
+	if thisnode.Id == 1 {
+		contents[3] = createContenu(0xc0ffee, thisnode.Address)
+	}
+
+	if thisnode.Id == 2 {
+		contents[2] = createContenu(0xdead, thisnode.Address)
+	}
+
+	if thisnode.Id == 3 {
+		contents[1] = createContenu(0xbeef, thisnode.Address)
+	}
 }
 
 func checkError(err error) {
@@ -113,39 +128,58 @@ func handleNewConn(conn net.Conn) {
 	fmt.Printf("Received : %+v", msg)
 
 	if msg.Type_ == "REQUEST" {
-		handleRequest(msg, conn)
+		handleRequest(*msg, conn)
 	} else if msg.Type_ == "POSITIVE" {
-		handlePositiveMessage(msg, conn)
+		handlePositiveMessage(*msg, conn)
 	} else {
-		handleNegativeMessage(msg, conn)
+		handleNegativeMessage(*msg, conn)
 	}
 }
 
+func handleNegativeMessage(msg Message, conn net.Conn) {
+
+}
+
 func handlePositiveMessage(msg Message, conn net.Conn) {
+
 	//transmettre message au noeud qui a démandé SAUF si nous étions le demandeur
 }
 
+func getNode(id int) Node {
+	for _, node := range thisnode.Neighbours {
+		if node.Id == id {
+			return node
+		}
+	}
+	return thisnode
+}
+
 func handleRequest(msg Message, conn net.Conn) {
-	requests = append(requests, msg)
-	
-	if hasKey(msg.Key) {
-		sendMessage(createMessage(thisnode.Id, msg.Key, "POSITIVE"))
+	new_ttl := msg.Ttl - 1
+	if hasAlreadyRequested(msg) {
+		sendMessage(createMessage(thisnode.Id, msg.Key, new_ttl, "NEGATIVE"), getNode(msg.Id))
 	} else {
-		//demander aux autres noeuds
+		requests = append(requests, msg)
+		if hasKey(msg.Key) {
+			sendMessage(createMessage(thisnode.Id, msg.Key, new_ttl, "POSITIVE"), getNode(msg.Id))
+		} else {
+			sendMessageAllExcept(createMessage(thisnode.Id, msg.Key, new_ttl, "REQUEST"), getNode(msg.Id))
+		}
 	}
 }
 
 func hasKey(key int) bool {
-	for _, element := range content {
+	for _, element := range contents {
 		if key == element.Key {
-			key_found = true
+			return true
 		}
 	}
+	return false
 }
 
 func hasAlreadyRequested(newreq Message) bool {
 	for _, request := range requests {
-		if request.Id == newreq.Id && request.Key == newreq.Key {
+		if request.Key == newreq.Key {
 			return true
 		}
 	}
@@ -160,19 +194,27 @@ func main() {
 
 	thisnode := readYaml(os.Args[2])
 	port := os.Args[1]
-	fillContents()
-
-	fmt.Println("Starting server on " + thisnode.Address + ":" + port)
 
+	initial_node := false
 	if os.Args[3] == "INIT" {
-
+		initial_node = true
+	} else if os.Args[3] != "WAIT" {
+		fmt.Println("Bad invocation. Require INIT or WAIT!")
+		os.Exit(0)
 	}
 
+	fillContents()
+	fmt.Println("Starting server on " + thisnode.Address + ":" + port)
+
 	listenSocket, err := net.Listen("tcp", thisnode.Address+":"+port)
 	checkError(err)
 
 	defer listenSocket.Close()
 
+	if initial_node {
+		sendMessage(createMessage(thisnode.Id, 0xc0ffee, 3, "REQUEST"), thisnode.Neighbours[0])
+	}
+
 	for {
 
 		connection, err := listenSocket.Accept()