diff --git a/Socket/CommunicationPolicy.cc b/Socket/CommunicationPolicy.cc
index aff4c6693d472a13cde39eda7b132008cb3efae4..d175b58ec3b859bea30d96f63d466772385067e0 100644
--- a/Socket/CommunicationPolicy.cc
+++ b/Socket/CommunicationPolicy.cc
@@ -58,7 +58,7 @@ prefix_ int senf::ConnectedCommunicationPolicy::do_accept(FileHandle handle,
             case EINTR:
                 break;
             default:
-                throw SystemException();
+                throw SystemException("ConnectedCommunicationPolicy::do_accept failed.");
             }
     } while (rv<0);
     return rv;
diff --git a/Socket/NetdeviceController.cc b/Socket/NetdeviceController.cc
index fc43cc1ddfdd770c4f98b8dc589e5a81ee08a666..7f40c074c9d6f6b769cb48fc22541515ce0997e7 100644
--- a/Socket/NetdeviceController.cc
+++ b/Socket/NetdeviceController.cc
@@ -101,7 +101,7 @@ prefix_ void senf::NetdeviceController::openSocket()
 {
     sockfd_ = ::socket( PF_INET, SOCK_DGRAM, 0);
     if ( sockfd_ < 0)
-        throw SystemException( "Could not open socket for NetdeviceController");
+        throw SystemException("Could not open socket for NetdeviceController.");
 }
 
 prefix_ void senf::NetdeviceController::ifrName(ifreq& ifr)
@@ -110,15 +110,15 @@ prefix_ void senf::NetdeviceController::ifrName(ifreq& ifr)
     ::memset( &ifr, 0, sizeof(ifr));
     ifr.ifr_ifindex = ifindex_;
     if ( ::ioctl( sockfd_, SIOCGIFNAME, &ifr ) < 0 )
-        throw SystemException( 
-        		"NetdeviceController: Could not discover the name of the interface with index ") << ifindex_;
+        throw SystemException("NetdeviceController")
+        << " could not discover the name of the interface with index " << ifindex_ << ".";
 }
 
 prefix_ void senf::NetdeviceController::doIoctl(ifreq& ifr, int request)
     const
 {
     if ( ::ioctl( sockfd_, request, &ifr ) < 0 )
-        throw SystemException();
+        throw SystemException("NetdeviceController::doIoctl failed.");
 }
 
 ///////////////////////////////cc.e////////////////////////////////////////
diff --git a/Socket/Protocols/DVB/DVBDemuxHandles.cc b/Socket/Protocols/DVB/DVBDemuxHandles.cc
index a8f33a726a4deaf9682a2aa7c7e98f190ed2cccd..788069fde241096ebae3f7629344bb147f167037 100644
--- a/Socket/Protocols/DVB/DVBDemuxHandles.cc
+++ b/Socket/Protocols/DVB/DVBDemuxHandles.cc
@@ -47,7 +47,7 @@ prefix_ void senf::DVBDemuxSectionSocketProtocol::init_client(unsigned short ada
             "/dev/dvb/adapter%d/demux%d") % adapter % device);
     int f = open(devDemux.c_str(), O_RDONLY | O_NONBLOCK);
     if (f < 0){
-        throw SystemException( "Could not open demux device of DVB adapter ") << devDemux;
+        throw SystemException("Could not open demux device of DVB adapter ") << devDemux << ".";
     }
     fd(f);
 }
@@ -62,7 +62,7 @@ prefix_ void senf::DVBDemuxSectionSocketProtocol::setSectionFilter(struct dmx_sc
     const
 {
     if (::ioctl(fd(), DMX_SET_FILTER, filter) < 0)
-        throw SystemException("Could not set section filter of DVB adapter");
+        throw SystemException("Could not set section filter of DVB adapter.");
 }
 
 // ----------------------------------------------------------------
@@ -74,7 +74,7 @@ prefix_ void senf::DVBDemuxPESSocketProtocol::init_client(unsigned short adapter
             "/dev/dvb/adapter%d/demux%d") % adapter % device);
     int f = open(devDemux.c_str(), O_RDONLY | O_NONBLOCK);
     if (f < 0)
-        throw SystemException( "Could not open demux device of DVB adapter ") << devDemux;
+        throw SystemException( "Could not open demux device of DVB adapter ") << devDemux << ".";
     fd(f);
 }
 
