diff --git a/Makefile.am b/Makefile.am
index b684c4a..572a994 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -14,6 +14,7 @@
 
 libmanagercommon_la_SOURCES = \
 	events.cpp \
+	errors.cpp \
 	manager.cpp
 libmanagercommon_la_LIBADD = $(SDBUSPLUS_LIBS) $(PHOSPHOR_DBUS_INTERFACES_LIBS)
 libmanagercommon_la_CFLAGS = $(SDBUSPLUS_CFLAGS) $(PHOSPHOR_DBUS_INTERACES_CFLAGS)
diff --git a/errors.cpp b/errors.cpp
new file mode 100644
index 0000000..af02d5b
--- /dev/null
+++ b/errors.cpp
@@ -0,0 +1,35 @@
+/**
+ * Copyright © 2017 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <log.hpp>
+#include "errors.hpp"
+
+namespace phosphor
+{
+namespace inventory
+{
+namespace manager
+{
+void InterfaceError::log() const
+{
+    logging::log<logging::level::ERR>(
+        what(),
+        phosphor::logging::entry("INTERFACE=%s", interface));
+}
+} // namespace manager
+} // namespace inventory
+} // namespace phosphor
+
+// vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
diff --git a/errors.hpp b/errors.hpp
new file mode 100644
index 0000000..1fa4492
--- /dev/null
+++ b/errors.hpp
@@ -0,0 +1,51 @@
+#pragma once
+
+#include <stdexcept>
+
+namespace phosphor
+{
+namespace inventory
+{
+namespace manager
+{
+
+// TODO: Use proper error generation techniques
+// https://github.com/openbmc/openbmc/issues/1125
+
+/** @class InterfaceError
+ *  @brief Exception class for unrecognized interfaces.
+ */
+class InterfaceError final : public std::invalid_argument
+{
+    public:
+        ~InterfaceError() = default;
+        InterfaceError() = delete;
+        InterfaceError(const InterfaceError&) = delete;
+        InterfaceError(InterfaceError&&) = default;
+        InterfaceError& operator=(const InterfaceError&) = delete;
+        InterfaceError& operator=(InterfaceError&&) = default;
+
+        /** @brief Construct an interface error.
+         *
+         *  @param[in] msg - The message to be returned by what().
+         *  @param[in] iface - The failing interface name.
+         */
+        InterfaceError(
+            const char* msg,
+            const std::string& iface) :
+            std::invalid_argument(msg),
+            interface(iface) {}
+
+        /** @brief Log the exception message to the systemd journal. */
+        void log() const;
+
+    private:
+
+        std::string interface;
+};
+
+} // namespace manager
+} // namespace inventory
+} // namespace phosphor
+
+// vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
