diff --git a/src/frontend/sras.sv b/src/frontend/sras.sv
index 053f13ff62b6de2047a110c92d77bacdb1bc7ee9..6328a52c84402360ca6f29180441aebdd4d63c2b 100644
--- a/src/frontend/sras.sv
+++ b/src/frontend/sras.sv
@@ -53,21 +53,29 @@ module sras #(
 
         if (flush_i) begin
             tos_d = '0;
-        end else if (push_i && !pop_i) begin
-            tos_d[ptr_spec_d] = prev_plus_one;
-            tos_d[ptr_spec_q] = pp_plus_one;
-        end else if (!push_i && pop_i) begin
-            tos_d[ptr_spec_d] = prev_minus_one;
-        end else if (!bad_spec_i && begin_spec_i) begin
-            tos_d[ptr_spec_d] = tos_q[ptr_spec_q];
+        end else if (!bad_spec_i) begin
+            if (push_i && !pop_i) begin
+                tos_d[ptr_spec_d] = prev_plus_one;
+                if (begin_spec_i) begin
+                    tos_d[ptr_spec_q] = pp_plus_one;
+                end
+            end else if (!push_i && pop_i) begin
+                    tos_d[ptr_spec_d] = prev_minus_one;
+            end else if (begin_spec_i) begin
+                tos_d[ptr_spec_d] = tos_q[ptr_spec_q];
+            end
         end
     end
 
+    logic can_pop, can_push;
+    assign can_pop = pop_i && !bad_spec_i;
+    assign can_push = push_i && !bad_spec_i;
+
     assign data_o = stack_q[previous_tos_addr][previous_tos];
 
     ariane_pkg::ras_t to_push;
     assign to_push.ra = (push_i) ? data_i : 0;
-    assign to_push.valid = push_i;
+    assign to_push.valid = can_push;
 
     ariane_pkg::ras_t [DEPTH-1:0] new_stack, prev_stack;
 
@@ -78,11 +86,9 @@ module sras #(
             new_stack = stack_q[ptr_spec_q];
         end
 
-        if (pop_i) begin
+        if (can_pop) begin
             new_stack[previous_tos] = to_push;
-        end
-
-        if (push_i) begin
+        end else if (can_push) begin
             new_stack[prev_plus_one] = to_push;
         end
     end
@@ -90,7 +96,7 @@ module sras #(
     always_comb begin
         prev_stack = stack_q[ptr_spec_q];
 
-        if (push_i) begin
+        if (can_push && begin_spec_i) begin
             prev_stack[pp_plus_one] = to_push;
         end
     end
@@ -124,9 +130,9 @@ module sras #(
          assert (2 ** $clog2(DEPTH) == DEPTH) else $fatal(1,"[sras] DEPTH is not a power of 2");
       end
 
-      assert property (
-        @(posedge clk_i) disable iff (!rst_ni) push_i |-> begin_spec_i)
-          else $warning (1,"[sras] push_i & ~begin_spec_i");
+      // assert property (
+      //   @(posedge clk_i) disable iff (!rst_ni) push_i |-> begin_spec_i)
+      //     else $warning (1,"[sras] push_i & ~begin_spec_i");
 
       assert property (
         @(posedge clk_i) disable iff (!rst_ni) (begin_spec_i & !(bad_spec_i)) |-> (ptr_spec_d != ptr_backup_d))
@@ -135,6 +141,10 @@ module sras #(
       assert property (
         @(posedge clk_i) disable iff (!rst_ni) valid_spec_i |-> ((ptr_backup_q == ptr_spec_q) |-> (ptr_backup_d == ptr_spec_d)))
           else $fatal (1,"[sras] backup overtake");
+
+      assert property (
+        @(posedge clk_i) disable iff (!rst_ni) can_push |-> ~can_pop && can_pop |-> ~can_push)
+          else $fatal (1,"[sras] push & pop at the same time");
     `endif
     // pragma translate_on
 endmodule