diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4c5b5e86481a4bd39266910010403f91359913d4
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright (c) 2016-2018 Ohio Supercomputer Center
+
+MIT License
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/form.yml b/form.yml
deleted file mode 100644
index afa259d891f04613e5fbcb46d7a21767de66ca4f..0000000000000000000000000000000000000000
--- a/form.yml
+++ /dev/null
@@ -1,100 +0,0 @@
----
-cluster:
-  - "owens"
-  - "pitzer"
-form:
-  - auto_modules_matlab
-  - auto_accounts
-  - bc_num_hours
-  - bc_num_slots
-  - num_cores
-  - node_type
-  - bc_vnc_resolution
-  - bc_email_on_started
-attributes:
-  num_cores:
-    widget: "number_field"
-    label: "Number of cores"
-    value: 1
-    help: |
-      Number of cores on node type (4 GB per core unless requesting whole
-      node). Leave blank if requesting full node.
-    min: 0
-    max: 28
-    step: 1
-  bc_num_slots: "1"
-  bc_vnc_resolution:
-    required: true
-  node_type:
-      widget: select
-      label: "Node type"
-      help: |
-        - **Standard Compute** <br>
-          These are standard HPC machines. Owens has 648 of these nodes with 40
-          cores and 128 GB of memory. Pitzer has 224 of these nodes with 40 cores and
-          340 of these nodes with 48 cores. All pitzer nodes have 192 GB of RAM. Chosing "any" as the node type will decrease
-          your wait time.
-        - **GPU Enabled** <br>
-          These are HPC machines with GPUs. Owens has 160 nodes with 1 [NVIDIA Tesla P100 GPU]
-          and Pitzer has 74 nodes with 2 [NVIDIA Tesla V100 GPUs]. They have the same
-          CPU and memory characteristics of standard compute. However, Pitzer's 40 core machines
-          have 2 GPUs with 16 GB of RAM; and Pitzer's 48 core machines have 2 GPUs with 32 GB of RAM.
-          Dense GPU types have 4 GPUs with 16 GB of RAM.
-        - **Large Memory** <br>
-          These are HPC machines with very large amounts of memory. Owens has 16 hugemem nodes
-          with 48 cores and 1.5 TB of RAM. Pitzer has 4 hugemem nodes with 3 TB of RAM and 80 cores.
-          Pitzer also has 12 Largmem nodes which have 48 cores with 768 GB of RAM.
-
-        [NVIDIA Tesla P100 GPU]: http://www.nvidia.com/object/tesla-p100.html
-        [NVIDIA Tesla V100 GPUs]: https://www.nvidia.com/en-us/data-center/v100/
-      options:
-        - [
-            "any",     "any",
-            data-max-num-cores-for-cluster-owens: 28,
-            data-max-num-cores-for-cluster-pitzer: 48,
-          ]
-        - [
-            "48 core",     "any-48core",
-            data-max-num-cores-for-cluster-pitzer: 48,
-            data-option-for-cluster-owens: false,
-          ]
-        - [
-            "40 core",     "any-40core",
-            data-max-num-cores-for-cluster-pitzer: 40,
-            data-option-for-cluster-owens: false,
-          ]
-        - [
-            "any gpu",     "gpu",
-            data-max-num-cores-for-cluster-owens: 28,
-            data-max-num-cores-for-cluster-pitzer: 48,
-          ]
-        - [
-            "40 core gpu",     "gpu-40core",
-          data-max-num-cores-for-cluster-pitzer: 40,
-          data-option-for-cluster-owens: false,
-          ]
-        - [
-            "48 core gpu",     "gpu-48core",
-            data-max-num-cores-for-cluster-pitzer: 48,
-            data-option-for-cluster-owens: false,
-          ]
-        - [
-            "largemem", "largemem",
-            data-min-num-cores-for-cluster-pitzer: 24,
-            data-max-num-cores-for-cluster-pitzer: 48,
-            data-option-for-cluster-owens: false,
-          ]
-        - [
-            "hugemem", "hugemem",
-            data-min-num-cores-for-cluster-owens: 4,
-            data-max-num-cores-for-cluster-owens: 48,
-            data-min-num-cores-for-cluster-pitzer: 20,
-            data-max-num-cores-for-cluster-pitzer: 80,
-          ]
-        - [
-            "debug",   "debug",
-            data-max-num-cores-for-cluster-owens: 28,
-            data-max-num-cores-for-cluster-pitzer: 48,
-            data-option-for-cluster-owens: false,
-            data-option-for-cluster-pitzer: false,
-          ]
diff --git a/form.yml.erb b/form.yml.erb
new file mode 100644
index 0000000000000000000000000000000000000000..df3ef97588810a4da1bcf347ae61e101c1b53905
--- /dev/null
+++ b/form.yml.erb
@@ -0,0 +1,32 @@
+cluster: 
+  - "karolina-slurm"
+  
+form:
+  - job_name
+  - account
+  - custom_queue
+  - bc_num_hours
+
+attributes:
+  custom_queue:
+    label: "Partition"  
+    widget: select
+    options:
+      - "<%= 'qcpu' %>"
+      - "<%= 'qcpu_exp' %>"
+      - "<%= 'qgpu' %>"
+      - "<%= 'qgpu_exp' %>"
+
+  ntasks_per_node:
+    label: "NTasks Per Node"
+    widget: select
+    options:
+      - "<%= 1 %>"
+        
+  account:
+    label: "Project"
+    widget: select
+    options:
+      <%- User.new.groups.each do |group| %>
+      - "<%= group %>"
+      <%- end %>
\ No newline at end of file
diff --git a/info.md.erb b/info.md.erb
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/manifest.yml b/manifest.yml
index 0841d1e2cfbebde315166da5104dfa6a36413e92..1bb580e4eedc48f45725265e9feacad8b84070fa 100644
--- a/manifest.yml
+++ b/manifest.yml
@@ -4,8 +4,8 @@ category: Interactive Apps
 subcategory: GUIs
 role: batch_connect
 description: |
