public function getSubfields () 
    {
        if (func_num_args() === 0) {
            return $this->_subfields;
        } else {
            $selected = array();
            $codes = array();
            $subfields = $this->getSubfields();
            array_walk($subfields, function ($value, $index) use (&$codes) { $codes[$index] = $value->getCode(); });
            foreach (func_get_args() as $arg) {
                $index = array_search($arg, $codes, true);
                if ($index === false) {
                    $selected []= null;
                } else {
                    $selected []= $subfields[$index];
                    unset($codes[$index]);
                }
            }
            return $selected;
        }
    }