public static synchronized void beginSync(SyncListener l) {
		try {
			FrameMain.instance.setTitle("jouse - Synchronizing...");
			l.progress("Syncing...", 0, 0);
			
			for (int i = 0; i < HCServers.getList().size(); i++) {
				HCServer hcs = HCServers.getList().get(i);
				
				l.progress("Connecting HCServer " + hcs.getLabel(), 1, 3);
				FTPClient ftp = new FTPClient(hcs);
				
				ftp.connectFtp();
				
				StringWriter sw = new StringWriter();
				PrintWriter pw = new PrintWriter(sw);
				
				l.progress("Uploading PPEngine", 2, 3);
				
				PPEngine.write(pw);
				
				ftp.uploadFile("ppEngine.dat", new ByteArrayInputStream(sw.toString().getBytes("UTF-8")));
				
				l.progress("Sending update signal", 3, 3);

				try {
					ftp.sendUpdate();
				} catch (Exception e) {
					e.printStackTrace();
					l.progress("Failed update signal: " + e.toString(), 3, 3);
				}
			}
			
			FrameMain.instance.setTitle("jouse - Synchronized");
		} catch (Exception ex) {
			ex.printStackTrace();
			l.error(ex.toString());
		}
	}