@@ -88,7 +88,7 @@ prefix_ void senf::DVBDemuxPESSocketProtocol::setPESFilter(struct dmx_pes_filter
     const
 {
     if (::ioctl(fd(), DMX_SET_PES_FILTER, filter) < 0)
-        throw SystemException("Could not set PES filter of DVB adapter");
+        throw SystemException("Could not set PES filter of DVB adapter.");
 }
 
 // ----------------------------------------------------------------
@@ -100,7 +100,7 @@ prefix_ void senf::DVBDvrSocketProtocol::init_client(unsigned short adapter, uns
             "/dev/dvb/adapter%d/dvr%d") % adapter % device);
     int f = open(devDvr.c_str(), O_RDONLY | O_NONBLOCK);
     if (f < 0)
-        throw SystemException( "Could not open dvr device of DVB adapter ") << devDvr;
+        throw SystemException( "Could not open dvr device of DVB adapter ") << devDvr << ".";
     fd(f);
 }
 
diff --git a/Socket/Protocols/DVB/DVBDemuxSocketProtocol.cc b/Socket/Protocols/DVB/DVBDemuxSocketProtocol.cc
index beb974e2e823dd1c2b9b3135df2809468b6e087b..0059e3908a8a7490575acfdecbd5f7ba2d4cf0e0 100644
--- a/Socket/Protocols/DVB/DVBDemuxSocketProtocol.cc
+++ b/Socket/Protocols/DVB/DVBDemuxSocketProtocol.cc
@@ -42,22 +42,23 @@ prefix_ void senf::DVBDemuxSocketProtocol::setBufferSize(unsigned long size)
     const
 {
     if (::ioctl(fd(), DMX_SET_BUFFER_SIZE, size) < 0)
-        throw SystemException(
-                "Could not set the size of the buffer on DVB adapter. requested size: ") << size;
+        throw SystemException()
+              << "Could not set the size of the buffer on DVB adapter. requested size: "
+              << size << ".";
 }
 
 prefix_ void senf::DVBDemuxSocketProtocol::startFiltering()
     const
 {
     if (::ioctl(fd(), DMX_START) < 0)
-        throw SystemException("Could not start filtering operation on DVB adapter");
+        throw SystemException("Could not start filtering operation on DVB adapter.");
 }
 
 prefix_ void senf::DVBDemuxSocketProtocol::stopFiltering()
     const
 {
     if (::ioctl(fd(), DMX_STOP) < 0)
-        throw SystemException("Could not stop filtering operation on DVB adapter");
+        throw SystemException("Could not stop filtering operation on DVB adapter.");
 }
 
 prefix_ bool senf::DVBDemuxSocketProtocol::eof()
diff --git a/Socket/Protocols/DVB/DVBFrontendHandle.cc b/Socket/Protocols/DVB/DVBFrontendHandle.cc
index 1e47c7a11aa26f28f4384345c17054fdb8abe570..7933b717ce92f37ed3a2838396be154635b7b8f6 100644
--- a/Socket/Protocols/DVB/DVBFrontendHandle.cc
+++ b/Socket/Protocols/DVB/DVBFrontendHandle.cc
@@ -47,7 +47,7 @@ prefix_ void senf::DVBFrontendSocketProtocol::init_client(uint8_t adapter, boost
             "/dev/dvb/adapter%d/frontend%d") % adapter % device);
     int f = open(devFrontend.c_str(), O_RDONLY | O_NONBLOCK);
     if (f < 0)
-        throw SystemException("Could not open frontend device of DVB adapter ")<< devFrontend;
+        throw SystemException() << "Could not open frontend device of DVB adapter " << devFrontend << ".";
     
     fd(f);
 }
@@ -68,7 +68,7 @@ prefix_ void senf::DVBFrontendSocketProtocol::signalStrength(int16_t *strength)
     const
 {
     if (::ioctl(fd(), FE_READ_SIGNAL_STRENGTH, strength) < 0)
-        throw SystemException( "Could not get signal strength of DVB adapter");
+        throw SystemException( "Could not get signal strength of DVB adapter.");
 }
 
 ///////////////////////////////cc.e////////////////////////////////////////
