diff --git a/pom.xml b/pom.xml
index 5bec33960..c5c10ae35 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,7 +18,7 @@
 	<url>https://github.com/spring-projects/spring-data-elasticsearch</url>
 
 	<properties>
-		<elasticsearch>7.15.2</elasticsearch>
+		<elasticsearch>7.16.0</elasticsearch>
 		<log4j>2.14.1</log4j>
 		<netty>4.1.65.Final</netty>
 		<springdata.commons>2.7.0-SNAPSHOT</springdata.commons>
diff --git a/src/main/asciidoc/preface.adoc b/src/main/asciidoc/preface.adoc
index 22f994dd7..4a26c8453 100644
--- a/src/main/asciidoc/preface.adoc
+++ b/src/main/asciidoc/preface.adoc
@@ -34,12 +34,13 @@ The following table shows the Elasticsearch versions that are used by Spring Dat
 [cols="^,^,^,^,^",options="header"]
 |===
 | Spring Data Release Train | Spring Data Elasticsearch | Elasticsearch | Spring Framework | Spring Boot
-| 2021.1 (Q)footnote:cdv[Currently in development] | 4.3.xfootnote:cdv[] | 7.15.2 | 5.3.xfootnote:cdv[] | 2.5 .xfootnote:cdv[]
+| 2022.0 (Raj) | 4.4.x | 7.16.0 | 5.3.x |
+| 2021.1 (Q) | 4.3.x | 7.15.2 | 5.3.x | 2.6.x
 | 2021.0 (Pascal) | 4.2.x | 7.12.0 | 5.3.x | 2.5.x
-| 2020.0 (Ockham) | 4.1.x | 7.9.3 | 5.3.2 | 2.4.x
-| Neumann | 4.0.x | 7.6.2 | 5.2.12 |2.3.x
-| Moore | 3.2.x |6.8.12 | 5.2.12| 2.2.x
-| Lovelacefootnote:oom[Out of maintenance] | 3.1.xfootnote:oom[] | 6.2.2 | 5.1.19 |2.1.x
+| 2020.0 (Ockham)footnote:oom[Out of maintenance] | 4.1.xfootnote:oom[] | 7.9.3 | 5.3.2 | 2.4.x
+| Neumannfootnote:oom[] | 4.0.xfootnote:oom[] | 7.6.2 | 5.2.12 |2.3.x
+| Moorefootnote:oom[] | 3.2.xfootnote:oom[] |6.8.12 | 5.2.12| 2.2.x
+| Lovelacefootnote:oom[] | 3.1.xfootnote:oom[] | 6.2.2 | 5.1.19 |2.1.x
 | Kayfootnote:oom[] | 3.0.xfootnote:oom[] | 5.5.0 | 5.0.13 | 2.0.x
 | Ingallsfootnote:oom[] | 2.1.xfootnote:oom[] | 2.4.0 | 4.3.25 | 1.5.x
 |===
diff --git a/src/main/asciidoc/reference/elasticsearch-new.adoc b/src/main/asciidoc/reference/elasticsearch-new.adoc
index 1141a1420..4eb35beb8 100644
--- a/src/main/asciidoc/reference/elasticsearch-new.adoc
+++ b/src/main/asciidoc/reference/elasticsearch-new.adoc
@@ -1,6 +1,11 @@
 [[new-features]]
 = What's new
 
+[[new-features.4-4-0]]
+== New in Spring Data Elasticsearch 4.4
+
+* Upgrade to Elasticsearch 7.16.0.
+
 [[new-features.4-3-0]]
 == New in Spring Data Elasticsearch 4.3
 
diff --git a/src/main/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/reactive/DefaultReactiveElasticsearchClient.java b/src/main/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/reactive/DefaultReactiveElasticsearchClient.java
index e7a2faeaa..cc26cfc70 100644
--- a/src/main/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/reactive/DefaultReactiveElasticsearchClient.java
+++ b/src/main/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/reactive/DefaultReactiveElasticsearchClient.java
@@ -83,10 +83,6 @@
 import org.elasticsearch.client.GetAliasesResponse;
 import org.elasticsearch.client.Request;
 import org.elasticsearch.client.indices.*;
