diff --git a/entity/Activity_entity/Activity_entity.aod b/entity/Activity_entity/Activity_entity.aod
index b333645e3d46e87cff240e0a14dca2f228eaa0e4..b8c9b45e40a40d95acda8de2cd0e60232d3f8e61 100644
--- a/entity/Activity_entity/Activity_entity.aod
+++ b/entity/Activity_entity/Activity_entity.aod
@@ -565,6 +565,15 @@
           <recordfield>ACTIVITY.ENTRYDATE</recordfield>
         </dbRecordFieldMapping>
       </recordFieldMappings>
+      <filterExtensions>
+        <filterExtensionSet>
+          <name>Attribute_filter</name>
+          <filterFieldsProcess>%aditoprj%/entity/Activity_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js</filterFieldsProcess>
+          <filterValuesProcess>%aditoprj%/entity/Activity_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Activity_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtensionSet>
+      </filterExtensions>
     </dbRecordContainer>
   </recordContainers>
 </entity>
diff --git a/entity/Activity_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js b/entity/Activity_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..65d6b67c6e0affc794a04043f264fa103f4c2ba0
--- /dev/null
+++ b/entity/Activity_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var sqlCond = AttributeFilterExtensionMaker.makeFilterConditionSql();
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Activity_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js b/entity/Activity_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..209ddd39ef4a15b1190ef2bd4955ccdc78f5808b
--- /dev/null
+++ b/entity/Activity_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var fields = AttributeFilterExtensionMaker.makeFilterFields();
+result.string(fields);
\ No newline at end of file
diff --git a/entity/Activity_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js b/entity/Activity_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..942b0a0495a179f9c25d19330bb8cd59c5563ec0
--- /dev/null
+++ b/entity/Activity_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var values = AttributeFilterExtensionMaker.makeFilterValues();
+result.object(values);
\ No newline at end of file
diff --git a/entity/Campaign_entity/Campaign_entity.aod b/entity/Campaign_entity/Campaign_entity.aod
index 22112d6261d7caff704c11dc267205868e1f5e4e..177e7d9fbbdac4d15c175fb3ea6a4c0a39380365 100644
--- a/entity/Campaign_entity/Campaign_entity.aod
+++ b/entity/Campaign_entity/Campaign_entity.aod
@@ -568,6 +568,15 @@
           <expression>%aditoprj%/entity/Campaign_entity/recordcontainers/db/recordfieldmappings/status.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
       </recordFieldMappings>
+      <filterExtensions>
+        <filterExtensionSet>
+          <name>Attribute_filter</name>
+          <filterFieldsProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js</filterFieldsProcess>
+          <filterValuesProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtensionSet>
+      </filterExtensions>
     </dbRecordContainer>
   </recordContainers>
 </entity>
diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..65d6b67c6e0affc794a04043f264fa103f4c2ba0
--- /dev/null
+++ b/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var sqlCond = AttributeFilterExtensionMaker.makeFilterConditionSql();
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..209ddd39ef4a15b1190ef2bd4955ccdc78f5808b
--- /dev/null
+++ b/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var fields = AttributeFilterExtensionMaker.makeFilterFields();
+result.string(fields);
\ No newline at end of file
diff --git a/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js b/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..942b0a0495a179f9c25d19330bb8cd59c5563ec0
--- /dev/null
+++ b/entity/Campaign_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var values = AttributeFilterExtensionMaker.makeFilterValues();
+result.object(values);
\ No newline at end of file
diff --git a/entity/Competition_entity/Competition_entity.aod b/entity/Competition_entity/Competition_entity.aod
index 364d1c995d01e77921d5835559dde04ca9de5745..da041d148539f436d8615e237c131ce4539ef817 100644
--- a/entity/Competition_entity/Competition_entity.aod
+++ b/entity/Competition_entity/Competition_entity.aod
@@ -378,6 +378,15 @@
           <recordfield>COMPETITION.COMPETITIONID</recordfield>
         </dbRecordFieldMapping>
       </recordFieldMappings>
+      <filterExtensions>
+        <filterExtensionSet>
+          <name>Attribute_filter</name>
+          <filterFieldsProcess>%aditoprj%/entity/Competition_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js</filterFieldsProcess>
+          <filterValuesProcess>%aditoprj%/entity/Competition_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Competition_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtensionSet>
+      </filterExtensions>
     </dbRecordContainer>
   </recordContainers>
 </entity>
