Почему слетает цена, которая изменена через handler OnBeforeBasketAdd

В битриксе, при обработке корзины, у каждого товара есть своя callback функция (по умолчанию это CatalogBasketCallback).
В фунции CatalogBasketCallback для определения цены, вызывается функция GetOptimalPrice, которая выбирает самую мелкую цену товара. Иногда это нужно, но иногда нет. Что же делать? Нужно прописать в функции OnBeforeBasketAdd:

$arFields["CALLBACK_FUNC"] = "";

Или вызов своей функции, например MyBasketCallback, которая будет проверять скидки, цены, количество товара. И наступит счастье!