diff --git a/.gitignore b/.gitignore
index e069c0ec3b607ddb229676aa27aba2da5e52cb96..dc3ca3f61cc352e547f5ade21408dcdf36214185 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,5 @@
 *.pyc
 __pycache__
 build
+
+.vscode
\ No newline at end of file
diff --git a/include/packet.h b/include/packet.h
index b3975ae569a8539ca2357df1447f233edee31c1c..cce243fff82607af7149768e3dd000754868dfd6 100644
--- a/include/packet.h
+++ b/include/packet.h
@@ -21,60 +21,109 @@ enum Offset
     DATA
 };
 
+// Packet impementation and hex values are based on the DP5 Programmers Guide, Version B1
+
+// Packet ID first byte (packet group)
 enum PID1_TYPE{
-    PX5_RESPONSE_STATUS = 0x80,
-    PX5_RESPONSE_SPECTRUM = 0x81,
-    PX5_RESPONSE_CONFIG = 0x82,
-    PX5_RESPONSE_COMMTEST = 0x8F,
-    PX5_ACK = 0xFF,
-    PX5_REQUEST_CONFIG =0x20
+    DP5_P1_STATUS_REQUEST       = 0x01,
+    DP5_P1_SPECTRUM_REQUEST     = 0x02,
+    DP5_P1_DATA_REQUEST         = 0x03,
+    DP5_P1_SCA_REQUEST          = 0x04,
+    DP5_P1_TEXTCONFIG_REQUEST   = 0x20,
+    DP5_P1_COMMAND_REQUEST      = 0xF0,
+    DP5_P1_COMTEST_REQUEST      = 0xF1,
+
+    DP5_P1_STATUS_RESPONSE      = 0x80,
+    DP5_P1_SPECTRUM_RESPONSE    = 0x81,
+    DP5_P1_DATA_RESPONSE        = 0x82,
+    DP5_P1_COMMTEST_RESPONSE    = 0x8F,
+
+    DP5_P1_ACK                  = 0xFF,
+};
+
+
+// Packet ID second byte (one enum per group)
+
+enum PID2_SUBTYPE_STATUS_REQUEST{
+    DP5_P2_STATUS_REQUEST_INFO = 0x01,
+};
+
+enum PID2_SUBTYPE_SPECTRUM_REQUEST{
+    DP5_P2_SPECTRUM_REQUEST_SPECTRUM              = 0x01,
+    DP5_P2_SPECTRUM_REQUEST_SPECTRUM_CLEAR        = 0x02,
+    DP5_P2_SPECTRUM_REQUEST_SPECTRUM_STATUS       = 0x03,
+    DP5_P2_SPECTRUM_REQUEST_SPECTRUM_STATUS_CLEAR = 0x04,
+    DP5_P2_SPECTRUM_REQUEST_BUFFER                = 0x05,
+    DP5_P2_SPECTRUM_REQUEST_BUFFER_CLEAR          = 0x06,
+    DP5_P2_SPECTRUM_REQUEST_GET_BUFFER            = 0x07,
+};
+enum PID2_SUBTYPE_DATA_REQUEST{
+    DP5_P2_DATA_REQUEST_LISTDATA = 0x09,
 };
