diff --git a/routes/v1.js b/routes/v1.js
index d17f2547cc78bf20c6b67144420137cd00cb728e..3a912001631fd9c14ed6de21bb0973295c686ebc 100644
--- a/routes/v1.js
+++ b/routes/v1.js
@@ -1,25 +1,16 @@
 const express = require("express");
-const { check, validationResult, oneOf } = require("express-validator")
-const { toLower } = require("../src/customSanitizers");
+const { validationResult } = require("express-validator")
 const { errorHandler } = require("../src/errorHandler");
 const checkFactory = require("../src/validationCheckFactory");
 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();
 
-const checks = [
-  ...checkFactory.commonChecks(),
-  check("request")
-    .exists().withMessage("MissingParameterValue")
-    .customSanitizer(toLower)
-    .isIn(["getscene", "getcapabilities"]).withMessage("InvalidParameterValue")
-];
+const requestChecks = checkFactory.getChecksFor("request");
 
-router.route("/").get(checks, (req, res) => {
+router.route("/").get(requestChecks, (req, res) => {
 
   const errors = validationResult(req);
   if (!errors.isEmpty()) {
@@ -32,12 +23,7 @@ router.route("/").get(checks, (req, res) => {
 
 });
 
-const capabilitiesChecks = [
-  check("request")
-    .exists().withMessage("MissingParameterValue")
-    .customSanitizer(toLower)
-    .equals("getcapabilities").withMessage("InvalidParameterValue")
-];
+const capabilitiesChecks = checkFactory.getChecksFor("capabilities");
 
 router.route("/capabilities").get(capabilitiesChecks, (req, res) => {
 
@@ -52,15 +38,7 @@ router.route("/capabilities").get(capabilitiesChecks, (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")
-];
+const sceneChecks = checkFactory.getChecksFor("scene");
 
 router.route("/scene").get(sceneChecks, (req, res) => {
 
diff --git a/src/validationCheckFactory.js b/src/validationCheckFactory.js
index f971efc59f9fb10275266d0fb78cf7df2202b85d..b2dd408b06b042ec28298b692290250301d95342 100644
--- a/src/validationCheckFactory.js
+++ b/src/validationCheckFactory.js
@@ -1,7 +1,6 @@
-const { check } = require("express-validator");
-const {toLower} = require("../src/customSanitizers");
+const { check, query } = require("express-validator");
+const { toLower, toUpper, boundingboxIsValid } = require("../src/customSanitizers");
 const assets = require("../src/assets");
-const bb = require("../src/boundingbox");
 
 const commonChecks = () => {
   return [
@@ -16,25 +15,46 @@ const commonChecks = () => {
 
 }
 
-const specificChecks = (parameter) => {
+const getChecksFor = (parameter) => {
 
   switch (parameter.toLowerCase()) {
-    case "getscene": {
+
+    case "request": {
       return [
-        check("boundingbox")
+        ...commonChecks(),
+        query("request")
           .exists().withMessage("MissingParameterValue")
-          .matches(/^((\-?\d+(\.\d+)?),){3}(\-?\d+(\.\d+)?)$/).withMessage("InvalidParameterValue")
-          .custom(value => bb.isValid(value)).withMessage("InvalidParameterValue"),
-        check("layers")
+          .customSanitizer(toLower)
+          .isIn(["getscene", "getcapabilities"]).withMessage("InvalidParameterValue")
+      ];
+    }
+
+    case "scene": {
+      return [
+        query("crs")
           .exists().withMessage("MissingParameterValue")
-          .custom(value => assets.allLayersExist(value)).withMessage("UnknownLayer")
+          .customSanitizer(toUpper)
+          .matches(/^EPSG:\d{4,5}$/).withMessage("InvalidParameterValue"),
+        query("layers")
+          .exists().withMessage("MissingParameterValue")
+          .custom(value => assets.allLayersExist(value)).withMessage("UnknownLayer"),
+        query("boundingbox")
+          .optional()
+          .matches(/^((\-?\d+(\.\d+)?),){3}(\-?\d+(\.\d+)?)$/).withMessage("InvalidParameterValue")
+          .custom(value => boundingboxIsValid(value)).withMessage("InvalidParameterValue")
       ];
     }
-    case "getcapabilities": {
-      return [];
+
+    case "capabilities": {
+      return [
+        query("request")
+          .exists().withMessage("MissingParameterValue")
+          .customSanitizer(toLower)
+          .equals("getcapabilities").withMessage("InvalidParameterValue")
+      ];
     }
   }
 
 }
 
-module.exports = { commonChecks, specificChecks };
\ No newline at end of file
+module.exports = { getChecksFor };
\ No newline at end of file