     func buildFieldsArray() -> [Field] {
         var fieldsArray:[Field] = []
         
-        let orderedFields       = self.order()
-        let fields              = self.properties().flatMap { incoming -> Field in
-            var field   = self.setupField(incoming.1)
-            field.name  = incoming.0
-            
-            return field
-        }
-        
-        for field in fields {
-            var _field = field
-            
-            if let orderedIndex = orderedFields.indexOf({
-                
-                if let _zero = $0 as? TextField, _field = field as? TextField {
-                    return _zero == _field
-                }
-                else if let _zero = $0 as? TextView, _field = field as? TextView {
-                    return _zero == _field
-                }
-                
-                return false
-            }) {
-                if orderedIndex > 0 {
-                    _field.previous = orderedFields[(orderedIndex - 1)]
-                }
-
-                if (orderedIndex + 1) < orderedFields.count {
-                    _field.next = orderedFields[(orderedIndex + 1)]
-                }
-            }
-            
-            fieldsArray.append(_field)
+        var token:dispatch_once_t = 0
+        dispatch_once(&token) {
+            let orderedFields       = self.order()
+            let fields              = self.properties().flatMap { incoming -> Field in
+                let field   = self.setupField(incoming.1)
+                field.name  = incoming.0
+                
+                return field
+            }
+            
+            for field in fields {
+                let _field = field
+                
+                if let orderedIndex = orderedFields.indexOf({
+                    
+                    if let _zero = $0 as? TextField, _field = field as? TextField {
+                        return _zero == _field
+                    }
+                    else if let _zero = $0 as? TextView, _field = field as? TextView {
+                        return _zero == _field
+                    }
+                    
+                    return false
+                }) {
+                    if orderedIndex > 0 {
+                        _field.previous = orderedFields[(orderedIndex - 1)]
+                    }
+
+                    if (orderedIndex + 1) < orderedFields.count {
+                        _field.next = orderedFields[(orderedIndex + 1)]
+                    }
+                }
+                
+                fieldsArray.append(_field)
+            }
         }
         
         return fieldsArray

    func getFieldName(field:Field) -> String {
        if let f = field as? NSObject {
            
            for (name, field) in properties() {
                guard let prop = valueForKey(name) else {
                    continue
                }

        var _isValid = true
        
        errors.removeAll()
        for field in fields {
            _isValid = field.validate()
            
            if !_isValid {
