public function construct() {
        $tags = array();
        $defaults = $this->_defaults;

        foreach ($this->_tags as $tag => $settings) {
            $filter = $settings;
            $filter['tag'] = $tag;

            // Inherit from another tag and merge recursively
            if (!empty($filter['aliasFor'])) {
                $base = $tags[$filter['aliasFor']];

                foreach ($filter as $key => $value) {
                    if (is_array($value)) {
                        $base[$key] = $value + $base[$key];
                    } else if ($value !== '') {
                        $base[$key] = $value;
                    }
                }

                $filter = $base;

            // Or inherit from defaults
            } else {
                $filter = array_merge($defaults, $filter);
            }

            // Alias attributes
            if ($filter['aliasAttributes']) {
                foreach ($filter['aliasAttributes'] as $attr => $alias) {
                    $filter['attributes'][$attr] = $filter['attributes'][$alias];
                }
            }

            $tags[$tag] = $filter;
        }

        $this->_tags = $tags;
    }