diff --git a/sol/console_buffer.hpp b/sol/console_buffer.hpp
index b874be5..fe4bfe8 100644
--- a/sol/console_buffer.hpp
+++ b/sol/console_buffer.hpp
@@ -8,7 +8,6 @@
 {
 
 using ConsoleBuffer = std::deque<uint8_t>;
-using Buffer = std::vector<uint8_t>;
 
 /** @class ConsoleData
  *
@@ -47,7 +46,7 @@
          *
          *  @param[in] input - data to be written to the console buffer.
          */
-        void write(const Buffer& input)
+        void write(const std::vector<uint8_t>& input)
         {
             data.insert(data.end(), input.begin(), input.end());
         }
diff --git a/sol/sol_context.cpp b/sol/sol_context.cpp
index 08be77b..ffa6834 100644
--- a/sol/sol_context.cpp
+++ b/sol/sol_context.cpp
@@ -13,7 +13,7 @@
                                     uint8_t ackSeqNum,
                                     uint8_t count,
                                     bool status,
-                                    const Buffer& input)
+                                    const std::vector<uint8_t>& input)
 {
     uint8_t respAckSeqNum = 0;
     uint8_t acceptedCount = 0;
@@ -127,7 +127,7 @@
         std::get<eventloop::EventLoop&>(singletonPool).switchTimer
                 (payloadInstance, eventloop::Timers::ACCUMULATE, true);
 
-        Buffer outPayload(sizeof(Payload));
+        std::vector<uint8_t> outPayload(sizeof(Payload));
         auto response = reinterpret_cast<Payload*>(outPayload.data());
         response->packetSeqNum = 0;
         response->packetAckSeqNum = ackSeqNum;
@@ -204,7 +204,7 @@
     }
 }
 
-void Context::sendPayload(const Buffer& out) const
+void Context::sendPayload(const std::vector<uint8_t>& out) const
 {
     auto session = (std::get<session::Manager&>(singletonPool).getSession(
                     sessionID)).lock();
diff --git a/sol/sol_context.hpp b/sol/sol_context.hpp
index 9de88c9..dadf492 100644
--- a/sol/sol_context.hpp
+++ b/sol/sol_context.hpp
@@ -209,7 +209,7 @@
                                    uint8_t ackSeqNum,
                                    uint8_t count,
                                    bool status,
-                                   const Buffer& input);
+                                   const std::vector<uint8_t>& input);
 
         /** @brief Send the outbound SOL payload.
          *
@@ -242,7 +242,7 @@
          *  A copy of the SOL payload is kept here, so that when a retry needs
          *  to be attempted the payload is sent again.
          */
-        Buffer payloadCache;
+        std::vector<uint8_t> payloadCache;
 
         /**
          * @brief Send Response for Incoming SOL payload.
@@ -257,7 +257,7 @@
          *
          *  @param[in] out - buffer containing the SOL payload.
          */
-        void sendPayload(const Buffer& out) const;
+        void sendPayload(const std::vector<uint8_t>& out) const;
 };
 
 } // namespace sol
diff --git a/sol/sol_manager.cpp b/sol/sol_manager.cpp
index 889065f..b6cf31d 100644
--- a/sol/sol_manager.cpp
+++ b/sol/sol_manager.cpp
@@ -52,7 +52,7 @@
     }
 }
 
-int Manager::writeConsoleSocket(const Buffer& input) const
+int Manager::writeConsoleSocket(const std::vector<uint8_t>& input) const
 {
     auto inBuffer = input.data();
     auto inBufferSize = input.size();
diff --git a/sol/sol_manager.hpp b/sol/sol_manager.hpp
index a107994..4a615af 100644
--- a/sol/sol_manager.hpp
+++ b/sol/sol_manager.hpp
@@ -247,7 +247,7 @@
          *
          *  @return 0 on success and errno on failure.
          */
-        int writeConsoleSocket(const Buffer& input) const;
+        int writeConsoleSocket(const std::vector<uint8_t>& input) const;
 
     private:
         SOLPayloadMap payloadMap;