-import org.elasticsearch.common.xcontent.DeprecationHandler;
-import org.elasticsearch.common.xcontent.NamedXContentRegistry;
-import org.elasticsearch.common.xcontent.XContentParser;
-import org.elasticsearch.common.xcontent.XContentType;
 import org.elasticsearch.core.TimeValue;
 import org.elasticsearch.index.get.GetResult;
 import org.elasticsearch.index.reindex.BulkByScrollResponse;
@@ -100,6 +96,10 @@
 import org.elasticsearch.search.SearchHits;
 import org.elasticsearch.search.aggregations.Aggregation;
 import org.elasticsearch.search.suggest.Suggest;
+import org.elasticsearch.xcontent.DeprecationHandler;
+import org.elasticsearch.xcontent.NamedXContentRegistry;
+import org.elasticsearch.xcontent.XContentParser;
+import org.elasticsearch.xcontent.XContentType;
 import org.reactivestreams.Publisher;
 import org.springframework.data.elasticsearch.RestStatusException;
 import org.springframework.data.elasticsearch.UncategorizedElasticsearchException;
diff --git a/src/main/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/util/NamedXContents.java b/src/main/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/util/NamedXContents.java
index 077b2f3ec..8a6a76d19 100644
--- a/src/main/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/util/NamedXContents.java
+++ b/src/main/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/util/NamedXContents.java
@@ -26,9 +26,6 @@
 import org.elasticsearch.client.analytics.ParsedTopMetrics;
 import org.elasticsearch.client.analytics.StringStatsAggregationBuilder;
 import org.elasticsearch.client.analytics.TopMetricsAggregationBuilder;
-import org.elasticsearch.common.xcontent.ContextParser;
-import org.elasticsearch.common.xcontent.NamedXContentRegistry;
-import org.elasticsearch.common.xcontent.ParseField;
 import org.elasticsearch.search.aggregations.Aggregation;
 import org.elasticsearch.search.aggregations.bucket.adjacency.AdjacencyMatrixAggregationBuilder;
 import org.elasticsearch.search.aggregations.bucket.adjacency.ParsedAdjacencyMatrix;
@@ -78,6 +75,9 @@
 import org.elasticsearch.search.suggest.phrase.PhraseSuggestionBuilder;
 import org.elasticsearch.search.suggest.term.TermSuggestion;
 import org.elasticsearch.search.suggest.term.TermSuggestionBuilder;
