diff --git a/ietf/wgchairs/forms.py b/ietf/wgchairs/forms.py
index 9373a0873..819deefd1 100644
--- a/ietf/wgchairs/forms.py
+++ b/ietf/wgchairs/forms.py
@@ -12,9 +12,11 @@ from ietf.ietfworkflows.utils import (get_default_workflow_for_wg, get_workflow_
                                       update_tags, FOLLOWUP_TAG, get_state_by_name)
 from ietf.ietfworkflows.models import AnnotationTag, State
 from ietf.idtracker.models import PersonOrOrgInfo
+from ietf.utils.mail import send_mail_text
 
 from workflows.models import Transition
 
+from redesign.person.models import Person    
 
 class RelatedWGForm(forms.Form):
 
@@ -191,26 +193,30 @@ class AddDelegateForm(RelatedWGForm):
     def get_next_form(self):
         return self.next_form
 
-    def get_person(self, email):
-        persons = PersonOrOrgInfo.objects.filter(emailaddress__address=email).distinct()
-        if not persons:
-            raise PersonOrOrgInfo.DoesNotExist
-        if len(persons) > 1:
-            raise PersonOrOrgInfo.MultipleObjectsReturned
-        return persons[0]
-
     def save(self):
         email = self.cleaned_data.get('email')
-        try:
-            person = self.get_person(email)
-        except PersonOrOrgInfo.DoesNotExist:
-            self.next_form = NotExistDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
-            self.next_form.set_message('doesnotexist', 'There is no user with this email allowed to login to the system')
-            return
-        except PersonOrOrgInfo.MultipleObjectsReturned:
-            self.next_form = MultipleDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
-            self.next_form.set_message('multiple', 'There are multiple users with this email in the system')
-            return
+        if settings.USE_DB_REDESIGN_PROXY_CLASSES:
+            try:
+                person = Person.objects.filter(email__address=email).distinct().get()
+            except Person.DoesNotExist:
+                self.next_form = NotExistDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
+                self.next_form.set_message('doesnotexist', 'There is no user with this email allowed to login to the system')
+                return
+            except Person.MultipleObjectsReturned:
+                self.next_form = MultipleDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
+                self.next_form.set_message('multiple', 'There are multiple users with this email in the system')
+                return
+        else:
+            try:
+                person = PersonOrOrgInfo.objects.filter(emailaddress__address=email).distinct().get()
+            except PersonOrOrgInfo.DoesNotExist:
+                self.next_form = NotExistDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
+                self.next_form.set_message('doesnotexist', 'There is no user with this email allowed to login to the system')
+                return
+            except PersonOrOrgInfo.MultipleObjectsReturned:
+                self.next_form = MultipleDelegateForm(wg=self.wg, user=self.user, email=email, shepherd=self.shepherd)
+                self.next_form.set_message('multiple', 'There are multiple users with this email in the system')
+                return
         if self.shepherd:
             self.assign_shepherd(person)
         else:
@@ -282,12 +288,15 @@ class NotExistDelegateForm(MultipleDelegateForm):
         info = render_to_string('wgchairs/notexistdelegate.html', {'email_list': email_list, 'shepherd': self.shepherd})
         return info + super(NotExistDelegateForm, self).as_p()
 
-    def send_email(self, email, template):
+    def send_email(self, to_email, template):
         if self.shepherd:
             subject = 'WG shepherd needs system credentials'
         else:
             subject = 'WG Delegate needs system credentials'
-        persons = PersonOrOrgInfo.objects.filter(emailaddress__address=self.email).distinct()
+        if settings.USE_DB_REDESIGN_PROXY_CLASSES:
+            persons = Person.objects.filter(email__address=self.email).distinct()
+        else:
+            persons = PersonOrOrgInfo.objects.filter(emailaddress__address=self.email).distinct()
         body = render_to_string(template,
                                 {'chair': get_person_for_user(self.user),
                                  'delegate_email': self.email,
@@ -295,20 +304,8 @@ class NotExistDelegateForm(MultipleDelegateForm):
                                  'delegate_persons': persons,
                                  'wg': self.wg,
                                 })
-        mail = EmailMessage(subject=subject,
-                            body=body,
-                            to=email,
-                            from_email=settings.DEFAULT_FROM_EMAIL)
-        mail.send()
 
