diff --git a/src/PSUEvent.cpp b/src/PSUEvent.cpp
index bfe0776..4e5c5a7 100644
--- a/src/PSUEvent.cpp
+++ b/src/PSUEvent.cpp
@@ -135,10 +135,17 @@
     std::shared_ptr<bool> state, const std::string& psuName) :
     eventInterface(eventInterface),
     asserts(asserts), combineEvent(combineEvent), assertState(state),
-    errCount(0), path(path), eventName(eventName), waitTimer(io),
-    inputDev(io, open(path.c_str(), O_RDONLY)), psuName(psuName),
-    groupEventName(groupEventName)
+    errCount(0), path(path), eventName(eventName), waitTimer(io), inputDev(io),
+    psuName(psuName), groupEventName(groupEventName)
 {
+    fd = open(path.c_str(), O_RDONLY);
+    if (fd < 0)
+    {
+        std::cerr << "PSU sub event failed to open file\n";
+        return;
+    }
+    inputDev.assign(fd);
+
     auto found = logID.find(eventName);
     if (found == logID.end())
     {
@@ -174,8 +181,8 @@
 
 PSUSubEvent::~PSUSubEvent()
 {
-    inputDev.close();
     waitTimer.cancel();
+    inputDev.close();
 }
 
 void PSUSubEvent::handleResponse(const boost::system::error_code& err)
@@ -217,14 +224,7 @@
         updateValue(0);
         errCount++;
     }
-    responseStream.clear();
-    inputDev.close();
-    int fd = open(path.c_str(), O_RDONLY);
-    if (fd < 0)
-    {
-        return;
-    }
-    inputDev.assign(fd);
+    lseek(fd, 0, SEEK_SET);
     waitTimer.expires_from_now(boost::posix_time::milliseconds(eventPollMs));
     waitTimer.async_wait([&](const boost::system::error_code& ec) {
         if (ec == boost::asio::error::operation_aborted)
diff --git a/src/PSUSensor.cpp b/src/PSUSensor.cpp
index fc24704..d5f1b23 100644
--- a/src/PSUSensor.cpp
+++ b/src/PSUSensor.cpp
@@ -44,8 +44,8 @@
                      double max, double min) :
     Sensor(boost::replace_all_copy(sensorName, " ", "_"),
            std::move(_thresholds), sensorConfiguration, objectType, max, min),
-    objServer(objectServer), inputDev(io, open(path.c_str(), O_RDONLY)),
-    waitTimer(io), path(path), errCount(0),
+    objServer(objectServer), inputDev(io), waitTimer(io), path(path),
+    errCount(0),
 
     sensorFactor(factor)
 {
@@ -58,6 +58,14 @@
                   << sensorName << "\"\n";
     }
 
+    fd = open(path.c_str(), O_RDONLY);
+    if (fd < 0)
+    {
+        std::cerr << "PSU sensor failed to open file\n";
+        return;
+    }
+    inputDev.assign(fd);
+
     std::string dbusPath = sensorPathPrefix + sensorTypeName + name;
 
     sensorInterface = objectServer.add_interface(
@@ -83,8 +91,8 @@
 
 PSUSensor::~PSUSensor()
 {
-    inputDev.close();
     waitTimer.cancel();
+    inputDev.close();
     objServer.remove_interface(sensorInterface);
     objServer.remove_interface(thresholdInterfaceWarning);
     objServer.remove_interface(thresholdInterfaceCritical);
@@ -156,15 +164,7 @@
         errCount++;
     }
 
-    responseStream.clear();
-    inputDev.close();
-    int fd = open(path.c_str(), O_RDONLY);
-    if (fd < 0)
-    {
-        std::cerr << "Failed to open path " << path << "\n";
-        return;
-    }
-    inputDev.assign(fd);
+    lseek(fd, 0, SEEK_SET);
     waitTimer.expires_from_now(boost::posix_time::milliseconds(sensorPollMs));
     waitTimer.async_wait([&](const boost::system::error_code& ec) {
         if (ec == boost::asio::error::operation_aborted)
diff --git a/src/PSUSensorMain.cpp b/src/PSUSensorMain.cpp
index c5a7251..ce96c72 100644
--- a/src/PSUSensorMain.cpp
+++ b/src/PSUSensorMain.cpp
@@ -836,7 +836,7 @@
                 std::cerr << "callback method error\n";
                 return;
             }
-            filterTimer.expires_from_now(boost::posix_time::seconds(1));
+            filterTimer.expires_from_now(boost::posix_time::seconds(3));
             filterTimer.async_wait([&](const boost::system::error_code& ec) {
                 if (ec == boost::asio::error::operation_aborted)
                 {