diff --git a/entity/Competition_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js b/entity/Competition_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..65d6b67c6e0affc794a04043f264fa103f4c2ba0
--- /dev/null
+++ b/entity/Competition_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var sqlCond = AttributeFilterExtensionMaker.makeFilterConditionSql();
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Competition_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js b/entity/Competition_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..209ddd39ef4a15b1190ef2bd4955ccdc78f5808b
--- /dev/null
+++ b/entity/Competition_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var fields = AttributeFilterExtensionMaker.makeFilterFields();
+result.string(fields);
\ No newline at end of file
diff --git a/entity/Competition_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js b/entity/Competition_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..942b0a0495a179f9c25d19330bb8cd59c5563ec0
--- /dev/null
+++ b/entity/Competition_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var values = AttributeFilterExtensionMaker.makeFilterValues();
+result.object(values);
\ No newline at end of file
diff --git a/entity/Contract_entity/Contract_entity.aod b/entity/Contract_entity/Contract_entity.aod
index 4489c3e872770c478a02bb219206cc6be3370192..368ab12dee80471005b1f0e8338ff39a459b5e97 100644
--- a/entity/Contract_entity/Contract_entity.aod
+++ b/entity/Contract_entity/Contract_entity.aod
@@ -502,6 +502,15 @@
           <filtertype>EXTENDED</filtertype>
         </consumerMapping>
       </recordFieldMappings>
+      <filterExtensions>
+        <filterExtensionSet>
+          <name>Attribute_filter</name>
+          <filterFieldsProcess>%aditoprj%/entity/Contract_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js</filterFieldsProcess>
+          <filterValuesProcess>%aditoprj%/entity/Contract_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Contract_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtensionSet>
+      </filterExtensions>
     </dbRecordContainer>
     <indexRecordContainer>
       <name>index</name>
diff --git a/entity/Contract_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js b/entity/Contract_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..65d6b67c6e0affc794a04043f264fa103f4c2ba0
--- /dev/null
+++ b/entity/Contract_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var sqlCond = AttributeFilterExtensionMaker.makeFilterConditionSql();
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Contract_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js b/entity/Contract_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..209ddd39ef4a15b1190ef2bd4955ccdc78f5808b
--- /dev/null
+++ b/entity/Contract_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var fields = AttributeFilterExtensionMaker.makeFilterFields();
+result.string(fields);
\ No newline at end of file
diff --git a/entity/Contract_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js b/entity/Contract_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..942b0a0495a179f9c25d19330bb8cd59c5563ec0
--- /dev/null
+++ b/entity/Contract_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var values = AttributeFilterExtensionMaker.makeFilterValues();
+result.object(values);
\ No newline at end of file
diff --git a/entity/Offer_entity/Offer_entity.aod b/entity/Offer_entity/Offer_entity.aod
index 3a5c970b4966fa6e987df6955f64962e358214d4..003bca5d4b7924356d41d3bd49d128f93b867c37 100644
--- a/entity/Offer_entity/Offer_entity.aod
+++ b/entity/Offer_entity/Offer_entity.aod
@@ -1109,6 +1109,15 @@
           <expression>%aditoprj%/entity/Offer_entity/recordcontainers/db/recordfieldmappings/isolanguage.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
       </recordFieldMappings>
+      <filterExtensions>
+        <filterExtensionSet>
+          <name>Attribute_filter</name>
+          <filterFieldsProcess>%aditoprj%/entity/Offer_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js</filterFieldsProcess>
+          <filterValuesProcess>%aditoprj%/entity/Offer_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Offer_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtensionSet>
+      </filterExtensions>
     </dbRecordContainer>
     <indexRecordContainer>
       <name>index</name>
