diff --git a/api/src/executor/routes.js b/api/src/executor/routes.js
index a69aeeb..07f7ace 100644
--- a/api/src/executor/routes.js
+++ b/api/src/executor/routes.js
@@ -3,35 +3,19 @@
 
 const { get_latest_runtime_matching_language_version } = require('../runtime');
 const { Job } = require('./job');
-const { body } = require('express-validator');
 
 module.exports = {
-    run_job_validators: [
-        body('language')
-            .isString(), // eslint-disable-line snakecasejs/snakecasejs
-        body('version')
-            .isSemVer(), // eslint-disable-line snakecasejs/snakecasejs
-        body('files')
-            .isArray(), // eslint-disable-line snakecasejs/snakecasejs
-        body('files.*.name')
-            .isString() // eslint-disable-line snakecasejs/snakecasejs
-            .bail()
-            .not()
-            .contains('/'),
-        body('files.*.content')
-            .isString(), // eslint-disable-line snakecasejs/snakecasejs
-        body('*_timeout')
-            .isNumeric(), // eslint-disable-line snakecasejs/snakecasejs
-        body('stdin')
-            .isString(), // eslint-disable-line snakecasejs/snakecasejs
-        body('args')
-            .isArray(),
-        body('args.*')
-            .isString() // eslint-disable-line snakecasejs/snakecasejs
-    ],
     async run_job(req, res){
         // POST /jobs
-
+        var errored = false;
+        ['language', 'version',
+            'files', 'main',
+            'args', 'stdin',
+            'compile_timeout', 'run_timeout',
+        ].forEach(key => {
+            if(req.body[key] == undefined) errored = errored || res.json_error(`${key} is required`, 400);
+        });
+        if(errored) return errored;
 
         const runtime = get_latest_runtime_matching_language_version(req.body.language, req.body.version);
         if(runtime == undefined) return res.json_error(`${req.body.language}-${req.body.version} runtime is unknown`, 400);
diff --git a/api/src/index.js b/api/src/index.js
index 98d9a1d..7b295b3 100644
--- a/api/src/index.js
+++ b/api/src/index.js
@@ -11,7 +11,6 @@ const fs = require('fs/promises');
 const fss = require('fs');
 const body_parser = require('body-parser');
 const runtime = require('./runtime');
-const {validationResult} = require('express-validator'); //eslint-disable-line snakecasejs/snakecasejs
 
 const logger = Logger.create('index');
 const app = express();
@@ -59,6 +58,11 @@ const app = express();
 
     logger.debug('Constructing Express App');
 
+    logger.debug('Registering middleware');
+
+    app.use(body_parser.urlencoded({extended: true}));
+    app.use(body_parser.json());
+
     logger.debug('Registering custom message wrappers');
 
     express.response.json_error = function(message, code) {
@@ -70,33 +74,23 @@ const app = express();
         return this.json({success: true, data: obj});
     };
 
-    logger.debug('Registering middleware');
-
-    app.use(body_parser.urlencoded({extended: true}));
-    app.use(body_parser.json());
-
-
-    function validate(req, res, next) {
-        const errors = validationResult(req); //eslint-disable-line snakecasejs/snakecasejs
-        if (!errors.isEmpty()) //eslint-disable-line snakecasejs/snakecasejs
-            return res.json_error(errors.array(), 422);
-        next();
-    }
-
     logger.debug('Registering Routes');
 
     const ppman_routes = require('./ppman/routes');
 
-    app.get   ('/repos', validate, ppman_routes.repo_list);
-    app.post  ('/repos', ppman_routes.repo_add_validators, validate, ppman_routes.repo_add);
-    app.get   ('/repos/:repo_slug', ppman_routes.repo_info_validators, validate, ppman_routes.repo_info);
-    app.get   ('/repos/:repo_slug/packages', ppman_routes.repo_packages_validators, validate, ppman_routes.repo_packages);
-    app.get   ('/repos/:repo_slug/packages/:language/:version', ppman_routes.package_info_validators, validate, ppman_routes.package_info);
-    app.post  ('/repos/:repo_slug/packages/:language/:version', ppman_routes.package_info_validators, validate, ppman_routes.package_install);
-    app.delete('/repos/:repo_slug/packages/:language/:version', ppman_routes.package_info_validators, validate, ppman_routes.package_uninstall); //TODO
+    app.get   ('/repos', ppman_routes.repo_list);
+    app.post  ('/repos', ppman_routes.repo_add);
+    app.get   ('/repos/:repo_slug', ppman_routes.repo_info);
+    app.get   ('/repos/:repo_slug/packages', ppman_routes.repo_packages);
+    app.get   ('/repos/:repo_slug/packages/:language/:version', ppman_routes.package_info);
+    app.post  ('/repos/:repo_slug/packages/:language/:version', ppman_routes.package_install);
+    app.delete('/repos/:repo_slug/packages/:language/:version', ppman_routes.package_uninstall); //TODO
 
     const executor_routes = require('./executor/routes');
-    app.post  ('/jobs', executor_routes.run_job_validators, validate, executor_routes.run_job);
+    app.post  ('/jobs', executor_routes.run_job);
+
+
+
 
     logger.debug('Calling app.listen');
     const [address,port] = config.bind_address.split(':');
diff --git a/api/src/ppman/routes.js b/api/src/ppman/routes.js
index 86a45e7..c376172 100644
--- a/api/src/ppman/routes.js
+++ b/api/src/ppman/routes.js
@@ -3,7 +3,6 @@ const state = require('../state');
 const logger = require('logplease').create('ppman/routes');
 const {Repository} = require('./repo');
 const semver = require('semver');
-const { body, param } = require('express-validator');
 
 async function get_or_construct_repo(slug){
     if(repos.has(slug))return repos.get(slug);
@@ -40,46 +39,31 @@ module.exports = {
             }))
         });
     },