diff --git a/Socket/Protocols/INet/ConnectedUDPSocketHandle.cc b/Socket/Protocols/INet/ConnectedUDPSocketHandle.cc
index 5e89b45f5bfbde4f02ca79f0fdc94a330053e740..bc5432aeb3df2786ba962259923ec96e64fb3da3 100644
--- a/Socket/Protocols/INet/ConnectedUDPSocketHandle.cc
+++ b/Socket/Protocols/INet/ConnectedUDPSocketHandle.cc
@@ -46,7 +46,7 @@ prefix_ void senf::ConnectedUDPv4SocketProtocol::init_client()
 {
     int sock = ::socket(PF_INET,SOCK_DGRAM,0);
     if (sock < 0)
-        throw SystemException();
+        throw SystemException("::socket(PF_INET,SOCK_DGRAM,0) failed.");
     fd(sock);
 }
 
@@ -66,7 +66,7 @@ prefix_ void senf::ConnectedUDPv6SocketProtocol::init_client()
 {
     int sock = ::socket(PF_INET6,SOCK_DGRAM,0);
     if (sock < 0)
-        throw SystemException();
+        throw SystemException("::socket(PF_INET6,SOCK_DGRAM,0) failed.");
     fd(sock);
 }
 
diff --git a/Socket/Protocols/INet/MulticastSocketProtocol.cc b/Socket/Protocols/INet/MulticastSocketProtocol.cc
index ba30fcee99806861e57db68d8efe4a44e7f66c04..1712748c2747ceac8ac4f5f49bb4bdc008ae585e 100644
--- a/Socket/Protocols/INet/MulticastSocketProtocol.cc
+++ b/Socket/Protocols/INet/MulticastSocketProtocol.cc
@@ -116,7 +116,7 @@ prefix_ void senf::INet4MulticastSocketProtocol::mcAddMembership(INet4Address co
     mreqn.imr_address.s_addr = htons(INADDR_ANY);
     mreqn.imr_ifindex = 0;
     if (::setsockopt(fd(),SOL_IP,IP_ADD_MEMBERSHIP,&mreqn,sizeof(mreqn)) < 0)
-        throw SystemException("::setsockopt(IP_ADD_MEMBERSHIP");
+        throw SystemException("::setsockopt(IP_ADD_MEMBERSHIP)");
 }
 
 prefix_ void senf::INet4MulticastSocketProtocol::mcAddMembership(INet4Address const & mcAddr,
diff --git a/Socket/Protocols/Raw/PacketSocketHandle.cc b/Socket/Protocols/Raw/PacketSocketHandle.cc
index 54345f123f5b6dd05961d6121f3d05a09791df57..3a7eaade76c6fdf5ec0fab00972685d797687cb1 100644
--- a/Socket/Protocols/Raw/PacketSocketHandle.cc
+++ b/Socket/Protocols/Raw/PacketSocketHandle.cc
@@ -50,7 +50,7 @@ prefix_ void senf::PacketSocketProtocol::init_client(SocketType type, int protoc
         protocol = ETH_P_ALL;
     int sock = ::socket(PF_PACKET, socktype, htons(protocol));
     if (sock < 0)
-        throw SystemException();
+        throw SystemException("::socket(...) failed.");
     fd(sock);
 }
 
@@ -61,7 +61,7 @@ prefix_ unsigned senf::PacketSocketProtocol::available()
         return 0;
     ssize_t l = ::recv(fd(),0,0,MSG_PEEK | MSG_TRUNC);
     if (l < 0)
-        throw SystemException();
+        throw SystemException("::recv(socket_fd) failed.");
     return l;
 }
 
