diff --git a/daemon/core/face-uri.cpp b/daemon/core/face-uri.cpp
new file mode 100644
index 0000000..a30bb7b
--- /dev/null
+++ b/daemon/core/face-uri.cpp
@@ -0,0 +1,62 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (C) 2014 Named Data Networking Project
+ * See COPYING for copyright and distribution information.
+ */
+
+#include "face-uri.hpp"
+#include "core/logger.hpp"
+#include <boost/regex.hpp>
+
+NFD_LOG_INIT("FaceUri");
+
+namespace nfd {
+
+FaceUri::FaceUri(const std::string& uri)
+{
+  if (!parse(uri))
+    {
+      throw Error("Malformed URI: " + uri);
+    }
+}
+
+bool
+FaceUri::parse(const std::string& uri)
+{
+  m_scheme.clear();
+  m_domain.clear();
+  m_port.clear();
+  
+  boost::regex protocolExp("(\\w+\\d?)://(.+)");
+  boost::smatch protocolMatch;
+  if (!boost::regex_match(uri, protocolMatch, protocolExp))
+    {
+      return false;
+    }
+  m_scheme = protocolMatch[1];
+
+  const std::string& remote = protocolMatch[2];
+
+  boost::regex v6Exp("^\\[(([a-fA-F0-9:]+))\\](:(\\d+))?$"); // [stuff]:port
+  boost::regex v4Exp("^((\\d+\\.){3}\\d+)(:(\\d+))?$");
+  boost::regex hostExp("^(([^:]+))(:(\\d+))?$"); // stuff:port
+
+  boost::smatch match;
+  if (boost::regex_match(remote, match, v6Exp) ||
+      boost::regex_match(remote, match, v4Exp) ||
+      boost::regex_match(remote, match, hostExp))
+    {
+      m_domain = match[1];
+      m_port   = match[4];
+    }
+  else
+    {
+      return false;
+    }
+  
+  NFD_LOG_DEBUG("URI [" << uri << "] parsed into: "
+                << m_scheme << ", " << m_domain << ", " << m_port);
+  return true;
+}
+
+} // namespace nfd
diff --git a/daemon/core/face-uri.hpp b/daemon/core/face-uri.hpp
new file mode 100644
index 0000000..91c7a30
--- /dev/null
+++ b/daemon/core/face-uri.hpp
@@ -0,0 +1,89 @@
+/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/**
+ * Copyright (C) 2014 Named Data Networking Project
+ * See COPYING for copyright and distribution information.
+ */
+
+#ifndef NFD_CORE_FACE_URI_H
+#define NFD_CORE_FACE_URI_H
+
+#include "common.hpp"
+
+namespace nfd {
+
+class FaceUri
+{
+public:
+  class Error : public std::runtime_error
+  {
+  public:
+    Error(const std::string& what) : std::runtime_error(what) {}
+  };
+
+  FaceUri();
+  
+  /** \brief Construct URI object
+   *
+   * Expected format: scheme://domain:port/path?query_string#fragment_id
+   *
+   * \throw FaceUri::Error if URI cannot be parsed
+   */
+  explicit
+  FaceUri(const std::string& uri);
+
+  /** \brief Exception-safe parsing of URI
+   */
+  bool
+  parse(const std::string& uri);
+
+  /** \brief Get scheme (protocol) extracted from URI
+   */
+  const std::string&
+  getScheme() const;
+
+  /** \brief Get domain extracted from URI
+   */
+  const std::string&
+  getDomain() const;
+
+  /** \brief Get port extracted from URI
+   *
+   *  \return Extracted port or empty string if port wasn't present
+   */
+  const std::string&
+  getPort() const;
+
+  // other getters should be added, when necessary
+
+private:
+  std::string m_scheme;
+  std::string m_domain;
+  std::string m_port;
+};
+
+inline
+FaceUri::FaceUri()
+{
+}
+
+inline const std::string&
+FaceUri::getScheme() const
+{
+  return m_scheme;
+}
+
+inline const std::string&
+FaceUri::getDomain() const
+{
+  return m_domain;
+}
+
+inline const std::string&
+FaceUri::getPort() const
+{
+  return m_port;
+}
+
+} // namespace nfd
+
+#endif // NFD_CORE_FACE_URI_H