diff --git a/entity/Offer_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js b/entity/Offer_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..65d6b67c6e0affc794a04043f264fa103f4c2ba0
--- /dev/null
+++ b/entity/Offer_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var sqlCond = AttributeFilterExtensionMaker.makeFilterConditionSql();
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Offer_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js b/entity/Offer_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..209ddd39ef4a15b1190ef2bd4955ccdc78f5808b
--- /dev/null
+++ b/entity/Offer_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var fields = AttributeFilterExtensionMaker.makeFilterFields();
+result.string(fields);
\ No newline at end of file
diff --git a/entity/Offer_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js b/entity/Offer_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..942b0a0495a179f9c25d19330bb8cd59c5563ec0
--- /dev/null
+++ b/entity/Offer_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var values = AttributeFilterExtensionMaker.makeFilterValues();
+result.object(values);
\ No newline at end of file
diff --git a/entity/Order_entity/Order_entity.aod b/entity/Order_entity/Order_entity.aod
index 8c872f0e8ab4f59f05e2628b58e97fc5e7ad3977..2d80f57976a725693e6603d72184afcde9aa901e 100644
--- a/entity/Order_entity/Order_entity.aod
+++ b/entity/Order_entity/Order_entity.aod
@@ -634,6 +634,15 @@
           <expression>%aditoprj%/entity/Order_entity/recordcontainers/db/recordfieldmappings/isolanguage.displayvalue/expression.js</expression>
         </dbRecordFieldMapping>
       </recordFieldMappings>
+      <filterExtensions>
+        <filterExtensionSet>
+          <name>Attribute_filter</name>
+          <filterFieldsProcess>%aditoprj%/entity/Order_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js</filterFieldsProcess>
+          <filterValuesProcess>%aditoprj%/entity/Order_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Order_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtensionSet>
+      </filterExtensions>
     </dbRecordContainer>
     <indexRecordContainer>
       <name>index</name>
diff --git a/entity/Order_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js b/entity/Order_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..65d6b67c6e0affc794a04043f264fa103f4c2ba0
--- /dev/null
+++ b/entity/Order_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var sqlCond = AttributeFilterExtensionMaker.makeFilterConditionSql();
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Order_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js b/entity/Order_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..209ddd39ef4a15b1190ef2bd4955ccdc78f5808b
--- /dev/null
+++ b/entity/Order_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var fields = AttributeFilterExtensionMaker.makeFilterFields();
+result.string(fields);
\ No newline at end of file
diff --git a/entity/Order_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js b/entity/Order_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..942b0a0495a179f9c25d19330bb8cd59c5563ec0
--- /dev/null
+++ b/entity/Order_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var values = AttributeFilterExtensionMaker.makeFilterValues();
+result.object(values);
\ No newline at end of file
diff --git a/entity/Product_entity/Product_entity.aod b/entity/Product_entity/Product_entity.aod
index bf96fe63732564671c7873fe2b515d7d63003e45..8663ddc8633f81f4255b72ef120582c298564b59 100644
--- a/entity/Product_entity/Product_entity.aod
+++ b/entity/Product_entity/Product_entity.aod
@@ -563,6 +563,15 @@
           <filtertype>EXTENDED</filtertype>
         </consumerMapping>
       </recordFieldMappings>
+      <filterExtensions>
+        <filterExtensionSet>
+          <name>Attribute_filter</name>
+          <filterFieldsProcess>%aditoprj%/entity/Product_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js</filterFieldsProcess>
+          <filterValuesProcess>%aditoprj%/entity/Product_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Product_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtensionSet>
+      </filterExtensions>
     </dbRecordContainer>
     <indexRecordContainer>
       <name>index</name>
diff --git a/entity/Product_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js b/entity/Product_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..65d6b67c6e0affc794a04043f264fa103f4c2ba0
--- /dev/null
+++ b/entity/Product_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var sqlCond = AttributeFilterExtensionMaker.makeFilterConditionSql();
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Product_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js b/entity/Product_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..209ddd39ef4a15b1190ef2bd4955ccdc78f5808b
--- /dev/null
+++ b/entity/Product_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var fields = AttributeFilterExtensionMaker.makeFilterFields();
+result.string(fields);
\ No newline at end of file
diff --git a/entity/Product_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js b/entity/Product_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..942b0a0495a179f9c25d19330bb8cd59c5563ec0
--- /dev/null
+++ b/entity/Product_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var values = AttributeFilterExtensionMaker.makeFilterValues();
+result.object(values);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/Salesproject_entity.aod b/entity/Salesproject_entity/Salesproject_entity.aod
index 4bfc2bc067dcb47f39a25a5983b44cdebe6ab8e5..11343db7d4ad56431574077b84dea11fe5f1f034 100644
--- a/entity/Salesproject_entity/Salesproject_entity.aod
+++ b/entity/Salesproject_entity/Salesproject_entity.aod
@@ -792,6 +792,15 @@
           <isFilterable v="true" />
         </dbRecordFieldMapping>
       </recordFieldMappings>
