diff -ru mytrac/templates/timeline.cs mytrac-with-userfilter/templates/timeline.cs
--- mytrac/templates/timeline.cs	2005-08-15 18:28:55.000000000 +0300
+++ mytrac-with-userfilter/templates/timeline.cs	2007-03-17 18:56:17.000000000 +0200
@@ -1,4 +1,5 @@
 <?cs include "header.cs"?>
+<?cs include "macros.cs" ?>
 
 <div id="ctxtnav" class="nav"></div>
 
@@ -12,6 +13,14 @@
   <label><input type="text" size="3" name="daysback" value="<?cs
     var:timeline.daysback ?>" /> days back</label>.
  </div>
+ <?cs if:len(timeline.known_users) ?>
+ <div>
+
+  <label>View changes made by user: </label>
+         <?cs call:hdf_select(timeline.known_users, 'username', 0, 1) ?>
+ </div>
+ <?cs /if ?>
+
  <fieldset><?cs
   each:filter = timeline.filters ?>
    <label><input type="checkbox" name="<?cs var:filter.name ?>"<?cs
diff -ru mytrac/trac/Timeline.py mytrac-with-userfilter/trac/Timeline.py
--- mytrac/trac/Timeline.py	2006-10-02 18:54:42.000000000 +0200
+++ mytrac-with-userfilter/trac/Timeline.py	2007-03-17 18:57:02.000000000 +0200
@@ -89,22 +89,24 @@
     def match_request(self, req):
         return re.match(r'/timeline/?', req.path_info) is not None
 
-    def process_request(self, req):
-        req.perm.assert_permission('TIMELINE_VIEW')
+    def _add_known_users_to_request(self, req):
+        user_list = list(self.env.get_known_users())
 
-        format = req.args.get('format')
-        maxrows = int(req.args.get('max', 0))
+        # TODO: Add an empty user
+        for index, (username, name, email) in enumerate(user_list):
+           req.hdf["timeline.known_users.%d" % (index,)] = username
 
-        # Parse the from date and adjust the timestamp to the last second of
-        # the day
-        t = time.localtime()
+    def _parse_timeline_range(self, req):
+        current_time = time.localtime()
         if req.args.has_key('from'):
             try:
-                t = time.strptime(req.args.get('from'), '%x')
+                current_time = time.strptime(req.args.get('from'), '%x')
             except:
                 pass
 
-        fromdate = time.mktime((t[0], t[1], t[2], 23, 59, 59, t[6], t[7], t[8]))
+        fromdate = time.mktime((current_time[0], current_time[1],
+                                current_time[2], 23, 59, 59, current_time[6],
+                                current_time[7], current_time[8]))
         try:
             daysback = max(0, int(req.args.get('daysback', '')))
         except ValueError:
@@ -112,6 +114,10 @@
         req.hdf['timeline.from'] = format_date(fromdate)
         req.hdf['timeline.daysback'] = daysback
 
+        return daysback, fromdate
+
+
+    def _get_filters(self, req):
         available_filters = []
         for event_provider in self.event_providers:
             available_filters += event_provider.get_timeline_filters(req)
@@ -134,11 +140,15 @@
                     req.session[key] = '1'
                 elif req.session.has_key(key):
                     del req.session[key]
+                    
+        user_filter = req.args.get("username")
+        return filters, available_filters, user_filter
+ 
 
-        stop = fromdate
-        start = stop - (daysback + 1) * 86400
-
+    def _get_events(self, req, filters, available_filters, start, stop):
         events = []
+        maxrows = int(req.args.get('max', 0))
+
         for event_provider in self.event_providers:
             try:
                 events += event_provider.get_timeline_events(req, start, stop,
@@ -151,16 +161,21 @@
         if maxrows and len(events) > maxrows:
             del events[maxrows:]
 
-        req.hdf['title'] = 'Timeline'
+        return events
 
-        # Get the email addresses of all known users
+
+    def _populate_request_with_events(self, req, events, format, user_filter):
         email_map = {}
+
         for username, name, email in self.env.get_known_users():
             if email:
                 email_map[username] = email
 
-        idx = 0
-        for kind, href, title, date, author, message in events:
+        for index, (kind, href, title, date, author, message) in enumerate(events):
+            # Do not display the event if the user is not explicitly mentioned in the filter
+            if user_filter and author not in user_filter:
+                continue
+            
             event = {'kind': kind, 'title': title, 'href': href,
                      'author': author or 'anonymous',
                      'date': format_date(date),
@@ -183,9 +198,38 @@
                         event['author.email'] = email_map[author]
                 event['date'] = http_date(date)
 
-            req.hdf['timeline.events.%s' % idx] = event
-            idx += 1
+            req.hdf['timeline.events.%s' % index] = event
+            index += 1
 
+    def _populate_request_with_filters(self, req, filters, available_filters):
+        for index, (enabled, label) in enumerate(available_filters):
+            req.hdf['timeline.filters.%d' % index] = {'name': label,
+                'label': label, 'enabled': int(enabled in filters)}
+
+    def process_request(self, req):
+        req.perm.assert_permission('TIMELINE_VIEW')
+
+        format = req.args.get('format')
+
+        filters, available_filters, user_filter = self._get_filters(req)
+        print user_filter, "FUCK FUCK"
+        self._add_known_users_to_request(req)
+        self._populate_request_with_filters(req, filters, available_filters)
+
+        # Parse the from date and adjust the timestamp to the last second of
+        # the day
+
+ 
+        daysback, fromdate = self._parse_timeline_range(req)
+        stop = fromdate
+        start = stop - (daysback + 1) * (60 * 60 * 24)
+        events = self._get_events(req, filters, available_filters, start, stop,)
+        self._populate_request_with_events(req, events, format, user_filter)
+        
+        req.hdf['title'] = 'Timeline'
+
+        # Get the email addresses of all known users
+        # TODO: Agh
         if format == 'rss':
             return 'timeline_rss.cs', 'application/rss+xml'
 
@@ -194,10 +238,6 @@
                                      daysback=90, max=50, format='rss')
         add_link(req, 'alternate', rss_href, 'RSS Feed', 'application/rss+xml',
                  'rss')
-        for idx,fltr in enumerate(available_filters):
-            req.hdf['timeline.filters.%d' % idx] = {'name': fltr[0],
-                'label': fltr[1], 'enabled': int(fltr[0] in filters)}
-
         return 'timeline.cs', None
 
     def _provider_failure(self, exc, req, ep, current_filters, all_filters):

