diff --git a/src/client.py b/src/client.py
--- a/src/client.py
+++ b/src/client.py
@@ -1,9 +1,11 @@
-from hashtree import HashTree
-import collections
+import collections
 import socket
 import logging as log
+from datetime import datetime
 
 import config as conf
+from util import progress
+from hashtree import HashTree
 from networkers import NetworkReader,NetworkWriter
 
 
@@ -29,6 +31,7 @@ class Client:
 		self.filename=filename
 
 	def negotiate(self):
+		print(datetime.now(), "initializing...")
 		localTree=HashTree.fromFile(self.filename)
 		blocksToTransfer=[]
 		nodeStack=collections.deque([0]) # root
@@ -39,6 +42,7 @@ class Client:
 			outcoming.writeMsg(jsonData)
 
 		# determine which blocks to send
+		print(datetime.now(), "negotiating:")
 		while len(nodeStack)>0:
 			with Connection() as (incoming,outcoming):
 				i=nodeStack.pop()
@@ -52,7 +56,10 @@ class Client:
 					if 2*i+3<len(localTree.store): # inner node
 						nodeStack.append(2*i+2)
 						nodeStack.append(2*i+1)
-					else: blocksToTransfer.append(i-localTree.leafStart) # leaf
+					else:
+						blocksToTransfer.append(i-localTree.leafStart) # leaf
+						progress(i-localTree.leafStart, localTree.leafCount)
+		print("100%")
 
 		return blocksToTransfer
 
@@ -61,7 +68,8 @@ class Client:
 		dataFile=open(self.filename,mode="rb")
 		i1=-1
 
-		for i2 in blocksToTransfer:
+		print(datetime.now(), "sending data:")
+		for (k,i2) in enumerate(blocksToTransfer):
 			with Connection() as (incoming,outcoming):
 				jsonData={"command":"send", "index":i2, "dataType":"data"}
 				if i1+1!=i2:
@@ -71,10 +79,12 @@ class Client:
 				log.info("block #{0}: {1}...{2}".format(i2,binData[:5],binData[-5:]))
 
 				outcoming.writeMsg(jsonData,binData)
-				i1=i2
+			i1=i2
+			progress(k,len(blocksToTransfer))
+		print("100%")
 
 		with Connection() as (incoming,outcoming):
 			outcoming.writeMsg({"command":"end"})
 
-		log.info("closing session...")
+		log.info(datetime.now(), "closing session...")
 		dataFile.close()