diff --git a/elog_serialize.cpp b/elog_serialize.cpp
index 0468e11..72dc295 100644
--- a/elog_serialize.cpp
+++ b/elog_serialize.cpp
@@ -10,6 +10,50 @@
 namespace logging
 {
 
+/** @brief Function required by Cereal to perform serialization.
+ *  @tparam Archive - Cereal archive type (binary in our case).
+ *  @param[in] a - reference to Cereal archive.
+ *  @param[in] e - const reference to error entry.
+ */
+template<class Archive>
+void save(Archive& a, const Entry& e)
+{
+    a(e.id(), e.severity(), e.timestamp(),
+      e.message(), e.additionalData(), e.associations(), e.resolved());
+}
+
+/** @brief Function required by Cereal to perform deserialization.
+ *  @tparam Archive - Cereal archive type (binary in our case).
+ *  @param[in] a - reference to Cereal archive.
+ *  @param[in] e - reference to error entry.
+ */
+template<class Archive>
+void load(Archive& a, Entry& e)
+{
+    using namespace
+        sdbusplus::xyz::openbmc_project::Logging::server;
+
+    uint32_t id{};
+    Entry::Level severity{};
+    uint64_t timestamp{};
+    std::string message{};
+    std::vector<std::string> additionalData{};
+    bool resolved{};
+    AssociationList associations{};
+
+    a(id, severity, timestamp, message,
+      additionalData, associations, resolved);
+
+    e.id(id);
+    e.severity(severity);
+    e.timestamp(timestamp);
+    e.message(message);
+    e.additionalData(additionalData);
+    e.sdbusplus::xyz::openbmc_project::
+        Logging::server::Entry::resolved(resolved);
+    e.associations(associations);
+}
+
 fs::path serialize(const Entry& e, const fs::path& dir)
 {
     auto path = dir / std::to_string(e.id());
diff --git a/elog_serialize.hpp b/elog_serialize.hpp
index d1bcbfb..f7f3bd9 100644
--- a/elog_serialize.hpp
+++ b/elog_serialize.hpp
@@ -13,50 +13,6 @@
 
 namespace fs = std::experimental::filesystem;
 
-/** @brief Function required by Cereal to perform serialization.
- *  @tparam Archive - Cereal archive type (binary in our case).
- *  @param[in] a - reference to Cereal archive.
- *  @param[in] e - const reference to error entry.
- */
-template<class Archive>
-void save(Archive& a, const Entry& e)
-{
-    a(e.id(), e.severity(), e.timestamp(),
-      e.message(), e.additionalData(), e.associations(), e.resolved());
-}
-
-/** @brief Function required by Cereal to perform deserialization.
- *  @tparam Archive - Cereal archive type (binary in our case).
- *  @param[in] a - reference to Cereal archive.
- *  @param[in] e - reference to error entry.
- */
-template<class Archive>
-void load(Archive& a, Entry& e)
-{
-    using namespace
-        sdbusplus::xyz::openbmc_project::Logging::server;
-
-    uint32_t id{};
-    Entry::Level severity{};
-    uint64_t timestamp{};
-    std::string message{};
-    std::vector<std::string> additionalData{};
-    bool resolved{};
-    AssociationList associations{};
-
-    a(id, severity, timestamp, message,
-      additionalData, associations, resolved);
-
-    e.id(id);
-    e.severity(severity);
-    e.timestamp(timestamp);
-    e.message(message);
-    e.additionalData(additionalData);
-    e.sdbusplus::xyz::openbmc_project::
-        Logging::server::Entry::resolved(resolved);
-    e.associations(associations);
-}
-
 /** @brief Serialize and persist error d-bus object
  *  @param[in] a - const reference to error entry.
  *  @param[in] dir - pathname of directory where the serialized error will
