diff --git a/src/ClientMain.java b/src/ClientMain.java
new file mode 100644
index 0000000000000000000000000000000000000000..0d089151b00d3cd8f97822d3d11757906be2488f
--- /dev/null
+++ b/src/ClientMain.java
@@ -0,0 +1,123 @@
+import java.io.File;
+import java.io.IOException;
+import java.util.Random;
+
+public class ClientMain {
+	
+	public static void main(String[] args) throws Exception {
+		
+		final int cport = Integer.parseInt(args[0]);
+		int timeout = Integer.parseInt(args[1]);
+			
+		File downloadFolder = new File("downloads");
+		if (!downloadFolder.exists())
+			if (!downloadFolder.mkdir()) throw new RuntimeException("Cannot create download folder (folder absolute path: " + downloadFolder.getAbsolutePath() + ")");
+		
+		File uploadFolder = new File("to_store");
+		if (!uploadFolder.exists())
+			throw new RuntimeException("to_store folder does not exist");
+		
+		// testClient(cport, timeout, downloadFolder);
+		
+		// example to launch a number of concurrent clients, each doing the same operations
+		for (int i = 0; i < 10; i++) {
+			new Thread() {
+				public void run() {
+					test2Client(cport, timeout, downloadFolder, uploadFolder);
+				}
+			}.start();
+		}
+	}
+	
+	public static void test2Client(int cport, int timeout, File downloadFolder, File uploadFolder) {
+		Client client = null;
+		
+		try {
+			client = new Client(cport, timeout, Logger.LoggingType.ON_FILE_AND_TERMINAL);
+			client.connect();
+			Random random = new Random(System.currentTimeMillis() * System.nanoTime());
+			
+			File fileList[] = uploadFolder.listFiles();
+			for (int i=0; i<fileList.length/2; i++) {
+				File fileToStore = fileList[random.nextInt(fileList.length)];
+				try {					
+					client.store(fileToStore);
+				} catch (Exception e) {
+					System.out.println("Error storing file " + fileToStore);
+					e.printStackTrace();
+				}
+			}
+			
+			String list[] = null;
+			try { list = list(client); } catch(IOException e) { e.printStackTrace(); }
+			
+			for (int i = 0; i < list.length/4; i++) {
+				String fileToRemove = list[random.nextInt(list.length)];
+				try {
+					client.remove(fileToRemove);
+				} catch (Exception e) {
+					System.out.println("Error remove file " + fileToRemove);
+					e.printStackTrace();
+				}
+			}
+			
+			try { list = list(client); } catch(IOException e) { e.printStackTrace(); }
+			
+		} catch(IOException e) {
+			e.printStackTrace();
+		} finally {
+			if (client != null)
+				try { client.disconnect(); } catch(Exception e) { e.printStackTrace(); }
+		}
+	}
+	
+	public static void testClient(int cport, int timeout, File downloadFolder) {
+		Client client = null;
+		
+		try {
+			
+			client = new Client(cport, timeout, Logger.LoggingType.ON_FILE_AND_TERMINAL);
+		
+			try { client.connect(); } catch(IOException e) { e.printStackTrace(); return; }
+			
+			try { list(client); } catch(IOException e) { e.printStackTrace(); }
+			
+			try { client.store(new File("Clipboard01.pdf")); } catch(IOException e) { e.printStackTrace(); }
+			
+			try { client.store(new File("Clipboard01.pdf")); } catch(IOException e) { e.printStackTrace(); }
+
+			try { client.store(new File("Clipboard01.jpg")); } catch(IOException e) { e.printStackTrace(); }
+			
+			String list[] = null;
+			try { list = list(client); } catch(IOException e) { e.printStackTrace(); }
+			
+			if (list != null)
+				for (String filename : list)
+					try { client.load(filename, downloadFolder); } catch(IOException e) { e.printStackTrace(); }
+			
+			/*if (list != null)
+				for (String filename : list)
+					try { client.remove(filename); } catch(IOException e) { e.printStackTrace(); }
+			try { client.remove(list[0]); } catch(IOException e) { e.printStackTrace(); }
+			
+			try { list(client); } catch(IOException e) { e.printStackTrace(); }*/
+			
+		} finally {
+			if (client != null)
+				try { client.disconnect(); } catch(Exception e) { e.printStackTrace(); }
+		}
+	}
+
+	public static String[] list(Client client) throws IOException, NotEnoughDstoresException {
+		System.out.println("Retrieving list of files...");
+		String list[] = client.list();
+		
+		System.out.println("Ok, " + list.length + " files:");
+		int i = 0; 
+		for (String filename : list)
+			System.out.println("[" + i++ + "] " + filename);
+		
+		return list;
+	}
+	
+}