Index: extendedversion/htdocs/css/roadmap.css
===================================================================
--- extendedversion/htdocs/css/roadmap.css	(revision 0)
+++ extendedversion/htdocs/css/roadmap.css	(revision 0)
@@ -0,0 +1,3 @@
+.milestone .milestones { 
+  border: 1px solid lightgray; 
+} 
\ No newline at end of file
Index: extendedversion/htdocs/css/version.css
===================================================================
--- extendedversion/htdocs/css/version.css	(revision 13299)
+++ extendedversion/htdocs/css/version.css	(working copy)
@@ -14,4 +14,7 @@
 .milestone .info h3 :link:hover, .milestone .info h3 :visited:hover {
  color: #000;
 }
-.milestone .info h3 em { color: #b00; font-style: normal }
\ No newline at end of file
+.milestone .info h3 em { color: #b00; font-style: normal }
+.milestone .milestones { 
+  border: 1px solid lightgray; 
+} 
\ No newline at end of file
Index: extendedversion/roadmap.py
===================================================================
--- extendedversion/roadmap.py	(revision 13299)
+++ extendedversion/roadmap.py	(working copy)
@@ -20,14 +20,18 @@
 from trac.web.chrome import(
     INavigationContributor, add_stylesheet
 )
+from version import VisibleVersion 
 
-
 class ReleasesModule(Component):
     implements(INavigationContributor, IRequestHandler, IRequestFilter)
 
     roadmap_navigation = BoolOption('extended_version', 'roadmap_navigation',
         'false', doc="""Whether to have the roadmap navigation item link to
         the versions page.""")
+    show_tickets_in_overview = BoolOption('extended_version', 'show_tickets_in_overview', True, 
+ 	    """whether to display the ticket bars in the version overview page.""") 
+    show_milestones_in_overview = BoolOption('extended_version', 'show_milestones_in_overview', False,
+        """whether to display milestone information in the overview page.""") 
 
     # INavigationContributor methods
     def get_active_navigation_item(self, req):
@@ -58,32 +62,46 @@
     def process_request(self, req):
         req.perm.require('VERSION_VIEW')
 
+        db = self.env.get_db_cnx()
+        
         showall = req.args.get('show') == 'all'
+        version_component = self.env[VisibleVersion] 
+        milestone_stats_provider = version_component.milestone_stats_provider 
+        version_stats_provider = version_component.version_stats_provider
 
         versions = []
         resources = []
         is_released = []
+        version_datasets = [] 
         for v in Version.select(self.env):
             r = Resource('version', v.name)
             ir = v.time and v.time.date() < date.today()
 
-            # apply more visibiity
+            # apply more visibility
             if (showall or not ir) and 'VERSION_VIEW' in req.perm(r):
                 versions.append(v)
                 resources.append(r)
                 is_released.append(v.time and v.time.date() < date.today())
+                version_data = version_component.get_version_data(req, db, v) 
+                version_datasets.append(version_data)
 
         versions.reverse(),
         resources.reverse(),
         is_released.reverse(),
+        version_datasets.reverse(), 
 
         data = {
             'versions': versions,
             'resources': resources,
             'is_released': is_released,
             'showall': showall,
+            'show_tickets_in_overview' : self.show_tickets_in_overview, 
+            'show_milestones_in_overview' : self.show_milestones_in_overview,
+            'version_datasets' : version_datasets,
         }
         add_stylesheet(req, 'common/css/roadmap.css')
+        add_stylesheet(req, 'extendedversion/css/roadmap.css')
+        
         return 'versions.html', data, None
 
     def _remove_item(self, req, name):
Index: extendedversion/version.py
===================================================================
--- extendedversion/version.py	(revision 13299)
+++ extendedversion/version.py	(working copy)
@@ -137,7 +137,7 @@
     # IRequestHandler methods
 
     def match_request(self, req):
-        match = re.match(r'/version[/^s]?(?:(.+))?', req.path_info)
+        match = re.match(r'/version(?:/(.+))?$', req.path_info)
         if match:
             if match.group(1):
                 req.args['id'] = match.group(1)
@@ -219,6 +219,43 @@
     def get_link_resolvers(self):
         yield ('version', self._format_link)
 
+        
+    # Utility methods
+    def get_version_data(self, req, db, version):
+
+        sql = "SELECT name,due,completed,description FROM milestone " \
+              "INNER JOIN milestone_version ON (name = milestone) " \
+              "WHERE version = %s " \
+              "ORDER BY name "
+        cursor = db.cursor()
+        cursor.execute(sql, (version.name,))
+        
+        milestones = []
+        tickets = []
+        milestone_stats = []
+        
+        for row in cursor:
+            milestone = Milestone(self.env, row[0])
+            milestones.append(milestone)
+        
+            mtickets = get_tickets_for_milestone(self.env, db, milestone.name,
+                                                 'owner')
+
+            mtickets = apply_ticket_permissions(self.env, req, mtickets)
+            tickets += mtickets
+            stat = get_ticket_stats(self.milestone_stats_provider, mtickets)
+            milestone_stats.append(milestone_stats_data(self.env, req, stat, milestone.name))
+        
+            stats = get_ticket_stats(self.version_stats_provider, tickets)
+            interval_hrefs = version_interval_hrefs(self.env, req, stats, [ milestone.name for milestone in milestones ])
+            data = {
+                'stats' : stats, 
+                'interval_hrefs' : interval_hrefs, 
+                'milestones' : milestones, 
+                'milestone_stats' : milestone_stats, 
+            } 
+            return data 
+    
     # Internal methods
 
     def _do_delete(self, req, db, version):
@@ -357,46 +394,20 @@
 
     def _render_view(self, req, db, version):
 
-        db = self.env.get_db_cnx()
-        sql = "SELECT name FROM milestone " \
-              "INNER JOIN milestone_version ON (name = milestone) " \
-              "WHERE version = %s " \
-              "ORDER BY due"
-        cursor = db.cursor()
-        cursor.execute(sql, (version.name,))
-
-        milestones = []
-        tickets = []
-        milestone_stats = []
-
-        for row in cursor:
-            milestone = Milestone(self.env, row[0])
-            milestones.append(milestone)
-
-            mtickets = get_tickets_for_milestone(self.env, db, milestone.name,
-                                                 'owner')
-            mtickets = apply_ticket_permissions(self.env, req, mtickets)
-            tickets += mtickets
-            stat = get_ticket_stats(self.milestone_stats_provider, mtickets)
-            milestone_stats.append(milestone_stats_data(self.env, req, stat, milestone.name))
-
-        stats = get_ticket_stats(self.version_stats_provider, tickets)
-        interval_hrefs = version_interval_hrefs(self.env, req, stats,
-                                                [milestone.name for milestone in milestones])
-
+        version_data = self.get_version_data(req, db, version)
         version.resource = Resource('version', version.name)
         context = Context.from_request(req, version.resource)
 
         version.is_released = version.time and version.time.date() < date.today()
-        version.stats = stats
-        version.interval_hrefs = interval_hrefs
+        version.stats = version_data['stats']
+        version.interval_hrefs = version_data['interval_hrefs']
         version.stats_href = [] # Not implemented yet, see th:#10349
         data = {
             'context': context,
             'version': version,
             'attachments': AttachmentModule(self.env).attachment_data(context),
-            'milestones': milestones,
-            'milestone_stats': milestone_stats,
+            'milestones': version_data['milestones'],
+            'milestone_stats': version_data['milestone_stats'],
             'show_milestone_description': self.show_milestone_description # Not implemented yet
         }
 
Index: extendedversion/templates/versions.html
===================================================================
--- extendedversion/templates/versions.html	(revision 13299)
+++ extendedversion/templates/versions.html	(working copy)
@@ -28,7 +28,7 @@
       <ul class="milestones">
         <li py:for="idx, version in enumerate(versions)" class="milestone">
 
-          <div class="info">
+          <div class="info trac-progress">
             <h2><a href="${href.version(version.name)}">
               Version: <em>${version.name}</em>
             </a></h2>
@@ -45,12 +45,39 @@
                 No date set
               </p>
             </py:choose>
+            <py:if test="show_tickets_in_overview and version_datasets[idx].stats.count">
+              <table><tr>
+                <td>
+                  Milestone tickets
+                </td>
+                <td>
+                  ${progress_bar(version_datasets[idx].stats, version_datasets[idx].interval_hrefs)}
+                </td>
+              </tr></table>
+            </py:if>
           </div>
 
           <div class="description" xml:space="preserve">
             ${wiki_to_html(context(resources[idx]), version.description)}
           </div>
 
+          <div py:if="show_milestones_in_overview and version_datasets[idx].milestones">
+            <h3>Milestones</h3>
+            <table class="milestones">
+              <py:for each="idx2, milestone in enumerate(version_datasets[idx].milestones)">
+                <tr class="milestone">
+                  <td class="info">
+                    <a href="${href.milestone(milestone.name)}">
+                      ${milestone.name}
+                    </a>
+                  </td>
+                  <td py:with="mstats = version_datasets[idx].milestone_stats[idx2]" class="info trac-progress">
+                    <py:if test="mstats.stats.count">${progress_bar(mstats.stats, mstats.interval_hrefs, legend=False, stats_href=mstats.stats_href)}</py:if>
+                  </td> 
+                </tr>  
+              </py:for> 
+            </table> 
+          </div>
         </li>
       </ul>
 
