diff --git a/server/README.md b/server/README.md
index 69084be6f8a48cb3b630086e832d529fff569786..ef2e9fb6749a7cc3385cef5590279494077296b2 100644
--- a/server/README.md
+++ b/server/README.md
@@ -37,6 +37,7 @@ The following example config file supports two Fadecandy devices with distinct s
 
 	{
 		"listen": ["127.0.0.1", 7890],
+		"verbose": true,
 
 		"color": {
 			"gamma": 2.5,
diff --git a/server/fcserver.cpp b/server/fcserver.cpp
index 6958ee940e1bb08a1e032c8d3e9df7528b78aaf5..11cf72472fedbfc359f8379fcf17c1ed386bc21e 100644
--- a/server/fcserver.cpp
+++ b/server/fcserver.cpp
@@ -25,14 +25,16 @@
 #include "fcserver.h"
 #include <netdb.h>
 #include <ctype.h>
+#include <iostream>
 
 
 FCServer::FCServer(rapidjson::Document &config)
 	: mListen(config["listen"]),
 	  mColor(config["color"]),
 	  mDevices(config["devices"]),
+	  mVerbose(config["verbose"].IsTrue()),
 	  mListenAddr(0),
-	  mOPCSink(opcCallback, this)
+	  mOPCSink(opcCallback, this, mVerbose)
 {
 	/*
 	 * Parse the listen [host, port] list.
@@ -81,7 +83,6 @@ void FCServer::start(struct ev_loop *loop)
 	mOPCSink.start(loop, mListenAddr);
 }
 
-
 void FCServer::opcCallback(OPCSink::Message &msg, void *context)
 {
 	FCServer *self = static_cast<FCServer*>(context);
diff --git a/server/fcserver.h b/server/fcserver.h
index d4cd653859223eb6b421d0490a448494a82a8e8a..f942cbf36ec760318df441817398c0d1d4cf80ec 100644
--- a/server/fcserver.h
+++ b/server/fcserver.h
@@ -48,6 +48,7 @@ private:
     const Value& mListen;
     const Value& mColor;
     const Value& mDevices;
+    bool mVerbose;
 
     struct addrinfo *mListenAddr;
     OPCSink mOPCSink;
diff --git a/server/opcsink.cpp b/server/opcsink.cpp
index 11f41735a00e74c2f29a7f6dbeab7a5e8eefcb65..1cebfb0e242b2eaa028796a1cf2b8fecff8418b8 100644
--- a/server/opcsink.cpp
+++ b/server/opcsink.cpp
@@ -26,10 +26,12 @@
 #include <stdio.h>
 #include <unistd.h>
 #include <string.h>
+#include <arpa/inet.h>
+#include <iostream>
 
 
-OPCSink::OPCSink(callback_t cb, void *context)
-    : mCallback(cb), mContext(context) {}
+OPCSink::OPCSink(callback_t cb, void *context, bool verbose)
+    : mVerbose(verbose), mCallback(cb), mContext(context) {}
 
 void OPCSink::start(struct ev_loop *loop, struct addrinfo *listenAddr)
 {
@@ -52,6 +54,11 @@ void OPCSink::start(struct ev_loop *loop, struct addrinfo *listenAddr)
     // Get a callback when we're ready to accept a new connection
     ev_io_init(&mIOAccept, cbAccept, sock, EV_READ);
     ev_io_start(loop, &mIOAccept);
+
+    if (mVerbose) {
+        struct sockaddr_in *sin = (struct sockaddr_in*) listenAddr->ai_addr;
+        std::clog << "Listening on " << inet_ntoa(sin->sin_addr) << ":" << ntohs(sin->sin_port) << "\n";
+    }
 }
 
 void OPCSink::cbAccept(struct ev_loop *loop, struct ev_io *watcher, int revents)
@@ -72,6 +79,10 @@ void OPCSink::cbAccept(struct ev_loop *loop, struct ev_io *watcher, int revents)
 
     ev_io_init(&cli->ioRead, cbRead, sock, EV_READ);
     ev_io_start(loop, &cli->ioRead);
+
+    if (self->mVerbose) {
+        std::clog << "Client connected from " << inet_ntoa(clientAddr.sin_addr) << "\n";
+    }
 }
 
 void OPCSink::cbRead(struct ev_loop *loop, struct ev_io *watcher, int revents)
@@ -89,6 +100,11 @@ void OPCSink::cbRead(struct ev_loop *loop, struct ev_io *watcher, int revents)
 
     if (r == 0) {
         // Client disconnecting
+
+        if (self->mVerbose) {
+            std::clog << "Client disconnected\n";
+        }
+
         ev_io_stop(loop, watcher);
         delete cli;
         return;
diff --git a/server/opcsink.h b/server/opcsink.h
index 7c90a98ebdd1741e21167019d9a41dcdb44fc8e1..45560315effbbaacd8f24dce7a6f811058ef6386 100644
--- a/server/opcsink.h
+++ b/server/opcsink.h
@@ -46,10 +46,11 @@ public:
 
     typedef void (*callback_t)(Message &msg, void *context);
 
-    OPCSink(callback_t cb, void *context);
+    OPCSink(callback_t cb, void *context, bool verbose = false);
     void start(struct ev_loop *loop, struct addrinfo *listenAddr);
 
 private:
+    bool mVerbose;
     callback_t mCallback;
     void *mContext;
     struct ev_io mIOAccept;