diff --git a/tes/apiendpoints.py b/tes/apiendpoints.py
index 7654db41c2a34f5a5c17efa7962abbfe98ade971..c5ba97add158440294c58b8d4f30eeae8a3bb4d2 100644
--- a/tes/apiendpoints.py
+++ b/tes/apiendpoints.py
@@ -205,28 +205,17 @@ class JobStat(Resource):
         """
         import logging
         logger = logging.getLogger()
-        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:
-            flask_restful.abort(400, message="stat: definition of login host incomplete")
+            flask_restful.abort(500, message="Error relating to the ssh sessions")
         try:
-            user = params['identity']['username']
+            cmd = json.loads(request.args.get('statcmd'))
+            host = json.loads(request.args.get('host'))
+            user = json.loads(request.args.get('username'))
         except (TypeError, KeyError) as e:
-            flask_restful.abort(400, message="stat: definition of username incomplete")
-        try:
-            cmd = params['interface']['statcmd']
-        except (TypeError, KeyError) as e:
-            flask_restful.abort(400, message="stat: definition of batch interface incomplete")
-        logger.debug('ssh sess socket is {}'.format(sshsess.socket))
+            flask_restful.abort(400, message="Missing required parameter {}".format(e))
 
         try:
             logger.debug('attempting ssh execute {} {} {}'.format(host,user,cmd))
@@ -240,10 +229,6 @@ class JobStat(Resource):
         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']
-
             return jobs
         except Exception as e:
             import traceback
@@ -282,6 +267,9 @@ class MkDir(Resource):
 
 class DirList(Resource):
     def get(self):
+        import logging
+        logger = logging.getLogger()
+
         params = get_conn_params()
         sshsess = SSHSession.get_sshsession()
         site = params['identity']['site']
@@ -296,6 +284,7 @@ class DirList(Resource):
         if cd == "":
             cd = "."
         if 'lscmd' in site and site['lscmd'] is not None and site['lscmd'] is not "":
+            logger.debug('using ssh.execute with lscmd')
             res = Ssh.execute(sshsess, host=params['identity']['site']['host'], user=params['identity']['username'],
                                 sshport=sshport,
                                 cmd="{} {} {}".format(site['lscmd'],path,cd))
@@ -304,6 +293,7 @@ class DirList(Resource):
             except:
                 flask_restful.abort(404,message="You don't have permission to view that directory")
         else:
+            logger.debug('using ssh.sftpls')
 
             dirls = Ssh.sftpls(sshsess, host=params['identity']['site']['host'],
                                user=params['identity']['username'], path=params['path'],changepath=params['cd'], sshport=sshport)
@@ -341,7 +331,16 @@ class JobSubmit(Resource):
         logger.debug(data)
         try:
             script = data['app']['startscript'].format(**data)
-        except:
+        except Exception as e:
+            import traceback
+            logger.error(e)
+            logger.error(traceback.format_exc())
+            logger.error('formating data')
+            logger.error(data)
+            logger.error('end formating data')
+            logger.error('body')
+            logger.error(request.data)
+            logger.error('end body')
             flask_restful.abort(400, message='Incomplete job information was passed to the backend.')
         logger.debug('script formated to {}'.format(script))
 
diff --git a/tes/sshwrapper/__init__.py b/tes/sshwrapper/__init__.py
index ec60bd23e536769dc2bf89bf3f5cff4180b07189..98053e997f8dd6726ac314afc9e2700db59db86a 100644
--- a/tes/sshwrapper/__init__.py
+++ b/tes/sshwrapper/__init__.py
@@ -3,6 +3,7 @@ This module handles SSH Connections
 """
 import subprocess
 
+TIMEOUT=10
 class SshAgentException(Exception):
     """
     Raised if an SSH Agent isn't running (Normally the SPA client should invoke the agent
@@ -268,7 +269,6 @@ class Ssh:
         else:
             ctrlsocket = Ssh.get_ctrl_master_socket(sess, bastion, user, bastionsshport)
         logger.debug('ssh.execute: got ctrlsocket {}'.format(ctrlsocket))
-
         if bastion == None:
             # we are executing this command on the login node, so no more magic is needed
             sshcmd = ['ssh', '-o', 'Stricthostkeychecking=no', 
@@ -288,9 +288,13 @@ class Ssh:
         exec_p = subprocess.Popen(sshcmd,stdout=subprocess.PIPE,stderr=subprocess.PIPE,stdin=subprocess.PIPE,env=env)
 
         if stdin is not None:
-            (stdout, stderr) = exec_p.communicate(stdin.encode())
+            (stdout, stderr) = exec_p.communicate(stdin.encode(),timeout=TIMEOUT)
         else:
+            (stdout, stderr) = exec_p.communicate(timeout=TIMEOUT)
+        except subprocess.TimeoutExpired:
+            exec_p.kill()
             (stdout, stderr) = exec_p.communicate()
+
         return {'stdout':stdout, 'stderr':stderr}
 
     @staticmethod