-    def send_email_to_delegate(self, email):
-        self.send_email(email, 'wgchairs/notexistsdelegate_delegate_email.txt')
-
-    def send_email_to_secretariat(self, email):
-        self.send_email(email, 'wgchairs/notexistsdelegate_secretariat_email.txt')
-
-    def send_email_to_wgchairs(self, email):
-        self.send_email(email, 'wgchairs/notexistsdelegate_wgchairs_email.txt')
+        send_mail_text(None, to_email, settings.DEFAULT_FROM_EMAIL, subject, body)
 
     def save(self):
         self.next_form = AddDelegateForm(wg=self.wg, user=self.user)
@@ -316,9 +313,13 @@ class NotExistDelegateForm(MultipleDelegateForm):
             self.next_form.set_message('warning', 'Email was not sent cause tool is in DEBUG mode')
         else:
             email_list = self.get_email_list()
-            self.send_email_to_delegate([email_list[0]])
-            self.send_email_to_secretariat([email_list[1]])
-            self.send_email_to_wgchairs(email_list[2:])
+            # this is ugly...
+            delegate = email_list[0]
+            secretariat = email_list[1]
+            wgchairs = email_list[2:]
+            self.send_email(delegate, 'wgchairs/notexistsdelegate_delegate_email.txt')
+            self.send_email(secretariat, 'wgchairs/notexistsdelegate_secretariat_email.txt')
+            self.send_email(wgchairs, 'wgchairs/notexistsdelegate_wgchairs_email.txt')
             self.next_form.set_message('success', 'Email sent successfully')
 
 
diff --git a/ietf/wgchairs/tests.py b/ietf/wgchairs/tests.py
index 9f61eb9ef..bc5aba079 100644
--- a/ietf/wgchairs/tests.py
+++ b/ietf/wgchairs/tests.py
@@ -42,8 +42,35 @@ class ManageDelegatesTestCase(django.test.TestCase):
         self.assertEquals(len(q('form input[name=delete]')), 0)
         self.assertEquals(Role.objects.filter(name="delegate", group__acronym="mars").count(), 0)
         
-        
-        
+    def test_add_not_existing_delegate(self):
+        make_test_data()
+
+        url = urlreverse('manage_delegates', kwargs=dict(acronym="mars"))
+        login_testing_unauthorized(self, "secretary", url)
+
+        # get
+        r = self.client.get(url)
+        self.assertEquals(r.status_code, 200)
+        q = PyQuery(r.content)
+        self.assertEquals(len(q('form input[name=email]')), 1)
+
+        # add non-existing
+        r = self.client.post(url,
+                             dict(email="unknown@example.com",
+                                  form_type="single"))
+        self.assertEquals(r.status_code, 200)
+        self.assertTrue("unknown@example.com" in r.content)
+        q = PyQuery(r.content)
+        self.assertEquals(len(q('form input[type=submit][value*="Send email"]')), 1)
+
+        # we get back a warning and offer to send email, do that
+        mailbox_before = len(mail_outbox)
+        r = self.client.post(url,
+                             dict(email="unknown@example.com",
+                                  form_type="notexist"))
+        self.assertEquals(r.status_code, 200)
+        self.assertTrue("Email sent" in r.content)
+        self.assertEquals(len(mail_outbox), mailbox_before + 3)
         
         
 if not settings.USE_DB_REDESIGN_PROXY_CLASSES:
diff --git a/redesign/group/proxy.py b/redesign/group/proxy.py
index 4f992538c..c746a2b7e 100644
--- a/redesign/group/proxy.py
+++ b/redesign/group/proxy.py
@@ -1,4 +1,4 @@
-from redesign.proxy_utils import TranslatingManager
+from redesign.proxy_utils import TranslatingManager, proxy_role_email
 
 from models import *
 
@@ -87,7 +87,7 @@ class Area(Group):
 
 def proxied_role_emails(emails):
     for e in emails:
-        e.person.email = { 1: e }
+        proxy_role_email(e)
     return emails
 
 class IETFWG(Group):
@@ -203,11 +203,12 @@ class IETFWG(Group):
         return self.groupurl_set.all().order_by("name")
     def clean_email_archive(self):
         return self.list_archive
+    @property
     def wgchair_set(self):
         # gross hack ...
         class Dummy: pass
         d = Dummy()
-        d.all = self.chairs()
+        d.all = self.chairs
         return d
     @property
     def wgdelegate_set(self):