diff --git a/extensions/openpower-pels/host_notifier.cpp b/extensions/openpower-pels/host_notifier.cpp
index 2e132b9..566edda 100644
--- a/extensions/openpower-pels/host_notifier.cpp
+++ b/extensions/openpower-pels/host_notifier.cpp
@@ -84,6 +84,12 @@
     bool required = true;
     Repository::LogID i{Repository::LogID::Pel{id}};
 
+    // Manufacturing testing may turn off sending up PELs
+    if (!_dataIface.getHostPELEnablement())
+    {
+        return false;
+    }
+
     if (auto attributes = _repo.getPELAttributes(i); attributes)
     {
         auto a = attributes.value().get();
diff --git a/test/openpower-pels/host_notifier_test.cpp b/test/openpower-pels/host_notifier_test.cpp
index c51d560..d3018dc 100644
--- a/test/openpower-pels/host_notifier_test.cpp
+++ b/test/openpower-pels/host_notifier_test.cpp
@@ -45,6 +45,8 @@
         auto r = sd_event_default(&event);
         EXPECT_TRUE(r >= 0);
 
+        ON_CALL(dataIface, getHostPELEnablement).WillByDefault(Return(true));
+
         hostIface =
             std::make_unique<NiceMock<MockHostInterface>>(event, dataIface);
 
@@ -678,3 +680,54 @@
         EXPECT_EQ(notifier.queueSize(), 0);
     }
 }
+
+// Test that sending PELs can be disabled
+TEST_F(HostNotifierTest, TestDisable)
+{
+    // Turn off sending the PELs except for once in the middle
+    EXPECT_CALL(dataIface, getHostPELEnablement())
+        .WillOnce(Return(false))
+        .WillOnce(Return(false))
+        .WillOnce(Return(true))
+        .WillOnce(Return(false))
+        .WillOnce(Return(false))
+        .WillOnce(Return(false));
+
+    {
+        HostNotifier notifier{repo, dataIface, std::move(hostIface)};
+
+        // Add a PEL with the host off
+        auto pel = makePEL();
+        repo.add(pel);
+
+        // Not added to the send queue
+        EXPECT_EQ(notifier.queueSize(), 0);
+
+        dataIface.changeHostState(true);
+
+        // Try again with the host on
+        pel = makePEL();
+        repo.add(pel);
+
+        EXPECT_EQ(notifier.queueSize(), 0);
+
+        // Now getHostPELEnablement() will return true for the new PEL
+        pel = makePEL();
+        repo.add(pel);
+
+        EXPECT_EQ(notifier.queueSize(), 1);
+    }
+
+    // getHostPELEnablement is back to returning false.
+    // Create a new second instance and make sure the 3 existing PELs
+    // aren't put on the queue on startup
+    {
+        Repository repo1{repoPath};
+        std::unique_ptr<HostInterface> hostIface1 =
+            std::make_unique<MockHostInterface>(event, dataIface);
+
+        HostNotifier notifier{repo1, dataIface, std::move(hostIface1)};
+
+        EXPECT_EQ(notifier.queueSize(), 0);
+    }
+}
diff --git a/test/openpower-pels/mocks.hpp b/test/openpower-pels/mocks.hpp
index 8b055dd..5c3bdb1 100644
--- a/test/openpower-pels/mocks.hpp
+++ b/test/openpower-pels/mocks.hpp
@@ -24,6 +24,7 @@
     MOCK_METHOD(std::string, getServerFWVersion, (), (const override));
     MOCK_METHOD(std::string, getBMCFWVersion, (), (const override));
     MOCK_METHOD(std::string, getBMCFWVersionID, (), (const override));
+    MOCK_METHOD(bool, getHostPELEnablement, (), (const override));
 
     void changeHostState(bool newState)
     {
