diff --git a/fhir/pom.xml b/fhir/pom.xml
index 9045973..4fbf3ca 100644
--- a/fhir/pom.xml
+++ b/fhir/pom.xml
@@ -111,10 +111,13 @@
             <artifactId>junit-vintage-engine</artifactId>
             <scope>test</scope>
         </dependency>
+        <!-- test infra -->
         <dependency>
-            <groupId>org.testcontainers</groupId>
-            <artifactId>testcontainers</artifactId>
-            <version>${testcontainers-version}</version>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-test-infra-fhir</artifactId>
+            <version>${project.version}</version>
+            <type>test-jar</type>
+            <scope>test</scope>
         </dependency>
 
     </dependencies>
diff --git a/fhir/src/main/java/sample/camel/MyCamelRouter.java b/fhir/src/main/java/sample/camel/MyCamelRouter.java
index 4d0efbd..35af825 100644
--- a/fhir/src/main/java/sample/camel/MyCamelRouter.java
+++ b/fhir/src/main/java/sample/camel/MyCamelRouter.java
@@ -22,7 +22,7 @@
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.http.ProtocolException;
-import org.hl7.fhir.dstu3.model.Patient;
+import org.hl7.fhir.r4.model.Patient;
 import org.springframework.stereotype.Component;
 
 /**
diff --git a/fhir/src/main/resources/application.properties b/fhir/src/main/resources/application.properties
index e008cad..e318c57 100644
--- a/fhir/src/main/resources/application.properties
+++ b/fhir/src/main/resources/application.properties
@@ -15,9 +15,9 @@
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
 
-serverUrl=http://localhost:8081/hapi-fhir-jpaserver/fhir
+serverUrl=http://localhost:8081/fhir
 
-fhirVersion=DSTU3
+fhirVersion=R4
 
 input=target/work/fhir/input
 
diff --git a/fhir/src/test/java/sample/camel/MyCamelApplicationTest.java b/fhir/src/test/java/sample/camel/MyCamelApplicationTest.java
index 0eeafca..ae63fde 100644
--- a/fhir/src/test/java/sample/camel/MyCamelApplicationTest.java
+++ b/fhir/src/test/java/sample/camel/MyCamelApplicationTest.java
@@ -16,41 +16,32 @@
  */
 package sample.camel;
 
+import java.io.File;
+import java.util.concurrent.TimeUnit;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.spring.boot.CamelContextConfiguration;
+import org.apache.camel.test.infra.fhir.services.FhirService;
+import org.apache.camel.test.infra.fhir.services.FhirServiceFactory;
 import org.apache.camel.test.spring.junit5.CamelSpringBootTest;
 import org.apache.commons.io.FileUtils;
-
+import org.hl7.fhir.r4.model.Patient;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeAll;
 import org.junit.jupiter.api.Test;
-
-import org.hl7.fhir.dstu3.model.Patient;
+import org.junit.jupiter.api.extension.RegisterExtension;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
-import org.testcontainers.containers.GenericContainer;
-import org.testcontainers.containers.wait.strategy.Wait;
-
-import com.github.dockerjava.api.command.CreateContainerCmd;
-import com.github.dockerjava.api.model.ExposedPort;
-import com.github.dockerjava.api.model.PortBinding;
-import com.github.dockerjava.api.model.Ports;
-
-import java.io.File;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Consumer;
+import org.springframework.context.annotation.Bean;
 
 @CamelSpringBootTest
-@SpringBootTest(classes = MyCamelApplication.class,
+@SpringBootTest(classes = {MyCamelApplication.class, MyCamelApplicationTest.class},
 		properties = "input = target/work/fhir/testinput")
 public class MyCamelApplicationTest {
 
-	private static final int CONTAINER_PORT = 8080;
-	private static final int EXPOSED_PORT = 8081;
-	private static final String CONTAINER_IMAGE = "hapiproject/hapi:v4.2.0";
-
-	private static GenericContainer container;
+	@RegisterExtension
+	public static FhirService service = FhirServiceFactory.createSingletonService();
 
 	@Autowired
 	private CamelContext camelContext;
@@ -58,25 +49,6 @@
 	@Autowired
 	private ProducerTemplate producerTemplate;
 
-	@BeforeAll
-	public static void startServer() throws Exception {
-		Consumer<CreateContainerCmd> cmd = e -> {
-			e.withPortBindings(new PortBinding(Ports.Binding.bindPort(EXPOSED_PORT),
-					new ExposedPort(CONTAINER_PORT)));
-		};
-
-		container = new GenericContainer(CONTAINER_IMAGE)
-				.withNetworkAliases("fhir")
-				.withExposedPorts(CONTAINER_PORT)
-				.withCreateContainerCmdModifier(cmd)
-				.withEnv("HAPI_FHIR_VERSION", "DSTU3")
-				.withEnv("HAPI_REUSE_CACHED_SEARCH_RESULTS_MILLIS", "-1")
-				.waitingFor(Wait.forListeningPort())
-				.waitingFor(Wait.forHttp("/hapi-fhir-jpaserver/fhir/metadata"));
-		;
-		container.start();
-	}
-
 	@Test
 	public void shouldPushConvertedHl7toFhir() throws Exception {
 		MockEndpoint mock = camelContext.getEndpoint("mock:result", MockEndpoint.class);
@@ -89,4 +61,19 @@
 		mock.assertIsSatisfied();
 		Assertions.assertEquals("Freeman", mock.getExchanges().get(0).getIn().getBody(Patient.class).getName().get(0).getFamily());
 	}
+
+	@Bean
+	CamelContextConfiguration contextConfiguration() {
+		return new CamelContextConfiguration() {
+			@Override
+			public void beforeApplicationStart(CamelContext context) {
+				context.getPropertiesComponent().addInitialProperty("serverUrl", service.getServiceBaseURL());
+			}
+
+			@Override
+			public void afterApplicationStart(CamelContext camelContext) {
+
+			}
+		};
+	}
 }
