diff --git a/xos/core/xoslib/methods/vpnview.py b/xos/core/xoslib/methods/vpnview.py
index 8cb745c..be8d7fc 100644
--- a/xos/core/xoslib/methods/vpnview.py
+++ b/xos/core/xoslib/methods/vpnview.py
@@ -1,3 +1,4 @@
+import jinja2
 from core.models import TenantPrivilege
 from plus import PlusSerializerMixin
 from rest_framework import serializers
@@ -48,8 +49,20 @@
         Returns:
             str: The client script as a str.
         """
-        return obj.create_client_script(
-            self.context['request'].user.email + "-" + str(obj.id))
+        env = jinja2.Environment(loader=jinja2.FileSystemLoader("/opt/xos/services/vpn/templates"))
+        template = env.get_template("connect.vpn.j2")
+        client_name = self.context['request'].user.email + "-" + str(obj.id)
+        remotes = VPNTenant.get_tenant_objects().filter(pk__in=obj.failover_server_ids)
+        remotes.insert(0, obj)
+        pki_dir = VPNService.get_pki_dir(obj)
+        fields = {"client_name": client_name,
+                  "remotes": remotes,
+                  "is_persistent": obj.is_persistent,
+                  "ca_crt": obj.get_ca_crt(pki_dir),
+                  "client_crt": obj.get_client_cert(client_name, pki_dir),
+                  "client_key": obj.get_client_key(client_name, pki_dir)
+                 }
+        return template.render(fields)
 
 
 class VPNTenantList(XOSListCreateAPIView):
diff --git a/xos/services/vpn/models.py b/xos/services/vpn/models.py
index 8479e44..6123288 100644
--- a/xos/services/vpn/models.py
+++ b/xos/services/vpn/models.py
@@ -259,40 +259,6 @@
     def port_number(self, value):
         self.set_attribute("port", value)
 
-    def create_client_script(self, client_name):
-        """Create a script that a client can use to access this VPNTenant.
-
-        Parameters:
-            client_name (str): The name of the client to use when creating the cerificate.
-
-        Returns:
-            str: A str representing the client script.
-        """
-        pki_dir = VPNService.get_pki_dir(self)
-        script = ""
-        # write the configuration portion
-        script += ("printf \"%b\" \"")
-        script += self.generate_client_conf(client_name)
-        script += ("\" > client.conf\n")
-        script += ("printf \"%b\" \"")
-        for line in self.get_ca_crt(pki_dir):
-            script += (line.rstrip() + r"\n")
-        script += ("\" > ca.crt\n")
-        script += ("printf \"%b\" \"")
-        for line in self.get_client_cert(client_name, pki_dir):
-            script += (line.rstrip() + r"\n")
-        script += ("\" > " + client_name + ".crt\n")
-        script += ("printf \"%b\" \"")
-        for line in self.get_client_key(client_name, pki_dir):
-            script += (line.rstrip() + r"\n")
-        script += ("\" > " + client_name + ".key\n")
-        # make sure openvpn is installed
-        script += ("apt-get update\n")
-        script += ("apt-get install openvpn -y\n")
-        script += ("openvpn client.conf\n")
-        # close the script
-        return script
-
     def get_ca_crt(self, pki_dir):
         """Gets the lines fo the ca.crt file for this VPNTenant.
 
@@ -331,41 +297,6 @@
         with open(pki_dir + "/private/" + client_name + ".key", 'r') as f:
             return f.readlines()
 
-    def generate_client_conf(self, client_name):
-        """Returns the conf file for the given client.
-
-        Parameters:
-            client_name (str): The client name to use.
-
-        Returns:
-            str: Generates the client configuration to use to connect to this VPN server.
-        """
-        conf = ("client\n" +
-                "dev tun\n" +
-                "remote-cert-tls server\n" +
-                "resolv-retry 60\n" +
-                "nobind\n" +
-                "ca ca.crt\n" +
-                "cert " + client_name + ".crt\n" +
-                "key " + client_name + ".key\n" +
-                "verb 3\n" +
-                self.get_remote_line(
-                    self.nat_ip, self.port_number, self.protocol))
-        for remote in self.failover_server_ids:
-            tenant = VPNTenant.get_tenant_objects().filter(pk=remote)[0]
-            conf += self.get_remote_line(
-                tenant.nat_ip, tenant.port_number, tenant.protocol)
-
-        if self.is_persistent:
-            conf += "persist-tun\n"
-            conf += "persist-key\n"
-
-        return conf
-
-    def get_remote_line(self, host, port_number, protocol):
-        return ("remote " + str(host) + " " + str(port_number) + " " +
-                str(protocol) + "\n")
-
 
 def model_policy_vpn_tenant(pk):
     """Manages the container for the VPN Tenant.
diff --git a/xos/synchronizers/vpn/steps/sync_vpntenant.yaml b/xos/synchronizers/vpn/steps/sync_vpntenant.yaml
index 556212c..1b9f338 100644
--- a/xos/synchronizers/vpn/steps/sync_vpntenant.yaml
+++ b/xos/synchronizers/vpn/steps/sync_vpntenant.yaml
@@ -41,40 +41,8 @@
   - name: get dh
     copy: src={{ pki_dir }}/dh.pem dest={{ pki_dir }}/dh.pem
 
-  - name: erase config
-    shell: rm -f {{ pki_dir }}/server.conf
-
-  - name: write base config
-    shell:
-       |
-       printf "script-security 3 system
-       port {{ port_number }}
-       proto {{ protocol }}
-       dev tun
-       writepid {{ pki_dir }}/pid
-       ca {{ pki_dir }}/ca.crt
-       cert {{ pki_dir }}/server.crt
-       key {{ pki_dir }}/server.key
-       dh {{ pki_dir }}/dh.pem
-       crl-verify {{ pki_dir }}/crl.pem
-       server {{ server_network }} {{ vpn_subnet }}
-       ifconfig-pool-persist {{ pki_dir }}/ipp.txt
-       status {{ pki_dir }}/openvpn-status.log
-       verb 3
-       " > {{ pki_dir }}/server.conf
-
-  - name: write persistent config
-    shell:
-      |
-      printf "keepalive 10 60
-      persist-tun
-      persist-key
-      " >> {{ pki_dir }}/server.conf
-    when: {{ is_persistent }}
-
-  - name: write client-to-client config
-    shell: printf "client-to-client\n" >> {{ pki_dir }}/server.conf
-    when: {{ clients_can_see_each_other }}
+  - name: write config
+    template: src=/opt/xos/synchronizers/vpn/templates/server.conf.j2 dest={{ pki_dir }}/server.conf owner=root group=root
 
   - name: start openvpn
     shell: openvpn {{ pki_dir }}/server.conf &
