protected function registerTags()
    {
        // register the "normal" tags, ie tags that are not form controls (widgets, see below)
        $tags = array('error', 'hint', 'label', 'radioset', 'checkboxset');
        foreach ($tags as $tag) {
            $tagClass = str_replace(' ', '', ucwords(str_replace('-', ' ', $tag)));
            $this->registerTag($tag, __NAMESPACE__ . '\Tag\\' . $tagClass);
        }

        // register the "widget" tags, ie tags that are inputs
        $widgets = array(
            'text',
            'file',
            'textarea',
            'radio',
            'checkbox',
            'select',
            'multiselect',
            'checkboxset',
            'radioset',
            'email',
            'password',
            'radioset',
            'checkboxset',
            // buttons
            'button',
            'submit',
            'reset',
            // containers
            'group',
            'fieldset',
            'collection',
            'form'
        );
        foreach ($widgets as $widget) {
            $widgetClass = str_replace(' ', '', ucwords(str_replace('-', ' ', $widget)));
            $this->registerTag('widget-' . $widget, __NAMESPACE__ . '\Widget\\' . $widgetClass);
        }
    }