-    repo_add_validators: [
-        body('slug')
-            .notEmpty() // eslint-disable-line snakecasejs/snakecasejs
-            .bail()
-            .isSlug() // eslint-disable-line snakecasejs/snakecasejs
-            .bail()
-            .not()
-            .custom(value=>state.state.get('repositories').keys().includes(value))
-            .withMessage('slug is already in use'), // eslint-disable-line snakecasejs/snakecasejs
-        body('url')
-            .notEmpty() // eslint-disable-line snakecasejs/snakecasejs
-            .bail()
-            .isURL({require_protocol: true}) // eslint-disable-line snakecasejs/snakecasejs
-
-    ],
     async repo_add(req, res){
         // POST /repos
 
         logger.debug(`Request for repoAdd slug=${req.body.slug} url=${req.body.url}`);
+        if(!req.body.slug)
+            return res.json_error('slug is missing from request body', 400);
+        if(!req.body.url)
+            return res.json_error('url is missing from request body', 400);
         
         const repo_state = state.state.get('repositories');
+
+        if(repo_state.has(req.body.slug)) return res.json_error(`repository ${req.body.slug} already exists`, 409);
         
         repo_state.set(req.body.slug, req.body.url);
         logger.info(`Repository ${req.body.slug} added url=${req.body.url}`);
 
         return res.json_success(req.body.slug);
     },
-    repo_info_validators: [
-        param('repo_slug')
-            .isSlug() // eslint-disable-line snakecasejs/snakecasejs
-            .bail()
-            .custom(value=>state.state.get('repositories').has(value))
-            .withMessage('repository does not exist') // eslint-disable-line snakecasejs/snakecasejs
-            .bail()
-    ],
     async repo_info(req, res){
         // GET /repos/:slug
 
         logger.debug(`Request for repoInfo for ${req.params.repo_slug}`);
         const repo = await get_or_construct_repo(req.params.repo_slug);        
+
+        if(repo == null) return res.json_error(`Requested repo ${req.params.repo_slug} does not exist`, 404);
         
         res.json_success({
             slug: repo.slug,
@@ -87,14 +71,6 @@ module.exports = {
             packages: repo.packages.length
         });
     },
-    repo_packages_validators: [
-        param('repo_slug')
-            .isSlug() // eslint-disable-line snakecasejs/snakecasejs
-            .bail()
-            .custom(value=>state.state.get('repositories').has(value))
-            .withMessage('repository does not exist') // eslint-disable-line snakecasejs/snakecasejs
-            .bail()
-    ],
     async repo_packages(req, res){
         // GET /repos/:slug/packages
         logger.debug('Request to repoPackages');
@@ -110,20 +86,13 @@ module.exports = {
             }))
         });
     },
-    package_info_validators: [
-        param('repo_slug')
-            .isSlug() // eslint-disable-line snakecasejs/snakecasejs
-            .bail()
-            .custom(value=>state.state.get('repositories').has(value))
-            .withMessage('repository does not exist') // eslint-disable-line snakecasejs/snakecasejs
-            .bail()
-    ],
     async package_info(req, res){
         // GET /repos/:slug/packages/:language/:version
 
         logger.debug('Request to packageInfo');
 
         const repo = await get_or_construct_repo(req.params.repo_slug);        
+        if(repo == null) return res.json_error(`Requested repo ${req.params.repo_slug} does not exist`, 404);
 
         const pkg = await get_package(repo, req.params.language, req.params.version);
         if(pkg == null) return res.json_error(`Requested package ${req.params.language}-${req.params.version} does not exist`, 404);
@@ -144,6 +113,8 @@ module.exports = {
         logger.debug('Request to packageInstall');
 
         const repo = await get_or_construct_repo(req.params.repo_slug);        
+        if(repo == null) return res.json_error(`Requested repo ${req.params.repo_slug} does not exist`, 404);
+
         const pkg = await get_package(repo, req.params.language, req.params.version);
         if(pkg == null) return res.json_error(`Requested package ${req.params.language}-${req.params.version} does not exist`, 404);
 
@@ -160,7 +131,6 @@ module.exports = {
     async package_uninstall(req,res){
         // DELETE /repos/:slug/packages/:language/:version
 
-        //res.json(req.body); //TODO
-        res.json_error('not implemented', 500);
+        res.json(req.body); //TODO
     }
 };
\ No newline at end of file