def RegisterDetails(request, returnurl=None):
    ''' Show form for User registration '''
    if not returnurl: returnurl = '/'
    bc = [{'title': 'Login', 'url': reverse('MyPidge.Users.views.Login', args=[returnurl])},
        {'title': 'Register'}]
        

    if request.session.get('loggedin'): return HttpResponseRedirect(returnurl)
    
    crsid = ""
    flags = {}
    initial = {}
    caminitial = {}
    person = None
    cammember = None
    
    if 'raven-crsid' in request.session:
        crsid = request.session['raven-crsid']
        initial['email'] = crsid + '@cam.ac.uk'
        
        # Do we already know anything about the user?
        try:
            cammember = CambridgeMember.objects.get(crsid = crsid)
            person = Person.objects.get(pk = cammember.pk)
            userinstance = User(**person.as_dict())
            
            # Member of a college? 
            usercolleges = person.groups.filter(category__small_name = 'COL')
            if usercolleges.count() == 1:
                caminitial['college'] = usercolleges[0].id
                
        except CambridgeMember.DoesNotExist:
            cammember = None

    formdata = None
    if request.method == "POST" and request.POST:
        formdata = request.POST

    # If person already exists, pass the Userform a User instance with person's details        
    if cammember:
        
        userform = RegisterForm(
            formdata,
            crsid = crsid,
            initial = initial,
            instance = userinstance)
        
        cambridgeform = CambridgeRegisterForm(
            formdata,
            crsid = crsid,
            initial = caminitial,
            instance = cammember)
    else:
        userform = RegisterForm(formdata, crsid = crsid, initial = initial)
        cambridgeform = CambridgeRegisterForm(formdata, crsid = crsid, initial = caminitial)

    if formdata:
        if userform.is_valid() and cambridgeform.is_valid():
            
            newuser, activate = userform.save()
            cambridgeform.pk = newuser.pk
            cambridgeform.save()
            # Do this after saving cambridgeform so they get a link to their college
            newuser.GiveDefaults()
            
            if activate:
                return HttpResponseRedirect(reverse('MyPidge.Users.views.RegisterEmailSent'))
            else:
                SendWelcomeEmail(newuser)
                return LoginUser(newuser, request, reverse('MyPidge.Users.views.ActivationSuccess'))

    if crsid:
        userform.base_fields['email'].help_text = "(required) If you leave this as your @cam.ac.uk address you will not need to confirm your email address. "
        userform.base_fields['password_one'].help_text = "(required) Please choose a password that you can use at MyPidge, in case there's a problem with logging in with Raven. It would be a good idea to choose a password that is not the same as your Raven password."
    
    return render_to_response('users-register-details', {'breadcrumb': bc, 'crsid': crsid, 'userform': userform.as_p(), 'cambridgeform': cambridgeform.as_p(), 'flags': flags})