diff --git a/src/module_vmap/module/javascript/app/vmap/mapmanager/mapmanager.js b/src/module_vmap/module/javascript/app/vmap/mapmanager/mapmanager.js
index d42d368d9bce08e8b42bcc399a3efab62aee2ec9..39bb4e0fdbd795ee3976ce6350430882451cd08f 100644
--- a/src/module_vmap/module/javascript/app/vmap/mapmanager/mapmanager.js
+++ b/src/module_vmap/module/javascript/app/vmap/mapmanager/mapmanager.js
@@ -1487,6 +1487,8 @@ nsVmap.nsMapManager.MapManager.prototype.getBusinessObjectsFromLayers = function
                 'bo_geom_type': aBos[ii]['geom_type'],
                 'bo_min_edition_scale': aBos[ii]['min_edition_scale'],
                 'bo_max_edition_scale': aBos[ii]['max_edition_scale'],
+                'bo_enable_location': aBos[ii]['enable_location'],
+                'bo_enable_selection': aBos[ii]['enable_selection'],
                 'bo_index': goog.isDefAndNotNull(aBos[ii]['index']) ? aBos[ii]['index'] : 1000000
             };
         }
@@ -1498,19 +1500,40 @@ nsVmap.nsMapManager.MapManager.prototype.getBusinessObjectsFromLayers = function
 /**
  * Use getQueryableLayers to get the queryable business objects, group by bo_id if the same bo is used by two different layers
  * @param {boolean} bOnlyVisible true if you want to get only the visible layers
+ * @param {boolean} bSelectionEnabled true if you want to get only the selection enable bos
+ * @param {boolean} bLocationEnabled true if you want to get only the location enable bos
  * @returns {object} the queryables business objects
  * @export
  */
