diff --git a/CMakeLists.txt b/CMakeLists.txt
index e3fff2c9843beeafc69ee6402cf6d3719bc464a8..b866f786d9bde60f7b86567c89b4b1cb5c12a1b7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -134,7 +134,7 @@ check_include_file_cxx("opencv2/cudastereo.hpp" HAVE_OPENCVCUDA)
 find_program(CPPCHECK_FOUND cppcheck)
 if (CPPCHECK_FOUND)
 	message(STATUS "Found cppcheck: will perform source checks")
-	set(CMAKE_CXX_CPPCHECK "cppcheck" "--enable=style" "--suppress=*:*catch.hpp" "--suppress=*:*elas*" "--suppress=*:*json.hpp")
+	set(CMAKE_CXX_CPPCHECK "cppcheck" "--enable=warning,performance,portability,style" "--inline-suppr" "--std=c++11" "--suppress=*:*catch.hpp" "--suppress=*:*elas*" "--suppress=*:*json.hpp" "--quiet")
 endif()
 
 # include_directories(${PROJECT_SOURCE_DIR}/common/cpp/include)
diff --git a/components/common/cpp/include/ftl/cuda_common.hpp b/components/common/cpp/include/ftl/cuda_common.hpp
index 91d5a28c30e1fa911ff984e8a14dabf5acc0aaea..1df4b1b2fa89bb495f4e0108740774e8753a2afa 100644
--- a/components/common/cpp/include/ftl/cuda_common.hpp
+++ b/components/common/cpp/include/ftl/cuda_common.hpp
@@ -34,7 +34,7 @@ class TextureObject {
 	TextureObject(const TextureObject &t);
 	~TextureObject();
 	
-	int pitch() const { return pitch_; }
+	size_t pitch() const { return pitch_; }
 	T *devicePtr() { return ptr_; };
 	__host__ __device__ T *devicePtr(int v) { return &ptr_[v*pitch2_]; }
 	__host__ __device__ int width() const { return width_; }
@@ -148,8 +148,8 @@ TextureObject<T>::TextureObject(size_t width, size_t height) {
 	cudaTextureObject_t tex = 0;
 	cudaCreateTextureObject(&tex, &resDesc, &texDesc, NULL);
 	texobj_ = tex;
-	width_ = width;
-	height_ = height;
+	width_ = (int)width;
+	height_ = (int)height;
 	needsfree_ = true;
 	pitch2_ = pitch_ / sizeof(T);
 	//needsdestroy_ = true;
diff --git a/components/common/cpp/include/loguru.hpp b/components/common/cpp/include/loguru.hpp
index 2bfe8e0e2e174b107fea79dd286be956adc00a82..e43dc742e83d21405dacdafafa830a3251703998 100644
--- a/components/common/cpp/include/loguru.hpp
+++ b/components/common/cpp/include/loguru.hpp
@@ -536,7 +536,7 @@ namespace loguru
 	class LOGURU_EXPORT LogScopeRAII
 	{
 	public:
-		LogScopeRAII() : _file(nullptr) {} // No logging
+		LogScopeRAII() : _file(nullptr), _line(0), _indent_stderr(false), _start_time_ns(0), _name() {} // No logging
 		LogScopeRAII(Verbosity verbosity, const char* file, unsigned line, LOGURU_FORMAT_STRING_TYPE format, ...) LOGURU_PRINTF_LIKE(5, 6);
 		~LogScopeRAII();
 
diff --git a/components/common/cpp/src/configuration.cpp b/components/common/cpp/src/configuration.cpp
index b2e8c23c723f5255aa4728ef9820c2123b15f03d..c4369bd0057488455e43770aa7772ff350b6f395 100644
--- a/components/common/cpp/src/configuration.cpp
+++ b/components/common/cpp/src/configuration.cpp
@@ -143,6 +143,7 @@ static bool mergeConfig(const string path) {
 		} catch (...) {
 			LOG(ERROR) << "Unknown error opening config file";
 		}
+		return false;
 	} else {
 		return false;
 	}
@@ -216,6 +217,7 @@ bool ftl::config::update(const std::string &puri, const json_t &value) {
 	if (cfg) {
 		DLOG(1) << "Updating CFG: " << head << "[" << tail << "] = " << value;
 		cfg->set<json_t>(tail, value);
+		return true;
 	} else {
 		DLOG(1) << "Updating: " << head << "[" << tail << "] = " << value;
 		auto &r = resolve(head, false);
diff --git a/components/common/cpp/src/loguru.cpp b/components/common/cpp/src/loguru.cpp
index ccbc864b47d8c92b2883348f77e6b5972e4fa0b8..b481a411ef0ae05a23b66289abb4297138b994fd 100644
--- a/components/common/cpp/src/loguru.cpp
+++ b/components/common/cpp/src/loguru.cpp
@@ -1,4 +1,5 @@
 // Disable all warnings from gcc/clang:
+#ifdef __GNUC__
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wpragmas"
 
@@ -15,6 +16,7 @@
 #pragma GCC diagnostic ignored "-Wunknown-pragmas"
 #pragma GCC diagnostic ignored "-Wunused-macros"
 #pragma GCC diagnostic ignored "-Wzero-as-null-pointer-constant"
+#endif  // __GNUC__
 
 #define LOGURU_REPLACE_GLOG 1
 #include "loguru.hpp"
@@ -508,6 +510,7 @@ namespace loguru
 
 	Text errno_as_text()
 	{
+		// cppcheck-suppress unusedVariable
 		char buff[256];
 	#if defined(__GLIBC__) && defined(_GNU_SOURCE)
 		// GNU Version
@@ -1067,7 +1070,7 @@ namespace loguru
 						 i - skip, int(2 + sizeof(void*) * 2), callstack[i],
 						 status == 0 ? demangled :
 						 info.dli_sname == 0 ? symbols[i] : info.dli_sname,
-						 static_cast<char*>(callstack[i]) - static_cast<char*>(info.dli_saddr));
+						 (ssize_t)(static_cast<char*>(callstack[i]) - static_cast<char*>(info.dli_saddr)));
 				free(demangled);
 			} else {
 				snprintf(buf, sizeof(buf), "%-3d %*p %s\n",
diff --git a/components/common/cpp/src/uri.cpp b/components/common/cpp/src/uri.cpp
index 2fcbd86d1d3c824627641474720067015fb8debd..ab306786b874a0ffa0eefa7e50eb5d11b68f3612 100644
--- a/components/common/cpp/src/uri.cpp
+++ b/components/common/cpp/src/uri.cpp
@@ -106,7 +106,7 @@ string URI::to_string() const {
 }
 
 string URI::getPathSegment(int n) const {
-	int N = (n < 0) ? m_pathseg.size()+n : n;
+	size_t N = (n < 0) ? m_pathseg.size()+n : n;
 	if (N < 0 || N >= m_pathseg.size()) return "";
 	else return m_pathseg[N];
 }
@@ -123,8 +123,8 @@ string URI::getBaseURI(int n) {
         return r;
     } else if (m_pathseg.size()+n >= 0) {
         string r = m_protostr + string("://") + m_host + ((m_port != 0) ? string(":") + std::to_string(m_port) : "");
-        int N = m_pathseg.size()+n;
-        for (int i=0; i<N; i++) {
+        size_t N = m_pathseg.size()+n;
+        for (size_t i=0; i<N; i++) {
 			r += "/";
             r += getPathSegment(i);
         }
diff --git a/components/control/cpp/src/master.cpp b/components/control/cpp/src/master.cpp
index 9421a733cd3236e21d734f67b3b8105f0948f2c3..1724f1dd58f84610ba0bb576cb241bf2958137b8 100644
--- a/components/control/cpp/src/master.cpp
+++ b/components/control/cpp/src/master.cpp
@@ -48,23 +48,23 @@ void Master::set(const ftl::UUID &peer, const string &uri, json_t &value) {
 }
 
 vector<string> Master::getConfigurables() {
-
+	return {};
 }
 
 vector<string> Master::getConfigurables(const ftl::UUID &peer) {
-
+	return {};
 }
 
 vector<json_t> Master::get(const string &uri) {
-
+	return {};
 }
 
 json_t Master::getOne(const string &uri) {
-
+	return {};
 }
 
 json_t Master::get(const ftl::UUID &peer, const string &uri) {
-
+	return {};
 }
 
 void Master::watch(const string &uri, function<void()> f) {
diff --git a/components/net/cpp/include/ftl/net/common.hpp b/components/net/cpp/include/ftl/net/common.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..61914d81a93684f488330974a8cedf92c29681e8
--- /dev/null
+++ b/components/net/cpp/include/ftl/net/common.hpp
@@ -0,0 +1,22 @@
+#ifndef _FTL_NET_COMMON_HPP_
+#define _FTL_NET_COMMON_HPP_
+
+#ifndef WIN32
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <netdb.h>
+#include <arpa/inet.h>
+#define INVALID_SOCKET -1
+#define SOCKET_ERROR -1
+#define SOCKET int
+#endif
+
+#ifdef WIN32
+#include <winsock2.h>
+#include <windows.h>
+typedef int socklen_t;
+#endif
+
+#endif  // _FTL_NET_COMMON_HPP_
diff --git a/components/net/cpp/include/ftl/net/listener.hpp b/components/net/cpp/include/ftl/net/listener.hpp
index 4c3bb83ac6bf903a23abd2d55c2b38ab3b9e4739..44690ff6327f0af7b6911cdea70869b137a27c4c 100644
--- a/components/net/cpp/include/ftl/net/listener.hpp
+++ b/components/net/cpp/include/ftl/net/listener.hpp
@@ -1,14 +1,7 @@
 #ifndef _FTL_NET_LISTENER_HPP_
 #define _FTL_NET_LISTENER_HPP_
 
-#ifndef WIN32
-#include <netinet/in.h>
-#endif
-
-#ifdef WIN32
-//#include <windows.h>
-#include <winsock2.h>
-#endif
+#include <ftl/net/common.hpp>
 
 #include <ftl/net/handlers.hpp>
 #include <ftl/net/peer.hpp>
@@ -23,12 +16,12 @@ class Protocol;
 class Listener {
 	public:
 	explicit Listener(const char *uri);
-	explicit Listener(int sfd) : descriptor_(sfd), default_proto_(nullptr) {}
+	explicit Listener(SOCKET sfd) : descriptor_(sfd), default_proto_(nullptr) {}
 	virtual ~Listener();
 	
 	bool isListening() { return descriptor_ >= 0; }
 	void close();
-	int _socket() { return descriptor_; }
+	SOCKET _socket() { return descriptor_; }
 	
 	void setProtocol(Protocol *p) { default_proto_ = p; }
 	
@@ -36,7 +29,7 @@ class Listener {
 	void onConnection(connecthandler_t h) { handler_connect_.push_back(h); };
 	
 	private:
-	int descriptor_;
+	SOCKET descriptor_;
 	Protocol *default_proto_;
 	sockaddr_in slocalAddr;
 	std::vector<connecthandler_t> handler_connect_;
diff --git a/components/net/cpp/include/ftl/net/peer.hpp b/components/net/cpp/include/ftl/net/peer.hpp
index 0a16dd27170268b1c098d8a235d4447b7d4354b2..6d28d3b84d1c6a9c3861c09239c9e97ccf4dc995 100644
--- a/components/net/cpp/include/ftl/net/peer.hpp
+++ b/components/net/cpp/include/ftl/net/peer.hpp
@@ -5,12 +5,7 @@
 #define NOMINMAX
 #endif
 
-#ifndef WIN32
-#define INVALID_SOCKET -1
-#include <netinet/in.h>
-#else
-#include <winsock2.h>
-#endif
+#include <ftl/net/common.hpp>
 
 //#define GLOG_NO_ABBREVIATED_SEVERITIES
 #include <loguru.hpp>
@@ -74,7 +69,7 @@ class Peer {
 
 	public:
 	explicit Peer(const char *uri, ftl::net::Dispatcher *d=nullptr);
-	explicit Peer(int s, ftl::net::Dispatcher *d=nullptr);
+	explicit Peer(SOCKET s, ftl::net::Dispatcher *d=nullptr);
 	~Peer();
 	
 	/**
@@ -172,7 +167,7 @@ class Peer {
 	 * Get the internal OS dependent socket.
 	 * TODO(nick) Work out if this should be private.
 	 */
-	int _socket() const { return sock_; };
+	SOCKET _socket() const { return sock_; };
 	
 	/**
 	 * Internal handlers for specific event types. This should be private but
@@ -198,7 +193,7 @@ class Peer {
 
 	private: // Data
 	Status status_;
-	int sock_;
+	SOCKET sock_;
 	ftl::URI::scheme_t scheme_;
 	uint32_t version_;
 	
@@ -274,6 +269,7 @@ R Peer::call(const std::string &name, ARGS... args) {
 template <typename T, typename... ARGS>
 int Peer::asyncCall(
 		const std::string &name,
+		// cppcheck-suppress *
 		std::function<void(const T&)> cb,
 		ARGS... args) {
 	auto args_obj = std::make_tuple(args...);
diff --git a/components/net/cpp/include/ftl/net/universe.hpp b/components/net/cpp/include/ftl/net/universe.hpp
index 11ebcfdf51620808c1333a0be65be2688b08e7d2..169eff58923b115287539c50358fe1840e91ce57 100644
--- a/components/net/cpp/include/ftl/net/universe.hpp
+++ b/components/net/cpp/include/ftl/net/universe.hpp
@@ -59,7 +59,7 @@ class Universe : public ftl::Configurable {
 	 */
 	Peer *connect(const std::string &addr);
 	
-	int numberOfPeers() const { return peers_.size(); }
+	size_t numberOfPeers() const { return peers_.size(); }
 
 	int waitConnections();
 	
diff --git a/components/net/cpp/include/ftl/net/ws_internal.hpp b/components/net/cpp/include/ftl/net/ws_internal.hpp
index 5390f10281c860f91d35e3adf71d1101c1a0b275..ea0471a8882ae5419232ac37c5aae61c7042030a 100644
--- a/components/net/cpp/include/ftl/net/ws_internal.hpp
+++ b/components/net/cpp/include/ftl/net/ws_internal.hpp
@@ -6,6 +6,8 @@
 #include <functional>
 #include <ftl/uri.hpp>
 
+#include <ftl/net/common.hpp>
+
 using std::size_t;
 
 namespace ftl {
@@ -44,7 +46,7 @@ int ws_dispatch(const char *data, size_t len, std::function<void(const wsheader_
  */
 int ws_prepare(wsheader_type::opcode_type, bool useMask, size_t len, char *buffer, size_t maxlen);
 
-bool ws_connect(int sockfd, const ftl::URI &uri);
+bool ws_connect(SOCKET sockfd, const ftl::URI &uri);
 
 };
 };
diff --git a/components/net/cpp/include/ftl/uuid.hpp b/components/net/cpp/include/ftl/uuid.hpp
index c7c884e5defa36ee8d4cd8bdf96c4f9e263a5d52..5d494b8ddc26b262113b42db0bf1e461d61fc8c9 100644
--- a/components/net/cpp/include/ftl/uuid.hpp
+++ b/components/net/cpp/include/ftl/uuid.hpp
@@ -56,6 +56,7 @@ namespace ftl {
 			if (::UuidToStringA(&guid_, &szUuid) == RPC_S_OK) {
 				return std::string((char*)szUuid);
 			}
+			return "00000000-0000-0000-0000-000000000000";
 #else
 			char b[37];
 			uuid_unparse(uuid_, b);
diff --git a/components/net/cpp/src/listener.cpp b/components/net/cpp/src/listener.cpp
index 8e0f1267f29c09c87aaea16692e08d3f93692cf9..b8f276a105920dd1933a98ebf4663619e948944e 100644
--- a/components/net/cpp/src/listener.cpp
+++ b/components/net/cpp/src/listener.cpp
@@ -16,6 +16,7 @@
 #include <arpa/inet.h>
 #define INVALID_SOCKET -1
 #define SOCKET_ERROR -1
+#define SOCKET int
 #endif
 
 #ifdef WIN32
@@ -29,8 +30,8 @@ using std::shared_ptr;
 using ftl::net::Peer;
 using ftl::URI;
 
-int tcpListen(URI &uri) {
-	int ssock;
+SOCKET tcpListen(URI &uri) {
+	SOCKET ssock;
 	//std::cerr << "TCP Listen: " << uri.getHost() << " : " << uri.getPort() << std::endl;
 	#ifdef WIN32
 	WSAData wsaData;
@@ -90,7 +91,7 @@ int tcpListen(URI &uri) {
 	return ssock;
 }
 
-int wsListen(URI &uri) {
+SOCKET wsListen(URI &uri) {
 	return INVALID_SOCKET;
 }
 
diff --git a/components/net/cpp/src/peer.cpp b/components/net/cpp/src/peer.cpp
index 4f76a98ff2fadb9f8f7ee669668854e8c7f9bce0..bb29691e5e8bc2d8203277e03829fff5b76ddeb9 100644
--- a/components/net/cpp/src/peer.cpp
+++ b/components/net/cpp/src/peer.cpp
@@ -6,11 +6,11 @@
 #define NOMINMAX
 #endif
 
+#include <ftl/net/common.hpp>
+
 #include <fcntl.h>
 #ifdef WIN32
-#include <winsock2.h>
 #include <Ws2tcpip.h>
-#include <windows.h>
 #endif
 
 #ifdef WIN32
@@ -24,17 +24,6 @@
 #include <ftl/config.h>
 #include "net_internal.hpp"
 
-#ifndef WIN32
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <arpa/inet.h>
-#define INVALID_SOCKET -1
-#define SOCKET_ERROR -1
-#endif
-
 #include <iostream>
 #include <memory>
 #include <algorithm>
@@ -68,9 +57,9 @@ ftl::UUID ftl::net::this_peer;
 static ctpl::thread_pool pool(5);
 
 // TODO(nick) Move to tcp_internal.cpp
-static int tcpConnect(URI &uri) {
+static SOCKET tcpConnect(URI &uri) {
 	int rc;
-	sockaddr_in destAddr;
+	//sockaddr_in destAddr;
 
 	#ifdef WIN32
 	WSAData wsaData;
@@ -81,20 +70,26 @@ static int tcpConnect(URI &uri) {
 	#endif
 	
 	//We want a TCP socket
-	int csocket = socket(AF_INET, SOCK_STREAM, 0);
+	SOCKET csocket = socket(AF_INET, SOCK_STREAM, 0);
 
 	if (csocket == INVALID_SOCKET) {
 		LOG(ERROR) << "Unable to create TCP socket";
 		return INVALID_SOCKET;
 	}
 
-	#ifdef WIN32
+	/*#ifdef WIN32
 	HOSTENT *host = gethostbyname(uri.getHost().c_str());
 	#else
 	hostent *host = gethostbyname(uri.getHost().c_str());
-	#endif
+	#endif*/
+
+	addrinfo hints = {}, *addrs;
+	hints.ai_family = AF_INET;
+    hints.ai_socktype = SOCK_STREAM;
+    hints.ai_protocol = IPPROTO_TCP;
+	rc = getaddrinfo(uri.getHost().c_str(), std::to_string(uri.getPort()).c_str(), &hints, &addrs);
 
-	if (host == NULL) {
+	if (rc != 0 || addrs == nullptr) {
 		#ifndef WIN32
 		close(csocket);
 		#else
@@ -105,16 +100,18 @@ static int tcpConnect(URI &uri) {
 		return INVALID_SOCKET;
 	}
 
-	destAddr.sin_family = AF_INET;
-	destAddr.sin_addr.s_addr = ((in_addr *)(host->h_addr))->s_addr;
-	destAddr.sin_port = htons(uri.getPort());
+	//destAddr.sin_family = AF_INET;
+	//destAddr.sin_addr.s_addr = ((in_addr *)(host->h_addr))->s_addr;
+	//destAddr.sin_port = htons(uri.getPort());
 
 	// Make nonblocking
 	/*long arg = fcntl(csocket, F_GETFL, NULL));
 	arg |= O_NONBLOCK;
 	fcntl(csocket, F_SETFL, arg) < 0)*/
 	
-	rc = ::connect(csocket, (struct sockaddr*)&destAddr, sizeof(destAddr));
+	// TODO(Nick) - Check all returned addresses.
+	auto addr = addrs;
+	rc = ::connect(csocket, addr->ai_addr, (socklen_t)addr->ai_addrlen);
 
 	if (rc < 0) {
 		if (errno == EINPROGRESS) {
@@ -140,7 +137,7 @@ static int tcpConnect(URI &uri) {
 	return csocket;
 }
 
-Peer::Peer(int s, Dispatcher *d) : sock_(s) {
+Peer::Peer(SOCKET s, Dispatcher *d) : sock_(s) {
 	status_ = (s == INVALID_SOCKET) ? kInvalid : kConnecting;
 	_updateURI();
 	
@@ -541,10 +538,10 @@ int Peer::_send() {
 	auto send_size = send_buf_.vector_size();
 	int c = 0;
 	for (int i = 0; i < send_size; i++) {
-		c += ftl::net::internal::send(sock_, (char*)send_vec[i].iov_base, send_vec[i].iov_len, 0);
+		c += ftl::net::internal::send(sock_, (char*)send_vec[i].iov_base, (int)send_vec[i].iov_len, 0);
 	}
 #else
-	int c = ftl::net::internal::writev(sock_, send_buf_.vector(), send_buf_.vector_size());
+	int c = ftl::net::internal::writev(sock_, send_buf_.vector(), (int)send_buf_.vector_size());
 #endif
 	send_buf_.clear();
 	
diff --git a/components/net/cpp/src/universe.cpp b/components/net/cpp/src/universe.cpp
index 55ab9b0a50ca43401e92c09eb69c1e9a395deeaa..28a6b00565ca2f0bffd47814a6417c4a33138f76 100644
--- a/components/net/cpp/src/universe.cpp
+++ b/components/net/cpp/src/universe.cpp
@@ -106,7 +106,7 @@ int Universe::_setDescriptors() {
 	FD_ZERO(&sfdread_);
 	FD_ZERO(&sfderror_);
 
-	int n = 0;
+	SOCKET n = 0;
 
 	unique_lock<mutex> lk(net_mutex_);
 
@@ -193,7 +193,7 @@ bool Universe::createResource(const std::string &uri) {
 int Universe::numberOfSubscribers(const std::string &res) const {
 	auto s = subscribers_.find(res);
 	if (s != subscribers_.end()) {
-		return s->second.size();
+		return (int)s->second.size();
 	} else {
 		return -1;
 	}
@@ -258,7 +258,8 @@ void Universe::_run() {
 		if (selres < 0) {
 			switch (errno) {
 			case 9	: continue;  // Bad file descriptor = socket closed
-			default	: std::cout << "Unknown select error: " << strerror(errno) << std::endl;
+			case 4	: continue;  // Interrupted system call ... no problem
+			default	: LOG(WARNING) << "Unhandled select error: " << strerror(errno) << "(" << errno << ")";
 			}
 			continue;
 		} else if (selres == 0) {
@@ -276,7 +277,7 @@ void Universe::_run() {
 					sockaddr_storage addr;
 
 					//Finally accept this client connection.
-					int csock = accept(l->_socket(), (sockaddr*)&addr, (socklen_t*)&rsize);
+					SOCKET csock = accept(l->_socket(), (sockaddr*)&addr, (socklen_t*)&rsize);
 
 					if (csock != INVALID_SOCKET) {
 						auto p = new Peer(csock, &disp_);
diff --git a/components/net/cpp/src/ws_internal.cpp b/components/net/cpp/src/ws_internal.cpp
index 50e9f8b5e3d029956b170c380b45815335b7f931..a58a47d7746f34bbfe4dc057dd3514473d029cb7 100644
--- a/components/net/cpp/src/ws_internal.cpp
+++ b/components/net/cpp/src/ws_internal.cpp
@@ -9,21 +9,9 @@
 #include <ftl/net/ws_internal.hpp>
 #include <memory>
 
-#ifndef WIN32
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netdb.h>
-#include <arpa/inet.h>
-#define INVALID_SOCKET -1
-#define SOCKET_ERROR -1
-#endif
 
 #ifdef WIN32
-#include <winsock2.h>
 #include <Ws2tcpip.h>
-#include <windows.h>
 #endif
 
 #include <string>
@@ -85,7 +73,7 @@ int ftl::net::ws_dispatch(const char *data, size_t len, std::function<void(const
 
 	// Perform dispatch
 	d(ws, &data[ws.header_size], ws.N);
-	return ws.header_size+ws.N;
+	return (int)(ws.header_size+ws.N);
 }
 
 int ftl::net::ws_prepare(wsheader_type::opcode_type op, bool useMask, size_t len, char *data, size_t maxlen) {
@@ -138,10 +126,10 @@ int ftl::net::ws_prepare(wsheader_type::opcode_type op, bool useMask, size_t len
 		}
 	}
 	
-	return header_size;
+	return (int)header_size;
 }
 
-bool ftl::net::ws_connect(int sockfd, const URI &uri) {
+bool ftl::net::ws_connect(SOCKET sockfd, const URI &uri) {
 	string http = "";
 	int status;
 	int i;
@@ -158,7 +146,7 @@ bool ftl::net::ws_connect(int sockfd, const URI &uri) {
 	http += "Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==\r\n";
 	http += "Sec-WebSocket-Version: 13\r\n";
 	http += "\r\n";
-	int rc = ::send(sockfd, http.c_str(), http.length(), 0);
+	int rc = ::send(sockfd, http.c_str(), (int)http.length(), 0);
 	if (rc != (int)http.length()) {
 		LOG(ERROR) << "Could not send Websocket http request...";
 		std::cout << http;
diff --git a/components/net/cpp/test/peer_unit.cpp b/components/net/cpp/test/peer_unit.cpp
index 583f615d4b9c77735342972116bb15a3bac461fb..d72d96791349818949b65eb2957f7cf3c41fbf70 100644
--- a/components/net/cpp/test/peer_unit.cpp
+++ b/components/net/cpp/test/peer_unit.cpp
@@ -7,6 +7,7 @@
 #include <thread>
 #include <chrono>
 
+#include <ftl/net/common.hpp>
 #include <ftl/net/peer.hpp>
 #include <ftl/net/protocol.hpp>
 #include <ftl/config.h>
@@ -34,25 +35,25 @@ using std::chrono::milliseconds;
 
 class MockPeer : public Peer {
 	public:
-	MockPeer() : Peer(0) {}
+	MockPeer() : Peer((SOCKET)0) {}
 	void mock_data() { data(); }
 };
 
 // --- Support -----------------------------------------------------------------
 
-static std::map<int, std::string> fakedata;
+static std::map<SOCKET, std::string> fakedata;
 
 #ifdef WIN32
 int ftl::net::internal::recv(SOCKET sd, char *buf, int n, int f) {
 #else
-ssize_t ftl::net::internal::recv(int sd, void *buf, size_t n, int f) {
+ssize_t ftl::net::internal::recv(SOCKET sd, void *buf, size_t n, int f) {
 #endif
 	if (fakedata.count(sd) == 0) {
 		std::cout << "Unrecognised socket" << std::endl;
 		return 0;
 	}
 	
-	int l = fakedata[sd].size();
+	size_t l = fakedata[sd].size();
 	
 	std::memcpy(buf, fakedata[sd].c_str(), l);
 	fakedata.erase(sd);
@@ -237,8 +238,8 @@ TEST_CASE("Peer::call()", "[rpc]") {
 		std::thread thr([&s]() {
 			while (fakedata[0].size() == 0) std::this_thread::sleep_for(std::chrono::milliseconds(20));
 			
-			auto [id,value] = readRPC<tuple<>>(0);
-			auto res_obj = std::make_tuple(1,id,"__return__",77);
+			auto res = readRPC<tuple<>>(0);
+			auto res_obj = std::make_tuple(1,std::get<0>(res),"__return__",77);
 			std::stringstream buf;
 			msgpack::pack(buf, res_obj);
 			fakedata[0] = buf.str();
@@ -262,9 +263,9 @@ TEST_CASE("Peer::call()", "[rpc]") {
 		std::thread thr([&s]() {
 			while (fakedata[0].size() == 0) std::this_thread::sleep_for(std::chrono::milliseconds(20));
 			
-			auto [id,value] = readRPC<tuple<>>(0);
+			auto res = readRPC<tuple<>>(0);
 			vector<int> data = {44,55,66};
-			auto res_obj = std::make_tuple(1,id,"__return__",data);
+			auto res_obj = std::make_tuple(1,std::get<0>(res),"__return__",data);
 			std::stringstream buf;
 			msgpack::pack(buf, res_obj);
 			fakedata[0] = buf.str();
diff --git a/components/rgbd-sources/include/ftl/rgbd_source.hpp b/components/rgbd-sources/include/ftl/rgbd_source.hpp
index e6ca35418f80368e5f62adc622203ce09d5962a6..aa5748324dc9aeddd1134556fb3153baf08c1915 100644
--- a/components/rgbd-sources/include/ftl/rgbd_source.hpp
+++ b/components/rgbd-sources/include/ftl/rgbd_source.hpp
@@ -19,7 +19,7 @@ namespace rgbd {
  */
 class RGBDSource : public ftl::Configurable {
 	public:
-	RGBDSource(nlohmann::json &config);
+	explicit RGBDSource(nlohmann::json &config);
 	RGBDSource(nlohmann::json &config, ftl::net::Universe *net);
 	virtual ~RGBDSource();
 
@@ -57,6 +57,7 @@ class RGBDSource : public ftl::Configurable {
 	 */
 	class Register {
 		public:
+		// cppcheck-suppress *
 		Register(const std::string &n, std::function<RGBDSource*(nlohmann::json&,ftl::net::Universe*)> f) {
 			RGBDSource::_register(n,f);
 		};
diff --git a/components/rgbd-sources/src/algorithms/rtcensus.cpp b/components/rgbd-sources/src/algorithms/rtcensus.cpp
index dbafd2d3737d5dca90a85fe6b125e7579245efb9..b288045e0f24eb6a2b5b3ef4729c5853b5e17ae5 100644
--- a/components/rgbd-sources/src/algorithms/rtcensus.cpp
+++ b/components/rgbd-sources/src/algorithms/rtcensus.cpp
@@ -43,8 +43,8 @@ static vector<uint64_t> sparse_census_16x16(const Mat &arr) {
 	result.resize(arr.cols*arr.rows, 0);
 
 	/* Loops adapted to avoid edge out-of-bounds checks */
-	for (size_t v=7; v < arr.rows-7; v++) {
-	for (size_t u=7; u < arr.cols-7; u++) {
+	for (int v=7; v < arr.rows-7; v++) {
+	for (int u=7; u < arr.cols-7; u++) {
 		uint64_t r = 0;
 
 		/* 16x16 sparse kernel to 8x8 mask (64 bits) */
diff --git a/components/rgbd-sources/src/calibrate.cpp b/components/rgbd-sources/src/calibrate.cpp
index 7e94ac9efcc140c4b3e8e4c3815392eb54d53863..05364c507c8072c0c4da2f060ec7d8a992945c61 100644
--- a/components/rgbd-sources/src/calibrate.cpp
+++ b/components/rgbd-sources/src/calibrate.cpp
@@ -78,7 +78,7 @@ void Calibrate::Settings::write(FileStorage& fs) const {
 void Calibrate::Settings::read(ftl::Configurable *node) {
     boardSize.width = node->value<vector<int>>("board_size", {10,10})[0];
     boardSize.height = node->value<vector<int>>("board_size", {10,10})[1];
-    squareSize = node->value("square_size", 50);
+    squareSize = node->value("square_size", 50.0f);
     nrFrames = node->value("num_frames", 20);
     aspectRatio = node->value("fix_aspect_ratio", false);
     calibZeroTangentDist = node->value("assume_zero_tangential_distortion", false);
diff --git a/components/rgbd-sources/src/disparity.hpp b/components/rgbd-sources/src/disparity.hpp
index f5c98f399811bd50e1776f8b0f86fc851e41f9d4..cb25e28953bf8ac8455c5a0565fa639e61979196 100644
--- a/components/rgbd-sources/src/disparity.hpp
+++ b/components/rgbd-sources/src/disparity.hpp
@@ -37,6 +37,7 @@ class Disparity : public ftl::Configurable {
 	 */
 	class Register {
 		public:
+		// cppcheck-suppress *
 		Register(const std::string &n, std::function<Disparity*(ftl::Configurable *, const std::string &)> f) {
 			Disparity::_register(n,f);
 		};
@@ -53,8 +54,8 @@ class Disparity : public ftl::Configurable {
 	
 	protected:
 	//nlohmann::json &config_;
-	size_t min_disp_;
-	size_t max_disp_;
+	int min_disp_;
+	int max_disp_;
 	cv::Mat mask_l_;
 	
 	private:
diff --git a/components/rgbd-sources/src/local.cpp b/components/rgbd-sources/src/local.cpp
index e66396597ddb99e53913299e8db89ca422953513..d3d33d7353ffd070579acac71e294da26885ed51 100644
--- a/components/rgbd-sources/src/local.cpp
+++ b/components/rgbd-sources/src/local.cpp
@@ -263,9 +263,9 @@ bool LocalSource::get(cv::Mat &l, cv::Mat &r) {
 	}
 
 	if (downsize_ != 1.0f) {
-		cv::resize(l, l, cv::Size(l.cols * downsize_, l.rows * downsize_),
+		cv::resize(l, l, cv::Size((int)(l.cols * downsize_), (int)(l.rows * downsize_)),
 				0, 0, cv::INTER_LINEAR);
-		cv::resize(r, r, cv::Size(r.cols * downsize_, r.rows * downsize_),
+		cv::resize(r, r, cv::Size((int)(r.cols * downsize_), (int)(r.rows * downsize_)),
 				0, 0, cv::INTER_LINEAR);
 	}
 
diff --git a/components/rgbd-sources/src/rgbd_source.cpp b/components/rgbd-sources/src/rgbd_source.cpp
index 17c6443fc3f60cb2dccaaad1884ae6b62305b1fa..d796c02e9bb90d72bdd67d52334e5ad079d88abd 100644
--- a/components/rgbd-sources/src/rgbd_source.cpp
+++ b/components/rgbd-sources/src/rgbd_source.cpp
@@ -36,8 +36,8 @@ void RGBDSource::getRGBD(cv::Mat &rgb, cv::Mat &depth) {
 
 Eigen::Vector4f RGBDSource::point(uint ux, uint uy) {
 	const auto &params = getParameters();
-	const float x = ((float)ux-params.width/2) / params.fx;
-	const float y = ((float)uy-params.height/2) / params.fy;
+	const float x = ((float)ux-params.width/2) / (float)params.fx;
+	const float y = ((float)uy-params.height/2) / (float)params.fy;
 
 	unique_lock<mutex> lk(mutex_);
 	const float depth = depth_.at<float>(uy,ux);
@@ -54,11 +54,12 @@ bool RGBDSource::snapshot(const std::string &fileprefix) {
 
 	cv::imwrite(fileprefix+"-RGB.jpg", rgb);
 	cv::imwrite(fileprefix+"-DEPTH.png",depth);
+	return true;
 }
 
 RGBDSource *RGBDSource::create(nlohmann::json &config, ftl::net::Universe *net) {
 	auto &cfg = ftl::config::resolve(config);
-	if (cfg["type"].type_name() != "string") {
+	if (!cfg["type"].is_string()) {
 		LOG(ERROR) << "Missing RGB-D source type: " << cfg["type"].type_name();
 		//return nullptr;
 	}
diff --git a/components/rgbd-sources/src/stereovideo_source.cpp b/components/rgbd-sources/src/stereovideo_source.cpp
index daff717e7f014066c664d0f7fcbed2f6e49cd660..4e8da1d065492d23f8c7e9b945b8e3ede55b815a 100644
--- a/components/rgbd-sources/src/stereovideo_source.cpp
+++ b/components/rgbd-sources/src/stereovideo_source.cpp
@@ -103,7 +103,7 @@ static void disparityToDepth(const cv::Mat &disparity, cv::Mat &depth, const cv:
 			cv::Vec4d homg_pt = _Q*cv::Vec4d(x, y, d, 1.0);
 			//dptr[x] = Vec3d(homg_pt.val);
 			//dptr[x] /= homg_pt[3];
-			dptr[x] = (homg_pt[2] / homg_pt[3]) / 1000.0f; // Depth in meters
+			dptr[x] = (float)(homg_pt[2] / homg_pt[3]) / 1000.0f; // Depth in meters
 
 			if( fabs(d) <= FLT_EPSILON )
 				dptr[x] = 1000.0f;
@@ -112,12 +112,15 @@ static void disparityToDepth(const cv::Mat &disparity, cv::Mat &depth, const cv:
 }
 
 void StereoVideoSource::grab() {
+	// TODO(Nick) find a way to move this to last part ... but grab can't
+	// be called twice by different threads and it is currently
+	// FIXME Call to grab from multiple threads
+	unique_lock<mutex> lk(mutex_);
 	calib_->rectified(left_, right_);
 
 	cv::Mat disp;
 	disp_->compute(left_, right_, disp);
 
-	unique_lock<mutex> lk(mutex_);
 	left_.copyTo(rgb_);
 	disparityToDepth(disp, depth_, calib_->getQ());
 }