+      <filterExtensions>
+        <filterExtensionSet>
+          <name>Attribute_filter</name>
+          <filterFieldsProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js</filterFieldsProcess>
+          <filterValuesProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js</filterValuesProcess>
+          <filterConditionProcess>%aditoprj%/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js</filterConditionProcess>
+          <filtertype>BASIC</filtertype>
+        </filterExtensionSet>
+      </filterExtensions>
     </dbRecordContainer>
     <indexRecordContainer>
       <name>index</name>
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..65d6b67c6e0affc794a04043f264fa103f4c2ba0
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterConditionProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var sqlCond = AttributeFilterExtensionMaker.makeFilterConditionSql();
+result.string(sqlCond);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..209ddd39ef4a15b1190ef2bd4955ccdc78f5808b
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterFieldsProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var fields = AttributeFilterExtensionMaker.makeFilterFields();
+result.string(fields);
\ No newline at end of file
diff --git a/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js b/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
new file mode 100644
index 0000000000000000000000000000000000000000..942b0a0495a179f9c25d19330bb8cd59c5563ec0
--- /dev/null
+++ b/entity/Salesproject_entity/recordcontainers/db/filterextensions/attribute_filter/filterValuesProcess.js
@@ -0,0 +1,5 @@
+import("system.result");
+import("AttributeFilter_lib");
+
+var values = AttributeFilterExtensionMaker.makeFilterValues();
+result.object(values);
\ No newline at end of file
diff --git a/process/AttributeFilter_lib/process.js b/process/AttributeFilter_lib/process.js
index 6278c014c9e75e3d5882962ea723b5882548721b..ed66d3825bb8cd716e99f87b0b8028b6fbf44239 100644
--- a/process/AttributeFilter_lib/process.js
+++ b/process/AttributeFilter_lib/process.js
@@ -1,3 +1,4 @@
+import("system.translate");
 import("Entity_lib");
 import("system.vars");
 import("Context_lib");
@@ -7,6 +8,8 @@ import("Attribute_lib");
 import("system.entities");
 import("system.util");
 
+//TODO: comment lib
+
 function AttributeSearchNameCoder(){}
 
 AttributeSearchNameCoder.encode = function (pUid, pAttributeType)
@@ -40,10 +43,14 @@ AttributeFilterExtensionMaker.getFilterFields = function(pObjectType)
         .addParameter("ObjectType_param", pObjectType);
 
     var attributeRows = entities.getRows(loadingConfig);
