diff --git a/logging_test.cpp b/logging_test.cpp
index 2f751f3..c0350f5 100644
--- a/logging_test.cpp
+++ b/logging_test.cpp
@@ -92,27 +92,27 @@
     const char* test_string = "/tmp/test_string/";
     try
     {
-        elog<example::xyz::openbmc_project::Example::Elog::TestErrorOne>(
-            example::xyz::openbmc_project::Example::Elog::TestErrorOne::ERRNUM(
+        elog<example::xyz::openbmc_project::example::elog::TestErrorOne>(
+            example::xyz::openbmc_project::example::elog::TestErrorOne::ERRNUM(
                 number),
-            example::xyz::openbmc_project::Example::Elog::TestErrorOne::
+            example::xyz::openbmc_project::example::elog::TestErrorOne::
                 FILE_PATH(test_string),
-            example::xyz::openbmc_project::Example::Elog::TestErrorOne::
+            example::xyz::openbmc_project::example::elog::TestErrorOne::
                 FILE_NAME("elog_test_3.txt"),
-            example::xyz::openbmc_project::Example::Elog::TestErrorTwo::
+            example::xyz::openbmc_project::example::elog::TestErrorTwo::
                 DEV_ADDR(0xDEADDEAD),
-            example::xyz::openbmc_project::Example::Elog::TestErrorTwo::DEV_ID(
+            example::xyz::openbmc_project::example::elog::TestErrorTwo::DEV_ID(
                 100),
-            example::xyz::openbmc_project::Example::Elog::TestErrorTwo::
+            example::xyz::openbmc_project::example::elog::TestErrorTwo::
                 DEV_NAME("test case 3"));
     }
-    catch (const example::xyz::openbmc_project::Example::Elog::TestErrorOne& e)
+    catch (const example::xyz::openbmc_project::example::elog::TestErrorOne& e)
     {
         std::cout << "elog exception caught: " << e.what() << std::endl;
     }
 
     // Reduce our error namespaces
-    using namespace example::xyz::openbmc_project::Example::Elog;
+    using namespace example::xyz::openbmc_project::example::elog;
 
     // Now read back and verify our data made it into the journal
     std::stringstream stream;
@@ -208,12 +208,12 @@
     {
         try
         {
-            elog<example::xyz::openbmc_project::Example::Elog::AutoTestSimple>(
-                example::xyz::openbmc_project::Example::Elog::AutoTestSimple::
+            elog<example::xyz::openbmc_project::example::elog::AutoTestSimple>(
+                example::xyz::openbmc_project::example::elog::AutoTestSimple::
                     STRING("FOO"));
         }
         catch (
-            const example::xyz::openbmc_project::Example::Elog::AutoTestSimple&
+            const example::xyz::openbmc_project::example::elog::AutoTestSimple&
                 e)
         {
             std::cout << "elog exception caught: " << e.what() << std::endl;
@@ -222,8 +222,8 @@
     }
     else if (std::strcmp(text, "AutoTestCreateAndCommit") == 0)
     {
-        report<example::xyz::openbmc_project::Example::Elog::AutoTestSimple>(
-            example::xyz::openbmc_project::Example::Elog::AutoTestSimple::
+        report<example::xyz::openbmc_project::example::elog::AutoTestSimple>(
+            example::xyz::openbmc_project::example::elog::AutoTestSimple::
                 STRING("FOO"));
     }
 
