diff --git a/include/AmptekSimulatorConnectionHandler.h b/include/AmptekSimulatorConnectionHandler.h
index 411445b3dce00dc8ad70c9ad79e72f8ca0878487..5509b870dd0c70be1f0347a45c9e457e597d5490 100644
--- a/include/AmptekSimulatorConnectionHandler.h
+++ b/include/AmptekSimulatorConnectionHandler.h
@@ -24,7 +24,9 @@ private:
     void disable();
     void clear();
     int speclen = 1024;
+    int buffer_depth = 64;
     unsigned int* spectrum;
+    byte*  spectrum_buffer;
     uint32_t total_counts;
     double acc_time = 0;
 
diff --git a/src/AmptekSimulatorConnectionHandler.cpp b/src/AmptekSimulatorConnectionHandler.cpp
index fec5a0c78d5730bdd79355c70cf2ba0869838b04..ca4d95f015770ff52e67565c5f522c23b263c055 100644
--- a/src/AmptekSimulatorConnectionHandler.cpp
+++ b/src/AmptekSimulatorConnectionHandler.cpp
@@ -69,13 +69,22 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){
                 p.setPid2( DP5_P2_SPECTRUM_RESPONSE_SPECTRUM8192_STATUS );
                 break;
         }
-        
         word16 len = 3*speclen + STATUS_SIZE;
-        byte arr[len];
-        createSpectrumData(arr);
-        createStatusData(arr + 3*speclen);
         p.resize( MIN_PACKET_LEN + len );
-        p.setData(arr, len);
+        if (pid2== DP5_P2_SPECTRUM_REQUEST_SPECTRUM_STATUS){
+            byte arr[len];
+            createSpectrumData(arr);
+            createStatusData(arr + 3*speclen);
+            p.setData(arr, len);
+        }else{
+            size_t buffer_idx = (request.at(DATA) << 8) + request.at(DATA);
+            if (buffer_idx >=buffer_depth){
+                return Packet(DP5_P1_ACK, DP5_P2_ACK_BADPARAM_ERR, nullptr, 0);
+            }
+
+            byte* bufferslot = spectrum_buffer + ( (3*speclen + STATUS_SIZE)*buffer_idx );
+            p.setData(bufferslot, len);
+        }
     }
     else if (pid1 == Packet::DP5_PKT_REQUEST_STATUS.at(PID1) 
      && pid2 == Packet::DP5_PKT_REQUEST_STATUS.at(PID2))
@@ -134,6 +143,22 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){
         readConfig(configs);
         return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0);
     }
+ 
+    else if(pid1 == DP5_P1_SPECTRUM_REQUEST
+              && pid2 == DP5_P2_SPECTRUM_REQUEST_BUFFER_CLEAR)
+    {
+        size_t buffer_idx = (request.at(DATA) << 8) + request.at(DATA);
+        if (buffer_idx >=buffer_depth){
+            return Packet(DP5_P1_ACK, DP5_P2_ACK_BADPARAM_ERR, nullptr, 0);
+        }
+
+        byte* bufferslot_spectrum = spectrum_buffer + ( (3*speclen + STATUS_SIZE)*buffer_idx );
+        byte* bufferslot_status = bufferslot_spectrum + 3*speclen;
+        createSpectrumData(bufferslot_spectrum);
+        createStatusData(bufferslot_status);
+        clear();
+
+    }
     else{
         return Packet(DP5_P1_ACK, DP5_P2_ACK_OK, nullptr, 0);
     }
@@ -144,6 +169,7 @@ Packet AmptekSimulatorConnectionHandler::sendAndReceive( const Packet& request){
 
 AmptekSimulatorConnectionHandler::AmptekSimulatorConnectionHandler(){
     spectrum = new unsigned int[speclen];
+    spectrum_buffer = new byte[(3*speclen + STATUS_SIZE)*buffer_depth];
     start_time = std::chrono::system_clock::now();
     clear();
     initConfigs();