diff --git a/hdl/src/wrapper_packet_deconstruct.sv b/hdl/src/wrapper_packet_deconstruct.sv
index cb3656d34147c7d9720953202a739913e7715c38..cfc95bf306a8ebcee243f4c5748ee9f195ffe25c 100644
--- a/hdl/src/wrapper_packet_deconstruct.sv
+++ b/hdl/src/wrapper_packet_deconstruct.sv
@@ -30,12 +30,14 @@ module  wrapper_packet_deconstruct #(
   input  logic [PACKETWIDTH-1:0] packet_data,
   input  logic                   packet_data_last,
   input  logic                   packet_data_valid,
-  output logic                   packet_data_ready
+  output logic                   packet_data_ready,
+
+  output logic                   deconstructor_ready 
 );
 
 // Create Deconstruction Buffer
-// logic [PACKETWIDTH-1:0] deconst_buffer;
 logic [(PACKETWIDTH/32)-1:0][31:0] deconst_buf;
+assign deconst_buf = packet_data;
 
 // Create Array to Flag which buffers have been read
 logic [(PACKETWIDTH/32)-1:0] deconst_buf_flag;
@@ -53,34 +55,31 @@ logic deconst_buf_flag_reduced;
 assign deconst_buf_flag_reduced = &(deconst_buf_flag | (cur_deconst_buf_flag));
 
 logic deconst_buf_valid;
+assign deconstructor_ready = deconst_buf_valid;
 // Dump data on one of two conditions
 // - An address ends [5:0] in 0x3C i.e. [5:2] == 0xF
 // - Address Moved to different 512 bit word
 // Write Condition
 always_ff @(posedge hclk or negedge hresetn) begin
     if (~hresetn) begin
-        // Reset Construction Buffer
-        deconst_buf   <= {PACKETWIDTH{1'b0}};
         // Reset Values
         packet_data_ready  <= 1'b0;
         deconst_buf_valid  <= 1'b0;
         deconst_buf_flag   <= {(PACKETWIDTH/32){1'b0}};
     end else begin
-        // If ready is low and theres no valid data in buffer, asser ready
-        if (!packet_data_ready && !deconst_buf_valid) begin
-            packet_data_ready  <= 1'b1;
-        end
-        // Read Packet into Deconstruction Buffer
         if (packet_data_valid && packet_data_ready) begin
-            packet_data_ready  <= 1'b0;
-            deconst_buf        <= packet_data;
+            packet_data_ready <= 1'b0;
+        end
+        // If buffer isn't valid but valid data on input, assert buffer valid
+        if ((packet_data_valid && !packet_data_ready) && !deconst_buf_valid) begin
             deconst_buf_valid  <= 1'b1;
             deconst_buf_flag   <= {(PACKETWIDTH/32){1'b0}};
+            packet_data_ready  <= 1'b0;
         end
         if (read_en) begin
             // Register which words in the Deconstruction buffer have been read
             // Check if All Words have been Read
-            if (deconst_buf_flag_reduced && !(packet_data_valid && packet_data_ready)) begin
+            if (deconst_buf_flag_reduced && deconst_buf_valid) begin
                 // Set Ready High To Get more Data into Buffer
                 deconst_buf_valid  <= 1'b0;
                 packet_data_ready  <= 1'b1;
@@ -103,8 +102,8 @@ end
 
 // Register Ready Control
 always_comb begin
-    // Not Ready Out when waiting for Valid Data on Input
-    rready = ~packet_data_ready;
+    // Ready when data in deconstruction buffer
+    rready = deconst_buf_valid;
     // Write Ready always high but doesn't do anywthing
     wready = 1'b1;
 end