diff --git a/xos/core/xoslib/methods/vpnview.py b/xos/core/xoslib/methods/vpnview.py
index 0a9612f..e0fbea0 100644
--- a/xos/core/xoslib/methods/vpnview.py
+++ b/xos/core/xoslib/methods/vpnview.py
@@ -21,32 +21,14 @@
 
 class VPNTenantSerializer(serializers.ModelSerializer, PlusSerializerMixin):
         id = ReadOnlyField()
-        service_specific_attribute = ReadOnlyField()
         server_network = ReadOnlyField()
         vpn_subnet = ReadOnlyField()
-        is_persistent = ReadOnlyField()
-        clients_can_see_each_other = ReadOnlyField()
-        ca_crt = ReadOnlyField()
-        port_number = ReadOnlyField()
-        protocol = ReadOnlyField()
-        failover_servers = ReadOnlyField()
-        creator = ReadOnlyField()
-        instance = ReadOnlyField()
-        use_ca_from = ReadOnlyField()
-        provider_service = serializers.PrimaryKeyRelatedField(
-            queryset=VPNService.get_service_objects().all(),
-            default=get_default_vpn_service)
-        script_text = serializers.SerializerMethodField(
-                "get_script_text")
+        script_text = serializers.SerializerMethodField()
 
         class Meta:
             model = VPNTenant
-            fields = ('id', 'provider_service', 'use_ca_from',
-                      'service_specific_attribute', 'vpn_subnet',
-                      'server_network', 'creator', 'instance', 'protocol',
-                      'is_persistent',
-                      'clients_can_see_each_other', 'ca_crt', 'port_number',
-                      'script_text', 'failover_servers')
+            fields = ('id', 'service_specific_attribute', 'vpn_subnet',
+                      'server_network', 'script_text')
 
         def get_script_text(self, obj):
             return obj.create_client_script(
diff --git a/xos/services/vpn/admin.py b/xos/services/vpn/admin.py
index f6b31f9..9c76f5d 100644
--- a/xos/services/vpn/admin.py
+++ b/xos/services/vpn/admin.py
@@ -260,10 +260,23 @@
             # certificate
             if type(obj) is TenantPrivilege:
                 certificate = self.certificate_name(obj)
-                VPNService.execute_easyrsa_command(
-                    obj.tenant.pki_dir, "revoke " + certificate)
-                obj.tenant.enacted = None
-                obj.tenant.save()
+                # If the client has already been reovked don't do it again
+                if (os.path.isfile(obj.tenant.pki_dir +
+                    "/issued/" + certificate + ".crt")):
+                    VPNService.execute_easyrsa_command(
+                        obj.tenant.pki_dir, "revoke " + certificate)
+                    # Revoking a client cert does not delete any of the files
+                    # to make sure that we can add this user again we need to
+                    # delete all of the files created by easyrsa
+                    os.remove(obj.tenant.pki_dir +
+                        "/issued/" + certificate + ".crt")
+                    os.remove(obj.tenant.pki_dir +
+                        "/private/" + certificate + ".key")
+                    os.remove(obj.tenant.pki_dir +
+                        "/reqs/" + certificate + ".req")
+
+                    obj.tenant.enacted = None
+                    obj.tenant.save()
             # TODO(jermowery): determine if this is necessary.
             # if type(obj) is VPNTenant:
                 # if the tenant was deleted revoke all certs assoicated
@@ -273,11 +286,14 @@
             # If there were any new TenantPrivlege objects then create certs
             if type(obj) is TenantPrivilege:
                 certificate = self.certificate_name(obj)
-                VPNService.execute_easyrsa_command(
-                    obj.tenant.pki_dir,
-                    "build-client-full " + certificate + " nopass")
-                obj.tenant.enacted = None
-                obj.tenant.save()
+                # Only add a certificate if ones does not yet exist
+                if (not os.path.isfile(obj.tenant.pki_dir +
+                    "/issued/" + certificate + ".crt")):
+                    VPNService.execute_easyrsa_command(
+                        obj.tenant.pki_dir,
+                        "build-client-full " + certificate + " nopass")
+                    obj.tenant.enacted = None
+                    obj.tenant.save()
 
 # Associate the admin forms with the models.
 admin.site.register(VPNService, VPNServiceAdmin)
