diff --git a/configs/index.js b/configs/index.js
index c6cb87a34..8416aa200 100644
--- a/configs/index.js
+++ b/configs/index.js
@@ -7,4 +7,50 @@
 
  require("./mongodb")();
 
- require("./kafka")();
\ No newline at end of file
+ require("./kafka")();
+ const path = require("path");
+ const fs = require("fs");
+ const requireAll = require("require-all");
+
+ global.PROJECT_ROOT_DIRECTORY = path.join(__dirname, '..');
+
+ //load base v1 controllers
+ const pathToController = PROJECT_ROOT_DIRECTORY + "/controllers/v1/";
+
+ fs.readdirSync(pathToController).forEach(function (file) {
+   checkWhetherFolderExistsOrNot(pathToController, file);
+ });
+
+ /**
+* Check whether folder exists or Not.
+* @method
+* @name checkWhetherFolderExistsOrNot
+* @param {String} pathToFolder - path to folder.
+* @param {String} file - File name.
+*/
+
+ function checkWhetherFolderExistsOrNot(pathToFolder, file) {
+
+   let folderExists = fs.lstatSync(pathToFolder + file).isDirectory();
+
+   if (folderExists) {
+     fs.readdirSync(pathToFolder + file).forEach(function (folderOrFile) {
+       checkWhetherFolderExistsOrNot(pathToFolder + file + "/", folderOrFile);
+     })
+
+   } else {
+     if (file.match(/\.js$/) !== null) {
+       require(pathToFolder + file);
+     }
+   }
+
+ }
+
+
+  // All controllers
+  global.controllers = requireAll({
+    dirname: PROJECT_ROOT_DIRECTORY + "/controllers",
+    resolve: function (Controller) {
+      return new Controller();
+    }
+  });
\ No newline at end of file
diff --git a/routes/index.js b/routes/index.js
index f52ed2ac7..f12273922 100644
--- a/routes/index.js
+++ b/routes/index.js
@@ -38,52 +38,69 @@ module.exports = (app) => {
             return next(error);
         }
 
-        try {
-            let controller;
-            if (req.params.file) {
-                controller = require(`../controllers/${req.params.version}/${req.params.controller}/${req.params.file}`);
-            } else {
-                controller = require(`../controllers/${req.params.version}/${req.params.controller}`);
-            }
-            controllerResponse = new controller()[req.params.method] ? await new controller()[req.params.method](req) : next();
-        } catch (error) { // If controller or service throws some random error
-            return next(error);
-        }
 
-        if (controllerResponse.isResponseAStream && controllerResponse.isResponseAStream == true) {
-            fs.exists(controllerResponse.fileNameWithPath, function (exists) {
-  
-              if (exists) {
-  
-                res.setHeader(
-                  'Content-disposition', 
-                  'attachment; filename=' + controllerResponse.fileNameWithPath.split('/').pop()
-                );
-                res.set('Content-Type', 'application/octet-stream');
-                fs.createReadStream(controllerResponse.fileNameWithPath).pipe(res);
-  
-              } else {}
-            });
+        if (!req.params.version) {
+            next();
+        } else if (!controllers[req.params.version]) {
+            next();
+        } else if (!controllers[req.params.version][req.params.controller]) {
+            next();
+        } else if (!(controllers[req.params.version][req.params.controller][req.params.method] ||
+                controllers[req.params.version][req.params.controller][req.params.file][req.params.method])) {
+            next();
+        } else if (req.params.method.startsWith("_")) {
+            next();
         } else {
-            if (controllerResponse.statusCode !== 200 && controllerResponse.statusCode !== 201 && controllerResponse.statusCode !== 202) {
-                /* If error obtained then global error handler gets executed */
-                return next(controllerResponse);
+            try {
+
+                if (req.params.file) {
+                    controllerResponse =
+                        await controllers[req.params.version][req.params.controller][req.params.file][req.params.method](req);
+                } else {
+                    controllerResponse =
+                        await controllers[req.params.version][req.params.controller][req.params.method](req);
+                }
+
+
+            } catch (error) { // If controller or service throws some random error
+                return next(error);
+            }
+
+            if (controllerResponse.isResponseAStream && controllerResponse.isResponseAStream == true) {
+                fs.exists(controllerResponse.fileNameWithPath, function (exists) {
+
+                    if (exists) {
+
+                        res.setHeader(
+                            'Content-disposition',
+                            'attachment; filename=' + controllerResponse.fileNameWithPath.split('/').pop()
+                        );
+                        res.set('Content-Type', 'application/octet-stream');
+                        fs.createReadStream(controllerResponse.fileNameWithPath).pipe(res);
+
+                    } else {}
+                });
+            } else {
+                if (controllerResponse.statusCode !== 200 && controllerResponse.statusCode !== 201 && controllerResponse.statusCode !== 202) {
+                    /* If error obtained then global error handler gets executed */
+                    return next(controllerResponse);
+                }
+
+                res.status(controllerResponse.statusCode).json({
+                    responseCode: controllerResponse.responseCode,
+                    message: controllerResponse.message,
+                    result: controllerResponse.result
+                });
             }
-    
-            res.status(controllerResponse.statusCode).json({
-                responseCode: controllerResponse.responseCode,
-                message: controllerResponse.message,
-                result: controllerResponse.result
-            });
         }
 
     }
 
 
     app.all("/user/:version/:controller/:method", validator, router);
-    app.all("/user/:version/:controller/:method/:id", validator, router);
     app.all("/user/:version/:controller/:file/:method", validator, router);
-    app.all("/user/:version/:controller/:file/:method/:id", router);
+    app.all("/user/:version/:controller/:method/:id", validator, router);
+    app.all("/user/:version/:controller/:file/:method/:id", validator, router);
 
     app.use((req, res, next) => {
         res.status(404).json({
@@ -91,7 +108,7 @@ module.exports = (app) => {
             message: 'Requested resource not found!',
         });
     });
-    
+
     // Global error handling middleware, should be present in last in the stack of a middleware's
     app.use((error, req, res, next) => {
         const status = error.statusCode || 500;
