         let cardInformation = self.viewModel.paymentOptionSelected as! CardInformation
         let saveCardToken = SavedCardToken(card: cardInformation, securityCode: securityCode, securityCodeRequired: true)
         
-        MPServicesBuilder.createToken(saveCardToken, baseURL: MercadoPagoCheckoutViewModel.servicePreference.getGatewayURL(), success: { (token) in
+        MPServicesBuilder.createToken(saveCardToken, baseURL: MercadoPagoCheckoutViewModel.servicePreference.getGatewayURL(), success: { [weak self] (token) in
+            guard let strongSelf = self else {
+                return
+            }
+            
             if token.lastFourDigits.isEmpty {
                 token.lastFourDigits = cardInformation.getCardLastForDigits()
             }
-            self.viewModel.updateCheckoutModel(token: token)
-            self.dismissLoading()
-            self.executeNextStep()
-            
-        }, failure: { (error) in
-            self.dismissLoading()
-            self.viewModel.errorInputs(error: MPSDKError.convertFrom(error), errorCallback: { (Void) in
-                self.createSavedCardToken(cardInformation: cardInformation, securityCode: securityCode)
-            })
-            self.executeNextStep()
+            strongSelf.viewModel.updateCheckoutModel(token: token)
+            strongSelf.dismissLoading()
+            strongSelf.executeNextStep()
+            
+            }, failure: { [weak self] (error) in
+                guard let strongSelf = self else {
+                    return
+                }
+                
+                strongSelf.dismissLoading()
+                strongSelf.viewModel.errorInputs(error: MPSDKError.convertFrom(error), errorCallback: { [weak self] (Void) in
+                    self?.createSavedCardToken(cardInformation: cardInformation, securityCode: securityCode)
+                })
+                strongSelf.executeNextStep()
         })
     }
     
     func cloneCardToken(token: Token, securityCode: String) {
         self.presentLoading()
-        MPServicesBuilder.cloneToken(token,securityCode:securityCode, success: { (token) in
-            self.viewModel.updateCheckoutModel(token: token)
-            self.dismissLoading()
-            self.executeNextStep()
-            
-        }, failure: { (error) in
-            self.dismissLoading()
-            self.viewModel.errorInputs(error: MPSDKError.convertFrom(error), errorCallback: { (Void) in
-                self.cloneCardToken(token: token, securityCode: securityCode)
-            })
-            self.executeNextStep()
-        })
-    }
-
+        MPServicesBuilder.cloneToken(token,securityCode:securityCode, success: { [weak self] (token) in
+            guard let strongSelf = self else {
+                return
+            }
+            
+            strongSelf.viewModel.updateCheckoutModel(token: token)
+            strongSelf.dismissLoading()
+            strongSelf.executeNextStep()
+            
+            }, failure: { [weak self] (error) in
+                guard let strongSelf = self else {
+                    return
+                }
+                
+                strongSelf.dismissLoading()
+                strongSelf.viewModel.errorInputs(error: MPSDKError.convertFrom(error), errorCallback: { [weak self] (Void) in
+                    self?.cloneCardToken(token: token, securityCode: securityCode)
+                })
+                strongSelf.executeNextStep()
+        })
+    }
+    
     func collectPayerCosts(updateCallback:((Void)->Void)? = nil) {
         self.presentLoading()
         let bin = self.viewModel.cardToken?.getBin()
-        MPServicesBuilder.getInstallments(bin, amount: self.viewModel.getFinalAmount(), issuer: self.viewModel.paymentData.issuer, paymentMethodId: self.viewModel.paymentData.paymentMethod._id, baseURL: MercadoPagoCheckoutViewModel.servicePreference.getDefaultBaseURL(),success: { (installments) -> Void in
-            self.viewModel.payerCosts = installments[0].payerCosts
-            
-            let defaultPayerCost = self.viewModel.checkoutPreference.paymentPreference?.autoSelectPayerCost(installments[0].payerCosts)
+        
+        MPServicesBuilder.getInstallments(bin, amount: self.viewModel.getFinalAmount(), issuer: self.viewModel.paymentData.issuer, paymentMethodId: self.viewModel.paymentData.paymentMethod._id, baseURL: MercadoPagoCheckoutViewModel.servicePreference.getDefaultBaseURL(),success: { [weak self] (installments) -> Void in
+            guard let strongSelf = self else {
+                return
+            }
+            
+            strongSelf.viewModel.payerCosts = installments[0].payerCosts
+            
+            let defaultPayerCost = strongSelf.viewModel.checkoutPreference.paymentPreference?.autoSelectPayerCost(installments[0].payerCosts)
             if let defaultPC = defaultPayerCost {
-                self.viewModel.updateCheckoutModel(payerCost: defaultPC)
+                strongSelf.viewModel.updateCheckoutModel(payerCost: defaultPC)
             }
             
             if let updateCallback = updateCallback {
                 updateCallback()
-                self.dismissLoading()
+                strongSelf.dismissLoading()
             } else {
                 
-                self.dismissLoading()
-                self.executeNextStep()
-            }
-            
-        }) { (error) -> Void in
-            self.dismissLoading()
-            self.viewModel.errorInputs(error: MPSDKError.convertFrom(error), errorCallback: { (Void) in
-                self.collectPayerCosts()
+                strongSelf.dismissLoading()
+                strongSelf.executeNextStep()
+            }
+            
+            
+        }) { [weak self] (error) -> Void in
+            guard let strongSelf = self else {
+                return
+            }
+            
+            strongSelf.dismissLoading()
+            strongSelf.viewModel.errorInputs(error: MPSDKError.convertFrom(error), errorCallback: { [weak self] (Void) in
+                self?.collectPayerCosts()
             })
-            self.executeNextStep()
+            strongSelf.executeNextStep()
         }
         
     }

        // Display error
        let errorStep = ErrorViewController(error: MercadoPagoCheckoutViewModel.error, callback: nil, callbackCancel: {[weak self] in
            
            guard let object = self else {
                return
            }
            object.finish()
            
        })
        // Limpiar error anterior

        }
        self.navigationController.pushViewController(issuerStep, animated: true)
    }
    
    
    func createCardToken(cardInformation: CardInformation? = nil, securityCode: String? = nil) {
        guard let cardInfo = cardInformation else {
