diff --git a/tes/__init__.py b/tes/__init__.py
index 3c4ee04ab77b21fdbdb223b0690aa5efe8cb1f3f..927642f499735823bace0aadcc2541ca8a281f1e 100644
--- a/tes/__init__.py
+++ b/tes/__init__.py
@@ -9,7 +9,7 @@ app.config['LOCAL_DEV'] = False
 app.config['DEBUG'] = True
 app.config['SECRET_KEY'] = 'asdasfdfj'
 import datetime
-app.config['PERMANENT_SESSION_LIFETIME'] = datetime.timedelta(seconds=300)
+app.config['PERMANENT_SESSION_LIFETIME'] = datetime.timedelta(seconds=3600)
 app.config['SESSION_REFRESH_EACH_REQUEST'] = True
 app.config['SESSION_COOKIE_NAME'] = 'tessession'
 app.config['TWSPROXY'] = 'http://localhost:4000/'
diff --git a/tes/apiendpoints.py b/tes/apiendpoints.py
index 8832296c027a72be8fa82a7e52c0edc3a7861400..5794cca9d33296320bdffa3fad70b48685d7deba 100644
--- a/tes/apiendpoints.py
+++ b/tes/apiendpoints.py
@@ -110,15 +110,24 @@ def get_conn_params():
     logger.debug('entering get_conn_params')
     identitystr = request.args.get('identity')
     identityparams = json.loads(identitystr)
-    interfacestr = request.args.get('interface')
-    interfaceparams = json.loads(interfacestr)
+    try:
+        interfacestr = request.args.get('interface')
+        interfaceparams = json.loads(interfacestr)
+    except:
+        interfaceparams = {}
+        pass
+    try:
+        pathstr = request.args.get('path')
+        pathparams = json.loads(pathstr)
+        cdstr = request.args.get('cd')
+        cdparams = json.loads(cdstr)
+    except:
+        pathparams = None
+        cdparams = None
     try:
         appstr = request.args.get('app')
         appparams = json.loads(appstr)
     except:
-        import traceback
-        logger.error('exception retrieving app params')
-        logger.error(traceback.format_exc())
         appparams = {}
     params = {}
 
@@ -129,6 +138,8 @@ def get_conn_params():
     params.update(interfaceparams)
     params['user'] = identityparams['username']
     params['host'] = identityparams['site']['host']
+    params['path'] = pathparams
+    params['cd'] = cdparams
 
     logger.debug('leaving get_conn_params')
 
@@ -193,9 +204,15 @@ class JobStat(Resource):
         """
         import logging
         logger = logging.getLogger()
-        params = get_conn_params()
-        sshsess = SSHSession.get_sshsession()
-        sshsess.refresh()
+        try:
+            params = get_conn_params()
+        except:
+            flask_restful.abort(400, "connection parameters not correctly defined")
+        try:
+            sshsess = SSHSession.get_sshsession()
+            sshsess.refresh()
+        except:
+            flask_restful.abort(500, "Error relating to the ssh sessions")
         try:
             host = params['identity']['site']['host']
         except (TypeError, KeyError) as e:
@@ -216,13 +233,27 @@ class JobStat(Resource):
         if not (res['stderr'] == '' or res['stderr'] is None or res['stderr'] == b''):
             logger.error(res['stderr'])
             flask_restful.abort(400, message=res['stderr'].decode())
-        jobs = json.loads(res['stdout'].decode())
+        try:
+            jobs = json.loads(res['stdout'].decode())
 
-        # Attach the identity information to the job before returning it
-        for j in jobs:
-            j['identity'] = params['identity']
+            # Attach the identity information to the job before returning it
+            for j in jobs:
+                j['identity'] = params['identity']
 
-        return jobs
+            return jobs
+        except Exception as e:
+            import traceback
+            logger.error(e)
+            logger.error(traceback.format_exc())
+            flask_resful.abort(400, message=e)
+
+class DirList(Resource):
+    def get(self):
+        params = get_conn_params()
+        sshsess = SSHSession.get_sshsession()
+        dirls = Ssh.sftpls(sshsess, host=params['identity']['site']['host'],
+                           user=params['identity']['username'], path=params['path'],changepath=params['cd'])
+        return dirls
 
 class JobCancel(Resource):
     """
@@ -252,8 +283,16 @@ class JobSubmit(Resource):
         params = get_conn_params()
         logger.debug('entering JobSubmit.post {}'.format(params))
         sshsess = SSHSession.get_sshsession()
+        data = request.get_json()
+        logger.debug(data)
+        try:
+            script = data['app']['startscript'].format(**data)
+        except:
+            flask_restful.abort(400,message='Incomplete job information was passed to the backend.')
+        logger.debug('script formated to {}'.format(script))
+
         res = Ssh.execute(sshsess, host=params['identity']['site']['host'], user=params['identity']['username'],
-                          cmd=params['interface']['submitcmd'], stdin=params['app']['startscript'])
+                          cmd=params['interface']['submitcmd'], stdin=script)
         if not (res['stderr'] == '' or res['stderr'] is None or res['stderr'] == b''):
             logger.debug('failed to submit job')
             logger.debug(res['stderr'])
@@ -393,3 +432,4 @@ api.add_resource(JobConnect, '/connect/<int:jobid>/<string:batchhost>')
 # api.add_resource(SessionTest,'/sesstest')
 #api.add_resource(StartAgent,'/startagent')
 api.add_resource(SSHAgent,'/sshagent')
+api.add_resource(DirList,'/ls')