 				user?.sendJSON(json: json)
 			}
 			
-			func sendCanvas() {
+			func sendColors(json: JSON) {
 				var structure: [[String: NodeRepresentable]] = [[:]]
+				structure.append(["responseType": "colorList"])
+				for color in canvas.colors {
+					structure.append([
+						"R": color.color.red,
+						"G": color.color.green,
+						"B": color.color.blue,
+						"ID": color.ID])
+				}
+				guard let json = try? JSON(node: structure) else {
+					return
+				}
+				user?.sendJSON(json: json)
+			}
+			
+			//TODO: Use a raw base64 binary for this possibly
+			//TODO: Require userID for this to prevent unauthed users (IP banned) from spamming getCanvas
+			func sendCanvas(json: JSON) {
+				var structure: [[String: NodeRepresentable]] = [[:]]
+				structure.append(["responseType": "fullCanvas"])
 				for tile in canvas.tiles {
 					structure.append([
-						"x": tile.pos.x,
-						"y": tile.pos.y,
-						"ID":tile.color.ID])
+						"X": tile.pos.x,
+						"Y": tile.pos.y,
+						"colorID":tile.color])
 				}
 				guard let json = try? JSON(node: structure) else {
 					return

						case "initialAuth":
							initialAuth()
						case "getCanvas":
							sendCanvas()
						case "postTile":
							handleTilePlace(json: json)
						case "getTileData": break
						default: break
					}

				canvas.connections[user!] = ws
				//Return generated UUID
				let structure: [String: NodeRepresentable] = [
					"responseType": "authSuccessful",
					"uuid": user?.uuid]
				
				guard let json = try? JSON(node: structure) else {
