diff --git a/lib/solidus_subscriptions/checkout.rb b/lib/solidus_subscriptions/checkout.rb
index 9b39f3a1..53e05251 100644
--- a/lib/solidus_subscriptions/checkout.rb
+++ b/lib/solidus_subscriptions/checkout.rb
@@ -42,6 +42,9 @@ def populate_order(order)
     end
 
     def finalize_order(order)
+      # Rerun the legacy promotion handler
+      # `solidus_promotions` does not need this handler, and will pickup promotions in `order.recalculate`
+      ::Spree::PromotionHandler::Cart.new(order).activate if defined?(::Spree::PromotionHandler::Cart)
       order.recalculate
 
       order.checkout_steps[0...-1].each do
diff --git a/lib/solidus_subscriptions/subscription_line_item_builder.rb b/lib/solidus_subscriptions/subscription_line_item_builder.rb
index 303c4de0..64b06f08 100644
--- a/lib/solidus_subscriptions/subscription_line_item_builder.rb
+++ b/lib/solidus_subscriptions/subscription_line_item_builder.rb
@@ -9,6 +9,9 @@ def create_subscription_line_item(line_item)
         subscription_params.merge(spree_line_item: line_item)
       )
 
+      # Rerun the legacy promotion handler to pickup subscription promotions
+      # `solidus_promotions` does not need this handler, and will pickup promotions in `order.recalculate`
+      ::Spree::PromotionHandler::Cart.new(line_item.order).activate if defined?(::Spree::PromotionHandler::Cart)
       line_item.order.recalculate
     end