Index: django/newforms/forms.py
===================================================================
--- django/newforms/forms.py	(revision 7568)
+++ django/newforms/forms.py	(working copy)
@@ -148,7 +148,7 @@
                     help_text = help_text_html % force_unicode(field.help_text)
                 else:
                     help_text = u''
-                output.append(normal_row % {'errors': force_unicode(bf_errors), 'label': force_unicode(label), 'field': unicode(bf), 'help_text': help_text})
+                output.append(normal_row % {'errors': force_unicode(bf_errors), 'label': force_unicode(label), 'field': unicode(bf), 'help_text': help_text, 'required': field.required and '<span class="required"> * </span>' or ''})
         if top_errors:
             output.insert(0, error_row % force_unicode(top_errors))
         if hidden_fields: # Insert any hidden fields in the last row.
@@ -166,15 +166,15 @@
 
     def as_table(self):
         "Returns this form rendered as HTML <tr>s -- excluding the <table></table>."
-        return self._html_output(u'<tr><th>%(label)s</th><td>%(errors)s%(field)s%(help_text)s</td></tr>', u'<tr><td colspan="2">%s</td></tr>', '</td></tr>', u'<br />%s', False)
+        return self._html_output(u'<tr><th>%(label)s</th><td>%(errors)s%(field)s%(help_text)s%(required)s</td></tr>', u'<tr><td colspan="2">%s</td></tr>', '</td></tr>', u'<br />%s', False)
 
     def as_ul(self):
         "Returns this form rendered as HTML <li>s -- excluding the <ul></ul>."
-        return self._html_output(u'<li>%(errors)s%(label)s %(field)s%(help_text)s</li>', u'<li>%s</li>', '</li>', u' %s', False)
+        return self._html_output(u'<li>%(errors)s%(label)s %(field)s%(help_text)s%(required)s</li>', u'<li>%s</li>', '</li>', u' %s', False)
 
     def as_p(self):
         "Returns this form rendered as HTML <p>s."
-        return self._html_output(u'<p>%(label)s %(field)s%(help_text)s</p>', u'%s', '</p>', u' %s', True)
+        return self._html_output(u'<p>%(label)s %(field)s%(help_text)s%(required)s</p>', u'%s', '</p>', u' %s', True)
 
     def non_field_errors(self):
         """
Index: django/contrib/admin/media/js/admin/RelatedObjectLookups.js
===================================================================
--- django/contrib/admin/media/js/admin/RelatedObjectLookups.js	(revision 7568)
+++ django/contrib/admin/media/js/admin/RelatedObjectLookups.js	(working copy)
@@ -75,3 +75,29 @@
     }
     win.close();
 }
+
+function showEditPopup(triggeringLink) {
+    var name = triggeringLink.id.replace(/^edit_/,'');
+    name = name.replace(/\./g,'___');
+    var elem = document.getElementById(name);
+    if (elem) {
+        if (elem.nodeName == 'SELECT') {
+            var id = elem.options[elem.selectedIndex].value
+            var win = window.open(triggeringLink.href + id + '?_popup=1',name, 'height=500,width=800,resizable=yes,scrollbars=yes');
+        }
+    }
+    return false;
+}
+
+function dismissEditPopup(win, newId, newRepr) {
+    var name = win.name.replace(/___/g, '.');
+    var elem = document.getElementById(name);
+    if(elem) {
+        if( elem.nodeName == 'SELECT') {
+            var o = new Option(newRepr, newId);
+            elem.options[elem.selectedIndex] = o;
+            o.selected = true;
+        }
+    }
+    win.close();
+}
Index: django/contrib/admin/templates/widget/one_to_one.html
===================================================================
--- django/contrib/admin/templates/widget/one_to_one.html	(revision 7568)
+++ django/contrib/admin/templates/widget/one_to_one.html	(working copy)
@@ -1,2 +1,4 @@
+{% load admin_modify adminmedia %}
 {% if add %}{% include "widget/foreign.html" %}{% endif %}
-{% if change %}{% if bound_field.existing_display %}&nbsp;<strong>{{ bound_field.existing_display|truncatewords:"14" }}</strong>{% endif %}{% endif %}
+{% if change %}
+{% if bound_field.existing_display %}&nbsp;<a href="{{ bound_field.related_url }}{{ bound_field.existing_display}}"><strong>{{ bound_field.existing_display|truncatewords:"14"|escape }}</strong></a>{% endif %}{% endif %}
Index: django/contrib/admin/templates/widget/foreign.html
===================================================================
--- django/contrib/admin/templates/widget/foreign.html	(revision 7568)
+++ django/contrib/admin/templates/widget/foreign.html	(working copy)
@@ -8,8 +8,11 @@
     {% endif %}
 {% else %}
 {% if bound_field.needs_add_label %}
-    <a href="{{ bound_field.related_url }}add/" class="add-another" id="add_{{ bound_field.element_id }}" onclick="return showAddAnotherPopup(this);"> <img src="{% admin_media_prefix %}img/admin/icon_addlink.gif" width="10" height="10" alt="Add Another"/></a>
-{% endif %}{% endif %}
+    <a href="{{ bound_field.related_url }}add/" class="add-another" id="add_{{ bound_field.element_id }}" onclick="return showAddAnotherPopup(this);"> <img src="{% admin_media_prefix %}img/admin/icon_addlink.gif" width="10" height="10" alt="Add Another"/></a> 
+    <a href="{{ bound_field.related_url }}" class="related-lookup" id="edit_{{ bound_field.element_id }}" onclick="return showEditPopup(this);"> <img src="{% admin_media_prefix %}img/admin/selector-search.gif" width="16" height="16" alt="Lookup"></a>
+ 
+{% endif %}
+{% endif %}
 {% if change %}
     {% if bound_field.field.primary_key %}
         {{ bound_field.original_value }}
