/**
  * @param waContact $contact
  * @param array|string $fields
  * @param bool $old_value
  * @return array|void
  */
 public function get(waContact $contact, $fields = array(), $old_value = false)
 {
     if (!is_array($fields)) {
         $all_fields = array($fields);
     } else {
         $all_fields = $fields;
     }
     $result = array();
     $load_fields = array();
     foreach ($all_fields as $field_id) {
         if ($contact->issetCache($field_id, $old_value)) {
             $result[$field_id] = $contact->getCache($field_id, $old_value);
         } else {
             if (strpos($field_id, ':') === false) {
                 $result[$field_id] = null;
             }
             $load_fields[] = $field_id;
         }
     }
     if ((!$fields || $load_fields) && $contact->getId()) {
         if ($load_result = $this->load($contact, $load_fields)) {
             $result = $load_result + $result;
         }
         $contact->setCache($result);
     }
     if (!is_array($fields)) {
         return $result[$fields];
     } else {
         return $result;
     }
 }