diff --git a/.gitignore b/.gitignore
index 674deb69e..fbd9b09c5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,3 +15,6 @@
 .*.swp
 .DS_store
 # Simulated Subversion default ignores end here
+/.project
+/.pydevproject
+/.settings
diff --git a/ietf/.gitignore b/ietf/.gitignore
index c7013ced9..2cc1317c1 100644
--- a/ietf/.gitignore
+++ b/ietf/.gitignore
@@ -1,2 +1,3 @@
 /*.pyc
 /settings_local.py
+/ietfdb.sql.gz
diff --git a/ietf/idrfc/forms.py b/ietf/idrfc/forms.py
new file mode 100644
index 000000000..eae1fc611
--- /dev/null
+++ b/ietf/idrfc/forms.py
@@ -0,0 +1,68 @@
+from django.conf import settings
+from django import forms
+from idtracker.models import PersonOrOrgInfo
+from django.db.models import Q
+from django.template.loader import render_to_string
+from django.core.mail import EmailMessage
+
+
+class ManagingShepherdForm(forms.Form):
+    email = forms.EmailField(required=False)
+    is_assign_current = forms.BooleanField(required=False)
+    
+    
+    def __init__(self, *args, **kwargs):
+        if kwargs.has_key('current_person'):
+            self.current_person = kwargs.pop('current_person')            
+        return super(ManagingShepherdForm, self).__init__(*args, **kwargs)
+    
+    def clean_email(self):
+        email = self.cleaned_data.get('email')
+        if not email:
+            return None
+        
+        try:
+            PersonOrOrgInfo.objects. \
+                  filter(emailaddress__type__in=[ "INET", "Prim",], 
+                        emailaddress__address=email) \
+                        [:1].get()
+        except PersonOrOrgInfo.DoesNotExist:
+            if self.cleaned_data.get('is_assign_current'):
+                self._send_email(email)
+            raise forms.ValidationError("Person with such email does not exist")
+        return email
+    
+    def clean(self):
+        print self.cleaned_data.get('email') and self.cleaned_data.get('is_assign_current')
+        if self.cleaned_data.get('email') and \
+                                    self.cleaned_data.get('is_assign_current'):
+            raise forms.ValidationError("You should choose to assign to current \
+                        person or input the email. Not both at te same time. ")
+        
+        return self.cleaned_data
+    
+    def change_shepherd(self, document, save=True):
+        email = self.cleaned_data.get('email')        
+        if email:
+            person = PersonOrOrgInfo.objects. \
+                  filter(emailaddress__type__in=[ "INET", "Prim",], 
+                        emailaddress__address=email) \
+                        [:1].get()
+        else:
+            person = self.current_person        
+        document.shepherd = person 
+        if save: 
+            document.save()
+        return document
+    
+    def _send_email(self, email, 
+                        template='idrfc/edit_management_shepherd_email.txt'):
+        subject = 'WG Delegate needs system credentials'        
+        body = render_to_string(template,
+                                {'email': email,
+                                })
+        mail = EmailMessage(subject=subject,
+                            body=body,
+                            to=[email, settings.DEFAULT_FROM_EMAIL, ],
+                            from_email=settings.DEFAULT_FROM_EMAIL)
+        mail.send()
\ No newline at end of file
diff --git a/ietf/idrfc/urls.py b/ietf/idrfc/urls.py
index 88bf31d16..128d6793c 100644
--- a/ietf/idrfc/urls.py
+++ b/ietf/idrfc/urls.py
@@ -51,6 +51,8 @@ urlpatterns = patterns('',
     url(r'^(?P<name>[^/]+)/edit/requestresurrect/$', views_edit.request_resurrect, name='doc_request_resurrect'),
     url(r'^(?P<name>[^/]+)/edit/resurrect/$', views_edit.resurrect, name='doc_resurrect'),                       
     url(r'^(?P<name>[^/]+)/edit/addcomment/$', views_edit.add_comment, name='doc_add_comment'),
+    url(r'^(?P<name>[^/]+)/edit/managing-shepherd/$', views_edit.managing_shepherd, name='doc_managing_shepherd'),
+    
     url(r'^(?P<name>[^/]+)/edit/position/$', views_ballot.edit_position, name='doc_edit_position'),
     url(r'^(?P<name>[^/]+)/edit/deferballot/$', views_ballot.defer_ballot, name='doc_defer_ballot'),
     url(r'^(?P<name>[^/]+)/edit/undeferballot/$', views_ballot.undefer_ballot, name='doc_undefer_ballot'),
diff --git a/ietf/idrfc/views_edit.py b/ietf/idrfc/views_edit.py
index bc39d3302..63b688b91 100644
--- a/ietf/idrfc/views_edit.py
+++ b/ietf/idrfc/views_edit.py
@@ -20,6 +20,7 @@ from ietf.idtracker.models import *
 from ietf.iesg.models import *
 from ietf.idrfc.mails import *
 from ietf.idrfc.utils import *
+from idrfc.forms import ManagingShepherdForm
 
     
 class ChangeStateForm(forms.Form):
@@ -31,6 +32,8 @@ def change_state(request, name):
     """Change state of Internet Draft, notifying parties as necessary
     and logging the change as a comment."""
     doc = get_object_or_404(InternetDraft, filename=name)
+    print doc.idinternal
+    print doc.status.status
     if not doc.idinternal or doc.status.status == "Expired":
         raise Http404()
 
@@ -381,4 +384,21 @@ def add_comment(request, name):
                                    form=form),
                               context_instance=RequestContext(request))
 
-
+def managing_shepherd(request, name):
+    """
+     View for managing the assigned shepherd of a document.
+    """
+    doc = get_object_or_404(InternetDraft, filename=name)
+    login = IESGLogin.objects.get(login_name=request.user.username)
+    form = ManagingShepherdForm()    
+    if request.method == "POST":
+        form = ManagingShepherdForm(request.POST, current_person=login.person)
+        if form.is_valid():
+            form.change_shepherd(doc)
+    
+    return render_to_response('idrfc/edit_management_shepherd.html',
+                              dict(doc=doc,
+                                   form=form,
+                                   user=request.user,
+                                   login=login),
+                              context_instance=RequestContext(request))
\ No newline at end of file
diff --git a/ietf/idrfc/views_search.py b/ietf/idrfc/views_search.py
index 32c4dd1a8..eee1a792e 100644
--- a/ietf/idrfc/views_search.py
+++ b/ietf/idrfc/views_search.py
@@ -85,6 +85,9 @@ class SearchForm(forms.Form):
         return q
                                                                         
 def search_query(query_original):
+    """
+    @FIXME: This method should be re-factored !
+    """
     query = dict(query_original.items())
     drafts = query['activeDrafts'] or query['oldDrafts']
     if (not drafts) and (not query['rfcs']):
@@ -135,6 +138,7 @@ def search_query(query_original):
         matches = IDInternal.objects.filter(*q_objs)
     else:
         matches = InternetDraft.objects.filter(*q_objs)
+        print q_objs
     if not query['activeDrafts']:
         matches = matches.exclude(Q(**{prefix+"status":1}))
     if not query['rfcs']:
@@ -184,6 +188,7 @@ def search_query(query_original):
             numbers = IDInternal.objects.filter(*numbers_q).values_list('draft_id',flat=True)
             q_objs.append(Q(rfc_number__in=numbers))
 
+        
         if searchRfcIndex:
             matches = RfcIndex.objects.filter(*q_objs)[:MAX]
         else:
@@ -205,6 +210,7 @@ def search_query(query_original):
                 else:
                     rfcresults.append([rfc.rfc_number, None, rfc, None])
                     
+    
     # Find missing InternetDraft objects
     for r in rfcresults:
         if not r[1]:
@@ -229,7 +235,7 @@ def search_query(query_original):
 
     # TODO: require that RfcIndex is present?
 
-    results = []
+    results = []    
     for res in idresults+rfcresults:
         if len(res)==1:
             doc = IdRfcWrapper(IdWrapper(res[0]), None)
diff --git a/ietf/idtracker/admin.py b/ietf/idtracker/admin.py
index 43f9abdb6..95a6cc1eb 100644
--- a/ietf/idtracker/admin.py
+++ b/ietf/idtracker/admin.py
@@ -101,7 +101,7 @@ class InternetDraftAdmin(admin.ModelAdmin):
     search_fields=['filename', 'title']
     list_filter=['status']
     raw_id_fields=['replaced_by']
-admin.site.register(InternetDraft, InternetDraftAdmin)
+admin.site.register(InternetDraft)
 
 class PersonOrOrgInfoAdmin(admin.ModelAdmin):
     fieldsets=((None, {'fields': (('first_name', 'middle_initial', 'last_name'), ('name_suffix', 'modified_by'))}), ('Obsolete Info', {'fields': ('record_type', 'created_by', 'address_type'), 'classes': 'collapse'}))
diff --git a/ietf/idtracker/forms.py b/ietf/idtracker/forms.py
new file mode 100644
index 000000000..a5f511d11
--- /dev/null
+++ b/ietf/idtracker/forms.py
@@ -0,0 +1,67 @@
+from django.conf import settings
+from django import forms
+from idtracker.models import PersonOrOrgInfo
+from django.db.models import Q
+from django.template.loader import render_to_string
+from django.core.mail import EmailMessage
+
+
+class ManagingShepherdForm(forms.Form):
+    email = forms.EmailField(required=False)
+    is_assign_current = forms.BooleanField(required=False)
+    
+    
+    def __init__(self, *args, **kwargs):
+        if kwargs.has_key('current_person'):
+            self.current_person = kwargs.pop('current_person')            
+        return super(ManagingShepherdForm, self).__init__(*args, **kwargs)
+    
+    def clean_email(self):
+        email = self.cleaned_data.get('email')
+        if not email:
+            return None
+        
+        try:
+            PersonOrOrgInfo.objects. \
+                  filter(emailaddress__type__in=[ "INET", "Prim",], 
+                        emailaddress__address=email) \
+                        [:1].get()
+        except PersonOrOrgInfo.DoesNotExist:
+            if self.cleaned_data.get('is_assign_current'):
+                self._send_email(email)
+            raise forms.ValidationError("Person with such email does not exist")
+        return email
+    
+    def clean(self):
+        if self.cleaned_data.get('email') and \
+                                    self.cleaned_data.get('is_assign_current'):
+            raise forms.ValidationError("You should choose to assign to current \
+                        person or input the email. Not both at te same time. ")
+        
+        return self.cleaned_data
+    
+    def change_shepherd(self, document, save=True):
+        email = self.cleaned_data.get('email')        
+        if email:
+            person = PersonOrOrgInfo.objects. \
+                  filter(emailaddress__type__in=[ "INET", "Prim",], 
+                        emailaddress__address=email) \
+                        [:1].get()
+        else:
+            person = self.current_person        
+        document.shepherd = person 
+        if save: 
+            document.save()
+        return document
+    
+    def _send_email(self, email, 
+                        template='idrfc/edit_management_shepherd_email.txt'):
+        subject = 'WG Delegate needs system credentials'        
+        body = render_to_string(template,
+                                {'email': email,
+                                })
+        mail = EmailMessage(subject=subject,
+                            body=body,
+                            to=[email, settings.DEFAULT_FROM_EMAIL, ],
+                            from_email=settings.DEFAULT_FROM_EMAIL)
+        mail.send()
\ No newline at end of file
diff --git a/ietf/idtracker/models.py b/ietf/idtracker/models.py
index c1492ea56..d5e4673f3 100644
--- a/ietf/idtracker/models.py
+++ b/ietf/idtracker/models.py
@@ -263,7 +263,7 @@ class PersonOrOrgInfo(models.Model):
 	    return u"(Person #%s)" % self.person_or_org_tag
         return u"%s %s" % ( self.first_name or u"<nofirst>", self.last_name or u"<nolast>")
     def email(self, priority=1, type=None):
-	name = str(self)
+        name = str(self)
         email = ''
         types = type and [ type ] or [ "INET", "Prim", None ]
         for type in types:
diff --git a/ietf/templates/idrfc/edit_management_shepherd.html b/ietf/templates/idrfc/edit_management_shepherd.html
new file mode 100644
index 000000000..8b8007b52
--- /dev/null
+++ b/ietf/templates/idrfc/edit_management_shepherd.html
@@ -0,0 +1,50 @@
+{% extends "base.html" %}
+
+{% block title %}Edit info on {{ doc }}{% endblock %}
+
+{% block morecss %}
+form.edit-info #id_state_change_notice_to {
+  width: 600px;
+}
+form.edit-info #id_note {
+  width: 600px;
+  height: 150px;
+}
+form.edit-info .actions {
+  padding-top: 20px;
+}
+{% endblock %}
+
+{% block content %}
+{% load ietf_filters %}
+<h1>Edit info on {{ doc }}</h1>
+
+Shepherd: {{ doc.shepherd }} 
+
+{{ form.non_field_errors }}
+<form class="edit-info" action="" method="POST">
+  <table>    
+    {% for field in form %}
+    <tr>
+      <th>{{ field.label_tag }}:</th>
+      <td>{{ field }}
+      {% ifequal field.name "telechat_date" %}{{ form.returning_item }} {{ form.returning_item.label_tag }} {{ form.returning_item.errors }}{% endifequal %}
+      {% ifequal field.name "job_owner" %}
+      {% if user|in_group:"Area_Director" %}
+      <label><input type="checkbox" name="job_owner" value="{{ login.id }}" /> Assign to me</label>
+      {% endif %}
+      {% endifequal %}      
+      {% if field.help_text %}<div class="help">{{ field.help_text }}</div>{% endif %}
+      {{ field.errors }}</td>
+    </tr>
+    {% endfor %}
+    <tr>
+      <td></td>
+      <td class="actions">
+        <a href="{{ doc.idinternal.get_absolute_url }}">Back</a>
+        <input type="submit" value="Save"/>
+      </td>
+    </tr>
+  </table>
+</form>
+{% endblock %}
diff --git a/ietf/templates/idrfc/edit_management_shepherd_email.txt b/ietf/templates/idrfc/edit_management_shepherd_email.txt
new file mode 100644
index 000000000..09d7215c1
--- /dev/null
+++ b/ietf/templates/idrfc/edit_management_shepherd_email.txt
@@ -0,0 +1 @@
+Designated person with email {{ email }} should get a user/password.
\ No newline at end of file