         return false
     }
     
-    func isProductPurchased(productId: String) -> Bool {
+    public func isProductPurchased(productId: String) -> Bool {
         return purchasedProductIds.contains(productId)
     }
     
-    func restoreCompletedTransactions(completion: RestoreTransactionsCompletionBlock) {
+    public func restoreCompletedTransactions(completion: RestoreTransactionsCompletionBlock) {
         restoreTransactionsCompletionBlock = completion
         SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
     }
     
-    func loadProductsWithIds(productIds: Array<String>, completion:LoadProductsCompletionBlock) {
+    public func loadProductsWithIds(productIds: Array<String>, completion:LoadProductsCompletionBlock) {
         var loadedProducts = Array<SKProduct>()
         var remainingIds = Array<String>()
         

        callLoadProductsCompletionForRequest(request, responseProducts: response.products, error: nil)
    }
    
    func request(request: SKRequest, didFailWithError error: NSError) {
        if let productRequest = request as? SKProductsRequest {
            callLoadProductsCompletionForRequest(productRequest, responseProducts: nil, error: error)
        }


extension IAPManager: SKPaymentTransactionObserver {
    
    public func paymentQueue(queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
        for transaction in transactions {
            let productId = transaction.payment.productIdentifier
            switch transaction.transactionState {
