diff --git a/include/PSUSensor.hpp b/include/PSUSensor.hpp
index e309aeb..d6717cd 100644
--- a/include/PSUSensor.hpp
+++ b/include/PSUSensor.hpp
@@ -28,7 +28,6 @@
     sdbusplus::asio::object_server& objServer;
     boost::asio::posix::stream_descriptor inputDev;
     boost::asio::deadline_timer waitTimer;
-    std::shared_ptr<boost::asio::streambuf> readBuf;
     std::string path;
     std::string pathRatedMax;
     std::string pathRatedMin;
diff --git a/src/PSUSensor.cpp b/src/PSUSensor.cpp
index 942cfc3..077f7ed 100644
--- a/src/PSUSensor.cpp
+++ b/src/PSUSensor.cpp
@@ -61,7 +61,7 @@
                   << "\"\n";
     }
 
-    fd = open(path.c_str(), O_RDONLY);
+    fd = open(path.c_str(), O_RDONLY | O_NONBLOCK);
     if (fd < 0)
     {
         std::cerr << "PSU sensor failed to open file\n";
@@ -131,20 +131,15 @@
 
 void PSUSensor::setupRead(void)
 {
-    std::shared_ptr<boost::asio::streambuf> buffer =
-        std::make_shared<boost::asio::streambuf>();
     std::weak_ptr<PSUSensor> weakRef = weak_from_this();
-    boost::asio::async_read_until(
-        inputDev, *buffer, '\n',
-        [weakRef, buffer](const boost::system::error_code& ec,
-                          std::size_t /*bytes_transfered*/) {
-            std::shared_ptr<PSUSensor> self = weakRef.lock();
-            if (self)
-            {
-                self->readBuf = buffer;
-                self->handleResponse(ec);
-            }
-        });
+    inputDev.async_wait(boost::asio::posix::descriptor_base::wait_read,
+                        [weakRef](const boost::system::error_code& ec) {
+                            std::shared_ptr<PSUSensor> self = weakRef.lock();
+                            if (self)
+                            {
+                                self->handleResponse(ec);
+                            }
+                        });
 }
 
 void PSUSensor::updateMinMaxValues(void)
@@ -160,6 +155,9 @@
     }
 }
 
+// Create a buffer expected to be able to hold more characters than will be
+// present in the input file.
+static constexpr uint32_t psuBufLen = 128;
 void PSUSensor::handleResponse(const boost::system::error_code& err)
 {
     if ((err == boost::system::errc::bad_file_descriptor) ||
@@ -168,19 +166,18 @@
         std::cerr << "Bad file descriptor from\n";
         return;
     }
-    std::istream responseStream(readBuf.get());
-    if (!err)
+
+    std::string buffer;
+    buffer.resize(psuBufLen);
+    lseek(fd, 0, SEEK_SET);
+    int rdLen = read(fd, buffer.data(), psuBufLen);
+
+    if (rdLen > 0)
     {
-        std::string response;
         try
         {
-            std::getline(responseStream, response);
-            rawValue = std::stod(response);
-            responseStream.clear();
-            double nvalue = rawValue / sensorFactor;
-
-            updateValue(nvalue);
-
+            rawValue = std::stod(buffer);
+            updateValue(rawValue / sensorFactor);
             if (minMaxReadCounter++ % 8 == 0)
             {
                 updateMinMaxValues();
@@ -188,13 +185,13 @@
         }
         catch (const std::invalid_argument&)
         {
-            std::cerr << "Could not parse " << response << "\n";
+            std::cerr << "Could not parse  input from " << path << "\n";
             incrementError();
         }
     }
     else
     {
-        std::cerr << "System error " << err << "\n";
+        std::cerr << "System error: " << errno << " line: " << __LINE__ << "\n";
         incrementError();
     }
 
@@ -203,12 +200,12 @@
 
     std::weak_ptr<PSUSensor> weakRef = weak_from_this();
     waitTimer.async_wait([weakRef](const boost::system::error_code& ec) {
-        std::shared_ptr<PSUSensor> self = weakRef.lock();
         if (ec == boost::asio::error::operation_aborted)
         {
             std::cerr << "Failed to reschedule\n";
             return;
         }
+        std::shared_ptr<PSUSensor> self = weakRef.lock();
         if (self)
         {
             self->setupRead();
