diff --git a/routes/v1.js b/routes/v1.js
index 8bcd80e71f6b149cd6bc202a3678c6ab8b5b3797..d17f2547cc78bf20c6b67144420137cd00cb728e 100644
--- a/routes/v1.js
+++ b/routes/v1.js
@@ -1,9 +1,13 @@
 const express = require("express");
 const { check, validationResult, oneOf } = require("express-validator")
-const {toLower} = require("../src/customSanitizers");
+const { toLower } = require("../src/customSanitizers");
 const { errorHandler } = require("../src/errorHandler");
 const checkFactory = require("../src/validationCheckFactory");
-const requestHandlerFactory = require("../src/requestHandlerFactory");
+const { getSceneHandler } = require("../src/getSceneHandler");
+const { getCapabilitiesHandler } = require("../src/getCapabilitiesHandler");
+const redirectTo = require("../src/redirectTo");
+const assets = require("../src/assets");
+const bb = require("../src/boundingbox");
 
 let router = express.Router();
 
@@ -12,30 +16,64 @@ const checks = [
   check("request")
     .exists().withMessage("MissingParameterValue")
     .customSanitizer(toLower)
-    .isIn([ "getscene", "getcapabilities" ]).withMessage("InvalidParameterValue"),
-  oneOf([[
-    check("request").customSanitizer(toLower).equals("getscene"),
-    ...checkFactory.specificChecks("getscene")
-  ], [
-    check("request").customSanitizer(toLower).equals("getcapabilities"),
-    ...checkFactory.specificChecks("getcapabilities")
-  ]])
+    .isIn(["getscene", "getcapabilities"]).withMessage("InvalidParameterValue")
 ];
 
-router.route("/")
-  .get(checks, (req, res) => {
+router.route("/").get(checks, (req, res) => {
 
-    const errors = validationResult(req)
-    if (!errors.isEmpty()) {
-      let exception = errorHandler(errors);
-      res.set("Content-Type", "application/xml");
-      return res.status(400).send(exception);
-    }
+  const errors = validationResult(req);
+  if (!errors.isEmpty()) {
+    let exception = errorHandler(errors);
+    res.set("Content-Type", "application/xml");
+    return res.status(400).send(exception);
+  }
 
-    let requestHandler = requestHandlerFactory.createHandler(req.query.request);
+  redirectTo(req.query.request, req, res);
 
-    requestHandler(req, res);
+});
+
+const capabilitiesChecks = [
+  check("request")
+    .exists().withMessage("MissingParameterValue")
+    .customSanitizer(toLower)
+    .equals("getcapabilities").withMessage("InvalidParameterValue")
+];
+
+router.route("/capabilities").get(capabilitiesChecks, (req, res) => {
+
+  const errors = validationResult(req);
+  if (!errors.isEmpty()) {
+    let exception = errorHandler(errors);
+    res.set("Content-Type", "application/xml");
+    return res.status(400).send(exception);
+  }
+
+  getCapabilitiesHandler(req, res);
+
+});
+
+const sceneChecks = [
+  check("boundingbox")
+    .exists().withMessage("MissingParameterValue")
+    .matches(/^((\-?\d+(\.\d+)?),){3}(\-?\d+(\.\d+)?)$/).withMessage("InvalidParameterValue")
+    .custom(value => bb.isValid(value)).withMessage("InvalidParameterValue"),
+  check("layers")
+    .exists().withMessage("MissingParameterValue")
+    .custom(value => assets.allLayersExist(value)).withMessage("UnknownLayer")
+];
+
+router.route("/scene").get(sceneChecks, (req, res) => {
+
+  const errors = validationResult(req);
+  if (!errors.isEmpty()) {
+    let exception = errorHandler(errors);
+    res.set("Content-Type", "application/xml");
+    return res.status(400).send(exception);
+  }
+
+  getSceneHandler(req, res);
+
+});
 
-  });
 
 module.exports = router;
\ No newline at end of file
diff --git a/src/customSanitizers.js b/src/customSanitizers.js
index 4d5a2f0feff94c3d614777b7184e03be65a5fea7..42ccd803e04d167419f825048a74d63e862364cb 100644
--- a/src/customSanitizers.js
+++ b/src/customSanitizers.js
@@ -1,4 +1,5 @@
 const toLower = (value) => {
+  if(!value) return;
   return value.toLowerCase();
 }
 
diff --git a/src/redirectTo.js b/src/redirectTo.js
new file mode 100644
index 0000000000000000000000000000000000000000..accf652a05f57e04df033879a8c6d3c62478d7b9
--- /dev/null
+++ b/src/redirectTo.js
@@ -0,0 +1,28 @@
+const url = require('url');
+
+const redirectTo = (request, req, res) => {
+
+  switch (request.toLowerCase()) {
+    case "getscene": {
+      res.redirect(
+        url.format({
+          pathname: `${req.baseUrl}/scene`,
+          query: req.query,
+        })
+      );
+      break;
+    }
+    case "getcapabilities": {
+      res.redirect(
+        url.format({
+          pathname: `${req.baseUrl}/capabilities`,
+          query: req.query,
+        })
+      );
+      break;
+    }
+  }
+
+}
+
+module.exports = redirectTo;
\ No newline at end of file