diff --git a/CMakeLists.txt b/CMakeLists.txt
index 2b0f6b92aebab4de40975588bd5e6ca205f9b62b..1b50451da30c3567cd5cc7fd8c12e076dcc4f70e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -90,7 +90,7 @@ if (USE_CPPCHECK)
 	find_program(CPPCHECK_FOUND cppcheck)
 	if (CPPCHECK_FOUND)
 		message(STATUS "Found cppcheck: will perform source checks")
-		set(CMAKE_CXX_CPPCHECK "cppcheck" "-D__align__(A)" "--enable=warning,performance,style" "--inline-suppr" "--std=c++14" "--suppress=*:*catch.hpp" "--suppress=*:*elas*" "--suppress=*:*json.hpp" "--quiet")
+		set(CMAKE_CXX_CPPCHECK "cppcheck" "-D__align__(A)" "--enable=warning,performance,style" "--inline-suppr" "--std=c++17" "--suppress=*:*loguru.*" "--suppress=*:*catch.hpp" "--suppress=*:*elas*" "--suppress=*:*json.hpp" "--quiet")
 	endif()
 endif()
 
diff --git a/src/peer.hpp b/src/peer.hpp
index e26c1def70c511f958671c15f7d1f2de5820ec81..ab8e2c66d0624858537adf23421e6ef6c0c2fdf1 100644
--- a/src/peer.hpp
+++ b/src/peer.hpp
@@ -49,7 +49,7 @@ struct virtual_caller {
 template <typename T>
 struct caller : virtual_caller {
 	explicit caller(std::function<void(const T&)> &f) : f_(f) {};
-	void operator()(msgpack::object &o) { T r = o.as<T>(); f_(r); };
+	void operator()(msgpack::object &o) override { T r = o.as<T>(); f_(r); };
 	std::function<void(const T&)> f_;
 };
 
diff --git a/src/protocol/tcp.cpp b/src/protocol/tcp.cpp
index f8ffdeec79f7df4b6bdd1695340b6d3bb540e680..e912bf729201f3474753008c81ae0659bdbd7fe3 100644
--- a/src/protocol/tcp.cpp
+++ b/src/protocol/tcp.cpp
@@ -21,7 +21,7 @@ Connection_TCP::Connection_TCP() : SocketConnection(create_tcp_socket(), {}) {
 }
 
 
-bool Connection_TCP::connect(std::string hostname, int port, int timeout) {
+bool Connection_TCP::connect(const std::string &hostname, int port, int timeout) {
 	if (!resolve_inet_address(hostname, port, addr_)) {
 		throw FTL_Error("could not resolve hostname: " + hostname);
 	}
diff --git a/src/protocol/tcp.hpp b/src/protocol/tcp.hpp
index 694862e01c6014daf5a34e2a937829493f679d6d..5e0fc56b4672dcb84a1b02d1bf536f5345fcdd79 100644
--- a/src/protocol/tcp.hpp
+++ b/src/protocol/tcp.hpp
@@ -38,7 +38,7 @@ public:
 	Connection_TCP();
 	
 	ftl::URI::scheme_t scheme() const override { return ftl::URI::SCHEME_TCP; }
-	bool connect(std::string hostname, int port, int timeout=0);
+	bool connect(const std::string &hostname, int port, int timeout=0);
 	void connect(const ftl::URI& uri, int timeout=0) override;
 };
 
diff --git a/src/protocol/websocket.cpp b/src/protocol/websocket.cpp
index 9955e809f8017a54135e591a9842b35a3823a223..282c471a81eaebdfc9304c1d86b8a286e69886a9 100644
--- a/src/protocol/websocket.cpp
+++ b/src/protocol/websocket.cpp
@@ -268,7 +268,6 @@ bool WebSocketBase<SocketT>::prepare_next(char* data, size_t data_len, size_t& o
 	wsheader_type header;
 	if (!ws_parse(data, data_len, header)) {
 		throw FTL_Error("corrupted WS header");
-		return false;
 	}
 
 	if ((header.N + header.header_size) > data_len) {
diff --git a/src/protocol/websocket.hpp b/src/protocol/websocket.hpp
index 0ea13b78d1f3d2447413c28b3f726c95b725f262..8e73be1667d4b2996c5fa952294ed06dd629dbab 100644
--- a/src/protocol/websocket.hpp
+++ b/src/protocol/websocket.hpp
@@ -17,7 +17,7 @@ class WebSocketBase : public SocketT {
 public:
 	WebSocketBase();
 	ftl::URI::scheme_t scheme() const override;
-	void connect(const ftl::URI& uri, int timeout=0);
+	void connect(const ftl::URI& uri, int timeout=0) override;
 
 	bool prepare_next(char* buffer, size_t len, size_t &offset) override;
 
diff --git a/src/socket/socket_linux.cpp b/src/socket/socket_linux.cpp
index d51824aa9be45128d3a053cf527c2aea327d3f1e..f8ae4f3b13b71b7bc636366d98d987977db4f5fd 100644
--- a/src/socket/socket_linux.cpp
+++ b/src/socket/socket_linux.cpp
@@ -39,7 +39,7 @@ bool ftl::net::internal::resolve_inet_address(const std::string &hostname, int p
 // Socket
 
 Socket::Socket(int domain, int type, int protocol) :
-		status_(STATUS::UNCONNECTED), fd_(-1), family_(domain) {
+		status_(STATUS::UNCONNECTED), fd_(-1), family_(domain), err_(0) {
 
 	int retval = socket(domain, type, protocol);
 
diff --git a/src/socket/socket_windows.cpp b/src/socket/socket_windows.cpp
index 39bfb1fdde272e08748d9b7312f35b65ffec0cb4..f113b057a02ea9559348b1d59d96ff616a545cfd 100644
--- a/src/socket/socket_windows.cpp
+++ b/src/socket/socket_windows.cpp
@@ -107,6 +107,7 @@ int Socket::listen(int backlog) {
 		::closesocket(fd_);
 		status_ = STATUS::CLOSED;
 		fd_ = INVALID_SOCKET;
+		return retval;
 	}
 }
 
@@ -185,6 +186,9 @@ std::string Socket::get_error_string() {
 	wchar_t* s = NULL;
 	FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
 		NULL, err_, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPWSTR)&s, 0, NULL);
+	if (!s) {
+		return "Unknown";
+	}
 	std::wstring ws(s);
 	std::string msg(ws.begin(), ws.end());
 	LocalFree(s);
diff --git a/src/universe.cpp b/src/universe.cpp
index bdaac2db4d8ca177bf0dbc9c046a9e68e312e426..f21d47dc540cd775277ea0d458699fc171ba660b 100644
--- a/src/universe.cpp
+++ b/src/universe.cpp
@@ -320,9 +320,9 @@ void Universe::_cleanupPeers() {
 			auto ix = peer_ids_.find(p->id());
 			if (ix != peer_ids_.end()) peer_ids_.erase(ix);
 
-			for (auto i=peer_by_uri_.begin(); i != peer_by_uri_.end(); ++i) {
-				if (peers_[i->second] == p) {
-					peer_by_uri_.erase(i);
+			for (auto j=peer_by_uri_.begin(); j != peer_by_uri_.end(); ++j) {
+				if (peers_[j->second] == p) {
+					peer_by_uri_.erase(j);
 					break;
 				}
 			}