diff --git a/vendor/magento/module-customer-balance/Model/Creditmemo/Balance.php b/vendor/magento/module-customer-balance/Model/Creditmemo/Balance.php
index 45bfea30326..2e3ef806b34 100644
--- a/vendor/magento/module-customer-balance/Model/Creditmemo/Balance.php
+++ b/vendor/magento/module-customer-balance/Model/Creditmemo/Balance.php
@@ -59,39 +59,37 @@ class Balance
      */
     public function save(Creditmemo $creditmemo) :void
     {
-        if ($creditmemo->getCustomerBalanceRefundFlag() && $creditmemo->getBsCustomerBalTotalRefunded()) {
-            $order = $creditmemo->getOrder();
-            $order->setBsCustomerBalTotalRefunded(
-                $order->getBsCustomerBalTotalRefunded() + $creditmemo->getBsCustomerBalTotalRefunded()
-            );
-            $order->setCustomerBalTotalRefunded(
-                $order->getCustomerBalTotalRefunded() + $creditmemo->getCustomerBalTotalRefunded()
-            );
-            $order->setBaseCustomerBalanceRefunded(
-                $order->getBaseCustomerBalanceRefunded() + $creditmemo->getBaseCustomerBalanceRefunded()
-            );
-            $customerBalanceRefunded = $creditmemo->getCustomerBalanceRefunded();
-            $order->setCustomerBalanceRefunded(
-                $order->getCustomerBalanceRefunded() + $customerBalanceRefunded
-            );
-            $status = $order->getConfig()->getStateDefaultStatus($order->getState());
-            $comment = __(
-                'We refunded %1 to Store Credit',
-                $order->getBaseCurrency()->formatTxt($customerBalanceRefunded)
-            );
-            $order->addCommentToStatusHistory($comment, $status, false);
-            $this->orderRepository->save($order);
+        $order = $creditmemo->getOrder();
+        $order->setBsCustomerBalTotalRefunded(
+            $order->getBsCustomerBalTotalRefunded() + $creditmemo->getBsCustomerBalTotalRefunded()
+        );
+        $order->setCustomerBalTotalRefunded(
+            $order->getCustomerBalTotalRefunded() + $creditmemo->getCustomerBalTotalRefunded()
+        );
+        $order->setBaseCustomerBalanceRefunded(
+            $order->getBaseCustomerBalanceRefunded() + $creditmemo->getBaseCustomerBalanceRefunded()
+        );
+        $customerBalanceRefunded = $creditmemo->getCustomerBalanceRefunded();
+        $order->setCustomerBalanceRefunded(
+            $order->getCustomerBalanceRefunded() + $customerBalanceRefunded
+        );
+        $status = $order->getConfig()->getStateDefaultStatus($order->getState());
+        $comment = __(
+            'We refunded %1 to Store Credit',
+            $order->getBaseCurrency()->formatTxt($customerBalanceRefunded)
+        );
+        $order->addCommentToStatusHistory($comment, $status, false);
+        $this->orderRepository->save($order);

-            $websiteId = $this->storeManager->getStore($order->getStoreId())->getWebsiteId();
+        $websiteId = $this->storeManager->getStore($order->getStoreId())->getWebsiteId();

-            $this->balanceFactory->create()
-                ->setCustomerId($order->getCustomerId())
-                ->setWebsiteId($websiteId)
-                ->setAmountDelta($creditmemo->getBsCustomerBalTotalRefunded())
-                ->setHistoryAction(History::ACTION_REFUNDED)
-                ->setOrder($order)
-                ->setCreditMemo($creditmemo)
-                ->save();
-        }
+        $this->balanceFactory->create()
+            ->setCustomerId($order->getCustomerId())
+            ->setWebsiteId($websiteId)
+            ->setAmountDelta($creditmemo->getBsCustomerBalTotalRefunded())
+            ->setHistoryAction(History::ACTION_REFUNDED)
+            ->setOrder($order)
+            ->setCreditMemo($creditmemo)
+            ->save();
     }
 }
diff --git a/vendor/magento/module-customer-balance/Observer/CreditmemoSaveAfterObserver.php b/vendor/magento/module-customer-balance/Observer/CreditmemoSaveAfterObserver.php
index d552479806b..c2051533002 100644
--- a/vendor/magento/module-customer-balance/Observer/CreditmemoSaveAfterObserver.php
+++ b/vendor/magento/module-customer-balance/Observer/CreditmemoSaveAfterObserver.php
@@ -61,7 +61,9 @@ class CreditmemoSaveAfterObserver implements ObserverInterface
             }
         }

-        $this->balance->save($creditmemo);
+        if ($creditmemo->getCustomerBalanceRefundFlag() && $creditmemo->getBsCustomerBalTotalRefunded()) {
+            $this->balance->save($creditmemo);
+        }

         return $this;
     }
diff --git a/vendor/magento/module-reward/Model/Plugin/CustomerBalance.php b/vendor/magento/module-reward/Model/Plugin/CustomerBalance.php
index 85feb942d6f..6c4b7e95ee1 100644
--- a/vendor/magento/module-reward/Model/Plugin/CustomerBalance.php
+++ b/vendor/magento/module-reward/Model/Plugin/CustomerBalance.php
@@ -8,7 +8,6 @@ declare(strict_types=1);
 namespace Magento\Reward\Model\Plugin;

 use Magento\CustomerBalance\Model\Creditmemo\Balance;
-use Magento\Framework\App\ObjectManager;
 use Magento\Framework\Exception\LocalizedException;
 use Magento\Reward\Model\Reward;
 use Magento\Reward\Model\RewardFactory;
@@ -25,15 +24,12 @@ class CustomerBalance
     private $rewardFactory;

     /**
-     * @param Reward $reward
-     * @param RewardFactory|null $rewardFactory
-     * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+     * @param RewardFactory $rewardFactory
      */
     public function __construct(
-        Reward $reward,
-        ?RewardFactory $rewardFactory = null
+        RewardFactory $rewardFactory
     ) {
-        $this->rewardFactory = $rewardFactory ?? ObjectManager::getInstance()->get(RewardFactory::class);
+        $this->rewardFactory = $rewardFactory;
     }

     /**
@@ -41,7 +37,7 @@ class CustomerBalance
      *
      * @param Balance $subject
      * @param Creditmemo $creditmemo
-     * @return string|null
+     * @return void
      * @throws LocalizedException
      * @SuppressWarnings(PHPMD.UnusedFormalParameter)
      */
@@ -52,8 +48,6 @@ class CustomerBalance
         if (!$this->isBalanceAvailable($creditmemo)) {
             throw new LocalizedException(__('You can\'t use more store credit than the order amount.'));
         }
-
-        return null;
     }

     /**
@@ -74,6 +68,8 @@ class CustomerBalance
             (float) $creditmemo->getBsCustomerBalTotalRefunded()
         );

+        // As Reward Points is rounded value but max allowed Customer Balance calculated with raw totals,
+        // we need to use some delta to validate allowed balance
         $rewardPointsCeilCompensation = 1;
         $availableBalance = $reward->getPointsEquivalent(
             (float) $creditmemo->getBaseCustomerBalanceReturnMax() + $rewardPointsCeilCompensation

