Refactored to use a RFPurchase object for handling the purchase