         self.phoneCode = phoneCode
         self.flagName = flagName
     }
-    
+
     var flag: UIImage? {
         return UIImage(named: flagName, in: Bundle(for: CountryPicker.self), compatibleWith: nil)
     }
 }
 
 open class CountryPicker: UIPickerView, UIPickerViewDelegate, UIPickerViewDataSource {
-    
-    var countries: [Country]!
+
+    lazy var countries: [Country] = {
+        var allCountries: [Country] = CountryPicker.countryNamesByCode()
+        if let display = displayOnlyCountriesWithCodes {
+            let filtered = allCountries.filter { country in return display.contains(where: { code in return country.code == code }) }
+        }
+        return allCountries
+    }
+    var displayOnlyCountriesWithCodes: [String]?
     open weak var countryPickerDelegate: CountryPickerDelegate?
-    open var showPhoneNumbers: Bool = true
-    
+    open var showPhoneNumbers: Bool = false
+
     /// init
     ///
     /// - Parameter frame: initialization

        guard let jsonPath = frameworkBundle.path(forResource: "CountryPicker.bundle/Data/countryCodes", ofType: "json"), let jsonData = try? Data(contentsOf: URL(fileURLWithPath: jsonPath)) else {
            return countries
        }
        
        do {
            if let jsonObjects = try JSONSerialization.jsonObject(with: jsonData, options: JSONSerialization.ReadingOptions.allowFragments) as? NSArray {
                
                for jsonObject in jsonObjects {
                    
                    guard let countryObj = jsonObject as? NSDictionary else {
                        return countries
                    }
                    
                    guard let code = countryObj["code"] as? String, let phoneCode = countryObj["dial_code"] as? String, let name = countryObj["name"] as? String else {
                        return countries
                    }
                    
                    let flagName = "CountryPicker.bundle/Images/\(code.uppercased())"
                    
                    let country = Country(code: code, name: name, phoneCode: phoneCode, flagName: flagName)
                    countries.append(country)
                }
                
            }
        } catch {
            return countries
        }
        return countries
    }
    
    // MARK: - Picker Methods
    
    open func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    
    /// pickerView
    ///
    /// - Parameters:

                break
            }
        }

        self.selectRow(row, inComponent: 0, animated: true)
        let country = countries[row]
        if let countryPickerDelegate = countryPickerDelegate {
            countryPickerDelegate.countryPhoneCodePicker(self, didSelectCountryWithName: country.name!, countryCode: country.code!, phoneCode: country.phoneCode!, flag: country.flag!)
        }
    }

    /// setCountryByPhoneCode
    /// Init with phone code
    /// - Parameter phoneCode: String
