diff --git a/include/ariane_pkg.sv b/include/ariane_pkg.sv
index 91b38513fe679a00537f1cf3beec4d2d0a953f45..9e73fb797bf498a31ad5690a09d0c2c89d582bc4 100644
--- a/include/ariane_pkg.sv
+++ b/include/ariane_pkg.sv
@@ -220,7 +220,7 @@ package ariane_pkg;
 
     // 32 registers + 1 bit for re-naming = 6
     localparam REG_ADDR_SIZE = 6;
-    localparam NR_WB_PORTS = 4;
+    localparam NR_WB_PORTS = 5;
 
     // static debug hartinfo
     localparam dm::hartinfo_t DebugHartInfo = '{
diff --git a/src/ariane.sv b/src/ariane.sv
index e6fe962d4844fe7a92796905dea3b828ad5f3f29..33752853c76c66d581a5a5b1908810ebeab6aee9 100644
--- a/src/ariane.sv
+++ b/src/ariane.sv
@@ -146,6 +146,11 @@ module ariane import ariane_pkg::*; #(
   logic                     store_valid_ex_id;
   exception_t               store_exception_ex_id;
   // MULT
+  logic                     mult_ready_ex_id;
+  logic [TRANS_ID_BITS-1:0] mult_trans_id_ex_id;
+  logic                     mult_valid_ex_id;
+  riscv::xlen_t             mult_result_ex_id;
+  exception_t               mult_exception_ex_id;
   logic                     mult_valid_id_ex;
   // FPU
   logic                     fpu_ready_ex_id;
@@ -361,6 +366,7 @@ module ariane import ariane_pkg::*; #(
     .lsu_ready_i                ( lsu_ready_ex_id              ),
     .lsu_valid_o                ( lsu_valid_id_ex              ),
     // Multiplier
+    .mult_ready_i               ( mult_ready_ex_id             ),
     .mult_valid_o               ( mult_valid_id_ex             ),
     // FPU
     .fpu_ready_i                ( fpu_ready_ex_id              ),
@@ -371,10 +377,10 @@ module ariane import ariane_pkg::*; #(
     .csr_valid_o                ( csr_valid_id_ex              ),
     // Commit
     .resolved_branch_i          ( resolved_branch              ),
-    .trans_id_i                 ( {flu_trans_id_ex_id,  load_trans_id_ex_id,  store_trans_id_ex_id,   fpu_trans_id_ex_id }),
-    .wbdata_i                   ( {flu_result_ex_id,    load_result_ex_id,    store_result_ex_id,       fpu_result_ex_id }),
-    .ex_ex_i                    ( {flu_exception_ex_id, load_exception_ex_id, store_exception_ex_id, fpu_exception_ex_id }),
-    .wt_valid_i                 ( {flu_valid_ex_id,     load_valid_ex_id,     store_valid_ex_id,         fpu_valid_ex_id }),
+    .trans_id_i                 ( {flu_trans_id_ex_id,  load_trans_id_ex_id,  store_trans_id_ex_id,   fpu_trans_id_ex_id,  mult_trans_id_ex_id }),
+    .wbdata_i                   ( {flu_result_ex_id,    load_result_ex_id,    store_result_ex_id,       fpu_result_ex_id,    mult_result_ex_id }),
+    .ex_ex_i                    ( {flu_exception_ex_id, load_exception_ex_id, store_exception_ex_id, fpu_exception_ex_id, mult_exception_ex_id }),
+    .wt_valid_i                 ( {flu_valid_ex_id,     load_valid_ex_id,     store_valid_ex_id,         fpu_valid_ex_id,     mult_valid_ex_id }),
 
     .waddr_i                    ( waddr_commit_id              ),
     .wdata_i                    ( wdata_commit_id              ),
@@ -421,6 +427,11 @@ module ariane import ariane_pkg::*; #(
     .csr_addr_o             ( csr_addr_ex_csr             ),
     .csr_commit_i           ( csr_commit_commit_ex        ), // from commit
     // MULT
+    .mult_result_o          ( mult_result_ex_id            ),
+    .mult_trans_id_o        ( mult_trans_id_ex_id          ),
+    .mult_valid_o           ( mult_valid_ex_id             ),
+    .mult_exception_o       ( mult_exception_ex_id         ),
+    .mult_ready_o           ( mult_ready_ex_id             ),
     .mult_valid_i           ( mult_valid_id_ex            ),
     // LSU
     .lsu_ready_o            ( lsu_ready_ex_id             ),
diff --git a/src/ex_stage.sv b/src/ex_stage.sv
index 6d4fa1fa654c60e0000c9238323f838512774fb3..402bbb330861b3f4e1fed14736726b49563b6871 100644
--- a/src/ex_stage.sv
+++ b/src/ex_stage.sv
@@ -48,6 +48,11 @@ module ex_stage import ariane_pkg::*; #(
     output logic [11:0]                            csr_addr_o,
     input  logic                                   csr_commit_i,
     // MULT