-nsVmap.nsMapManager.MapManager.prototype.getQueryableBusinessObjects = function (bOnlyVisible) {
+nsVmap.nsMapManager.MapManager.prototype.getQueryableBusinessObjects = function (bOnlyVisible, bSelectionEnabled, bLocationEnabled) {
     oVmap.log('nsVmap.nsMapManager.MapManager.prototype.getQueryableBusinessObjects');
 
     var oBusinessObjects = this.getBusinessObjectsFromLayers(this.getQueryableLayers(bOnlyVisible));
     var oQueryableBOs = {};
+    var bSelectionTestPass = true;
+    var bLocationTestPass = true;
 
     for (var key in oBusinessObjects) {
         if (goog.isDefAndNotNull(oBusinessObjects[key]['bo_user_rights'])) {
             if (oBusinessObjects[key]['bo_user_rights'].indexOf('SELECT') !== -1) {
-                oQueryableBOs[key] = oBusinessObjects[key];
+
+                bSelectionTestPass = true;
+                bLocationTestPass = true;
+
+                if (bSelectionEnabled) {
+                    if (!oBusinessObjects[key]['bo_enable_selection']) {
+                        bSelectionTestPass = false;
+                    }
+                }
+                if (bLocationEnabled) {
+                    if (!oBusinessObjects[key]['bo_enable_location']) {
+                        bLocationTestPass = false;
+                    }
+                }
+
+                if (bSelectionTestPass && bLocationTestPass) {
+                    oQueryableBOs[key] = oBusinessObjects[key];
+                }
             }
         }
     }
@@ -1521,14 +1544,16 @@ nsVmap.nsMapManager.MapManager.prototype.getQueryableBusinessObjects = function
 /**
  * Use getQueryableLayers to get the queryable business objects, group by bo_id if the same bo is used by two different layers
  * @param {boolean} bOnlyVisible true if you want to get only the visible layers
+ * @param {boolean} bSelectionEnabled true if you want to get only the selection enable bos
+ * @param {boolean} bLocationEnabled true if you want to get only the location enable bos
  * @returns {array} the queryables business objects
  * @export
  */
-nsVmap.nsMapManager.MapManager.prototype.getQueryableBusinessObjectsAsArray = function (bOnlyVisible) {
+nsVmap.nsMapManager.MapManager.prototype.getQueryableBusinessObjectsAsArray = function (bOnlyVisible, bSelectionEnabled, bLocationEnabled) {
     oVmap.log('nsVmap.nsMapManager.MapManager.prototype.getQueryableBusinessObjectsAsArray');
 
     var aQueryableBOs = [];
-    var oQueryableBOs = this.getQueryableBusinessObjects(bOnlyVisible);
+    var oQueryableBOs = this.getQueryableBusinessObjects(bOnlyVisible, bSelectionEnabled, bLocationEnabled);
 
     for (var key in oQueryableBOs) {
         aQueryableBOs.push(oQueryableBOs[key]);
@@ -1578,16 +1603,35 @@ nsVmap.nsMapManager.MapManager.prototype.getQueryableGetFeatureInfoLayers = func
  * @returns {object}
  * @export
  */
-nsVmap.nsMapManager.MapManager.prototype.getInsertableBusinessObjects = function () {
+nsVmap.nsMapManager.MapManager.prototype.getInsertableBusinessObjects = function (bOnlyVisible, bSelectionEnabled, bLocationEnabled) {
     oVmap.log('nsVmap.nsMapManager.MapManager.prototype.getInsertableBusinessObjects');
 
-    var oBusinessObjects = this.getBusinessObjectsFromLayers(this.getQueryableLayers());
+    var oBusinessObjects = this.getBusinessObjectsFromLayers(this.getQueryableLayers(bOnlyVisible));
     var aInsertableBOs = [];
+    var bSelectionTestPass = true;
+    var bLocationTestPass = true;
 
     for (var key in oBusinessObjects) {
         if (goog.isDefAndNotNull(oBusinessObjects[key]['bo_user_rights'])) {
             if (oBusinessObjects[key]['bo_user_rights'].indexOf('INSERT') !== -1) {
-                aInsertableBOs.push(oBusinessObjects[key]);
+
+                bSelectionTestPass = true;
+                bLocationTestPass = true;
+
+                if (bSelectionEnabled) {
+                    if (!oBusinessObjects[key]['bo_enable_selection']) {
+                        bSelectionTestPass = false;
+                    }
+                }
+                if (bLocationEnabled) {
+                    if (!oBusinessObjects[key]['bo_enable_location']) {
+                        bLocationTestPass = false;
+                    }
+                }
+
+                if (bSelectionTestPass && bLocationTestPass) {
+                    aInsertableBOs.push(oBusinessObjects[key]);
+                }
             }
         }
     }
diff --git a/src/module_vmap/module/javascript/app/vmap/tools/insert.js b/src/module_vmap/module/javascript/app/vmap/tools/insert.js
index ce07b2686567b9c5002a2441209ecb8a80568318..3e2a40ce1ede6f7d9f266c25b9d54b077e6eb669 100644
--- a/src/module_vmap/module/javascript/app/vmap/tools/insert.js
+++ b/src/module_vmap/module/javascript/app/vmap/tools/insert.js
@@ -256,7 +256,7 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController = function ($scope,
     /**
      * Queryable Business Objects
      */
-    $scope['aQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjectsAsArray(true);
+    $scope['aQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjectsAsArray(true, true, false);
 
     /**
      * Business objects avaliable for avoiding superpositions
@@ -416,8 +416,8 @@ nsVmap.nsToolsManager.Insert.prototype.inserttoolController.prototype.loadInsert
 
     this.$scope_.$applyAsync(function () {
         setTimeout(function () {
-            this_.$scope_['aInsertableBOs'] = oVmap.getMapManager().getInsertableBusinessObjects();
-            this_.$scope_['aQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjectsAsArray(true);
+            this_.$scope_['aInsertableBOs'] = oVmap.getMapManager().getInsertableBusinessObjects(true, true, false);
+            this_.$scope_['aQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjectsAsArray(true, true, false);
 
             // Mobile: cache le bouton "Insertion" si aucun bo est insertable
             if (goog.isDefAndNotNull(this_.$scope_['aInsertableBOs'])) {
diff --git a/src/module_vmap/module/javascript/app/vmap/tools/location.js b/src/module_vmap/module/javascript/app/vmap/tools/location.js
index 415bd9cb19f286c3fcb11ea2c8818f5b60dc3c30..f5af7b5693fa3f287a97555e391ad4a5f4a9422f 100644
--- a/src/module_vmap/module/javascript/app/vmap/tools/location.js
+++ b/src/module_vmap/module/javascript/app/vmap/tools/location.js
@@ -348,7 +348,7 @@ nsVmap.nsToolsManager.Location.prototype.locationController.prototype.addScale =
 nsVmap.nsToolsManager.Location.prototype.locationController.prototype.setBusinessObjectsList = function () {
     oVmap.log('nsVmap.nsToolsManager.Location.prototype.locationController.prototype.setBusinessObjectsList');
 
-    this['oBusinessObjects'] = oVmap.getMapManager().getQueryableBusinessObjects();
+    this['oBusinessObjects'] = oVmap.getMapManager().getQueryableBusinessObjects(false, false, true);
 };
 
 /**
diff --git a/src/module_vmap/module/javascript/app/vmap/tools/select/advancedselect.js b/src/module_vmap/module/javascript/app/vmap/tools/select/advancedselect.js
index 85c43ac9b53b1510174e8165b7d3b609a2f9099a..1d4d012dc803bac2e46aa6a8995e1bf062c38feb 100644
--- a/src/module_vmap/module/javascript/app/vmap/tools/select/advancedselect.js
+++ b/src/module_vmap/module/javascript/app/vmap/tools/select/advancedselect.js
@@ -185,7 +185,7 @@ nsVmap.nsToolsManager.AdvancedSelect.prototype.AdvancedSelectController = functi
     /**
      * Queryable business objects
      */
-    this['oQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjects(true);
+    this['oQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjects(true, true, false);
 
     /**
      * Business objects list
@@ -237,7 +237,7 @@ nsVmap.nsToolsManager.AdvancedSelect.prototype.AdvancedSelectController = functi
         this_.$scope_.$applyAsync(function () {
 
             // rempli this.oQueryableBOs
-            this_['oQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjects(true);
+            this_['oQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjects(true, true, false);
 
             // rempli this.aBusinessObjectsList
             goog.array.clear(this_['aBusinessObjectsList']);
@@ -448,7 +448,7 @@ nsVmap.nsToolsManager.AdvancedSelect.prototype.AdvancedSelectController.prototyp
     this.EWKTGeometry = EWKTGeometry;
 
     // Récupère la liste des bo interrogeables
-    var oQueryableBOs = oVmap.getMapManager().getQueryableBusinessObjects(true);
+    var oQueryableBOs = oVmap.getMapManager().getQueryableBusinessObjects(true, true, false);
 
     // Met le compteur de requêtes en cours au nombre de requêtes à effectuer
     this.requestCounter_ = Object.keys(oQueryableBOs).length;
diff --git a/src/module_vmap/module/javascript/app/vmap/tools/select/basicselect.js b/src/module_vmap/module/javascript/app/vmap/tools/select/basicselect.js
index 200baf000377bef18fafd189872aea028fddca67..cd9c3943d6433202f21825bcf74e4b98006c7185 100755
--- a/src/module_vmap/module/javascript/app/vmap/tools/select/basicselect.js
+++ b/src/module_vmap/module/javascript/app/vmap/tools/select/basicselect.js
@@ -835,8 +835,8 @@ nsVmap.nsToolsManager.BasicSelect.prototype.basicSelectController.prototype.setQ
 
         // rempli this.oQueryableBOs et aQueryableBOs
         this_['aQueryableLayers'] = oVmap.getMapManager().getQueryableGetFeatureInfoLayers(true);
-        this_['oQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjects(true);
-        this_['aQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjectsAsArray(true);
+        this_['oQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjects(true, true, false);
+        this_['aQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjectsAsArray(true, true, false);
         this_['aBusinessObjectsList'] = Object.keys(this_['oQueryableBOs']);
 
         // Élément sélectionné par défaut
diff --git a/src/module_vmap/module/javascript/app/vmap/tools/select/select.js b/src/module_vmap/module/javascript/app/vmap/tools/select/select.js
index 0944cee5c36c0157e090e853d22cadfe027a9f6e..40e7600350320c0c3a9d0e026ba2554433e1bdad 100755
--- a/src/module_vmap/module/javascript/app/vmap/tools/select/select.js
+++ b/src/module_vmap/module/javascript/app/vmap/tools/select/select.js
@@ -688,7 +688,7 @@ nsVmap.nsToolsManager.Select.prototype.selectController.prototype.loadQueryableB
 
     this_.$scope_.$applyAsync(function () {
         setTimeout(function () {
-            this_['aQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjectsAsArray(true);
+            this_['aQueryableBOs'] = oVmap.getMapManager().getQueryableBusinessObjectsAsArray(true, true, false);
 
             // Snapping
             for (var i = 0; i < this_['aQueryableBOs'].length; i++) {