-
     attributeRows.forEach(function(row){
         var attributeType = row["ATTRIBUTE_TYPE"];
         var contentType = AttributeTypeUtil.getContentType(attributeType);
+        
+        if (attributeType.trim() == $AttributeTypes.VOID.toString())
+        {
+            contentType = "BOOLEAN";
+        }
 
         if (contentType)
         {
@@ -72,11 +79,12 @@ AttributeFilterExtensionMaker.makeFilterFields = function()
 AttributeFilterExtensionMaker.getFilterValues = function(pFilter) 
 {
     var filter = JSON.parse(pFilter);
-    var name = name = AttributeSearchNameCoder.decode(filter.name);
+    var name =  AttributeSearchNameCoder.decode(filter.name);
 
     var attributeId = name.id;
     var attrType = name.type;
-    
+    if (attrType == $AttributeTypes.VOID.toString())
+        attrType = $AttributeTypes.BOOLEAN.toString();
     var res = AttributeUtil.getPossibleListValues(attributeId, attrType);
     if (res == null)
         res = [];
@@ -90,27 +98,47 @@ AttributeFilterExtensionMaker.makeFilterValues = function()
     return res;
 };
 
-AttributeFilterExtensionMaker.getFilterCondition = function(pObjectType, pFilterName, pCondition, pIdTableName, pIdColumnName) 
+AttributeFilterExtensionMaker.getFilterCondition = function(pObjectType, pFilterName, pCondition, pRawValue, pOperatorName, pIdTableName, pIdColumnName) 
 {
+    var resSql; 
+    var preparedValues = [];
     var name = pFilterName;
     name = AttributeSearchNameCoder.decode(name);
     var attributeId = name.id;
-    var dbField = AttributeTypeUtil.getDatabaseField(name.type);
-
-    var condition = pCondition;
-    condition = condition.replace("{'table.column'}", dbField, "g");
-
-    var preparedValues = [
-        [pObjectType, SqlUtils.getSingleColumnType("AB_ATTRIBUTERELATION.OBJECT_TYPE")],
-        [attributeId, SqlUtils.getSingleColumnType("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID")]
-    ];
-    var resSql = pIdColumnName + " in (select " + pIdTableName + "." + pIdColumnName + " \n\
-                         from " + pIdTableName + " \n\
-                         left join AB_ATTRIBUTERELATION on (AB_ATTRIBUTERELATION.OBJECT_ROWID = " + pIdTableName + "." + pIdColumnName + " \n\
-                                                            and AB_ATTRIBUTERELATION.OBJECT_TYPE = ? \n\
-                                                            and AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID = ?) \n\
-                         where " + condition + " )";
-
+    var attributeType = name.type;
+    
+    if (attributeType == $AttributeTypes.VOID.toString())
+    {
+        preparedValues.push([pObjectType, SqlUtils.getSingleColumnType("AB_ATTRIBUTERELATION.OBJECT_TYPE")]);
+        preparedValues.push([attributeId, SqlUtils.getSingleColumnType("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID")]);
+        
+        resSql = "(select count(*) \n\
+                    from AB_ATTRIBUTERELATION \n\
+                    where OBJECT_ROWID = " + pIdTableName + "." + pIdColumnName +" \n\
+                    and OBJECT_TYPE = ? \n\
+                    and AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID = ?)";
+
+        if (pOperatorName == "IS NOT NULL" || pRawValue == "1" && pOperatorName == "LIKE" || pRawValue == "0" && pOperatorName == "NOT LIKE")
+            resSql += " > 0 ";
+        else
+            resSql += " = 0 ";
+    }
+    else
+    {
+        var dbField = AttributeTypeUtil.getDatabaseField(name.type);
+
+        var condition = pCondition;
+        condition = condition.replace("{'table.column'}", dbField, "g");
+        preparedValues.push([pObjectType, SqlUtils.getSingleColumnType("AB_ATTRIBUTERELATION.OBJECT_TYPE")]);
+        preparedValues.push([attributeId, SqlUtils.getSingleColumnType("AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID")]);
+
+        resSql = pIdTableName + "." + pIdColumnName + " in (select " + pIdTableName + "." + pIdColumnName + " \n\
+                             from " + pIdTableName + " \n\
+                             left join AB_ATTRIBUTERELATION on (AB_ATTRIBUTERELATION.OBJECT_ROWID = " + pIdTableName + "." + pIdColumnName + " \n\
+                                                                and AB_ATTRIBUTERELATION.OBJECT_TYPE = ? \n\
+                                                                and AB_ATTRIBUTERELATION.AB_ATTRIBUTE_ID = ?) \n\
+                             where " + condition + " )";
+    }
     resSql = db.translateCondition([resSql, preparedValues]);
     return resSql;
 };
@@ -120,7 +148,9 @@ AttributeFilterExtensionMaker.makeFilterConditionSql = function()
     var objectType = ContextUtils.getCurrentContextId();
     var filterName = vars.get("$local.name");
     var filterCond = vars.get("$local.condition");
+    var filterRawValue = vars.get("$local.rawvalue");
+    var filterOpratorName = vars.get("$local.operator2").trim();
     var uidInfo = EntityUtils.parseUidColumn(vars.get("$sys.uidcolumn"));
-    var res = AttributeFilterExtensionMaker.getFilterCondition(objectType, filterName, filterCond, uidInfo.table, uidInfo.column);
+    var res = AttributeFilterExtensionMaker.getFilterCondition(objectType, filterName, filterCond, filterRawValue, filterOpratorName, uidInfo.table, uidInfo.column);
     return res;
 };
\ No newline at end of file