+    output riscv::xlen_t                           mult_result_o,
+    output logic [TRANS_ID_BITS-1:0]               mult_trans_id_o,
+    output exception_t                             mult_exception_o,
+    output logic                                   mult_ready_o,      // MULT is ready
+    output logic                                   mult_valid_o,      // MULT result is valid
     input  logic                                   mult_valid_i,      // Output is valid
     // LSU
     output logic                                   lsu_ready_o,        // FU is ready
@@ -137,11 +142,9 @@ module ex_stage import ariane_pkg::*; #(
 
     // from ALU to branch unit
     logic alu_branch_res; // branch comparison result
-    riscv::xlen_t alu_result, csr_result, mult_result;
+    riscv::xlen_t alu_result, csr_result;
     logic [riscv::VLEN-1:0] branch_result;
-    logic csr_ready, mult_ready;
-    logic [TRANS_ID_BITS-1:0] mult_trans_id;
-    logic mult_valid;
+    logic csr_ready;
 
     // 1. ALU (combinatorial)
     // data silence operation
@@ -190,7 +193,7 @@ module ex_stage import ariane_pkg::*; #(
         .csr_addr_o
     );
 
-    assign flu_valid_o = alu_valid_i | branch_valid_i | csr_valid_i | mult_valid;
+    assign flu_valid_o = alu_valid_i | branch_valid_i | csr_valid_i;
 
     // result MUX
     always_comb begin
@@ -203,34 +206,29 @@ module ex_stage import ariane_pkg::*; #(
         // CSR result
         end else if (csr_valid_i) begin
             flu_result_o = csr_result;
-        end else if (mult_valid) begin
-            flu_result_o = mult_result;
-            flu_trans_id_o = mult_trans_id;
         end
     end
 
     // ready flags for FLU
-    always_comb begin
-        flu_ready_o = csr_ready & mult_ready;
-    end
+    assign flu_ready_o = csr_ready;
 
     // 4. Multiplication (Sequential)
-    fu_data_t mult_data;
-    // input silencing of multiplier
-    assign mult_data  = mult_valid_i ? fu_data_i  : '0;
-
     mult i_mult (
         .clk_i,
         .rst_ni,
         .flush_i,
         .mult_valid_i,
-        .fu_data_i       ( mult_data     ),
-        .result_o        ( mult_result   ),
-        .mult_valid_o    ( mult_valid    ),
-        .mult_ready_o    ( mult_ready    ),
-        .mult_trans_id_o ( mult_trans_id )
+        .fu_data_i       ( fu_data_i       ),
+        .result_o        ( mult_result_o   ),
+        .mult_valid_o    ( mult_valid_o    ),
+        .mult_ready_o    ( mult_ready_o    ),
+        .mult_trans_id_o ( mult_trans_id_o )
     );
 
+    assign mult_exception_o.valid = 1'b0;
+    assign mult_exception_o.cause = '0;
+    assign mult_exception_o.tval = '0;
+
     // ----------------
     // FPU
     // ----------------
diff --git a/src/issue_read_operands.sv b/src/issue_read_operands.sv
index e35165dc790231aea63977acc6f32427d2724c98..1bdd15a8bfef214d8eb1277510f4ff19474f9b64 100644
--- a/src/issue_read_operands.sv
+++ b/src/issue_read_operands.sv
@@ -54,6 +54,7 @@ module issue_read_operands import ariane_pkg::*; #(
     input  logic                                   lsu_ready_i,      // FU is ready
     output logic                                   lsu_valid_o,      // Output is valid
     // MULT
+    input  logic                                   mult_ready_i,     // MULT ready to accept a new request
     output logic                                   mult_valid_o,     // Output is valid
     // FPU
     input  logic                                   fpu_ready_i,      // FU is ready
@@ -128,10 +129,12 @@ module issue_read_operands import ariane_pkg::*; #(
     // this obviously depends on the functional unit we need
     always_comb begin : unit_busy
         unique case (issue_instr_i.fu)
-            NONE, ALU, CTRL_FLOW:
+            NONE:
                 fu_busy = 1'b0;
-            CSR, MULT:
+            ALU, CTRL_FLOW, CSR:
                 fu_busy = ~flu_ready_i;
+            MULT:
+                fu_busy = ~mult_ready_i;
             FPU, FPU_VEC:
                 fu_busy = ~fpu_ready_i;
             LOAD, STORE:
diff --git a/src/issue_stage.sv b/src/issue_stage.sv
index c20e8b2c6393a50cafa720e7c68c13b0dd84e207..2492b203d7315a599daf98fdfa63f54bc45f6f47 100644
--- a/src/issue_stage.sv
+++ b/src/issue_stage.sv
@@ -47,6 +47,7 @@ module issue_stage import ariane_pkg::*; #(
     output logic                                     branch_valid_o,   // use branch prediction unit
     output branchpredict_sbe_t                       branch_predict_o, // Branch predict Out
 
+    input logic                                      mult_ready_i,
     output logic                                     mult_valid_o,
 
     input  logic                                     fpu_ready_i,