     
     /// List of form's fields.
     public var fields:[Field] {
-        let dirty           = self.order()
         var clean:[Field]   = []
-        
-        for index in 0 ..< dirty.count {
-            var current = self.setupField(dirty[index])
-            
-            let previous    = index - 1
-            let next        = index + 1
-            
-            if previous > -1 {
-                current.previous = self.setupField(dirty[previous])
-            }
-            
-            if next < dirty.count {
-                current.next = self.setupField(dirty[next])
-            }
-            
-            clean.append(current)
-        }
-        
+
+        var token:dispatch_once_t = 0
+        dispatch_once(&token) {
+            let dirty           = self.order()
+            for index in 0 ..< dirty.count {
+                let current = self.setupField(dirty[index])
+                
+                let previous    = index - 1
+                let next        = index + 1
+                
+                if previous > -1 {
+                    current.previous = self.setupField(dirty[previous])
+                }
+                
+                if next < dirty.count {
+                    current.next = self.setupField(dirty[next])
+                }
+                
+                clean.append(current)
+            }
+        }
+    
         return clean
     }
     

    }
    
    func setupField(incoming:Field) -> Field {
        var field   = incoming
        field.form  = self
        
        if let _self = self as? FormFieldDefaults {

    func buildFieldsArray() -> [Field] {
        var fieldsArray:[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