diff --git a/Socket/Protocols/Raw/TunTapSocketHandle.cc b/Socket/Protocols/Raw/TunTapSocketHandle.cc
index 6734b8a53a2d4efff3749ee03eac7b812e58abeb..cd68e063001704f097ab0945573c374a3c7daead 100644
--- a/Socket/Protocols/Raw/TunTapSocketHandle.cc
+++ b/Socket/Protocols/Raw/TunTapSocketHandle.cc
@@ -50,7 +50,7 @@ prefix_ void senf::TapSocketProtocol::init_client(std::string const & interface_
 {
     int f;
     if ( (f = ::open("/dev/net/tun", O_RDWR)) < 0 )
-        throw SystemException( "Could not open tap control device: /dev/net/tun");
+        throw SystemException( "Could not open tap control device: /dev/net/tun.");
     struct ifreq ifr;
     ::memset( &ifr, 0, sizeof(ifr));
     ifr.ifr_flags = IFF_TAP;
@@ -58,7 +58,7 @@ prefix_ void senf::TapSocketProtocol::init_client(std::string const & interface_
         ifr.ifr_flags |= IFF_NO_PI;
     interface_name.copy( ifr.ifr_name, IFNAMSIZ);
     if (::ioctl(f, TUNSETIFF, (void *) &ifr) < 0 )
-        throw SystemException( "Could not create tap device: ") << ifr.ifr_name;
+        throw SystemException( "Could not create tap device: ") << ifr.ifr_name << ".";
     fd(f);
 }
 
diff --git a/Socket/Protocols/UN/ConnectedUNDatagramSocketHandle.cc b/Socket/Protocols/UN/ConnectedUNDatagramSocketHandle.cc
index 9e47881ce10ba9b8159774c622a653ae071b6af1..2a9a4db50c826300e78ef0c662a0f436d54eaea4 100644
--- a/Socket/Protocols/UN/ConnectedUNDatagramSocketHandle.cc
+++ b/Socket/Protocols/UN/ConnectedUNDatagramSocketHandle.cc
@@ -40,7 +40,7 @@ prefix_ void senf::ConnectedUNDatagramSocketProtocol::init_client() const
 {
     int sock = ::socket(PF_UNIX,SOCK_DGRAM,0);
     if (sock < 0)
-        throw SystemException( "Could not create socket(PF_UNIX,SOCK_DGRAM,0)" );
+        throw SystemException( "Could not create socket(PF_UNIX,SOCK_DGRAM,0)." );
    fd(sock);
 }
 
diff --git a/Socket/Protocols/UN/UNDatagramSocketHandle.cc b/Socket/Protocols/UN/UNDatagramSocketHandle.cc
index d1b66bd4f8998153c3b462be9b98e060157c1b42..a84d8ec62e29e6ca2925d76d39c83bf3704c3ae0 100644
--- a/Socket/Protocols/UN/UNDatagramSocketHandle.cc
+++ b/Socket/Protocols/UN/UNDatagramSocketHandle.cc
@@ -41,7 +41,7 @@ prefix_ void senf::UNDatagramSocketProtocol::init_client() const
 {
     int sock = ::socket(PF_UNIX,SOCK_DGRAM,0);
     if (sock < 0)
-        throw SystemException( "Could not create socket(PF_UNIX,SOCK_DGRAM,0)" );
+        throw SystemException( "Could not create socket(PF_UNIX,SOCK_DGRAM,0)." );
     fd(sock);
 }
 
diff --git a/Socket/Protocols/UN/UNSocketProtocol.cc b/Socket/Protocols/UN/UNSocketProtocol.cc
index 0c58441f1bffff1f6c89dfd212bb2e3726300f5c..2e9404dc62c0fe438c4d0cc73837f9237be888af 100644
--- a/Socket/Protocols/UN/UNSocketProtocol.cc
+++ b/Socket/Protocols/UN/UNSocketProtocol.cc
@@ -42,7 +42,7 @@ prefix_ unsigned senf::UNSocketProtocol::available()
 {
     int n;
     if (::ioctl(fd(),SIOCINQ,&n) < 0)
-        throw SystemException("Could not call available() on UNSocket");
+        throw SystemException("Could not call available() on UNSocket.");
     return n;
 }
 
@@ -77,7 +77,7 @@ prefix_ void senf::UNSocketProtocol::check_and_unlink()
         ::unlink(una.path().c_str());
     }
     catch (SystemException & e) {
-        SENF_LOG(("UNSocketProtocol::check_and_unlink() failed; " << e.errorString() ));
+        SENF_LOG(("UNSocketProtocol::check_and_unlink() failed; [" << e.errorString() << "]."));
     }
 }
     
diff --git a/Socket/SocketProtocol.cc b/Socket/SocketProtocol.cc
index 672f21fd86b12e37a6821fa0c2330086f611a646..f2fe7123705d2f30b7436ce97006487f3450e398 100644
--- a/Socket/SocketProtocol.cc
+++ b/Socket/SocketProtocol.cc
@@ -38,9 +38,9 @@ prefix_ void senf::SocketProtocol::close()
     const
 {
     if (::shutdown(body().fd(),SHUT_RDWR) < 0)
-        throw SystemException();
+        throw SystemException("::shutdown(socket_fd)");
     if (::close(body().fd()) < 0)
-        throw SystemException();
+        throw SystemException("::close(socket_fd)");
 }
 
 prefix_ void senf::SocketProtocol::terminate()
