diff --git a/src/frontend/sras.sv b/src/frontend/sras.sv
index a1ca55878e698bdb36b491a1bbc9cda3f22767db..2b192bd8b650551ffc0566238bc694f666b131be 100644
--- a/src/frontend/sras.sv
+++ b/src/frontend/sras.sv
@@ -54,6 +54,10 @@ module sras #(
     logic overflow;
     assign overflow = |ovf_counter_q[ptr_spec_q];
 
+    logic [SZ_OVF-1:0] ovf_plus_one, ovf_minus_one;
+    assign ovf_plus_one = ovf_counter_q[ptr_spec_q] + 1'b1;
+    assign ovf_minus_one = ovf_counter_q[ptr_spec_q] - 1'b1;
+
     always_comb begin
         ovf_counter_d = ovf_counter_q;
 
@@ -62,23 +66,23 @@ module sras #(
         end else if (!bad_spec_i) begin
             if (push_i && !pop_i) begin
                 if (overflow || prev_plus_one == '0 || pp_plus_one == '0) begin
-                    ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q] + 1'b1;
+                    ovf_counter_d[ptr_spec_d] = ovf_plus_one;
                 end
 
                 if ((prev_plus_one == '0 || pp_plus_one == '0) && begin_spec_i) begin
-                    ovf_counter_d[ptr_spec_q] = ovf_counter_q[ptr_spec_q] + 1'b1;
+                    ovf_counter_d[ptr_spec_q] = ovf_plus_one;
                 end
             end else if (!push_i && pop_i) begin
                 if (ovf_counter_q[ptr_spec_q] == '0) begin
-                    ovf_counter_d[ptr_spec_d] = '0; // ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q];
+                    ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q];
                 end else begin
-                    ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q] - 1'b1;
+                    ovf_counter_d[ptr_spec_d] = ovf_minus_one;
                 end
             end else if (begin_spec_i) begin
                 ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q];
             end
         end else if (bad_spec_i && resolved_type_i == ariane_pkg::Return && ovf_counter_q[ptr_spec_q] != '0) begin
-            ovf_counter_d[ptr_spec_d] = ovf_counter_q[ptr_spec_q] - 1'b1;
+            ovf_counter_d[ptr_spec_d] = ovf_minus_one;
         end
     end
 
@@ -112,7 +116,8 @@ module sras #(
     assign data_o = stack_q[previous_tos_addr][previous_tos];
 
     ariane_pkg::ras_t to_push;
-    assign to_push.ra = (can_push) ? data_i : 0;
+    assign to_push.ra = data_i;
+    // assign to_push.ra = (can_push) ? data_i : 0;
     assign to_push.valid = can_push;
 
     ariane_pkg::ras_t [DEPTH-1:0] new_stack, prev_stack;
@@ -126,19 +131,14 @@ module sras #(
 
         if (can_pop) begin
             new_stack[previous_tos] = to_push;
-        end
-
-        if (can_push) begin
+        end else if (can_push) begin
             new_stack[prev_plus_one] = to_push;
         end
     end
 
-    always_comb begin
-        prev_stack = stack_q[ptr_spec_q];
-
-        if (can_push && begin_spec_i) begin
-            prev_stack[pp_plus_one] = to_push;
-        end
+    for (genvar i = 0; i < DEPTH; i++) begin
+        assign prev_stack[i] = (i == pp_plus_one && can_push && begin_spec_i) ? to_push :
+                               stack_q[ptr_spec_q][i];
     end
 
     for (genvar i = 0; i < SpecDepth; i++) begin
@@ -148,16 +148,16 @@ module sras #(
                             stack_q[i];
     end
 
-    initial stack_q = '0;
+    // initial stack_q <= '0;
     always_ff @(posedge clk_i or negedge rst_ni) begin
-        stack_q <= stack_d;
-
         if (~rst_ni) begin
+            stack_q       <= '0;
             ptr_spec_q    <= '0;
             ptr_backup_q  <= '0;
             tos_q         <= '0;
             ovf_counter_q <= '0;
         end else begin
+            stack_q       <= stack_d;
             ptr_spec_q    <= ptr_spec_d;
             ptr_backup_q  <= ptr_backup_d;
             tos_q         <= tos_d;