diff --git a/src/config/constants.json b/src/config/constants.json
new file mode 100644
index 0000000000000000000000000000000000000000..e299e6f0e15ded1acab6e1dbd56ef1ca9ea7feeb
--- /dev/null
+++ b/src/config/constants.json
@@ -0,0 +1,5 @@
+{
+    "orgCacheKeyName": "allRootOrgs",
+    "orgCacheExpiryTime": "",
+    "orgfieldsAllowed": ["email","orgName"]
+}   
\ No newline at end of file
diff --git a/src/helpers/configHelper.js b/src/helpers/configHelper.js
index a2c3524e2fb871cceb60e8f31b40dd82a6a6c458..00c000d14053c7a8eecf013bbc98d84f0f584f03 100644
--- a/src/helpers/configHelper.js
+++ b/src/helpers/configHelper.js
@@ -5,6 +5,9 @@ var LOG = require('sb_logger_util')
 const contentProvider = require('sb_content_provider_util')
 var async = require('async')
 var _ = require('lodash')
+var CacheManager = require('sb_cache_manager')
+var cacheManager = new CacheManager({})
+var configData = require('../config/constants')
 
 /**
  * This function executes the org search lms API to get all orgs
@@ -25,6 +28,75 @@ function getRootOrgs (requestObj, cb) {
   })
 }
 
+/**
+ * This function tries to get the orgdetails from cache if not exits fetches from api and sets to cache
+ * @param requestObj is not needed bec all rootorgdetails are fetched here
+ * @param CBW callback after success or error
+ */
+function getRootOrgsFromCache (CBW) {
+  cacheManager.get(configData.orgCacheKeyName, function (err, cachedata) {
+    if (err || !cachedata) {
+      var inputObj = {
+        'request': {
+          // 'limit': 50,
+          'filters': { 'isRootOrg': true }
+        }
+      }
+      getRootOrgs(inputObj, function (err, res) {
+        if (err) {
+          CBW(err)
+        } else {
+          cacheManager.set({ key: configData.orgCacheKeyName, value: res.result.response.content },
+            function (err, data) {
+              if (err) {
+                LOG.error(utilsService.getLoggerData('', 'ERROR', filename, 'Setting allRootOrgs cache failed',
+                  'Setting allRootOrgs cache data failed', err))
+              } else {
+                LOG.info(utilsService.getLoggerData('', 'INFO', filename,
+                  'Setting allRootOrgs cache data success'))
+              }
+            })
+          CBW(null, res.result.response.content)
+        }
+      })
+    } else {
+      CBW(null, cachedata)
+    }
+  })
+}
+
+/**
+ * This function loops each object from the input and maps channel id with hasTagId from orgdetails and prepares orgDetails obj for each obj in the array
+ * @param data is array of objects, it might be content or course
+ * @param cb callback after success or error
+ */
+function populateOrgDetailsByHasTag (data, inputfields, cb) {
+  inputfields = inputfields.split(',')
+  var fields = configData.orgfieldsAllowed.filter(eachfield => inputfields.includes(eachfield))
+  if (fields && fields.length) {
+    getRootOrgsFromCache(function (err, orgdata) {
+      if (!err) {
+        if (orgdata) {
+          var orgDetails = _.keyBy(orgdata, 'hashTagId')
+          _.forEach(data, (eachcontent, index) => {
+            if (eachcontent.channel) {
+              var eachorgdetail = orgDetails[eachcontent.channel]
+              if (eachorgdetail) {
+                data[index].orgDetails = _.pick(eachorgdetail, fields)
+              }
+            }
+          })
+        }
+        cb(null, data)
+      } else {
+        cb(err)
+      }
+    })
+  } else {
+    cb(null, data)
+  }
+}
+
 /**
  * This method gets all channels through 'getRootOrgs' method response
  * data asynchronously and return back a promise
@@ -85,5 +157,6 @@ function getAllChannelsFromAPI () {
 }
 
 module.exports = {
-  getAllChannelsFromAPI: getAllChannelsFromAPI
+  getAllChannelsFromAPI: getAllChannelsFromAPI,
+  populateOrgDetailsByHasTag: populateOrgDetailsByHasTag
 }
diff --git a/src/libs b/src/libs
index 6f94c30164e01cda210abd5824919498be3f0824..89e35ce98f3a32171e24472fe03b15c8ee7e0673 160000
--- a/src/libs
+++ b/src/libs
@@ -1 +1 @@
-Subproject commit 6f94c30164e01cda210abd5824919498be3f0824
+Subproject commit 89e35ce98f3a32171e24472fe03b15c8ee7e0673
diff --git a/src/service/contentService.js b/src/service/contentService.js
index 13f9ea629e604ec0089ea6e18180b77b4b31ea83..8cae44e0bf48983ba0579c3b7beede4ed59fa110 100644
--- a/src/service/contentService.js
+++ b/src/service/contentService.js
@@ -20,6 +20,7 @@ var contentModel = require('../models/contentModel').CONTENT
 var messageUtils = require('./messageUtil')
 var utilsService = require('../service/utilsService')
 var emailService = require('./emailService')
+var configHelper = require('../helpers/configHelper')
 
 var CacheManager = require('sb_cache_manager')
 var cacheManager = new CacheManager({})
@@ -130,7 +131,18 @@ function search (defaultContentTypes, req, response, objectType) {
                 lodash.get(data, 'result.framework.categories')) {
                   modifyFacetsData(res.result.facets, data.result.framework.categories, language)
                 }
-                CBW(null, res)
+                if (req.query && req.query.orgdetails) {
+                  var fields = req.query.orgdetails
+                  configHelper.populateOrgDetailsByHasTag(res.result.content, fields, function
+                    (err, contentwithorgdetails) {
+                    if (!err) {
+                      res.result.content = contentwithorgdetails
+                    }
+                    CBW(null, res)
+                  })
+                } else {
+                  CBW(null, res)
+                }
               }
             })
           } else {
@@ -624,6 +636,19 @@ function getContentAPI (req, response) {
         }
       })
     },
+    function (res, CBW) {
+      if (req.query && req.query.orgdetails) {
+        var fields = req.query.orgdetails
+        configHelper.populateOrgDetailsByHasTag([res.result.content], fields, function (err, courseswithorgdetails) {
+          if (!err) {
+            res.result.content = courseswithorgdetails[0]
+          }
+          CBW(null, res)
+        })
+      } else {
+        CBW(null, res)
+      };
+    },
     function (res) {
       rspObj.result = res.result
       LOG.info(utilsService.getLoggerData(rspObj, 'INFO', filename, 'getContentAPI', 'Sending response back to user'))
diff --git a/src/service/courseService.js b/src/service/courseService.js
index 8d39463d133679682eaeafa47cd51bcfcfa4f42c..c5e5d82513027f8ecdc3f5b9848dd2632585d59d 100644
--- a/src/service/courseService.js
+++ b/src/service/courseService.js
@@ -16,6 +16,7 @@ var _ = require('underscore')
 var courseModel = require('../models/courseModel').COURSE
 var messageUtils = require('./messageUtil')
 var utilsService = require('../service/utilsService')
+var configHelper = require('../helpers/configHelper')
 
 var filename = path.basename(__filename)
 var courseMessage = messageUtils.COURSE
@@ -126,7 +127,19 @@ function searchCourseAPI (req, response) {
         }
       })
     },
-
+    function (res, CBW) {
+      if (req.query && req.query.orgdetails) {
+        var fields = req.query.orgdetails
+        configHelper.populateOrgDetailsByHasTag(res.result.content, fields, function (err, courseswithorgdetails) {
+          if (!err) {
+            res.result.content = courseswithorgdetails
+          }
+          CBW(null, res)
+        })
+      } else {
+        CBW(null, res)
+      };
+    },
     function (res) {
       rspObj.result = res.result
       if (res.result.content) {
@@ -457,7 +470,19 @@ function getCourseAPI (req, response) {
         }
       })
     },
-
+    function (res, CBW) {
+      if (req.query && req.query.orgdetails) {
+        var fields = req.query.orgdetails
+        configHelper.populateOrgDetailsByHasTag(res.result.content, fields, function (err, courseswithorgdetails) {
+          if (!err) {
+            res.result.content = courseswithorgdetails
+          }
+          CBW(null, res)
+        })
+      } else {
+        CBW(null, res)
+      };
+    },
     function (res) {
       rspObj.result = transformResBody(res.result, 'content', 'course')
       LOG.info(utilsService.getLoggerData(rspObj, 'INFO', filename, 'getCourseAPI',
@@ -574,7 +599,20 @@ function getCourseHierarchyAPI (req, response) {
         }
       })
     },
-
+    function (res, CBW) {
+      if (req.query && req.query.orgdetails) {
+        var fields = req.query.orgdetails
+        // sending res.result.content as array bec populateOrgDetailsByHasTag expects data as array
+        configHelper.populateOrgDetailsByHasTag([res.result.content], fields, function (err, courseswithorgdetails) {
+          if (!err) {
+            res.result.content = courseswithorgdetails[0]
+          }
+          CBW(null, res)
+        })
+      } else {
+        CBW(null, res)
+      };
+    },
     function (res) {
       rspObj.result = res.result
       LOG.info(utilsService.getLoggerData(rspObj, 'INFO', filename, 'getCourseHierarchyAPI',