+import org.elasticsearch.xcontent.ContextParser;
+import org.elasticsearch.xcontent.NamedXContentRegistry;
+import org.elasticsearch.xcontent.ParseField;
 import org.springframework.data.elasticsearch.backend.elasticsearch7.client.reactive.ReactiveElasticsearchClient;
 
 /**
diff --git a/src/main/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/util/RequestConverters.java b/src/main/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/util/RequestConverters.java
index 6fb85b979..2236873bf 100644
--- a/src/main/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/util/RequestConverters.java
+++ b/src/main/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/util/RequestConverters.java
@@ -80,14 +80,7 @@
 import org.elasticsearch.common.Strings;
 import org.elasticsearch.common.bytes.BytesReference;
 import org.elasticsearch.common.lucene.uid.Versions;
-import org.elasticsearch.common.xcontent.DeprecationHandler;
-import org.elasticsearch.common.xcontent.NamedXContentRegistry;
-import org.elasticsearch.common.xcontent.ToXContent;
-import org.elasticsearch.common.xcontent.XContent;
-import org.elasticsearch.common.xcontent.XContentBuilder;
 import org.elasticsearch.common.xcontent.XContentHelper;
-import org.elasticsearch.common.xcontent.XContentParser;
-import org.elasticsearch.common.xcontent.XContentType;
 import org.elasticsearch.core.SuppressForbidden;
 import org.elasticsearch.core.TimeValue;
 import org.elasticsearch.index.VersionType;
@@ -101,6 +94,13 @@
 import org.elasticsearch.script.mustache.SearchTemplateRequest;
 import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
 import org.elasticsearch.tasks.TaskId;
+import org.elasticsearch.xcontent.DeprecationHandler;
+import org.elasticsearch.xcontent.NamedXContentRegistry;
+import org.elasticsearch.xcontent.ToXContent;
+import org.elasticsearch.xcontent.XContent;
+import org.elasticsearch.xcontent.XContentBuilder;
+import org.elasticsearch.xcontent.XContentParser;
+import org.elasticsearch.xcontent.XContentType;
 import org.springframework.data.elasticsearch.backend.elasticsearch7.client.reactive.ReactiveElasticsearchClient;
 import org.springframework.http.HttpMethod;
 import org.springframework.lang.Nullable;
@@ -1232,7 +1232,12 @@ Params withWaitForActiveShards(ActiveShardCount activeShardCount, ActiveShardCou
 			return this;
 		}
 
-		Params withIndicesOptions(IndicesOptions indicesOptions) {
+		Params withIndicesOptions(@Nullable IndicesOptions indicesOptions) {
+
+			if (indicesOptions == null) {
+				return this;
+			}
+
 			withIgnoreUnavailable(indicesOptions.ignoreUnavailable());
 			putParam("allow_no_indices", Boolean.toString(indicesOptions.allowNoIndices()));
 			String expandWildcards;
diff --git a/src/test/java/org/springframework/data/elasticsearch/backend/elasticsearch7/RequestFactoryTests.java b/src/test/java/org/springframework/data/elasticsearch/backend/elasticsearch7/RequestFactoryTests.java
index fc686343e..8697a7ede 100644
--- a/src/test/java/org/springframework/data/elasticsearch/backend/elasticsearch7/RequestFactoryTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/backend/elasticsearch7/RequestFactoryTests.java
@@ -31,13 +31,13 @@
 import org.elasticsearch.client.indices.PutIndexTemplateRequest;
 import org.elasticsearch.common.lucene.search.function.CombineFunction;
 import org.elasticsearch.common.lucene.search.function.FunctionScoreQuery;
-import org.elasticsearch.common.xcontent.ToXContent;
 import org.elasticsearch.common.xcontent.XContentHelper;
-import org.elasticsearch.common.xcontent.XContentType;
 import org.elasticsearch.index.query.QueryBuilders;
 import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder;
 import org.elasticsearch.index.query.functionscore.FunctionScoreQueryBuilder.FilterFunctionBuilder;
 import org.elasticsearch.index.query.functionscore.GaussDecayFunctionBuilder;
+import org.elasticsearch.xcontent.ToXContent;
+import org.elasticsearch.xcontent.XContentType;
 import org.json.JSONException;
 import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.DisplayName;
diff --git a/src/test/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/reactive/ReactiveElasticsearchClientUnitTests.java b/src/test/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/reactive/ReactiveElasticsearchClientUnitTests.java
index 3d88cd978..cec92301e 100644
--- a/src/test/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/reactive/ReactiveElasticsearchClientUnitTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/backend/elasticsearch7/client/reactive/ReactiveElasticsearchClientUnitTests.java
@@ -35,12 +35,12 @@
 import org.elasticsearch.action.index.IndexRequest;
 import org.elasticsearch.action.search.SearchRequest;
 import org.elasticsearch.action.update.UpdateRequest;
-import org.elasticsearch.common.xcontent.XContentType;
 import org.elasticsearch.core.TimeValue;
 import org.elasticsearch.index.VersionType;
 import org.elasticsearch.rest.RestStatus;
 import org.elasticsearch.search.aggregations.bucket.terms.ParsedStringTerms;
 import org.elasticsearch.search.aggregations.metrics.ParsedMax;
+import org.elasticsearch.xcontent.XContentType;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.mockito.Mockito;
diff --git a/src/test/java/org/springframework/data/elasticsearch/core/DocumentAdaptersUnitTests.java b/src/test/java/org/springframework/data/elasticsearch/core/DocumentAdaptersUnitTests.java
index f8b781042..bfcb2f7cd 100644
--- a/src/test/java/org/springframework/data/elasticsearch/core/DocumentAdaptersUnitTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/core/DocumentAdaptersUnitTests.java
@@ -142,7 +142,7 @@ public void shouldAdaptSearchResponse() {
 		Map<String, DocumentField> fields = Collections.singletonMap("field",
 				new DocumentField("field", Collections.singletonList("value")));
 
-		SearchShardTarget shard = new SearchShardTarget("node", new ShardId("index", "uuid", 42), null, null);
+		SearchShardTarget shard = new SearchShardTarget("node", new ShardId("index", "uuid", 42), null);
 		SearchHit searchHit = new SearchHit(123, "my-id", new Text("type"), null, fields);
 		searchHit.shard(shard);
 		searchHit.setSeqNo(1);
@@ -217,7 +217,7 @@ public void shouldAdaptSearchResponseSource() {
 
 		BytesArray source = new BytesArray("{\"field\":\"value\"}");
 
-		SearchShardTarget shard = new SearchShardTarget("node", new ShardId("index", "uuid", 42), null, null);
+		SearchShardTarget shard = new SearchShardTarget("node", new ShardId("index", "uuid", 42), null);
 		SearchHit searchHit = new SearchHit(123, "my-id", new Text("type"), null, null);
 		searchHit.shard(shard);
 		searchHit.sourceRef(source).score(42);
diff --git a/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsIntegrationTests.java b/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsIntegrationTests.java
index e918343de..c4bd06454 100644
--- a/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsIntegrationTests.java
+++ b/src/test/java/org/springframework/data/elasticsearch/core/suggest/CompletionWithContextsIntegrationTests.java
@@ -25,13 +25,13 @@
 
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.common.unit.Fuzziness;
-import org.elasticsearch.common.xcontent.ToXContent;
 import org.elasticsearch.search.suggest.SuggestBuilder;
 import org.elasticsearch.search.suggest.SuggestBuilders;
 import org.elasticsearch.search.suggest.SuggestionBuilder;
 import org.elasticsearch.search.suggest.completion.CompletionSuggestion;
 import org.elasticsearch.search.suggest.completion.CompletionSuggestionBuilder;
 import org.elasticsearch.search.suggest.completion.context.CategoryQueryContext;
+import org.elasticsearch.xcontent.ToXContent;
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -207,7 +207,8 @@ public void shouldFindSuggestionsForGivenCriteriaQueryUsingContextCompletionEnti
 	 */
 	static class NonDocumentEntity {
 
-		@Nullable @Id private String someId;
+		@Nullable
+		@Id private String someId;
 		@Nullable private String someField1;
 		@Nullable private String someField2;
 
@@ -238,10 +239,12 @@ public void setSomeField2(String someField2) {
 	static class ContextCompletionEntity {
 
 		public static final String LANGUAGE_CATEGORY = "language";
-		@Nullable @Id private String id;
+		@Nullable
+		@Id private String id;
 		@Nullable private String name;
 
-		@Nullable @CompletionField(maxInputLength = 100, contexts = { @CompletionContext(name = LANGUAGE_CATEGORY,
+		@Nullable
+		@CompletionField(maxInputLength = 100, contexts = { @CompletionContext(name = LANGUAGE_CATEGORY,
 				type = CompletionContext.ContextMappingType.CATEGORY) }) private Completion suggest;
 
 		private ContextCompletionEntity() {}
diff --git a/src/test/resources/testcontainers-elasticsearch.properties b/src/test/resources/testcontainers-elasticsearch.properties
index a1a418b17..b848d5ab8 100644
--- a/src/test/resources/testcontainers-elasticsearch.properties
+++ b/src/test/resources/testcontainers-elasticsearch.properties
@@ -17,7 +17,7 @@
 # properties defining the image, these are not passed to the container on startup
 #
 sde.testcontainers.image-name=docker.elastic.co/elasticsearch/elasticsearch
-sde.testcontainers.image-version=7.15.2
+sde.testcontainers.image-version=7.16.0
 #
 #
 # needed as we do a DELETE /* at the end of the tests, will be required from 8.0 on, produces a warning since 7.13