diff --git a/src/memberdb/register.py b/src/memberdb/register.py
index d48ed6f40a65bf1e66237dcc42eee4f0fdfa740f..e2f648d80c7b5aa7b3dd6cf25e22290497d6a536 100644
--- a/src/memberdb/register.py
+++ b/src/memberdb/register.py
@@ -28,7 +28,7 @@ class RegisterForm(MyModelForm):
     agree_tnc       = forms.BooleanField(label='I agree to the terms & conditions', required=True, help_text=mark_safe(
         "You agree to abide by the UCC Constitution, rulings of the UCC Committee, UCC and "
         "UWA’s Network Usage Guidelines and that you will be subscribed to the UCC Mailing List. <br>"
-        'Policies can be found <a href="https://www.ucc.asn.au/infobase/policies.ucc">here</a>.'))
+        '<b>Policies can be found <a href="https://www.ucc.asn.au/infobase/policies.ucc">here</a>.</b>'))
     membership_type = forms.ChoiceField(label='Select your membership type', required=True, choices=get_membership_choices(is_renew=False))
 
     class Meta:
@@ -36,7 +36,7 @@ class RegisterForm(MyModelForm):
         fields = ['first_name', 'last_name', 'username', 'phone_number', 'is_student', 'is_guild', 'id_number', 'email_address']
         error_messages = {
             'username': {
-                'unique': 'This username is already in use, please pick another one.',
+                'unique': 'This username is already taken, please pick another one.',
                 'invalid': 'Please pick a username with only lowercase letters and numbers'
             }
         }
@@ -97,8 +97,8 @@ class RegisterView(MyUpdateView):
         m, ms = form.save()
         messages.success(self.request, 'Your registration has been submitted.')
 
-        # set the member session info
-        self.request.session['member_id'] = m.id
+        # don't set the member session info - user can click on the link
+        #self.request.session['member_id'] = m.id
         return thanks_view(self.request, m, ms)
 
 def thanks_view(request, member, ms):
@@ -107,10 +107,10 @@ def thanks_view(request, member, ms):
         'member': member,
         'ms': ms,
         'login_url': reverse('memberdb:login_member', kwargs={'username': member.username, 'member_token': member.login_token}),
+        'payment_url': reverse('squarepay:pay_membership', kwargs={'pk': ms.id}),
     }
     return render(request, 'thanks.html', context)
 
-
 class RenewView(LoginRequiredMixin, MyUpdateView):
     template_name = 'renew.html'
     form_class = RenewForm
@@ -139,19 +139,3 @@ class RenewView(LoginRequiredMixin, MyUpdateView):
         m, ms = form.save()
         messages.success(self.request, 'Your membership renewal has been submitted.')
         return HttpResponseRedirect(reverse("memberdb:home"))
-
-def create_member_payment(membership, commit=True):
-    """ creates a MembershipPayment object for the given membership """
-    # get the amount from dispense
-    price = get_item_price(membership.membership_type)
-    if (price is None or price == 0):
-        return None
-    desc = MEMBERSHIP_TYPES[membership.membership_type]['desc']
-    payment = MembershipPayment(description=desc, amount=price, membership=membership)
-
-    if (commit):
-        payment.save()
-    return payment
-
-def thanks_page(request, membership):
-    pass
diff --git a/src/squarepay/dispense.py b/src/squarepay/dispense.py
index 42b623461e8f51c3f55658829475f4150628ca87..c0ffdfd932f8ae578e47d24de345cfd979f82d16 100644
--- a/src/squarepay/dispense.py
+++ b/src/squarepay/dispense.py
@@ -12,7 +12,7 @@ from .payments import log
 DISPENSE_BIN = getattr(settings, 'DISPENSE_BIN', None)
 
 if DISPENSE_BIN is None:
-    log.warning("DISPENSE_BIN is not defined! Lookups for prices will fail!")
+    log.warning("DISPENSE_BIN is not defined! Lookups for prices will fallback to weird numbers (for testing)!")
 
 def run_dispense(*args):
     if DISPENSE_BIN is None:
@@ -35,9 +35,12 @@ def get_item_price(itemid):
     """ gets the price of the given dispense item in cents """
     if (itemid is None or itemid == ""):
         return None
+    if DISPENSE_BIN is None:
+        return 2223
+
     out = run_dispense('iteminfo', itemid)
-    if (out is None):
-        return 123456
+    if out is None:
+        return None
     
     s = out.split() # get something like ['pseudo:7', '25.00', 'membership', '(non-student', 'and', 'non-guild)']
     if (s[0] != itemid):
@@ -45,4 +48,4 @@ def get_item_price(itemid):
         return None
     else:
         # return the price as a number of cents
-        return int(float(s[0]) * 100)
\ No newline at end of file
+        return int(float(s[0]) * 100)
diff --git a/src/squarepay/models.py b/src/squarepay/models.py
index 65e5ad1d200646558ea0922a4324322a479a8d4d..d972fa48024e6e1cff49922fdd350ca5ec724ab5 100644
--- a/src/squarepay/models.py
+++ b/src/squarepay/models.py
@@ -14,8 +14,18 @@ class CardPayment(models.Model):
     date_created    = models.DateTimeField('Date created', auto_now_add=True)
     date_paid       = models.DateTimeField('Date paid (payment captured)', null=True, blank=True)
 
+    def set_paid(self):
+        card_payment.is_paid = True
+        card_payment.date_paid = timezone.now()
+        card_payment.save()
+
 class MembershipPayment(CardPayment):
     """
     Link the payment to a specific membership
     """
     membership      = models.ForeignKey(Membership, on_delete=models.CASCADE, related_name='payments')
+
+    def set_paid(self):
+        self.membership.date_paid = timezone.now()
+        self.membership.payment_method = 'online'
+        super().set_paid()
diff --git a/src/squarepay/payments.py b/src/squarepay/payments.py
index f64b6d9b824d94f5de311d1e64595c2163ede11f..2b7bfcad7690151a92b62b43a13c0e7f587dee6b 100644
--- a/src/squarepay/payments.py
+++ b/src/squarepay/payments.py
@@ -49,14 +49,10 @@ def try_capture_payment(card_payment, nonce):
 
     try:
         api_response = api_inst.charge(loc_id, request_body)
-        set_paid(card_payment)
+        card_payment.set_paid()
         log.info("TransactionApi response without error, charge $%1.2f" % (float(card_payment.amount) / 100.0))
         return True
     except ApiException as e:
         log.error("Exception while calling TransactionApi::charge: %s" % e)
         return False
 
-def set_paid(card_payment):
-    card_payment.is_paid = True
-    card_payment.date_paid = timezone.now()
-    card_payment.save()