Index: templates/header.cs
===================================================================
--- templates/header.cs	(revision 1049)
+++ templates/header.cs	(working copy)
@@ -39,7 +39,7 @@
 <form id="search" action="<?cs var:trac.href.search ?>" method="get">
  <?cs if:trac.acl.SEARCH_VIEW ?><div>
   <label for="proj-search">Search:</label>
-  <input type="text" id="proj-search" name="q" size="10" value="" />
+  <input type="text" id="proj-search" name="q" size="25" value="" />
   <input type="submit" value="Search" />
   <input type="hidden" name="wiki" value="on" />
   <input type="hidden" name="changeset" value="on" />
Index: templates/newticket.cs
===================================================================
--- templates/newticket.cs	(revision 1049)
+++ templates/newticket.cs	(working copy)
@@ -59,8 +59,7 @@
    <label for="milestone">Milestone:</label><?cs
    call:hdf_select(newticket.milestones, "milestone", newticket.milestone) ?><br />
    <label for="owner">Assign to:</label>
-   <input type="text" id="owner" name="owner" size="20" value="<?cs
-     var:newticket.owner ?>" /><br />
+   <?cs call:hdf_select(newticket.owners, "owner", newticket.owner) ?><br />
    <label for="cc">Cc:</label>
    <input type="text" id="cc" name="cc" size="30" value="<?cs var:newticket.cc ?>" />
   </div>
Index: templates/ticket.cs
===================================================================
--- templates/ticket.cs	(revision 1049)
+++ templates/ticket.cs	(working copy)
@@ -235,9 +235,7 @@
    <?cs call:action_radio('reassign') ?>
    <label for="reassign">reassign</label>
    <label for="reassign_owner">to:</label>
-   <input type="text" id="reassign_owner" name="reassign_owner" size="40" value="<?cs
-     if:args.reassign_to ?><?cs var:args.reassign_to ?><?cs
-     else ?><?cs var:trac.authname ?><?cs /if ?>" /><?cs
+   <?cs call:hdf_select(ticket.owners, "reassign_owner", args.reassign_to) ?><?cs
   /if ?><?cs
   if $ticket.status == "new" || $ticket.status == "assigned" || $ticket.status == "reopened" ?>
    <script type="text/javascript">
Index: trac/Ticket.py
===================================================================
--- trac/Ticket.py	(revision 1049)
+++ trac/Ticket.py	(working copy)
@@ -19,6 +19,7 @@
 #
 # Author: Jonas Borgström <jonas@edgewall.com>
 
+import os
 import re
 import time
 import string
@@ -263,8 +264,43 @@
             hdf.setValue('%s.height' % pfx, f['height'])
         i += 1
 
+class TicketModuleBase(Module):
+    """
+    Contains common members for Ticket and NewTicket
+    """
+    def _add_users_to_hdf(self, key):
+        """
+        Adds list of configured users to hdf. The list of users is taken from apache password file,
+        if one is configured using environment value 'TRAC_PWDFILE' in httpd.conf.
+        Otherwise the list of users is retrieved from the 'permission' table.
+        Anonymous user is excluded. Empty user is added.
+        """
+        passwordfile = os.getenv( 'TRAC_PWDFILE' )
+        if passwordfile:
+            pwdfile = None
+            # Get list of users from the configured apache password file
+            try:
+                pwdfile = open( passwordfile, 'r' )
+                for line in pwdfile:
+                    pos = string.find(line, ':')
+                    if ( pos == -1 ):
+                        self.log.warn( 'corrupted passwordfile or unknown file format' )
+                    else:
+                        util.hdf_add_if_missing(self.req.hdf, key, line[:pos])
+            finally:
+                if pwdfile:
+                    pwdfile.close()
+        else:
+            # Get list of users from trac 'permission' table
+            util.sql_to_hdf(self.db, 'SELECT distinct username FROM permission WHERE username NOT IN '
+                        '(SELECT DISTINCT action FROM permission) AND username <> \'anonymous\' ORDER BY username',
+                        self.req.hdf, key)
 
-class NewticketModule(Module):
+        util.hdf_add_if_missing(self.req.hdf, key, '')
+        util.hdf_sort(self.req.hdf, key)
+
+
+class NewticketModule(TicketModuleBase):
     template_name = 'newticket.cs'
 
     def create_ticket(self):
@@ -327,11 +363,11 @@
                         self.req.hdf, 'newticket.milestones')
         util.sql_to_hdf(self.db, 'SELECT name FROM version ORDER BY name',
                         self.req.hdf, 'newticket.versions')
-
         insert_custom_fields(self.env, self.req.hdf, ticket)
+        self._add_users_to_hdf( 'newticket.owners' )
 
 
-class TicketModule (Module):
+class TicketModule (TicketModuleBase):
     template_name = 'ticket.cs'
 
     def save_changes (self, id):
@@ -390,6 +426,7 @@
         util.sql_to_hdf(self.db, "SELECT name FROM enum WHERE type='resolution'"
                                  " ORDER BY value",
                         self.req.hdf, 'enums.resolution')
+        self._add_users_to_hdf( 'ticket.owners' )
         util.hdf_add_if_missing(self.req.hdf, 'ticket.components', ticket['component'])
         util.hdf_add_if_missing(self.req.hdf, 'ticket.milestones', ticket['milestone'])
         util.hdf_add_if_missing(self.req.hdf, 'ticket.versions', ticket['version'])
Index: trac/util.py
===================================================================
--- trac/util.py	(revision 1049)
+++ trac/util.py	(working copy)
@@ -173,6 +173,22 @@
         hdf.setValue('%s.%d.name' % (prefix, idx), row[0])
         idx = idx + 1
 
+def hdf_sort (hdf, prefix):
+    """
+    sorts all the values found in hdf for given prefix
+    """
+    node = hdf.getObj(prefix + '.0')
+    values = []
+    while node:
+        child = node.child()
+        if child:
+          values.append( child.value() )
+        node = node.next()
+
+    values.sort()
+    for i in range(len(values)):
+        add_to_hdf(values[i], hdf, '%s.%d.name' % (prefix, i))
+
 def hdf_add_if_missing(hdf, prefix, value):
     """Loop through the hdf values and add @value if id doesn't exist"""
     node = hdf.getObj(prefix + '.0')

