         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

        super.init(frame: frame)
        setup()
    }
    
    required public init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }
    
    /// Setup country code picker
    func setup() {
        countries = CountryPicker.countryNamesByCode()
        
        super.dataSource = self
        super.delegate = self
    }
    
    // MARK: - Country Methods
    
    /// setCountry
    ///
    /// - Parameter code: selected country

        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:
