In theory a working client - just need a server to test it against now