diff --git a/src/memberdb/approve.py b/src/memberdb/approve.py
index 59fe2bc7e46c0d685cd2ecc30309b7474ebbc09f..50ca2ad2c826a13813cc091cfe2bff20c6fdd4b5 100644
--- a/src/memberdb/approve.py
+++ b/src/memberdb/approve.py
@@ -32,6 +32,7 @@ class MembershipApprovalForm(MyModelForm):
 
 		# override the model membership_type field so we display all the options with prices
 		self.fields['membership_type'].choices = get_membership_choices()
+		self.fields['payment_confirm'].initial = (self.instance.date_paid is not None)
 
 	def clean(self):
 		"""
@@ -50,9 +51,13 @@ class MembershipApprovalForm(MyModelForm):
 		data['date_approved'] = now
 
 		if (data['payment_confirm'] == True):
-			if (data['payment_method'] == ''):
-				self.add_error('payment_method', 'Please select a payment method')
-			data['date_paid'] = now
+			if data['payment_method'] == self.instance.payment_method and data['payment_confirm'] == (self.instance.date_paid is not None):
+				# check if the payment was already made, preserve the date_paid
+				data['date_paid'] = self.instance.date_paid
+			else:
+				if (data['payment_method'] == ''):
+					self.add_error('payment_method', 'Please select a payment method')
+				data['date_paid'] = now
 		else:
 			data['date_paid'] = None
 
diff --git a/src/memberdb/models.py b/src/memberdb/models.py
index f4bcea338a17f96b31e7bdc918a39d4d28bab5b5..b8cb469caed55544aa75c28e40c3fd0aad0aeffc 100644
--- a/src/memberdb/models.py
+++ b/src/memberdb/models.py
@@ -109,6 +109,7 @@ def make_pending_membership(member):
 
 	# otherwise update the existing membership and mark as pending
 	latest.approved = False
+	latest.date_approved = None
 	latest.date_submitted = timezone.now()
 
 	return latest