-  This app will launch a [MATLAB] GUI on the [Owens cluster]. You will be able
-  to interact with the MATLAB GUI through a VNC session.
+  This app will launch a [MATLAB] GUI on the [Karolina] cluster. You will be able
+  to interact with the MATLAB GUI through a proxy-server.
 
   [MATLAB]: https://www.mathworks.com/products/matlab.html
-  [Owens cluster]: https://www.osc.edu/resources/technical_support/supercomputers/owens
+  [Karolina]: https://docs.it4i.cz/karolina/introduction/
diff --git a/submit.yml.erb b/submit.yml.erb
index aa2d5441f703c8e9c3de23904f8ae7f4e76a6e4a..276aac35590f9ceb22f19574dfc26cc378eee6aa 100644
--- a/submit.yml.erb
+++ b/submit.yml.erb
@@ -1,51 +1,11 @@
-<%-
-
-  err_msg = "You are not a member of the matlab group. Please email oschelp@osc.edu to request access to MATLAB."
-  raise(StandardError, err_msg) unless CurrentUser.group_names.include?('matlab')
-
-  nodes = bc_num_slots.blank? ? 1 : bc_num_slots.to_i
-
-  cores_lookup = {
-      "hugemem" => {"pitzer" => "80", "owens" => "48"},
-      "largemem" => {"pitzer" => "48", "owens" => "28"},
-
-      "any" => {"pitzer" => "40", "owens" => "28"},
-      "gpu" => {"pitzer" => "48", "owens" => "28"},
-
-      "any-48core" => {"pitzer" => "48", "owens" => "28"},
-      "gpu-48core" => {"pitzer" => "48", "owens" => "28"},
-
-      "any-40core" => {"pitzer" => "40", "owens" => "28"},
-      "gpu-40core" => {"pitzer" => "40", "owens" => "28"},
-  }
-
-  max_cores = cores_lookup[node_type][cluster]
-  ppn = num_cores.blank? ? max_cores : num_cores.to_i
-
-
-  case node_type
-  when "hugemem"
-    partition = bc_num_slots.to_i > 1 ? "hugemem-parallel" : "hugemem"
-    slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}", "--partition", partition ]
-  when "gpu"
-    slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}", "--gpus-per-node", "1" ]
-  when "any40-core"
-    slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}", "--contstraint", "48core" ]
-  when "any48-core"
-    slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}", "--contstraint", "48core" ]
-  when "gpu-48core"
-    slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}", "--gpus-per-node", "1", "--constraint", "48core" ]
-  when "gpu-40core"
-    slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}", "--gpus-per-node", "1", "--constraint", "40core" ]
-  else
-    slurm_args = [ "--nodes", "#{nodes}", "--ntasks-per-node", "#{ppn}" ]
-  end
-%>
 ---
 batch_connect:
-  template: vnc
+  template: "basic"
 script:
   native:
-  <%- slurm_args.each do |arg| %>
-    - "<%= arg %>"
-  <%- end %>
+    - "-A"
+    - "<%= account %>"    
+    - "-p"
+    - "<%= custom_queue %>"
+    - "-J"
+    - "<%= job_name %>"
\ No newline at end of file
diff --git a/template/after.sh.erb b/template/after.sh.erb
new file mode 100755
index 0000000000000000000000000000000000000000..4e1f39075c8d224c801bb032907ac6154fef8dcd
--- /dev/null
+++ b/template/after.sh.erb
@@ -0,0 +1,9 @@
+# Wait for the Matlab server to start
+echo "Waiting for Matlab server to open port ${port}..."
+if wait_until_port_used "${host}:${port}" 600; then
+  echo "Discovered Matlab server listening on port ${port}!"
+else
+  echo "Timed out waiting for Matlab server to open port ${port}!"
+  clean_up 1
+fi
+sleep 2
\ No newline at end of file
diff --git a/template/before.sh.erb b/template/before.sh.erb
old mode 100644
new mode 100755
index e9323a3b3b6cbc666eb8f1b36c00c0373c59b5b6..8716887fc8309cdd610b487db9c0a8c73010fbfd
--- a/template/before.sh.erb
+++ b/template/before.sh.erb
@@ -1,2 +1,18 @@
 # Export the module function if it exists
 [[ $(type -t module) == "function" ]] && export -f module
+
+# Find available port to run server on
+export port="$(find_port)"
+export password="$(create_passwd 32)"
+
+export MWI_APP_HOST="0.0.0.0"
+export MWI_APP_PORT=${port}
+export MWI_BASE_URL="/node/${host}/${port}"
+
+export MWI_ENABLE_TOKEN_AUTH="True"
+export MWI_AUTH_TOKEN="$password"
+
+export MATLAB_LOG_DIR=$TMPDIR
+export MWI_LOG_LEVEL="INFO"
+
+export MLM_LICENSE_FILE="/apps/all/MATLAB/2023b/licenses/network.lic"
\ No newline at end of file
diff --git a/template/config/menus/xfce-applications.menu b/template/config/menus/xfce-applications.menu
deleted file mode 100644
index 2bbf6bd0f016e1f6b28fbd3cf5ee26ae4915bba5..0000000000000000000000000000000000000000
--- a/template/config/menus/xfce-applications.menu
+++ /dev/null
@@ -1,20 +0,0 @@
-<!DOCTYPE Menu PUBLIC "-//freedesktop//DTD Menu 1.0//EN"
-  "http://www.freedesktop.org/standards/menu-spec/1.0/menu.dtd">
-
-<Menu>
-    <Name>Xfce</Name>
-
-    <DefaultAppDirs/>
-    <DefaultDirectoryDirs/>
-    <DefaultMergeDirs/>
-
-    <Include>
-        <All/>
-    </Include>
-
-    <Layout>
-        <Filename>firefox.desktop</Filename>
-        <Filename>xfce4-terminal.desktop</Filename>
-        <Filename>Thunar.desktop</Filename>
-    </Layout>
-</Menu>
diff --git a/template/config/xfce4/terminal/terminalrc b/template/config/xfce4/terminal/terminalrc
deleted file mode 100644
index b705be2d7657f6ec84546c9f7458ae1319891f84..0000000000000000000000000000000000000000
--- a/template/config/xfce4/terminal/terminalrc
+++ /dev/null
@@ -1,3 +0,0 @@
-[Configuration]
-CommandLoginShell=TRUE
-FontName=DejaVu Sans Mono 11
diff --git a/template/config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml b/template/config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
deleted file mode 100644
index 7ab1d6b1c0467cc61d65f42f7b4bdecb3aecefbf..0000000000000000000000000000000000000000
--- a/template/config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml
+++ /dev/null
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-
-<channel name="xfce4-panel" version="1.0">
-  <property name="configver" type="int" value="2"/>
-  <property name="panels" type="array">
-    <value type="int" value="1"/>
-    <property name="panel-1" type="empty">
-      <property name="position" type="string" value="p=6;x=99;y=24"/>
-      <property name="position-locked" type="bool" value="true"/>
-      <property name="size" type="uint" value="48"/>
-      <property name="length" type="uint" value="100"/>
-      <property name="length-adjust" type="bool" value="false"/>
-      <property name="plugin-ids" type="array">
-        <value type="int" value="1"/>
-        <value type="int" value="3"/>
-        <value type="int" value="8"/>
-        <value type="int" value="4"/>
-        <value type="int" value="5"/>
-      </property>
-      <property name="mode" type="uint" value="0"/>
-    </property>
-  </property>
-  <property name="plugins" type="empty">
-    <property name="plugin-3" type="string" value="tasklist">
-      <property name="flat-buttons" type="bool" value="false"/>
-      <property name="show-handle" type="bool" value="true"/>
-    </property>
-    <property name="plugin-4" type="string" value="pager"/>
-    <property name="plugin-5" type="string" value="clock">
-      <property name="digital-format" type="string" value="%r"/>
-      <property name="mode" type="uint" value="2"/>
-    </property>
-    <property name="plugin-8" type="string" value="separator">
-      <property name="expand" type="bool" value="true"/>
-      <property name="style" type="uint" value="2"/>
-    </property>
-    <property name="plugin-1" type="string" value="applicationsmenu">
-      <property name="show-generic-names" type="bool" value="true"/>
-      <property name="show-menu-icons" type="bool" value="true"/>
-      <property name="button-icon" type="string" value="fedora-logo-icon"/>
-      <property name="show-tooltips" type="bool" value="true"/>
-    </property>
-  </property>
-</channel>
diff --git a/template/script.sh.erb b/template/script.sh.erb
old mode 100644
new mode 100755
index 75a09debd00cfbf6c1faf277202c930b50f11654..db883d360a651bbeb74c9edd75c2dc045c0b5c75
--- a/template/script.sh.erb
+++ b/template/script.sh.erb
@@ -1,47 +1,10 @@
-#!/usr/bin/env bash
-
-<%- gpu = context.node_type.include?("vis") -%>
-
-# Clean the environment
-module purge
-
-# Set working directory to home directory
-cd "${HOME}"
-
 #