-enum STATUS_PACKET_TYPES{
-    PX5_RESPONSE_STATUS_INFO = 0x01,
+enum PID2_SUBTYPE_COMMAND_REQUEST{
+    DP5_P2_COMMAND_REQUEST_CLEAR_SPECTRUM         = 0x01,
+    DP5_P2_COMMAND_REQUEST_ENABLE                 = 0x02,
+    DP5_P2_COMMAND_REQUEST_DISABLE                = 0x03,
+    DP5_P2_COMMAND_REQUEST_CLEAR_GPCOUNTER        = 0x10,
+    DP5_P2_COMMAND_REQUEST_CLEAR_TIMER            = 0x16,
+    DP5_P2_COMMAND_REQUEST_RESTART_BUFFER         = 0x1E,
+    DP5_P2_COMMAND_REQUEST_CANCEL_BUFFER          = 0x1F,
+    DP5_P2_COMMAND_REQUEST_KEEP_ALIVE_NO_SHARE    = 0x21,
 };
-enum SPECTRUM_PACKET_TYPES{
-    
-    PX5_RESPONSE_SPECTRUM256         = 0x01,
-    PX5_RESPONSE_SPECTRUM256_STATUS  = 0x02,
-    PX5_RESPONSE_SPECTRUM512         = 0x03,
-    PX5_RESPONSE_SPECTRUM512_STATUS  = 0x04,
-    PX5_RESPONSE_SPECTRUM1024        = 0x05,
-    PX5_RESPONSE_SPECTRUM1024_STATUS = 0x06,
-    PX5_RESPONSE_SPECTRUM2048        = 0x07,
-    PX5_RESPONSE_SPECTRUM2048_STATUS = 0x08,
-    PX5_RESPONSE_SPECTRUM4096        = 0x09,
-    PX5_RESPONSE_SPECTRUM4096_STATUS = 0x0A,
-    PX5_RESPONSE_SPECTRUM8192        = 0x0B,
-    PX5_RESPONSE_SPECTRUM8192_STATUS = 0x0C,
+
+enum PID2_SUBTYPE_STATUS_RESPONSE{
+    DP5_P2_STATUS_RESPONSE_INFO = 0x01,
+};
+enum PID2_SUBTYPE_SPECTRUM_RESPONSE{
+    DP5_P2_SPECTRUM_RESPONSE_SPECTRUM256          = 0x01,
+    DP5_P2_SPECTRUM_SPECTRUM256_STATUS            = 0x02,
+    DP5_P2_SPECTRUM_RESPONSE_SPECTRUM512          = 0x03,
+    DP5_P2_SPECTRUM_RESPONSE_SPECTRUM512_STATUS   = 0x04,
+    DP5_P2_SPECTRUM_RESPONSE_SPECTRUM1024         = 0x05,
+    DP5_P2_SPECTRUM_RESPONSE_SPECTRUM1024_STATUS  = 0x06,
+    DP5_P2_SPECTRUM_RESPONSE_SPECTRUM2048         = 0x07,
+    DP5_P2_SPECTRUM_RESPONSE_SPECTRUM2048_STATUS  = 0x08,
+    DP5_P2_SPECTRUM_RESPONSE_SPECTRUM4096         = 0x09,
+    DP5_P2_SPECTRUM_RESPONSE_SPECTRUM4096_STATUS  = 0x0A,
+    DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192         = 0x0B,
+    DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192_STATUS  = 0x0C,
+};
+
+enum PID2_SUBTYPE_TEXTCONFIG_REQUEST{
+    DP5_P2_TEXTCONFIG_REQUEST_SET = 0x02,
+    DP5_P2_TEXTCONFIG_REQUEST_GET = 0x03,
 };
-enum CONFIG_PACKET_TYPES{
-    PX5_RESPONSE_CONFIG_TEXT = 0x07,
-    PX5_REQUEST_SET_CONFIG = 0x02,
-    PX5_REQUEST_GET_CONFIG = 0x03,
+
+enum PID2_SUBTYPE_DATA_RESPONSE{
+    DP5_P2_DATA_RESPONSE_CONFIG_READBACK = 0x07,
+    DP5_P2_DATA_RESPONSE_LISTDATA        = 0x0A,
+    DP5_P2_DATA_RESPONSE_LISTDATA_FULL   = 0x0B,
 };
-enum COMMTEST_PACKET_TYPES{
-    PX5_RESPONSE_COMMETEST_ECHO = 0x7F,
 
+enum PID2_SUBTYPE_COMMTEST_RESPONSE{
+    DP5_P2_COMMTEST_RESPONSE_ECHO = 0x7F,
 };
-enum ACK_PACKET_TYPES{
-    PX5_ACK_OK = 0x00,
-    PX5_ACK_SYNC_ERR = 0x01,
-    PX5_ACK_PID_ERR = 0x02,
-    PX5_ACK_LEN_ERR = 0x03,
-    PX5_ACK_CHECKSUM_ERR = 0x04,
-    PX5_ACK_BADPARAM_ERR = 0x05,
-    PX5_ACK_BADHEX_ERR = 0x06,
-    PX5_ACK_BADCMD_ERR = 0x07,
-    PX5_ACK_FPGA_ERR = 0x08,
-    PX5_ACK_CP2201_ERR = 0x09,
-    PX5_ACK_SCOPE_ERR = 0x0A,
-    PX5_ACK_PC5_ERR = 0x0B,
-    PX5_ACK_OK_SHARING = 0x0C,
-    PX5_ACK_BUSY_ERR = 0x0D,
-    PX5_ACK_I2C_ERR = 0x0E,
-    PX5_ACK_OK_FPGAADDR = 0x0F,
-    PX5_ACK_VERSION_ERR = 0x10,
-    PX5_ACK_CALIB_ERR = 0x11
+
+
+enum PID2_SUBTYPE_ACK{
+    DP5_P2_ACK_OK =                0x00,
+    DP5_P2_ACK_SYNC_ERR =          0x01,
+    DP5_P2_ACK_PID_ERR =           0x02,
+    DP5_P2_ACK_LEN_ERR =           0x03,
+    DP5_P2_ACK_CHECKSUM_ERR =      0x04,
+    DP5_P2_ACK_BADPARAM_ERR =      0x05,
+    DP5_P2_ACK_BADHEX_ERR =        0x06,
+    DP5_P2_ACK_BADCMD_ERR =        0x07,
+    DP5_P2_ACK_FPGA_ERR =          0x08,
+    DP5_P2_ACK_CP2201_ERR =        0x09,
+    DP5_P2_ACK_SCOPE_ERR =         0x0A,
+    DP5_P2_ACK_PC5_ERR =           0x0B,
+    DP5_P2_ACK_OK_SHARING =        0x0C,
+    DP5_P2_ACK_BUSY_ERR =          0x0D,
+    DP5_P2_ACK_I2C_ERR =           0x0E,
+    DP5_P2_ACK_OK_FPGAADDR =       0x0F,
+    DP5_P2_ACK_VERSION_ERR =       0x10,
+    DP5_P2_ACK_CALIB_ERR =         0x11
 };
 
 class AmptekException : public std::runtime_error
@@ -113,19 +162,25 @@ public:
 
 
 public:
-    static const Packet PX5_REQUEST_SPECTRUM;
-    static const Packet PX5_REQUEST_SPECTRUM_AND_STATUS;
-    static const Packet PX5_REQUEST_STATUS;
-    static const Packet PX5_REQUEST_ENABLE;
-    static const Packet PX5_REQUEST_DISABLE;
-    static const Packet PX5_REQUEST_CLEAR_SPECTRUM;
-    static const Packet PX5_REQUEST_SET_CONFIG;
-    static const Packet PX5_REQUEST_GET_CONFIG;
-    static const Packet PX5_REQUEST_KEEP_ALIVE_NO_SHARING;
+    static const Packet DP5_PKT_REQUEST_SPECTRUM;
+    static const Packet DP5_PKT_REQUEST_SPECTRUM_AND_STATUS;
+    static const Packet DP5_PKT_REQUEST_STATUS;
+    static const Packet DP5_PKT_REQUEST_ENABLE;
+    static const Packet DP5_PKT_REQUEST_DISABLE;
+    static const Packet DP5_PKT_REQUEST_CLEAR_SPECTRUM;
+    static const Packet DP5_PKT_REQUEST_KEEP_ALIVE_NO_SHARING;
+    static const Packet DP5_PKT_REQUEST_RESTART_SEQ_BUFFERING;
+    static const Packet DP5_PKT_REQUEST_CANCEL_SEQ_BUFFERING;
+    static const Packet DP5_PKT_REQUEST_LIST_DATA;
+    static const Packet DP5_PKT_REQUEST_CLEAR_LIST_TIMER;
 
     static const Packet gernerateSetConfigurationRequest(std::string text_configuration);
     static const Packet gernerateGetConfigurationRequest(std::string text_configuration);
 
+    static const Packet generateBufferRequest(uint16_t buffer_index);
+    static const Packet generateBufferAndClearRequest(uint16_t buffer_index);
+    static const Packet generateGetBufferRequest(uint16_t buffer_index);
+
 };
 
 #endif
diff --git a/src/AmptekHardwareInterface.cpp b/src/AmptekHardwareInterface.cpp
index 2590fab63715ee77397ca37fd31a482f5393b57d..0af63f3afcbf51a8194147b66c42913fa03a03b1 100644
--- a/src/AmptekHardwareInterface.cpp
+++ b/src/AmptekHardwareInterface.cpp
@@ -61,7 +61,7 @@ bool AmptekHardwareInterface::statusAgeOk( double max_age_ms ) const {
 
 bool AmptekHardwareInterface::Enable(){
     try{
-        expectAcknowledge( connection_handler->sendAndReceive( Packet::PX5_REQUEST_ENABLE ) );
+        expectAcknowledge( connection_handler->sendAndReceive( Packet::DP5_PKT_REQUEST_ENABLE ) );
     }
     catch( AmptekException& e){
         std::cerr << e.what() << std::endl;
@@ -75,7 +75,7 @@ bool AmptekHardwareInterface::Enable(){
 
 bool AmptekHardwareInterface::Disable(){
     try{
-        expectAcknowledge( connection_handler->sendAndReceive( Packet::PX5_REQUEST_DISABLE ) );
+        expectAcknowledge( connection_handler->sendAndReceive( Packet::DP5_PKT_REQUEST_DISABLE ) );
     }
     catch( AmptekException& e){
         std::cerr << e.what() << std::endl;
@@ -86,7 +86,7 @@ bool AmptekHardwareInterface::Disable(){
 }
 bool AmptekHardwareInterface::Ping(){
     try{
-        expectAcknowledge( connection_handler->sendAndReceive( Packet::PX5_REQUEST_KEEP_ALIVE_NO_SHARING ) );
+        expectAcknowledge( connection_handler->sendAndReceive( Packet::DP5_PKT_REQUEST_KEEP_ALIVE_NO_SHARING ) );
     }
     catch( AmptekException& e){
         std::cerr << e.what() << std::endl;
@@ -98,7 +98,7 @@ bool AmptekHardwareInterface::Ping(){
 
 bool AmptekHardwareInterface::ClearSpectrum(){
     try{
-        expectAcknowledge( connection_handler->sendAndReceive( Packet::PX5_REQUEST_CLEAR_SPECTRUM ) );
+        expectAcknowledge( connection_handler->sendAndReceive( Packet::DP5_PKT_REQUEST_CLEAR_SPECTRUM ) );
     }
     catch( AmptekException& e){
         std::cerr << e.what() << std::endl;
@@ -198,8 +198,8 @@ std::vector<std::string> AmptekHardwareInterface::GetTextConfiguration(std::vect
             {
                 Packet settingResponse = connection_handler->sendAndReceive( Packet::gernerateGetConfigurationRequest( cmdstream.str() ) );
                 
-                if (settingResponse.at(PID1) != PX5_RESPONSE_CONFIG
-                || settingResponse.at(PID2) != PX5_RESPONSE_CONFIG_TEXT)
+                if (settingResponse.at(PID1) != DP5_P1_DATA_RESPONSE
+                || settingResponse.at(PID2) != DP5_P2_DATA_RESPONSE_CONFIG_READBACK)
                 {
                     throw AmptekException("Failed in AmptekHardwareInterface::GetTextConfiguration: \
                                                 Response Packet did not match expected PIDs. \n\
@@ -219,10 +219,10 @@ std::vector<std::string> AmptekHardwareInterface::GetTextConfiguration(std::vect
 
 bool AmptekHardwareInterface::updateStatus(double max_age_ms){
     if ( !statusAgeOk(max_age_ms)){
-        Packet statusResponse = connection_handler->sendAndReceive( Packet::PX5_REQUEST_STATUS );
+        Packet statusResponse = connection_handler->sendAndReceive( Packet::DP5_PKT_REQUEST_STATUS );
         //std::cout << statusResponse.size() << std::endl;
-        if (statusResponse.at(PID1) != PX5_RESPONSE_STATUS
-          || statusResponse.at(PID2) != PX5_RESPONSE_STATUS_INFO)
+        if (statusResponse.at(PID1) != DP5_P1_STATUS_RESPONSE
+          || statusResponse.at(PID2) != DP5_P2_STATUS_RESPONSE_INFO)
         {
               std::cerr<< "Response Packet did not match expected PIDs: " << statusResponse.toString() << std::endl;
               return false;
@@ -238,49 +238,49 @@ bool AmptekHardwareInterface::updateStatus(double max_age_ms){
 
 bool AmptekHardwareInterface::updateSpectrum(double max_age_ms){
     if ( !spectrumAgeOk(max_age_ms)){
-        Packet spectrumResponse = connection_handler->sendAndReceive( Packet::PX5_REQUEST_SPECTRUM_AND_STATUS );
+        Packet spectrumResponse = connection_handler->sendAndReceive( Packet::DP5_PKT_REQUEST_SPECTRUM_AND_STATUS );
         //std::cout << spectrumResponse.size() << std::endl;
-        if (spectrumResponse.at(PID1) != PX5_RESPONSE_SPECTRUM )
+        if (spectrumResponse.at(PID1) != DP5_P1_SPECTRUM_RESPONSE )
         {
               std::cerr<< "Response Packet is not of type Spectrum: " << spectrumResponse.toString() << std::endl;
               return false;
         }
         bool with_status = true;
         switch( spectrumResponse.at(PID2) ){
-            case PX5_RESPONSE_SPECTRUM256:
+            case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM256:
                 with_status = false;        // not break! use the respose with status setting the length
-            case PX5_RESPONSE_SPECTRUM256_STATUS:
+            case DP5_P2_SPECTRUM_SPECTRUM256_STATUS:
                 spectrum_length=256;
                 break;
 
-            case PX5_RESPONSE_SPECTRUM512:
+            case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM512:
                 with_status = false;        // not break! use the respose with status setting the length
-            case PX5_RESPONSE_SPECTRUM512_STATUS:
+            case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM512_STATUS:
                 spectrum_length=512;
                 break;
 
-            case PX5_RESPONSE_SPECTRUM1024:
+            case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM1024:
                 with_status = false;        // not break! use the respose with status setting the length
-            case PX5_RESPONSE_SPECTRUM1024_STATUS:
+            case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM1024_STATUS:
                 spectrum_length=1024;
                 break;
 
-            case PX5_RESPONSE_SPECTRUM2048:
+            case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM2048:
                 with_status = false;        // not break! use the respose with status setting the length
-            case PX5_RESPONSE_SPECTRUM2048_STATUS:
+            case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM2048_STATUS:
                 spectrum_length=2048;
                 break;
 
-            case PX5_RESPONSE_SPECTRUM4096:
+            case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM4096:
                 with_status = false;        // not break! use the respose with status setting the length
-            case PX5_RESPONSE_SPECTRUM4096_STATUS:
+            case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM4096_STATUS:
                 spectrum_length=4096;
                 break;
 
             
-            case PX5_RESPONSE_SPECTRUM8192:
+            case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192:
                 with_status = false;        // not break! use the respose with status setting the length
-            case PX5_RESPONSE_SPECTRUM8192_STATUS:
+            case DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192_STATUS:
                 spectrum_length=8192;
                 break;
         }
@@ -466,46 +466,46 @@ double AmptekHardwareInterface::TecVoltage(double max_age_ms){
 
 
 void AmptekHardwareInterface::expectAcknowledge(Packet packet){
-    if (packet.at(PID1) != PX5_ACK){
+    if (packet.at(PID1) != DP5_P1_ACK){
         throw AmptekException("Response Package was not an Acknowledge: " + packet.toString());
     }else{
-        if (   packet.at(PID2) == PX5_ACK_OK
-            || packet.at(PID2) == PX5_ACK_OK_SHARING
-            || packet.at(PID2) == PX5_ACK_OK_FPGAADDR){
+        if (   packet.at(PID2) == DP5_P2_ACK_OK
+            || packet.at(PID2) == DP5_P2_ACK_OK_SHARING
+            || packet.at(PID2) == DP5_P2_ACK_OK_FPGAADDR){
             return;
         }else{
             std::string error_msg;
             char databuffer[packet.dataLength];
             switch (packet.at(PID2) ){
 
-                case PX5_ACK_SYNC_ERR:
+                case DP5_P2_ACK_SYNC_ERR:
                     error_msg = "Sync bytes in Request Packet were not correct, \
                                                         and therefore, the Request Packet was rejected.";
                     break;
-                case PX5_ACK_PID_ERR:
+                case DP5_P2_ACK_PID_ERR:
                     error_msg =  "PID1 & PID2 combination is not recognized as a valid \
                                                      Request Packet, and therefore, the Request Packet was rejected.";
                     break;
 
-                case PX5_ACK_LEN_ERR:
+                case DP5_P2_ACK_LEN_ERR:
                     error_msg = "LEN field of the Request Packet was not consistent with \
                                                      Request Packet type defined by the PID1 & PID2 combination. \
                                                      It is not recognized as a valid Request Packet, \
                                                      and therefore, the Request Packet was rejected.";
                     break;
 
-                case PX5_ACK_CHECKSUM_ERR:
+                case DP5_P2_ACK_CHECKSUM_ERR:
                     error_msg = "Checksum of the Request Packet was incorrect, \
                                                      and therefore, the Request Packet was rejected.";
                     break;
 
 
-                case PX5_ACK_BADPARAM_ERR:
+                case DP5_P2_ACK_BADPARAM_ERR:
                     error_msg = "Bad parameter.";
                     break;
 
 
-                case PX5_ACK_BADHEX_ERR:
+                case DP5_P2_ACK_BADHEX_ERR:
                     error_msg = "Microcontroller or FPGA upload packets error: \
                                                      hex record contained in the data field \
                                                      of the Request Packet had a checksum or other structural error.";
@@ -513,7 +513,7 @@ void AmptekHardwareInterface::expectAcknowledge(Packet packet){
 
 
 
-                case PX5_ACK_BADCMD_ERR:
+                case DP5_P2_ACK_BADCMD_ERR:
                     
                     byteToChar(&(packet.at(DATA)), databuffer, packet.dataLength);
                     error_msg ="Unrecognized command: " + std::string(databuffer);
@@ -521,20 +521,20 @@ void AmptekHardwareInterface::expectAcknowledge(Packet packet){
 
 
 
-                case PX5_ACK_FPGA_ERR:
+                case DP5_P2_ACK_FPGA_ERR:
                     error_msg =  "FPGA initialization failed.";
                     break;
 
 
 
-                case PX5_ACK_CP2201_ERR:
+                case DP5_P2_ACK_CP2201_ERR:
                     error_msg = "Set Ethernet Settings Request Packet was received, \
                                                      but an Ethernet controller was not detected on the DP5.";
                     break;
 
 
 
-                case PX5_ACK_SCOPE_ERR:
+                case DP5_P2_ACK_SCOPE_ERR:
                     error_msg = "Send Scope Data Request Packet was received, \
                                                      but the digital oscilloscope hasn’t triggered, \
                                                      so no data is available. [The digital oscilloscope must be armed, \
@@ -542,7 +542,7 @@ void AmptekHardwareInterface::expectAcknowledge(Packet packet){
                     break;
 
 
-                case PX5_ACK_PC5_ERR:
+                case DP5_P2_ACK_PC5_ERR:
                     error_msg = "ASCII command errors – the data field will contain the \
                                                      ASCII command and parameter which caused the error. “Bad Parameter” \
                                                      means that the parameter isn’t recognized \
@@ -558,24 +558,24 @@ void AmptekHardwareInterface::expectAcknowledge(Packet packet){
                     break;
                 
 
-                case PX5_ACK_BUSY_ERR:
+                case DP5_P2_ACK_BUSY_ERR:
                     error_msg = "Busy, another interface in use.";
                     break;
 
-                case PX5_ACK_I2C_ERR:
+                case DP5_P2_ACK_I2C_ERR:
                     error_msg =  "‘I2C Transfer’ Request Packet, but no I2C ACK \
                                                      was detected from an I2C Slave.";
                     break;
 
 
-                case PX5_ACK_VERSION_ERR:
+                case DP5_P2_ACK_VERSION_ERR:
                     error_msg ="Request Packet has been recognized as valid by the firmware, \
                                                      but it is not supported by the installed FPGA version. \
                                                      Update the FPGA to the latest FP version.";
                     break;
                     
 
-                case PX5_ACK_CALIB_ERR:
+                case DP5_P2_ACK_CALIB_ERR:
                     error_msg = "Calibration Error";
                     break;
                 default:
diff --git a/src/AmptekSimulatorConnectionHandler.cpp b/src/AmptekSimulatorConnectionHandler.cpp
index b251414303867c35d01d047453bda2949543f1ec..0db55e7b86b82f5578e7c081f04df3c9b6c44a1e 100644
--- a/src/AmptekSimulatorConnectionHandler.cpp
+++ b/src/AmptekSimulatorConnectionHandler.cpp
@@ -12,28 +12,28 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){
 
     Packet p(MIN_PACKET_LEN);
     p.initSync();
-    if (pid1 == Packet::PX5_REQUEST_SPECTRUM.at(PID1) 
-     && pid2 == Packet::PX5_REQUEST_SPECTRUM.at(PID2))
+    if (pid1 == Packet::DP5_PKT_REQUEST_SPECTRUM.at(PID1) 
+     && pid2 == Packet::DP5_PKT_REQUEST_SPECTRUM.at(PID2))
     {
-        p.setPid1( PX5_RESPONSE_SPECTRUM );
+        p.setPid1( DP5_P1_SPECTRUM_RESPONSE );
         switch (speclen){
             case 256:
-                p.setPid2( PX5_RESPONSE_SPECTRUM256 );
+                p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM256 );
                 break;
             case 512:
-                p.setPid2( PX5_RESPONSE_SPECTRUM512 );
+                p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM512 );
                 break;
             case 1024:
-                p.setPid2( PX5_RESPONSE_SPECTRUM1024 );
+                p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM1024 );
                 break;
             case 2048:
-                p.setPid2( PX5_RESPONSE_SPECTRUM2048 );
+                p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM2048 );
                 break;
             case 4096:
-                p.setPid2( PX5_RESPONSE_SPECTRUM4096 );
+                p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM4096 );
                 break;
             case 8192:
-                p.setPid2( PX5_RESPONSE_SPECTRUM8192 );
+                p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192 );
                 break;
         }
         
@@ -43,28 +43,28 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){
         p.resize( MIN_PACKET_LEN + len );
         p.setData(arr, len);
     }
-    else if (pid1 == Packet::PX5_REQUEST_SPECTRUM_AND_STATUS.at(PID1) 
-     && pid2 == Packet::PX5_REQUEST_SPECTRUM_AND_STATUS.at(PID2))
+    else if (pid1 == Packet::DP5_PKT_REQUEST_SPECTRUM_AND_STATUS.at(PID1) 
+     && pid2 == Packet::DP5_PKT_REQUEST_SPECTRUM_AND_STATUS.at(PID2))
     {
-        p.setPid1( PX5_RESPONSE_SPECTRUM );
+        p.setPid1( DP5_P1_SPECTRUM_RESPONSE );
         switch (speclen){
             case 256:
-                p.setPid2( PX5_RESPONSE_SPECTRUM256_STATUS );
+                p.setPid2( DP5_P2_SPECTRUM_SPECTRUM256_STATUS );
                 break;
             case 512:
-                p.setPid2( PX5_RESPONSE_SPECTRUM512_STATUS );
+                p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM512_STATUS );
                 break;
             case 1024:
-                p.setPid2( PX5_RESPONSE_SPECTRUM1024_STATUS );
+                p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM1024_STATUS );
                 break;
             case 2048:
-                p.setPid2( PX5_RESPONSE_SPECTRUM2048_STATUS );
+                p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM2048_STATUS );
                 break;
             case 4096:
-                p.setPid2( PX5_RESPONSE_SPECTRUM4096_STATUS );
+                p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM4096_STATUS );
                 break;
             case 8192:
-                p.setPid2( PX5_RESPONSE_SPECTRUM8192_STATUS );
+                p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192_STATUS );
                 break;
         }
         
@@ -75,11 +75,11 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){
         p.resize( MIN_PACKET_LEN + len );
         p.setData(arr, len);
     }
-    else if (pid1 == Packet::PX5_REQUEST_STATUS.at(PID1) 
-     && pid2 == Packet::PX5_REQUEST_STATUS.at(PID2))
+    else if (pid1 == Packet::DP5_PKT_REQUEST_STATUS.at(PID1) 
+     && pid2 == Packet::DP5_PKT_REQUEST_STATUS.at(PID2))
     {
-        p.setPid1( PX5_RESPONSE_STATUS );
-        p.setPid2( PX5_RESPONSE_STATUS_INFO );
+        p.setPid1( DP5_P1_STATUS_RESPONSE );
+        p.setPid2( DP5_P2_STATUS_RESPONSE_INFO );
         word16 len =  STATUS_SIZE;
         byte arr[len];
         createStatusData(arr);
@@ -89,8 +89,8 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){
     else if (pid1 == 0x20 
      && pid2 == 0x03)
     {
-        p.setPid1( PX5_RESPONSE_CONFIG );
-        p.setPid2( PX5_RESPONSE_CONFIG_TEXT );
+        p.setPid1( DP5_P1_DATA_RESPONSE );
+        p.setPid2( DP5_P2_DATA_RESPONSE_CONFIG_READBACK );
 
         char configs[ request.dataLength + 1 ];
         byteToChar( (byte*)&(request.at(DATA)), configs, request.dataLength );
@@ -112,28 +112,28 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){
         p.resize( MIN_PACKET_LEN + len );
         p.setData(arr, len);
     }
-    else if( (pid1 == Packet::PX5_REQUEST_ENABLE.at(PID1) 
-              && pid2 == Packet::PX5_REQUEST_ENABLE.at(PID2)) )
+    else if( (pid1 == Packet::DP5_PKT_REQUEST_ENABLE.at(PID1) 
+              && pid2 == Packet::DP5_PKT_REQUEST_ENABLE.at(PID2)) )
     {
         enable();
-        return Packet(PX5_ACK, PX5_ACK_OK, nullptr, 0);
+        return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0);
     }
-    else if ( (pid1 == Packet::PX5_REQUEST_DISABLE.at(PID1) 
-              && pid2 == Packet::PX5_REQUEST_DISABLE.at(PID2)) )
+    else if ( (pid1 == Packet::DP5_PKT_REQUEST_DISABLE.at(PID1) 
+              && pid2 == Packet::DP5_PKT_REQUEST_DISABLE.at(PID2)) )
     {
         disable();
-        return Packet(PX5_ACK, PX5_ACK_OK, nullptr, 0);
+        return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0);
     }
-    else if (pid1 == Packet::PX5_REQUEST_CLEAR_SPECTRUM.at(PID1) 
-              && pid2 == Packet::PX5_REQUEST_CLEAR_SPECTRUM.at(PID2))
+    else if (pid1 == Packet::DP5_PKT_REQUEST_CLEAR_SPECTRUM.at(PID1) 
+              && pid2 == Packet::DP5_PKT_REQUEST_CLEAR_SPECTRUM.at(PID2))
     {
         clear();
-        return Packet(PX5_ACK, PX5_ACK_OK, nullptr, 0);
+        return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0);
     }
-    else if (pid1 == Packet::PX5_REQUEST_KEEP_ALIVE_NO_SHARING.at(PID1) 
-              && pid2 == Packet::PX5_REQUEST_KEEP_ALIVE_NO_SHARING.at(PID2))
+    else if (pid1 == Packet::DP5_PKT_REQUEST_KEEP_ALIVE_NO_SHARING.at(PID1) 
+              && pid2 == Packet::DP5_PKT_REQUEST_KEEP_ALIVE_NO_SHARING.at(PID2))
     {
-        return Packet(PX5_ACK, PX5_ACK_OK, nullptr, 0);
+        return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0);
     }
     else if(pid1 == 0x20 //set Text Config
               && pid2 == 0x02)
@@ -141,7 +141,7 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){
         char configs[ request.dataLength + 1 ];
         byteToChar( (byte*)&(request.at(DATA)), configs, request.dataLength );
         readConfig(configs);
-        return Packet(PX5_ACK, PX5_ACK_OK, nullptr, 0);
+        return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0);
     }
     p.calcAndFillChecksum();
     return p;
diff --git a/src/AmptekUsbConnectionHandler.cpp b/src/AmptekUsbConnectionHandler.cpp
index 34704116c700cf05953431ab0230985e46903ea2..bd9d9d024723e2a22c22288eddde1792edb7358d 100644
--- a/src/AmptekUsbConnectionHandler.cpp
+++ b/src/AmptekUsbConnectionHandler.cpp
@@ -129,7 +129,7 @@ bool AmptekUsbConnectionHandler::hasSerialNb(libusb_device_handle* handle, int t
         return true;
     }
     //request a status and check the serial nb 
-    Packet statusReq = Packet::PX5_REQUEST_STATUS;
+    Packet statusReq = Packet::DP5_PKT_REQUEST_STATUS;
     int bytes_transferred;
     byte* status_data = input_buffer + DATA;
     int result = libusb_bulk_transfer(handle, PX5_USB_BULK_OUT_ENDPOINT, &(statusReq.at(0)), statusReq.size(), &bytes_transferred, 1000);
diff --git a/src/packet.cpp b/src/packet.cpp
index 91694c9de4be6cc0a9298072d35be8ec34af64c2..b2ea60fc2851269b5b926e069bb30598d817265f 100644
--- a/src/packet.cpp
+++ b/src/packet.cpp
@@ -2,31 +2,54 @@
 #include <iostream>
 #include <iomanip>
 #include <algorithm>
-const Packet Packet::PX5_REQUEST_STATUS = Packet(0x01,0x01, nullptr, 0);
 
-const Packet Packet::PX5_REQUEST_SPECTRUM = Packet(0x02,0x01, nullptr, 0);
-const Packet Packet::PX5_REQUEST_SPECTRUM_AND_STATUS = Packet(0x02,0x03, nullptr, 0);
 
+const Packet Packet::DP5_PKT_REQUEST_STATUS                = Packet( DP5_P1_STATUS_REQUEST      , DP5_P2_STATUS_REQUEST_INFO                , nullptr, 0);
 
+const Packet Packet::DP5_PKT_REQUEST_SPECTRUM              = Packet( DP5_P1_SPECTRUM_REQUEST    , DP5_P2_SPECTRUM_REQUEST_SPECTRUM          , nullptr, 0);
+const Packet Packet::DP5_PKT_REQUEST_SPECTRUM_AND_STATUS   = Packet( DP5_P1_SPECTRUM_REQUEST    , DP5_P2_SPECTRUM_REQUEST_SPECTRUM_STATUS   , nullptr, 0);
 
-const Packet Packet::PX5_REQUEST_CLEAR_SPECTRUM = Packet(0xF0,0x01, nullptr, 0);
-const Packet Packet::PX5_REQUEST_ENABLE = Packet(0xF0,0x02, nullptr, 0);
-const Packet Packet::PX5_REQUEST_DISABLE = Packet(0xF0,0x03, nullptr, 0);
+const Packet Packet::DP5_PKT_REQUEST_LIST_DATA             = Packet( DP5_P1_DATA_REQUEST        , DP5_P2_DATA_REQUEST_LISTDATA              , nullptr, 0);
 
-const Packet Packet::PX5_REQUEST_KEEP_ALIVE_NO_SHARING = Packet(0xF0,0x21, nullptr, 0);
+const Packet Packet::DP5_PKT_REQUEST_CLEAR_SPECTRUM        = Packet( DP5_P1_COMMAND_REQUEST     , DP5_P2_COMMAND_REQUEST_CLEAR_SPECTRUM     , nullptr, 0);
+const Packet Packet::DP5_PKT_REQUEST_ENABLE                = Packet( DP5_P1_COMMAND_REQUEST     , DP5_P2_COMMAND_REQUEST_ENABLE             , nullptr, 0);
+const Packet Packet::DP5_PKT_REQUEST_DISABLE               = Packet( DP5_P1_COMMAND_REQUEST     , DP5_P2_COMMAND_REQUEST_DISABLE            , nullptr, 0);
+const Packet Packet::DP5_PKT_REQUEST_KEEP_ALIVE_NO_SHARING = Packet( DP5_P1_COMMAND_REQUEST     , DP5_P2_COMMAND_REQUEST_KEEP_ALIVE_NO_SHARE, nullptr, 0);
 
+const Packet Packet::DP5_PKT_REQUEST_RESTART_SEQ_BUFFERING = Packet( DP5_P1_COMMAND_REQUEST     , DP5_P2_COMMAND_REQUEST_RESTART_BUFFER     , nullptr, 0);
+const Packet Packet::DP5_PKT_REQUEST_CANCEL_SEQ_BUFFERING  = Packet( DP5_P1_COMMAND_REQUEST     , DP5_P2_COMMAND_REQUEST_CANCEL_BUFFER      , nullptr, 0);
+const Packet Packet::DP5_PKT_REQUEST_CLEAR_LIST_TIMER      = Packet( DP5_P1_COMMAND_REQUEST     , DP5_P2_COMMAND_REQUEST_CLEAR_TIMER        , nullptr, 0);
 
 const Packet Packet::gernerateSetConfigurationRequest(std::string text_configuration){
     word16 len = text_configuration.size();
     byte data[len];
     charToByte(text_configuration.c_str(), data, len);
-    return Packet( PX5_REQUEST_CONFIG, CONFIG_PACKET_TYPES::PX5_REQUEST_SET_CONFIG, data, len );
+    return Packet( DP5_P1_TEXTCONFIG_REQUEST, DP5_P2_TEXTCONFIG_REQUEST_SET, data, len );
 }
 const Packet Packet::gernerateGetConfigurationRequest(std::string text_configuration){
     word16 len = text_configuration.size();
     byte data[len];
     charToByte(text_configuration.c_str(), data, len);
-    return Packet( PX5_REQUEST_CONFIG, CONFIG_PACKET_TYPES::PX5_REQUEST_GET_CONFIG, data, len );
+    return Packet( DP5_P1_TEXTCONFIG_REQUEST, DP5_P2_TEXTCONFIG_REQUEST_GET, data, len );
+}
+
+const Packet Packet::generateBufferRequest(uint16_t buffer_index){
+    byte data[2];
+    data[0] = buffer_index>>8;
+    data[1] = buffer_index;
+    return Packet( DP5_P1_SPECTRUM_REQUEST, DP5_P2_SPECTRUM_REQUEST_BUFFER, data, 2 );
+}
+const Packet Packet::generateBufferAndClearRequest(uint16_t buffer_index){
+    byte data[2];
+    data[0] = buffer_index>>8;
+    data[1] = buffer_index;
+    return Packet( DP5_P1_SPECTRUM_REQUEST, DP5_P2_SPECTRUM_REQUEST_BUFFER_CLEAR, data, 2 );
+}
+const Packet Packet::generateGetBufferRequest(uint16_t buffer_index){
+    byte data[2];
+    data[0] = buffer_index>>8;
+    data[1] = buffer_index;
+    return Packet( DP5_P1_SPECTRUM_REQUEST, DP5_P2_SPECTRUM_REQUEST_GET_BUFFER, data, 2 );
 }