predicate, Environment environment) {
+		ServicePortSecureResolver servicePortSecureResolver = new ServicePortSecureResolver(properties);
+		KubernetesNamespaceProvider namespaceProvider = new KubernetesNamespaceProvider(environment);
+		Fabric8DiscoveryClient fabric8DiscoveryClient = new Fabric8DiscoveryClient(client, properties,
+				servicePortSecureResolver, namespaceProvider, predicate);
+		return new Fabric8CacheableReactiveDiscoveryClient(fabric8DiscoveryClient);
+	}
+
 	/**
 	 * Post an event so that health indicator is initialized.
 	 */
diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8DiscoveryClientAutoConfigurationApplicationContextTests.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8DiscoveryClientAutoConfigurationApplicationContextTests.java
index be0ccbac4c..d6dc53d89d 100644
--- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8DiscoveryClientAutoConfigurationApplicationContextTests.java
+++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8DiscoveryClientAutoConfigurationApplicationContextTests.java
@@ -150,6 +150,56 @@ void reactiveDisabled() {
 		});
 	}
 
+	/**
+	 * 
+	 *     - no property related to cacheable in the blocking implementation is set, as such:
+	 *     - Fabric8DiscoveryClient is present
+	 *     - Fabric8CacheableDiscoveryClient is not present
+	 * 
+	 */
+	@Test
+	void blockingCacheableDefault() {
+		setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false");
+		applicationContextRunner.run(context -> {
+			assertThat(context).hasSingleBean(Fabric8DiscoveryClient.class);
+			assertThat(context).doesNotHaveBean(Fabric8CacheableDiscoveryClient.class);
+		});
+	}
+
+	/**
+	 * 
+	 *     - cacheable in the blocking implementation = false, as such:
+	 *     - Fabric8DiscoveryClient is present
+	 *     - Fabric8CacheableDiscoveryClient is not present
+	 * 
+	 */
+	@Test
+	void blockingCacheableDisabled() {
+		setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+				"spring.cloud.kubernetes.discovery.cacheable.blocking.enabled=false");
+		applicationContextRunner.run(context -> {
+			assertThat(context).hasSingleBean(Fabric8DiscoveryClient.class);
+			assertThat(context).doesNotHaveBean(Fabric8CacheableDiscoveryClient.class);
+		});
+	}
+
+	/**
+	 * 
+	 *     - cacheable in the blocking implementation = true, as such:
+	 *     - Fabric8DiscoveryClient is not present
+	 *     - Fabric8CacheableDiscoveryClient is present
+	 * 
+	 */
+	@Test
+	void blockingCacheableEnabled() {
+		setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+				"spring.cloud.kubernetes.discovery.cacheable.blocking.enabled=true");
+		applicationContextRunner.run(context -> {
+			assertThat(context).doesNotHaveBean(Fabric8DiscoveryClient.class);
+			assertThat(context).hasSingleBean(Fabric8CacheableDiscoveryClient.class);
+		});
+	}
+
 	private void setup(String... properties) {
 		applicationContextRunner = new ApplicationContextRunner().withConfiguration(
 				AutoConfigurations.of(Fabric8DiscoveryClientAutoConfiguration.class, Fabric8AutoConfiguration.class,
diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8ReactiveDiscoveryClientAutoConfigurationApplicationContextTests.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8ReactiveDiscoveryClientAutoConfigurationApplicationContextTests.java
index f991e4cdd5..a5397fe4c3 100644
--- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8ReactiveDiscoveryClientAutoConfigurationApplicationContextTests.java
+++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8ReactiveDiscoveryClientAutoConfigurationApplicationContextTests.java
@@ -142,6 +142,57 @@ void healthEnabledClassNotPresent() {
 		});
 	}
 
+	/**
+	 * 
+	 *     - no property related to cacheable in the reactive implementation is set, as such:
+	 *     - Fabric8DiscoveryClient is present
+	 *     - Fabric8CacheableDiscoveryClient is not present
+	 * 
+	 */
+	@Test
+	void reactiveCacheableDefault() {
+		setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false");
+		applicationContextRunner.run(context -> {
+			assertThat(context).hasSingleBean(Fabric8ReactiveDiscoveryClient.class);
+			assertThat(context).doesNotHaveBean(Fabric8CacheableReactiveDiscoveryClient.class);
+		});
+	}
+
+	/**
+	 * 
+	 *     - cacheable in the reactive implementation = false, as such:
+	 *     - Fabric8DiscoveryClient is present
+	 *     - Fabric8CacheableDiscoveryClient is not present
+	 * 
+	 */
+	@Test
+	void reactiveCacheableDisabled() {
+		setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+				"spring.cloud.kubernetes.discovery.cacheable.reactive.enabled=false");
+		applicationContextRunner.run(context -> {
+			assertThat(context).hasSingleBean(Fabric8ReactiveDiscoveryClient.class);
+			assertThat(context).doesNotHaveBean(Fabric8CacheableReactiveDiscoveryClient.class);
+		});
+	}
+
+	/**
+	 * 
+	 *     - cacheable in the reactive implementation = true, as such:
+	 *     - Fabric8ReactiveDiscoveryClient is not present
+	 *     - Fabric8CacheableReactiveDiscoveryClient is present
+	 * 
+	 */
+	@Test
+	void reactiveCacheableEnabled() {
+		setup("spring.main.cloud-platform=KUBERNETES", "spring.cloud.config.enabled=false",
+				"spring.cloud.kubernetes.discovery.cacheable.reactive.enabled=true",
+				"spring.cloud.discovery.client.health-indicator.enabled=false");
+		applicationContextRunner.run(context -> {
+			assertThat(context).doesNotHaveBean(Fabric8ReactiveDiscoveryClient.class);
+			assertThat(context).hasSingleBean(Fabric8CacheableReactiveDiscoveryClient.class);
+		});
+	}
+
 	private void setup(String... properties) {
 		applicationContextRunner = new ApplicationContextRunner()
 			.withConfiguration(AutoConfigurations.of(UtilAutoConfiguration.class,
diff --git a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8ReactiveDiscoveryClientTests.java b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8ReactiveDiscoveryClientTests.java
index d99c0f529b..25fd38cbc4 100644
--- a/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8ReactiveDiscoveryClientTests.java
+++ b/spring-cloud-kubernetes-fabric8-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/discovery/Fabric8ReactiveDiscoveryClientTests.java
@@ -87,7 +87,7 @@ void verifyDefaults() {
 		Fabric8DiscoveryClient fabric8DiscoveryClient = new Fabric8DiscoveryClient(kubernetesClient,
 				KubernetesDiscoveryProperties.DEFAULT, SERVICE_PORT_SECURE_RESOLVER, NAMESPACE_PROVIDER, x -> true);
 		ReactiveDiscoveryClient client = new Fabric8ReactiveDiscoveryClient(fabric8DiscoveryClient);
-		assertThat(client.description()).isEqualTo("Fabric8 Kubernetes Reactive Discovery Client");
+		assertThat(client.description()).isEqualTo("Fabric8 Reactive Discovery Client");
 		assertThat(client.getOrder()).isEqualTo(ReactiveDiscoveryClient.DEFAULT_ORDER);
 	}
 
diff --git a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/TestAssertions.java b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/TestAssertions.java
index a7e3fd1241..08e5ce9d56 100644
--- a/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/TestAssertions.java
+++ b/spring-cloud-kubernetes-integration-tests/spring-cloud-kubernetes-fabric8-client-discovery/src/test/java/org/springframework/cloud/kubernetes/fabric8/client/discovery/TestAssertions.java
@@ -43,7 +43,7 @@
  */
 final class TestAssertions {
 
-	private static final String REACTIVE_STATUS = "$.components.reactiveDiscoveryClients.components.['Fabric8 Kubernetes Reactive Discovery Client'].status";
+	private static final String REACTIVE_STATUS = "$.components.reactiveDiscoveryClients.components.['Fabric8 Reactive Discovery Client'].status";
 
 	private static final String BLOCKING_STATUS = "$.components.discoveryComposite.components.discoveryClient.status";
 
@@ -179,7 +179,7 @@ static void testReactiveConfiguration(ReactiveDiscoveryClient discoveryClient, C
 		assertThat(BASIC_JSON_TESTER.from(healthResult)).extractingJsonPathStringValue(REACTIVE_STATUS).isEqualTo("UP");
 
 		assertThat(BASIC_JSON_TESTER.from(healthResult)).extractingJsonPathArrayValue(
-				"$.components.reactiveDiscoveryClients.components.['Fabric8 Kubernetes Reactive Discovery Client'].details.services")
+				"$.components.reactiveDiscoveryClients.components.['Fabric8 Reactive Discovery Client'].details.services")
 			.containsExactlyInAnyOrder("kubernetes", "busybox-service");
 
 		assertThat(BASIC_JSON_TESTER.from(healthResult)).doesNotHaveJsonPath(BLOCKING_STATUS);