diff --git a/src/client/Client.java b/src/client/Client.java
new file mode 100644
index 0000000000000000000000000000000000000000..fa442748b0961b69fa55af73f4db29af1cb7f868
--- /dev/null
+++ b/src/client/Client.java
@@ -0,0 +1,125 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package sisterclient;
+
+import java.io.IOException;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+import java.net.SocketException;
+import java.net.SocketTimeoutException;
+import java.net.UnknownHostException;
+import org.json.JSONObject;
+import java.util.Random;
+import java.util.Scanner;
+import java.util.concurrent.TimeUnit;
+/**
+ *
+ * @author LUCKY
+ */
+public class Client {
+    private int playerID;
+    private int port;
+    private int proposalNum;
+    private final int timeout=15000; //in milliseconds 
+    private boolean isProposer;
+    private String ipAddress;
+    private Random random;
+    private int previouskpu;
+    
+    public Client(int _playerid, int _port){
+        playerID = _playerid;
+        port = _port;
+        proposalNum = 0;
+        isProposer = false;
+        random = new Random();
+        previouskpu = -1;
+    }
+    public void setIsProposer(boolean _bool){
+        isProposer = _bool;
+    }
+    
+    public void setPort(int _port){
+        port = _port;
+    }
+    public void prepareProposal() throws SocketException, UnknownHostException, IOException{
+        byte[] sendData = new byte[1024];
+        byte[] receiveData = new byte[1024];  
+        if(isProposer){
+            DatagramSocket proposerSocket = new DatagramSocket();
+            InetAddress IPAddress = InetAddress.getByName("localhost");
+            String message  = "{\"method\":\"prepare_proposal\",\"proposal_id\": ["+proposalNum+","+playerID+"]}";
+            sendData = message.getBytes();
+            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
+            double rand = random.nextDouble();
+            if (rand < 0.85) {
+                proposerSocket.send(sendPacket);
+            }
+            proposerSocket.setSoTimeout(timeout);
+            String receivedResponse = null;
+            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
+            proposerSocket.receive(receivePacket);
+            receivedResponse = new String(receivePacket.getData());
+            System.out.println("FROM SERVER:" + receivedResponse);
+
+            proposerSocket.close();
+            boolean waiting = true;
+            /*while(waiting){
+                try{
+                    DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
+                    proposerSocket.receive(receivePacket);
+                    receivedResponse = new String(receivePacket.getData());
+                    System.out.println("FROM SERVER:" + receivedResponse);
+                    waiting = false;
+                    proposerSocket.close()
+                }catch(SocketTimeoutException e){
+                    receivedResponse = "{\"status\": \"error\",\"description\": \"No Response\"}";
+                    System.out.println("Timeout " + e +receivedResponse);
+                    proposerSocket.close();
+                }
+            }*/
+        }else{
+            String request = null;
+            String respond = null;
+            DatagramSocket serverSocket = new DatagramSocket(port);
+            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
+            serverSocket.setSoTimeout(timeout+10000);
+            JSONObject tes = null;
+            boolean getmessage = false;
+            try{
+                serverSocket.receive(receivePacket);
+                request = new String( receivePacket.getData());
+                System.out.println("RECEIVED: " + request);
+                tes = new JSONObject(request);
+                getmessage= true;
+            }catch(SocketTimeoutException e){
+                respond = "{\"status\": \"fail\",\"description\": \"rejected\"}";
+                System.out.println("Timeout " + e +respond);
+            }finally{
+                if (getmessage){
+                    if(tes.get("method").toString().compareTo("prepare_proposal")==0){
+                        System.out.println("aawawa");
+                        Scanner input = new Scanner(System.in);
+                        int in = Integer.parseInt(input.next()) ;
+                            switch(in){
+                                case 1 : respond = "{\"status\": \"ok\",\"description\": \"accepted\",\"previous_accepted\":"+previouskpu+"}"; break;
+                                case 2 : respond = "{\"status\": \"fail\",\"description\": \"rejected\"}"; break;
+                            }
+                        }
+                        InetAddress IPAddress = receivePacket.getAddress();
+                        //int port = receivePacket.getPort();
+                        System.out.println("aawawa");
+                        sendData = respond.getBytes();
+                        System.out.println(respond);
+                        DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
+                        serverSocket.send(sendPacket);
+                        System.out.println(IPAddress.toString());
+                        System.out.println(port);
+                }
+            }
+        }
+    }
+}