Register new widget

I got it working now with the code below, not sure if it is the best way but it works good

/**
 * Tag LIST widget class
 */
class WP_Widget_Tag_List extends WP_Widget
{

    function __construct()
    {
        $widget_ops = array('description' => __("Your most used tags in List format"));
        parent::__construct('tag_list', __('Tag List'), $widget_ops);
    }

    function widget($args, $instance)
    {
        extract($args);
        $current_taxonomy = $this->_get_current_taxonomy($instance);
        if (!empty($instance['title'])) {
            $title = $instance['title'];
        } else {
            if ('post_tag' == $current_taxonomy) {
                $title = __('Tags');
            } else {
                $tax = get_taxonomy($current_taxonomy);
                $title = $tax->labels->name;
            }
        }
        $title = apply_filters('widget_title', $title, $instance, $this->id_base);

        echo $before_widget;
        if ($title)
            echo $before_title . $title . $after_title;
        echo '<div class="taglist">';
        //wp_tag_cloud( apply_filters('widget_tag_cloud_args', array('taxonomy' => $current_taxonomy) ) );
        echo '<ul>';
        $args = array('taxonomy' => 'post_tag');
        $terms = get_terms('post_tag', $args);
        $count = count($terms);
        $i = 0;
        if ($count > 0) {
            foreach ($terms as $term) {
                $i++;
                $term_list .= '<li><a href="https://wordpress.stackexchange.com/tag/" . $term->slug .
                    '" title="View all post filed under ' . $term->name . '">' . $term->name .
                    '</a></li>';
            }
            echo $term_list;
        }

        echo '</ul>';
        echo "</div>\n";
        echo $after_widget;
    }

    function update($new_instance, $old_instance)
    {
        $instance['title'] = strip_tags(stripslashes($new_instance['title']));
        $instance['taxonomy'] = stripslashes($new_instance['taxonomy']);
        return $instance;
    }

    function form( $instance ) {
        $current_taxonomy = $this->_get_current_taxonomy($instance);
        ?>
        <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:') ?></label>
        <input type="text" class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" value="<?php if (isset ( $instance['title'])) {echo esc_attr( $instance['title'] );} ?>" /></p>
        <p><label for="<?php echo $this->get_field_id('taxonomy'); ?>"><?php _e('Taxonomy:') ?></label>
        <select class="widefat" id="<?php echo $this->get_field_id('taxonomy'); ?>" name="<?php echo $this->get_field_name('taxonomy'); ?>">
        <?php foreach ( get_object_taxonomies('post') as $taxonomy ) :
                $tax = get_taxonomy($taxonomy);
                if ( !$tax->show_tagcloud || empty($tax->labels->name) )
                    continue;
                    ?>
                    <option value="<?php echo esc_attr($taxonomy) ?>" <?php selected($taxonomy, $current_taxonomy) ?>><?php echo $tax->labels->name; ?></option>
        <?php endforeach; ?>
        </select></p><?php
    }

    function _get_current_taxonomy($instance) {
        if ( !empty($instance['taxonomy']) && taxonomy_exists($instance['taxonomy']) )
            return $instance['taxonomy'];

            return 'post_tag';
    }
}
register_widget('WP_Widget_Tag_List');