-# Launch Xfce Window Manager and Panel
+# Start Matlab server
 #
 
-(
-  export SEND_256_COLORS_TO_REMOTE=1
-  export XDG_CONFIG_HOME="<%= session.staged_root.join("config") %>"
-  export XDG_DATA_HOME="<%= session.staged_root.join("share") %>"
-  export XDG_CACHE_HOME="$(mktemp -d)"
-  export $(dbus-launch)
-
-  module restore
-  set -x
-  xfwm4 --compositor=off --daemon --sm-client-disable
-  xsetroot -solid "#D3D3D3"
-  xfsettingsd --sm-client-disable
-  xfce4-panel --sm-client-disable
-) &
-
-#
-# Start MATLAB
-#
-
-# Load the required environment
-module load xalt/latest <%= context.auto_modules_matlab %>
+# Clean the environment
+module purge
 
-# Launch MATLAB
-<%- if gpu -%>
-module load intel/16.0.3 virtualgl
-module list
-set -x
-vglrun matlab -desktop -nosoftwareopengl
-<%- else -%>
-module list
-set -x
-matlab -desktop
-<%- end -%>
+ml MATLAB/R2023b
+ml matlab-proxy/0.18.1-GCCcore-12.3.0
+matlab-proxy-app
\ No newline at end of file
diff --git a/view.html.erb b/view.html.erb
new file mode 100644
index 0000000000000000000000000000000000000000..f938494e605438e563b363423dfe331d38fad2c2
--- /dev/null
+++ b/view.html.erb
@@ -0,0 +1,10 @@
+<%-
+  base_url  = "/node/#{host}/#{port}"
+%>
+
+<form action="<%= base_url %>" target="_blank" >
+  <input type="hidden" name="mwi-auth-token" value="<%= password %>">
+  <button class="btn btn-primary" type="submit">
+    <i class="fa fa-cogs"></i> Connect to MATLAB
+  </button>
+</form>
\ No newline at end of file