     
     public let ProductPurchasedNotification = "IAPPurchasedNotification"
     
-    static let sharedInstance = InAppFw()
+    public static let sharedInstance = InAppFw()
     
     var productIdentifiers: Set<String>?
     var productsRequest: SKProductsRequest?
     
-    var completionHandler: ((success: Bool, products: [AnyObject]?) -> Void)?
+    var completionHandler: ((success: Bool, products: [SKProduct]?) -> Void)?
     
     var purchasedProductIdentifiers = Set<String>()
     
-    var hasValidReceipt = false
+    public var hasValidReceipt = false
     
     public override init() {
         super.init()
         SKPaymentQueue.defaultQueue().addTransactionObserver(self)
         //loadPurchasedProducts(true)
+        productIdentifiers = Set<String>()
     }
     
     public func addProductId(id: String) {

            if let data = data, let jsonResponse: AnyObject = try NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions()) {
                
                if let status = jsonResponse["status"] as? Int {
                    //print("Validation Status: \(status)")
                    if status == 0 {
                        print("Status: VALID")
                        self.hasValidReceipt = true

        }
    }
    
    public func requestProducts(completionHandler: (success:Bool, products:[SKProduct]?) -> Void) {
        self.completionHandler = completionHandler
        
        print("Requesting Products")
        
        if let productIdentifiers = productIdentifiers {
            productsRequest = SKProductsRequest(productIdentifiers: productIdentifiers)
            productsRequest!.delegate = self
            productsRequest!.start()
        } else {
            print("No productIdentifiers")
            completionHandler(success: false, products: nil)
        }
        
