         return _predicate.evaluateWithObject(string)
     }
     
-    func localizedErrorDescription() -> String
+    public func localizedErrorDescription() -> String
     {
         return NSLocalizedString("NAVAJO_PREDICATE_ERROR", tableName: nil, bundle: NSBundle.mainBundle(), value: "Must not match predicate", comment: "Navajo - Predicate rule")
     }
 }
 
-class NJORegularExpressionRule: NSObject, NJOPasswordRule
+public class NJORegularExpressionRule: NSObject, NJOPasswordRule
 {
     private var _regularExpression: NSRegularExpression! = nil
     
-    convenience init(regularExpression: NSRegularExpression)
+    public convenience init(regularExpression: NSRegularExpression)
     {
         self.init()
         _regularExpression = regularExpression
     }
     
-    func evaluateWithString(string: String) -> Bool
+    public func evaluateWithString(string: String) -> Bool
     {
         if _regularExpression == nil
         {

        return _regularExpression.numberOfMatchesInString(string, options: [], range: NSMakeRange(0, string.characters.count)) > 0
    }
    
    func localizedErrorDescription() -> String
    {
        return NSLocalizedString("NAVAJO_REGEX_ERROR", tableName: nil, bundle: NSBundle.mainBundle(), value: "Must not match regular expression", comment: "Navajo - Regex rule")
    }
}

class NJOBlockRule: NSObject, NJOPasswordRule
{
    private var _evaluation: (String -> Bool)! = nil
    
    convenience init(evaluation: String -> Bool)
    {
        self.init()
        _evaluation = evaluation
    }
    
    func evaluateWithString(string: String) -> Bool
    {
        if _evaluation == nil
        {

    case SymbolCharacter
}

public class Navajo: NSObject
{
    public class func strengthOfPassword(password: String) -> NJOPasswordStrength
    {
        return NJOPasswordStrengthForEntropy(NJOEntropyForString(password))
    }
    
    public class func localizedStringForPasswordStrength(strength: NJOPasswordStrength) -> String
    {
        switch strength
        {
