diff --git a/client.py b/client.py
index 368e23be804fbcdb8111ca70a304c8aba5de7ffb..3d696cdf11163d09b9efeedc1582bf96f03aba92 100644
--- a/client.py
+++ b/client.py
@@ -21,11 +21,12 @@ Sources:
 https://www.ietf.org/rfc/rfc3092.txt <- Very important RFC, please read it
 """
 
-import asyncio, getpass, random
+import sys, os, asyncio, getpass, random, time, secrets
 import ubjson
 import plyvel
 import libnacl.sign
-from utils import *
+from duniterpy.key import SigningKey, PublicKey
+import utils
 
 VERSION = "0.1.0"
 AUTHORS = ["Pascal Engélibert <tuxmain@zettascript.org>"]
@@ -65,7 +66,7 @@ class Confirmation():
 		}
 
 def get_peers(host, proxy=None, proxy_onion_only=False):
-	header, content = sdata(host, "GET", "/pubkey/list", proxy=proxy, proxy_onion_only=proxy_onion_only)
+	header, content = utils.sdata(host, "GET", "/pubkey/list", proxy=proxy, proxy_onion_only=proxy_onion_only)
 	
 	try:
 		data = ubjson.loadb(content)
@@ -75,9 +76,9 @@ def get_peers(host, proxy=None, proxy_onion_only=False):
 		print("Error: bad UBJSON")
 		return
 	
-	peers = [Peer(data["pubkey"], host[0], host[1], True)]
+	peers = [utils.Peer(data["pubkey"], host[0], host[1], True)]
 	for peer in data["peers"]:
-		peers.append(Peer(peer["pubkey"], peer["host"], peer["port"], peer["up"]))
+		peers.append(utils.Peer(peer["pubkey"], peer["host"], peer["port"], peer["up"]))
 	
 	return peers
 
@@ -110,7 +111,7 @@ def mix(db_txs, amount, base, sender, path, host, proxy=None, proxy_onion_only=F
 	message = b""
 	i = len(path)-2
 	while i >= 0:
-		ot_salt, ot_password = gen_keys()
+		ot_salt, ot_password = utils.gen_keys()
 		ot_keys = SigningKey.from_credentials(ot_salt, ot_password)
 		onetime_keys.insert(0, ot_keys)
 		out_seeds = comment_seeds[0]
@@ -130,7 +131,7 @@ def mix(db_txs, amount, base, sender, path, host, proxy=None, proxy_onion_only=F
 	
 	while True:
 		try:
-			header, content = sdata(host, "POST", "/pubkey/mix/"+sender.pubkey+"/"+str(int(amount))+"/"+str(int(base))+"/client", message, proxy=proxy, proxy_onion_only=proxy_onion_only)
+			header, content = utils.sdata(host, "POST", "/pubkey/mix/"+sender.pubkey+"/"+str(int(amount))+"/"+str(int(base))+"/client", message, proxy=proxy, proxy_onion_only=proxy_onion_only)
 		except ConnectionRefusedError:
 			print("Error: Connection refused; retrying...")
 			time.sleep(3)
@@ -151,7 +152,7 @@ def mix(db_txs, amount, base, sender, path, host, proxy=None, proxy_onion_only=F
 		time.sleep(5)
 		print("Asking input node for confirmation...")
 		try:
-			header, content = sdata(host, "GET", "/getconfirm/"+sender.pubkey+"/"+comment_seeds[0][1].hex(), proxy=proxy, proxy_onion_only=proxy_onion_only)
+			header, content = utils.sdata(host, "GET", "/getconfirm/"+sender.pubkey+"/"+comment_seeds[0][1].hex(), proxy=proxy, proxy_onion_only=proxy_onion_only)
 		except ConnectionRefusedError:
 			continue
 		
@@ -185,7 +186,7 @@ def mix(db_txs, amount, base, sender, path, host, proxy=None, proxy_onion_only=F
 			raw_confirms = []
 			offset = 64
 			while offset+4 < len(data):
-				length = bin_to_int(data[offset:offset+4])
+				length = utils.bin_to_int(data[offset:offset+4])
 				offset += 4
 				raw_confirms.append(data[offset:offset+length])
 				offset += length
@@ -253,14 +254,14 @@ def mix(db_txs, amount, base, sender, path, host, proxy=None, proxy_onion_only=F
 				
 				if send_tx:
 					try:
-						send_transaction(sender, path[0], amount, gen_comment(comment_seeds[0]))
+						utils.send_transaction(sender, path[0], amount, utils.gen_comment(comment_seeds[0]))
 						
 						message["sent"] = True
 						db_txs.put(comment_seeds[0][1], PublicKey(sender.pubkey).encrypt_seal(ubjson.dumpb(message)))
 					except socket.timeout:
-						logprint("Error when sending tx: timeout", LOG_ERROR)
+						utils.logprint("Error when sending tx: timeout", LOG_ERROR)
 					except Exception as e:
-						logprint("Error when sending tx: " + str(e), LOG_ERROR)
+						utils.logprint("Error when sending tx: " + str(e), LOG_ERROR)
 				return
 
 async def main(db_txs, host, receiver, amount=1000, layers=3, proxy=None, proxy_onion_only=False, send_tx=True):
@@ -313,25 +314,25 @@ python3 client.py -h svetsae7j3usrycn.onion 10951 -r 78ZwwgpgdH5uLZLbThUQH7LKwPg
 """)
 		exit()
 	
-	DIR = os.path.expanduser(getargv("-d", DIR))
+	DIR = os.path.expanduser(utils.getargv("-d", DIR))
 	if DIR != "" and DIR[len(DIR)-1] == "/":
 		DIR = DIR[:len(DIR)-1] # Remove last slash
 	os.makedirs(DIR, exist_ok=True)
 	
-	receiver = getargv("-r", "")
+	receiver = utils.getargv("-r", "")
 	if receiver == "":
 		print("Error: No receiver set (try option --help)")
 		exit(1)
-	host = getargv("-h", "")
+	host = utils.getargv("-h", "")
 	if host == "":
 		print("Error: No host set (try option --help)")
 		exit(1)
-	port = int(getargv("-h", "", 2))
-	amount = int(getargv("-a", "1000"))
-	layers = int(getargv("-l", "3"))
+	port = int(utils.getargv("-h", "", 2))
+	amount = int(utils.getargv("-a", "1000"))
+	layers = int(utils.getargv("-l", "3"))
 	proxy = None
 	if "-p" in sys.argv:
-		proxy = (getargv("-p", "127.0.0.1", 1), int(getargv("-p", 9050, 2)))
+		proxy = (utils.getargv("-p", "127.0.0.1", 1), int(utils.getargv("-p", 9050, 2)))
 	proxy_onion_only = "--onion" in sys.argv
 	send_tx = not "--no-tx" in sys.argv
 	
diff --git a/utils.py b/utils.py
index af2ab28a3e10da7a1c120a72bf298ebed5e9d40a..8c8f5fd4587907bf45b2f7f0974c5c26c919a4fc 100644
--- a/utils.py
+++ b/utils.py
@@ -19,10 +19,7 @@
 import sys, os, re, socket, time, secrets, hashlib
 import socks
 from duniterpy.key import SigningKey, PublicKey
-_argv = sys.argv # silkaj reads sys.argv!
-sys.argv = []
 import silkaj.money, silkaj.tx, silkaj.auth
-sys.argv = _argv
 
 
 #-------- DATA