public RemoteServer(final int port) {
		// check annotated functions
		LOG.info("Loading declared functions...");

		Set<Method> methods = Classes.listAllAnnotatedMethods(Server.class, Function.class);
		methods.addAll(Classes.listAnnotatedMethods(getClass(), Function.class)); //add this one so that it is available outside this project
		for (Method m : methods) {
			if (Modifier.isStatic(m.getModifiers())){
				FUNCTIONS.add(m);
				for (Class<?> parameterType : m.getParameterTypes()) {
					if (parameterType.isPrimitive()) {
						LOG.warning(String.format("%s has a primitive parameter type, whilst not a problem, the client may autobox that parameter into the wrong non-primitive class and therefor trying to call a method with the wrong signature.", m));
					}
				}
			} else {
				LOG.warning(String.format("Not adding method [%s]. Currently we only support static methods.", m));
			}
		}

		LOG.info(String.format("Found the following defined functions (class annotated with '@Server', static method annotated with '@Function'): %s%n", FUNCTIONS));

		// open server socket
		new Thread(new Runnable() {
			public void run() {
				ServerSocket serverSocket;
				try {
					serverSocket = new ServerSocket(port);
				} catch (IOException e) {
					throw new RuntimeException(e);
				}
				while (!Thread.currentThread().isInterrupted()) {
					try {
						Socket socket = serverSocket.accept();
						submit(socket);
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		}).start();

		LOG.info(String.format("started server on port: %s", port));

	}