diff --git a/manager.cpp b/manager.cpp
index 44c1adf..2503e93 100644
--- a/manager.cpp
+++ b/manager.cpp
@@ -13,6 +13,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#include <phosphor-logging/log.hpp>
 #include "callout.hpp"
 #include "config.h"
 #include "manager.hpp"
@@ -67,8 +68,7 @@
 {
     createObject(objectPath, interfaces);
 
-    // TODO
-    // restoreCalloutObjects(objectPath, interfaces);
+    restoreCalloutObjects(objectPath, interfaces);
 }
 
 void Manager::create(const std::string& objectPath,
@@ -237,6 +237,44 @@
     }
 }
 
+void Manager::restoreCalloutObjects(const std::string& objectPath,
+                                    const DbusInterfaceMap& interfaces)
+{
+    auto saveDir = getCalloutSaveDir(getEntryID(objectPath));
+
+    if (!fs::exists(saveDir))
+    {
+        return;
+    }
+
+    size_t id;
+    for (auto& f : fs::directory_iterator(saveDir))
+    {
+        try
+        {
+            id = std::stoul(f.path().filename());
+        }
+        catch (std::exception& e)
+        {
+            using namespace phosphor::logging;
+            log<level::ERR>("Invalid IBM logging callout save file. Deleting",
+                            entry("FILE=%s", f.path().c_str()));
+            fs::remove(f.path());
+            continue;
+        }
+
+        auto path = getCalloutObjectPath(objectPath, id);
+        auto callout = std::make_shared<Callout>(bus, path, id,
+                                                 getLogTimestamp(interfaces));
+        if (callout->deserialize(saveDir))
+        {
+            callout->emit_object_added();
+            std::experimental::any anyObject = callout;
+            addChildInterface(objectPath, InterfaceType::CALLOUT, anyObject);
+        }
+    }
+}
+
 void Manager::interfaceAdded(sdbusplus::message::message& msg)
 {
     sdbusplus::message::object_path path;
diff --git a/manager.hpp b/manager.hpp
index b84a4c7..39cf958 100644
--- a/manager.hpp
+++ b/manager.hpp
@@ -197,6 +197,18 @@
                               const DbusInterfaceMap& interfaces);
 
     /**
+     * Restores callout objects for a particular error log that
+     * have previously been saved by reading their data out of
+     * the filesystem using Cereal.
+     *
+     * @param[in] objectPath - object path of the error log
+     * @param[in] interfaces - map of all interfaces and properties
+     *                         on a phosphor-logging error log.
+     */
+    void restoreCalloutObjects(const std::string& objectPath,
+                               const DbusInterfaceMap& interfaces);
+
+    /**
      * Returns the entry ID for a log
      *
      * @param[in] objectPath - the object path of the log
