diff --git a/indexer-core/pom.xml b/indexer-core/pom.xml
index 9242903c9118122c639d169c8ac4c5c62fdd9140..fe26ae170c9a811ec0c89975c054ced554dbc356 100644
--- a/indexer-core/pom.xml
+++ b/indexer-core/pom.xml
@@ -17,6 +17,7 @@
 
 	<properties>
 		<commons-beanutils.version>1.9.4</commons-beanutils.version>
+		<osdu.oscorecommon.version>0.3.29</osdu.oscorecommon.version>
 	</properties>
 
 	<dependencies>
@@ -34,6 +35,7 @@
 		<dependency>
 			<groupId>org.opengroup.osdu</groupId>
 			<artifactId>os-core-common</artifactId>
+			<version>${osdu.oscorecommon.version}</version>
 		</dependency>
 
 		<!-- spring boot dependencies -->
diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexSchemaServiceImpl.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexSchemaServiceImpl.java
index 113dc54bde6c9e4bf11e2fc36ab1725d0be77b72..e4bfe381d65dd26b5c8fee673d7adb6c57943485 100644
--- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexSchemaServiceImpl.java
+++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexSchemaServiceImpl.java
@@ -221,6 +221,7 @@ public class IndexSchemaServiceImpl implements IndexSchemaService {
             meta.put(RecordMetaAttribute.TYPE.getValue(), TypeMapper.getIndexerType(RecordMetaAttribute.TYPE));
             meta.put(RecordMetaAttribute.ACL.getValue(), TypeMapper.getIndexerType(RecordMetaAttribute.ACL));
             meta.put(RecordMetaAttribute.X_ACL.getValue(), TypeMapper.getIndexerType(RecordMetaAttribute.X_ACL));
+            meta.put(RecordMetaAttribute.TAGS.getValue(), TypeMapper.getIndexerType(RecordMetaAttribute.TAGS));
             meta.put(RecordMetaAttribute.LEGAL.getValue(), TypeMapper.getIndexerType(RecordMetaAttribute.LEGAL));
             meta.put(RecordMetaAttribute.ANCESTRY.getValue(), TypeMapper.getIndexerType(RecordMetaAttribute.ANCESTRY));
             meta.put(RecordMetaAttribute.INDEX_STATUS.getValue(), TypeMapper.getIndexerType(RecordMetaAttribute.INDEX_STATUS));
diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerMappingServiceImpl.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerMappingServiceImpl.java
index 95f1c504f9eca6e03027fd4e14e8389fb8cb61bc..0e5055829dd0d69cfb134b9e06d9ea42b7619c78 100644
--- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerMappingServiceImpl.java
+++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerMappingServiceImpl.java
@@ -123,13 +123,7 @@ public class IndexerMappingServiceImpl extends MappingServiceImpl implements Ind
         Map<String, Object> dataMapping = new HashMap<>();
         if (schema.getDataSchema() != null) {
             for (Map.Entry<String, String> entry : schema.getDataSchema().entrySet()) {
-                // Apply de_indexer_analyzer and de_search_analyzer to TEXT field
-                if (configurationProperties.isPreDemo() && ElasticType.TEXT.getValue().equalsIgnoreCase(entry.getValue())) {
-                    log.info(String.format("indexing %s with custom analyzer", entry.getKey()));
-                    dataMapping.put(entry.getKey(), Records.Analyzer.builder().type(entry.getValue()).analyzer(DEAnalyzerType.INDEXER_ANALYZER.getValue()).search_analyzer(DEAnalyzerType.SEARCH_ANALYZER.getValue()).build());
-                } else {
-                    dataMapping.put(entry.getKey(), Records.Type.builder().type(entry.getValue()).build());
-                }
+                dataMapping.put(entry.getKey(), Records.Type.builder().type(entry.getValue()).build());
             }
 
             // inner properties.data.properties block
diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java
index 6bd98690beaf036862e0f8fdfe5aea2d35b29a3e..681ae53ac7a77049b9e83ca285edd6d488283a98 100644
--- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java
+++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java
@@ -47,6 +47,7 @@ import org.opengroup.osdu.indexer.util.ElasticClientHandler;
 import org.opengroup.osdu.core.common.search.ElasticIndexNameResolver;
 import org.apache.commons.beanutils.PropertyUtils;
 import org.apache.commons.beanutils.NestedNullException;
+import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 import javax.inject.Inject;
@@ -58,6 +59,7 @@ import java.util.logging.Level;
 import java.util.stream.Collectors;
 
 @Service
+@Primary
 public class IndexerServiceImpl implements IndexerService {
 
     private static final TimeValue BULK_REQUEST_TIMEOUT = TimeValue.timeValueMinutes(1);
@@ -308,6 +310,9 @@ public class IndexerServiceImpl implements IndexerService {
             document.setVersion(storageRecord.getVersion());
             document.setAcl(storageRecord.getAcl());
             document.setLegal(storageRecord.getLegal());
+            if (storageRecord.getTags() != null) {
+                document.setTags(storageRecord.getTags());
+            }
             RecordStatus recordStatus = this.jobStatus.getJobStatusByRecordId(storageRecord.getId());
             if (recordStatus.getIndexProgress().getStatusCode() == 0) {
                 recordStatus.getIndexProgress().setStatusCode(HttpStatus.SC_OK);
@@ -462,6 +467,7 @@ public class IndexerServiceImpl implements IndexerService {
         indexerPayload.put(RecordMetaAttribute.TYPE.getValue(), record.getType());
         indexerPayload.put(RecordMetaAttribute.VERSION.getValue(), record.getVersion());
         indexerPayload.put(RecordMetaAttribute.ACL.getValue(), record.getAcl());
+        indexerPayload.put(RecordMetaAttribute.TAGS.getValue(), record.getTags());
         indexerPayload.put(RecordMetaAttribute.X_ACL.getValue(), Acl.flattenAcl(record.getAcl()));
         indexerPayload.put(RecordMetaAttribute.LEGAL.getValue(), record.getLegal());
         indexerPayload.put(RecordMetaAttribute.INDEX_STATUS.getValue(), record.getIndexProgress());
diff --git a/indexer-core/src/main/java/org/opengroup/osdu/indexer/util/TypeMapper.java b/indexer-core/src/main/java/org/opengroup/osdu/indexer/util/TypeMapper.java
index 2f7c9b7c0e9b3051d6a428fec359be7418f35f93..7b376ee5fb804150261c7a6108543d93eab698aa 100644
--- a/indexer-core/src/main/java/org/opengroup/osdu/indexer/util/TypeMapper.java
+++ b/indexer-core/src/main/java/org/opengroup/osdu/indexer/util/TypeMapper.java
@@ -40,6 +40,7 @@ public class TypeMapper {
         metaAttributeIndexerType.put(RecordMetaAttribute.VERSION.getValue(), ElasticType.LONG.getValue());
         metaAttributeIndexerType.put(RecordMetaAttribute.X_ACL.getValue(), ElasticType.KEYWORD.getValue());
         metaAttributeIndexerType.put(RecordMetaAttribute.ACL.getValue(), getAclIndexerMapping());
+        metaAttributeIndexerType.put(RecordMetaAttribute.TAGS.getValue(), ElasticType.FLATTENED.getValue());
         metaAttributeIndexerType.put(RecordMetaAttribute.LEGAL.getValue(), getLegalIndexerMapping());
         metaAttributeIndexerType.put(RecordMetaAttribute.ANCESTRY.getValue(), getAncestryIndexerMapping());
         metaAttributeIndexerType.put(RecordMetaAttribute.INDEX_STATUS.getValue(), getIndexStatusMapping());
diff --git a/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/impl/SchemaProviderImplTest.java b/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/impl/SchemaProviderImplTest.java
index a3c5b46e73f938c8b5824fe484a7aa993919d5a0..5fce7b1fd1b1d4dda401152996eb67466374b70c 100644
--- a/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/impl/SchemaProviderImplTest.java
+++ b/indexer-core/src/test/java/org/opengroup/osdu/indexer/service/impl/SchemaProviderImplTest.java
@@ -77,7 +77,7 @@ public class SchemaProviderImplTest {
         Assert.assertEquals("{\n" +
                 "  \"kind\" : \"fake\",\n" +
                 "  \"schema\" : [ ]\n" +
-                "}", schema);
+                "}", schema.replaceAll("\r", ""));
 
     }
 
diff --git a/pom.xml b/pom.xml
index af837eb4e68da25419542c76461d32943e68cda3..1bc014366cb4d3fe6a9a9d2b4d0fea318917e3fc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -21,7 +21,7 @@
         <java.version>1.8</java.version>
         <springfox-version>2.7.0</springfox-version>
         <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
-        <os-core-common.version>0.3.19</os-core-common.version>
+        <os-core-common.version>0.3.29</os-core-common.version>
         <snakeyaml.version>1.26</snakeyaml.version>
         <hibernate-validator.version>6.1.5.Final</hibernate-validator.version>
         <jackson.version>2.11.2</jackson.version>
diff --git a/provider/indexer-azure/pom.xml b/provider/indexer-azure/pom.xml
index 8a5f33513d0b6db572b7410418684c8afea0927f..e02fe158f61dc897d7f58271b35edac7abe3d0d4 100644
--- a/provider/indexer-azure/pom.xml
+++ b/provider/indexer-azure/pom.xml
@@ -44,7 +44,7 @@
         <indexer-core.version>1.0.6-SNAPSHOT</indexer-core.version>
         <spring-security-jwt.version>1.1.1.RELEASE</spring-security-jwt.version>
         <osdu.corelibazure.version>0.0.42</osdu.corelibazure.version>
-        <osdu.oscorecommon.version>0.3.12</osdu.oscorecommon.version>
+        <osdu.oscorecommon.version>0.3.29</osdu.oscorecommon.version>
         <reactor-netty.version>0.9.12.RELEASE</reactor-netty.version>
         <java-jwt.version>3.8.1</java-jwt.version>
         <powermock.version>2.0.2</powermock.version>
diff --git a/provider/indexer-reference/pom.xml b/provider/indexer-reference/pom.xml
index 99d01082c723b55da8f969a693d301daf9378570..40e6a525a226a0ce33b090d6f672155421eda9f6 100644
--- a/provider/indexer-reference/pom.xml
+++ b/provider/indexer-reference/pom.xml
@@ -50,7 +50,7 @@
         <dependency>
             <groupId>org.opengroup.osdu</groupId>
             <artifactId>os-core-common</artifactId>
-            <version>0.0.18</version>
+            <version>0.3.29</version>
         </dependency>
 
         <dependency>
diff --git a/provider/indexer-reference/src/main/java/org/opengroup/osdu/indexer/di/EntitlementsClientFactory.java b/provider/indexer-reference/src/main/java/org/opengroup/osdu/indexer/di/EntitlementsClientFactory.java
index 45131176cd1ff35eb2dc411b0073b245c0d3b8e8..2872c5c53405e12550c901064da117764208dc4f 100644
--- a/provider/indexer-reference/src/main/java/org/opengroup/osdu/indexer/di/EntitlementsClientFactory.java
+++ b/provider/indexer-reference/src/main/java/org/opengroup/osdu/indexer/di/EntitlementsClientFactory.java
@@ -20,6 +20,7 @@ package org.opengroup.osdu.indexer.di;
 import org.opengroup.osdu.core.common.entitlements.EntitlementsAPIConfig;
 import org.opengroup.osdu.core.common.entitlements.EntitlementsFactory;
 import org.opengroup.osdu.core.common.entitlements.IEntitlementsFactory;
+import org.opengroup.osdu.core.common.http.json.HttpResponseBodyMapper;
 import org.opengroup.osdu.indexer.config.EntitlementsConfigProperties;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.config.AbstractFactoryBean;
@@ -34,12 +35,15 @@ public class EntitlementsClientFactory extends AbstractFactoryBean<IEntitlements
 
   private EntitlementsConfigProperties entitlementsConfigProperties;
 
+  @Autowired
+  private HttpResponseBodyMapper mapper;
+
   @Override
   protected IEntitlementsFactory createInstance() throws Exception {
   	return new EntitlementsFactory(EntitlementsAPIConfig
         .builder()
         .rootUrl(entitlementsConfigProperties.getAuthorizeApi())
-        .build());
+        .build(), mapper);
   }
 
   @Override
diff --git a/provider/indexer-reference/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java b/provider/indexer-reference/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java
index 558e30bcc6d7c6653f51f1d023a56b6f015a5c18..1be2ba81868c6f3ed56cd4b56a25edfdbd576f99 100644
--- a/provider/indexer-reference/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java
+++ b/provider/indexer-reference/src/main/java/org/opengroup/osdu/indexer/service/IndexerServiceImpl.java
@@ -68,7 +68,6 @@ import org.springframework.context.annotation.Primary;
 import org.springframework.stereotype.Service;
 
 @Service
-@Primary
 public class IndexerServiceImpl implements IndexerService {
 
   private static final TimeValue BULK_REQUEST_TIMEOUT = TimeValue.timeValueMinutes(1);
diff --git a/provider/indexer-reference/src/test/java/org/opengroup/osdu/indexer/middleware/IndexFilterTest.java b/provider/indexer-reference/src/test/java/org/opengroup/osdu/indexer/middleware/IndexFilterTest.java
index 9ec5fb7a30044f7f105c9a97229cb37322f218b9..bfc4f3a3330570ea73c59d2721954dd75aded7a5 100644
--- a/provider/indexer-reference/src/test/java/org/opengroup/osdu/indexer/middleware/IndexFilterTest.java
+++ b/provider/indexer-reference/src/test/java/org/opengroup/osdu/indexer/middleware/IndexFilterTest.java
@@ -51,30 +51,17 @@ public class IndexFilterTest {
 
     indexFilter.doFilter(httpServletRequest, httpServletResponse, filterChain);
 
-    Mockito.verify(httpServletResponse)
-        .addHeader("Access-Control-Allow-Origin", Collections.singletonList("*").toString());
-    Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Headers", Collections
-        .singletonList(
-            "origin, content-type, accept, authorization, data-partition-id, correlation-id, appkey")
-        .toString());
-    Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Methods",
-        Collections.singletonList("GET, POST, PUT, DELETE, OPTIONS, HEAD").toString());
-    Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Credentials",
-        Collections.singletonList("true").toString());
-    Mockito.verify(httpServletResponse)
-        .addHeader("X-Frame-Options", Collections.singletonList("DENY").toString());
-    Mockito.verify(httpServletResponse)
-        .addHeader("X-XSS-Protection", Collections.singletonList("1; mode=block").toString());
-    Mockito.verify(httpServletResponse)
-        .addHeader("X-Content-Type-Options", Collections.singletonList("nosniff").toString());
-    Mockito.verify(httpServletResponse).addHeader("Cache-Control",
-        Collections.singletonList("no-cache, no-store, must-revalidate").toString());
-    Mockito.verify(httpServletResponse).addHeader("Content-Security-Policy",
-        Collections.singletonList("default-src 'self'").toString());
-    Mockito.verify(httpServletResponse).addHeader("Strict-Transport-Security",
-        Collections.singletonList("max-age=31536000; includeSubDomains").toString());
-    Mockito.verify(httpServletResponse)
-        .addHeader("Expires", Collections.singletonList("0").toString());
+    Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Origin", Collections.singletonList("*").toString());
+    Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Headers", Collections.singletonList("origin, content-type, accept, authorization, data-partition-id, correlation-id, appkey").toString());
+    Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Methods", Collections.singletonList("GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH").toString());
+    Mockito.verify(httpServletResponse).addHeader("Access-Control-Allow-Credentials", Collections.singletonList("true").toString());
+    Mockito.verify(httpServletResponse).addHeader("X-Frame-Options", Collections.singletonList("DENY").toString());
+    Mockito.verify(httpServletResponse).addHeader("X-XSS-Protection", Collections.singletonList("1; mode=block").toString());
+    Mockito.verify(httpServletResponse).addHeader("X-Content-Type-Options", Collections.singletonList("nosniff").toString());
+    Mockito.verify(httpServletResponse).addHeader("Cache-Control", Collections.singletonList("no-cache, no-store, must-revalidate").toString());
+    Mockito.verify(httpServletResponse).addHeader("Content-Security-Policy", Collections.singletonList("default-src 'self'").toString());
+    Mockito.verify(httpServletResponse).addHeader("Strict-Transport-Security", Collections.singletonList("max-age=31536000; includeSubDomains").toString());
+    Mockito.verify(httpServletResponse).addHeader("Expires", Collections.singletonList("0").toString());
     Mockito.verify(httpServletResponse).addHeader("correlation-id", "correlation-id-value");
     Mockito.verify(filterChain).doFilter(httpServletRequest, httpServletResponse);
   }