diff --git a/daemon/core/face-uri.cpp b/daemon/core/face-uri.cpp
index 5da35cd..5cfaf72 100644
--- a/daemon/core/face-uri.cpp
+++ b/daemon/core/face-uri.cpp
@@ -24,6 +24,7 @@
 
 #include "face-uri.hpp"
 #include "core/logger.hpp"
+
 #ifdef HAVE_PCAP
 #include "face/ethernet.hpp"
 #endif // HAVE_PCAP
diff --git a/daemon/core/logger.hpp b/daemon/core/logger.hpp
index 552cb11..907ce7e 100644
--- a/daemon/core/logger.hpp
+++ b/daemon/core/logger.hpp
@@ -41,7 +41,7 @@
   LOG_DEBUG          = 4, // debug messages
   LOG_TRACE          = 5, // trace messages (most verbose)
   // LOG_FATAL is not a level and is logged unconditionally
-  LOG_ALL            = 255, // all messages
+  LOG_ALL            = 255 // all messages
 };
 
 class Logger
@@ -81,7 +81,6 @@
     m_moduleName = name;
   }
 
-
   /// \brief return a string representation of time since epoch: seconds.microseconds
   static std::string
   now()
@@ -89,13 +88,11 @@
     using namespace ndn::time;
 
     static const microseconds::rep ONE_SECOND = 1000000;
-
-    // 10 (whole seconds) + '.' + 6 (fraction) + 1 (\0)
-    char buffer[10 + 1 + 6 + 1];
-
     microseconds::rep microseconds_since_epoch =
       duration_cast<microseconds>(system_clock::now().time_since_epoch()).count();
 
+    // 10 (whole seconds) + '.' + 6 (fraction) + 1 (\0)
+    char buffer[10 + 1 + 6 + 1];
     ::snprintf(buffer, sizeof(buffer), "%lld.%06lld",
                static_cast<long long int>(microseconds_since_epoch / ONE_SECOND),
                static_cast<long long int>(microseconds_since_epoch % ONE_SECOND));
