diff --git a/association_manager.hpp b/association_manager.hpp
new file mode 100644
index 0000000..1aff7e0
--- /dev/null
+++ b/association_manager.hpp
@@ -0,0 +1,84 @@
+#pragma once
+
+#include "config.h"
+
+#include <sdbusplus/bus.hpp>
+
+namespace phosphor
+{
+namespace inventory
+{
+namespace manager
+{
+namespace associations
+{
+
+/**
+ * @class Manager
+ *
+ * @brief This class provides the ability to add org.openbmc.Associations
+ *        interfaces on inventory D-Bus objects, based on a definition in a
+ *        JSON file.
+ *
+ *        The purpose for this is to be able to associate other D-Bus paths
+ *        with the inventory items they relate to.
+ *
+ *        For example, a card temperature sensor D-Bus object can be associated
+ *        with the D-Bus object for that card's inventory entry so that some
+ *        code can tie them together.
+ */
+class Manager
+{
+  public:
+    Manager() = delete;
+    ~Manager() = default;
+    Manager(const Manager&) = delete;
+    Manager& operator=(const Manager&) = delete;
+    Manager(Manager&&) = delete;
+    Manager& operator=(Manager&&) = delete;
+
+    /**
+     * @brief Constructor
+     *
+     * @param[in] bus - sdbusplus object
+     * @param[in] jsonPath - path to the JSON File that contains associations
+     */
+    Manager(sdbusplus::bus::bus& bus, const std::string& jsonPath);
+
+    /**
+     * @brief Constructor
+     *
+     * @param[in] bus - sdbusplus object
+     */
+    explicit Manager(sdbusplus::bus::bus& bus) :
+        Manager(bus, ASSOCIATIONS_FILE_PATH)
+    {
+    }
+
+    /**
+     * @brief Creates any association D-Bus interfaces required based on
+     *        the JSON associations definition for the object path passed
+     *        in.
+     *
+     * Called after PIM creates a new inventory D-Bus interface on objectPath.
+     *
+     * @param[in] objectPath - the D-Bus object path to check for associations
+     */
+    void createAssociations(const std::string& objectPath);
+
+  private:
+    /**
+     * @brief The sdbusplus bus object.
+     */
+    sdbusplus::bus::bus& _bus;
+
+    /**
+     * @brief The path to the associations JSON File.
+     */
+    const std::string _jsonFile;
+};
+
+} // namespace associations
+} // namespace manager
+} // namespace inventory
+} // namespace phosphor