diff --git a/Utils/Daemon/Daemon.cc b/Utils/Daemon/Daemon.cc
index 152186768576eec4327ae0403a2d17d48fdb47b4..f0be324b57e6f46d04f90cc0df0d874d3332cada 100644
--- a/Utils/Daemon/Daemon.cc
+++ b/Utils/Daemon/Daemon.cc
@@ -98,7 +98,8 @@ prefix_ void senf::Daemon::openLog()
     if (! stdoutLog_.empty()) {
         fd = ::open(stdoutLog_.c_str(), O_WRONLY | O_APPEND | O_CREAT, 0666);
         if (fd < 0)
-            throw SystemException("::open()");
+            throw SystemException()
+                  << " Could not open \"" << stdoutLog_ << "\" for redirecting stdout.";
         stdout_ = fd;
     }
     if (stderrLog_ == stdoutLog_)
@@ -106,7 +107,8 @@ prefix_ void senf::Daemon::openLog()
     else if (! stderrLog_.empty()) {
         fd = ::open(stdoutLog_.c_str(), O_WRONLY | O_APPEND | O_CREAT, 0666);
         if (fd < 0)
-            throw SystemException("::open()");
+            throw SystemException()
+                  << " Could not open \"" << stderrLog_ << "\" for redirecting stderr.";
         stderr_ = fd;
     }
 }
@@ -323,7 +325,7 @@ prefix_ bool senf::Daemon::pidfileCreate()
     // was some race condition, probably over NFS.
 
     std::string tempname;
-    boost::format linkErrorFormat("; could not link \"%1%\" to \"%2%\".");
+    boost::format linkErrorFormat(" Could not link \"%1%\" to \"%2%\".");
 
     {
         char hostname[HOST_NAME_MAX+1];
@@ -337,13 +339,18 @@ prefix_ bool senf::Daemon::pidfileCreate()
     while (1) {
         {
             std::ofstream pidf (tempname.c_str());
+            if (! pidf)
+                throw SystemException()
+                      << " Could not open pidfile \"" << tempname << "\" for output.";
             pidf << ::getpid() << std::endl;
+            if (! pidf)
+                throw SystemException()
+                      << " Could not write to pidfile \"" << tempname << "\".";
         }
 
         if (::link(tempname.c_str(), pidfile_.c_str()) < 0) {
             if (errno != EEXIST) 
-                throw SystemException("::link()")
-                    << linkErrorFormat % pidfile_.c_str() % tempname.c_str();
+                throw SystemException() << linkErrorFormat % pidfile_ % tempname;
         }
         else {
             struct ::stat s;
@@ -374,8 +381,7 @@ prefix_ bool senf::Daemon::pidfileCreate()
         LIBC_CALL( ::unlink, (tempname.c_str() ));
         if (::link(pidfile_.c_str(), tempname.c_str()) < 0) {
             if (errno != ENOENT)
-                throw SystemException("::link()")
-                    << linkErrorFormat % tempname.c_str() % pidfile_.c_str();
+                throw SystemException() << linkErrorFormat % tempname % pidfile_;
             // Hmm ... the pidfile mysteriously disappeared ... try again.
             continue;
         }
diff --git a/Utils/Exception.cc b/Utils/Exception.cc
index 61d5860d8b624c3a4666c17738d9b86fcf6f9894..e23357f23f95f24bfe4b4c9a083f34c126313269 100644
--- a/Utils/Exception.cc
+++ b/Utils/Exception.cc
@@ -51,7 +51,7 @@ prefix_ void senf::SystemException::init(std::string const & descr, int code)
 {
     code_ = code;
     (*this) << "[" << errorString() << "]";
-    if (! descr.empty()) (*this) << "; " << descr;
+    if (! descr.empty()) (*this) << " " << descr;
 }
 
 ///////////////////////////////cc.e////////////////////////////////////////
diff --git a/Utils/Exception.test.cc b/Utils/Exception.test.cc
index a65aa5fd3af4e687e9a452f58b339d6a8cecf506..3e5142878e2c364255adb97f2e326d35d20d4b7d 100644
--- a/Utils/Exception.test.cc
+++ b/Utils/Exception.test.cc
@@ -50,8 +50,7 @@ BOOST_AUTO_UNIT_TEST(errnoException)
     }
     catch (senf::SystemException & e) {
         BOOST_CHECK_EQUAL( e.errorNumber(), ENOENT );
-        //BOOST_CHECK_EQUAL( e.what(), "::open(): (2) No such file or directory\nx=1\ny=2" );
-        BOOST_CHECK_EQUAL( e.what(), "[No such file or directory]; ::open()\nx=1\ny=2" );
+        BOOST_CHECK_EQUAL( e.errorString(), "No such file or directory");
     }
 }