@@ -126,26 +123,26 @@
 
 namespace nfd {
 
-#define NFD_LOG_INIT(name)                                              \
-static nfd::Logger& g_logger = nfd::LoggerFactory::create(name);
+#define NFD_LOG_INIT(name) \
+static nfd::Logger& g_logger = nfd::LoggerFactory::create(name)
 
-#define NFD_LOG_INCLASS_DECLARE()               \
-static nfd::Logger& g_logger;
+#define NFD_LOG_INCLASS_DECLARE() \
+static nfd::Logger& g_logger
 
-#define NFD_LOG_INCLASS_DEFINE(cls, name)                       \
-nfd::Logger& cls::g_logger = nfd::LoggerFactory::create(name);
+#define NFD_LOG_INCLASS_DEFINE(cls, name) \
+nfd::Logger& cls::g_logger = nfd::LoggerFactory::create(name)
 
-#define NFD_LOG_INCLASS_TEMPLATE_DEFINE(cls, name)                      \
-template<class T>                                                       \
-nfd::Logger& cls<T>::g_logger = nfd::LoggerFactory::create(name);
+#define NFD_LOG_INCLASS_TEMPLATE_DEFINE(cls, name) \
+template<class T>                                  \
+nfd::Logger& cls<T>::g_logger = nfd::LoggerFactory::create(name)
 
 #define NFD_LOG_INCLASS_TEMPLATE_SPECIALIZATION_DEFINE(cls, specialization, name) \
-template<>                                                              \
-nfd::Logger& cls<specialization>::g_logger = nfd::LoggerFactory::create(name);
+template<>                                                                        \
+nfd::Logger& cls<specialization>::g_logger = nfd::LoggerFactory::create(name)
 
 #define NFD_LOG_INCLASS_2TEMPLATE_SPECIALIZATION_DEFINE(cls, s1, s2, name) \
-template<>                                                              \
-nfd::Logger& cls<s1, s2>::g_logger = nfd::LoggerFactory::create(name);
+template<>                                                                 \
+nfd::Logger& cls<s1, s2>::g_logger = nfd::LoggerFactory::create(name)
 
 
 #define NFD_LOG(level, expression)                                      \
diff --git a/daemon/core/network-interface.cpp b/daemon/core/network-interface.cpp
index c8e4046..df47ac5 100644
--- a/daemon/core/network-interface.cpp
+++ b/daemon/core/network-interface.cpp
@@ -40,9 +40,9 @@
 #error Platform not supported
 #endif
 
-namespace nfd {
+NFD_LOG_INIT("NetworkInterfaceInfo");
 
-NFD_LOG_INIT("NetworkInterfaceInfo")
+namespace nfd {
 
 std::list< shared_ptr<NetworkInterfaceInfo> >
 listNetworkInterfaces()
diff --git a/daemon/face/datagram-face.hpp b/daemon/face/datagram-face.hpp
index 7669e72..7815eae 100644
--- a/daemon/face/datagram-face.hpp
+++ b/daemon/face/datagram-face.hpp
@@ -94,12 +94,12 @@
 protected:
   shared_ptr<typename protocol::socket> m_socket;
   uint8_t m_inputBuffer[MAX_NDN_PACKET_SIZE];
-
   bool m_hasBeenUsedRecently;
 
   NFD_LOG_INCLASS_DECLARE();
 };
 
+
 template <class T>
 inline
 DatagramFace<T>::DatagramFace(const FaceUri& remoteUri, const FaceUri& localUri,
diff --git a/daemon/face/ethernet-face.cpp b/daemon/face/ethernet-face.cpp
index 02cc041..fb278d3 100644
--- a/daemon/face/ethernet-face.cpp
+++ b/daemon/face/ethernet-face.cpp
@@ -38,7 +38,7 @@
 
 namespace nfd {
 
-NFD_LOG_INIT("EthernetFace")
+NFD_LOG_INIT("EthernetFace");
 
 EthernetFace::EthernetFace(const shared_ptr<boost::asio::posix::stream_descriptor>& socket,
                            const shared_ptr<NetworkInterfaceInfo>& interface,
diff --git a/daemon/face/ethernet-factory.cpp b/daemon/face/ethernet-factory.cpp
index 894f769..6809e6c 100644
--- a/daemon/face/ethernet-factory.cpp
+++ b/daemon/face/ethernet-factory.cpp
@@ -32,7 +32,7 @@
 
 namespace nfd {
 
-NFD_LOG_INIT("EthernetFactory")
+NFD_LOG_INIT("EthernetFactory");
 
 shared_ptr<EthernetFace>
 EthernetFactory::createMulticastFace(const shared_ptr<NetworkInterfaceInfo> &interface,
diff --git a/daemon/face/ethernet.cpp b/daemon/face/ethernet.cpp
index ee30aca..1aeaca6 100644
--- a/daemon/face/ethernet.cpp
+++ b/daemon/face/ethernet.cpp
@@ -42,22 +42,34 @@
 Address
 Address::fromString(const std::string& str)
 {
+  unsigned short temp[ADDR_LEN];
+  char sep[5][2]; // 5 * (1 separator char + 1 null terminator)
+  int n = 0; // num of chars read from the input string
+
+  // ISO C++98 does not support the 'hh' type modifier
+  /// \todo use SCNx8 (cinttypes) when we enable C++11
+  int ret = ::sscanf(str.c_str(), "%2hx%1[:-]%2hx%1[:-]%2hx%1[:-]%2hx%1[:-]%2hx%1[:-]%2hx%n",
+                     &temp[0], &sep[0][0], &temp[1], &sep[1][0], &temp[2], &sep[2][0],
+                     &temp[3], &sep[3][0], &temp[4], &sep[4][0], &temp[5], &n);
+
+  if (ret < 11 || static_cast<size_t>(n) != str.length())
+    return Address();
+
   Address a;
-  int n, ret;
+  for (size_t i = 0; i < ADDR_LEN; ++i)
+    {
+      // check that all separators are actually the same char (: or -)
+      if (i < 5 && sep[i][0] != sep[0][0])
+        return Address();
 
-  // colon-separated
-  ret = ::sscanf(str.c_str(), "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx%n",
-                 &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &n);
-  if (ret >= 6 && str.c_str()[n] == '\0')
-    return a;
+      // check that each value fits into a uint8_t
+      if (temp[i] > 0xFF)
+        return Address();
 
-  // dash-separated
-  ret = ::sscanf(str.c_str(), "%hhx-%hhx-%hhx-%hhx-%hhx-%hhx%n",
-                 &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &n);
-  if (ret >= 6 && str.c_str()[n] == '\0')
-    return a;
+      a[i] = static_cast<uint8_t>(temp[i]);
+    }
 
-  return Address();
+  return a;
 }
 
 std::ostream&
diff --git a/daemon/face/face.cpp b/daemon/face/face.cpp
index d4d198f..d0d42db 100644
--- a/daemon/face/face.cpp
+++ b/daemon/face/face.cpp
@@ -27,8 +27,6 @@
 
 namespace nfd {
 
-NFD_LOG_INIT("Face")
-
 static inline void
 increaseCounter(FaceCounter& counter)
 {
