diff --git a/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/TestInstanceHostUtils.java b/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/TestInstanceHostUtils.java
index 4e0a16c0a6ce8219d3c52c300ae765dc911a93d4..f5ff3ea4a193489b463ec322ec8ed86b53489986 100644
--- a/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/TestInstanceHostUtils.java
+++ b/server-application-server/sourceTest/java/ch/systemsx/cisd/openbis/generic/shared/util/TestInstanceHostUtils.java
@@ -61,6 +61,9 @@ public class TestInstanceHostUtils
         } else if (projectName.equals("openbis_oai_pmh"))
         {
             return 40;
+        } else if (projectName.equals("test-integration"))
+        {
+            return 50;
         }
 
         return 80;
diff --git a/test-integration/build.gradle b/test-integration/build.gradle
index 38013cd2472cae0b8f55b6ab002829f4d12fa751..3f53c699ce1df1bde295b1afbf1748275c0b3051 100644
--- a/test-integration/build.gradle
+++ b/test-integration/build.gradle
@@ -1,5 +1,11 @@
 apply from: '../build/javaproject.gradle'
 
 dependencies {
-    testImplementation project(':server-application-server'), project(path : ':server-application-server', configuration: 'tests')
+    implementation project(':lib-transactional-file-system'), project(':server-application-server'), project(path: ':server-application-server', configuration: 'tests'), project(':server-data-store')
+}
+
+test {
+    // log4j1.xml is used by the application server (config location is taken from system property below)
+    // log4j2.xml is used by the afs server (config location taken from afs server configuration)
+    jvmArgs += ['-Dlog4j.configuration=etc/log4j1.xml', '-Dlog4j.configurationFile=etc/log4j1.xml']
 }
\ No newline at end of file
diff --git a/test-integration/etc/log.xml b/test-integration/etc/log4j1.xml
similarity index 86%
rename from test-integration/etc/log.xml
rename to test-integration/etc/log4j1.xml
index b5741a11578d2d52bd40125d5f7a843d5d0d9a20..d437e47b7b8f6671b2af953f8d5b70eb1bc8158c 100644
--- a/test-integration/etc/log.xml
+++ b/test-integration/etc/log4j1.xml
@@ -5,7 +5,7 @@
 
     <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
         <layout class="org.apache.log4j.PatternLayout">
-            <param name="ConversionPattern" value="%d %-5p [%t] %c - %m%n"/>
+            <param name="ConversionPattern" value="[AS] %d %-5p [%t] %c - %m%n"/>
         </layout>
     </appender>
 
diff --git a/test-integration/etc/log4j2.xml b/test-integration/etc/log4j2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e5bd4c185b1c34a6139b84f242186c9ee8c9c26d
--- /dev/null
+++ b/test-integration/etc/log4j2.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="INFO">
+    <Appenders>
+        <Console name="Console" target="SYSTEM_OUT">
+            <PatternLayout pattern="[AFS] %d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
+        </Console>
+    </Appenders>
+    <Loggers>
+        <Root>
+            <AppenderRef ref="Console" level="info" />
+        </Root>
+    </Loggers>
+</Configuration>
\ No newline at end of file
diff --git a/test-integration/sourceTest/java/ch/ethz/sis/openbis/systemtests/AbstractIntegrationTest.java b/test-integration/sourceTest/java/ch/ethz/sis/openbis/systemtests/AbstractIntegrationTest.java
index 79e2b28b39589c58b25a284d1a2d12d2a90a46e0..34d03c39ffc58e9172561fbaff3a3559cffad473 100644
--- a/test-integration/sourceTest/java/ch/ethz/sis/openbis/systemtests/AbstractIntegrationTest.java
+++ b/test-integration/sourceTest/java/ch/ethz/sis/openbis/systemtests/AbstractIntegrationTest.java
@@ -16,8 +16,8 @@
 package ch.ethz.sis.openbis.systemtests;
 
 import java.lang.reflect.Method;
+import java.util.List;
 
-import org.apache.log4j.Level;
 import org.eclipse.jetty.server.HttpConfiguration;
 import org.eclipse.jetty.server.HttpConnectionFactory;
 import org.eclipse.jetty.server.Server;
@@ -33,45 +33,44 @@ import org.springframework.web.servlet.DispatcherServlet;
 import org.testng.annotations.AfterMethod;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.BeforeSuite;
-import org.testng.annotations.BeforeTest;
 
-import ch.systemsx.cisd.common.logging.BufferedAppender;
+import ch.ethz.sis.afsserver.server.observer.impl.DummyServerObserver;
+import ch.ethz.sis.afsserver.startup.AtomicFileSystemServerParameter;
+import ch.ethz.sis.shared.startup.Configuration;
 import ch.systemsx.cisd.openbis.generic.server.util.TestInitializer;
 import ch.systemsx.cisd.openbis.generic.shared.util.TestInstanceHostUtils;
-import ch.systemsx.cisd.openbis.util.LogRecordingUtils;
 
 /**
  * @author pkupczyk
  */
 public abstract class AbstractIntegrationTest
 {
-    protected static GenericWebApplicationContext applicationContext;
+    protected static GenericWebApplicationContext applicationServerSpringContext;
 
-    protected BufferedAppender logAppender;
+    protected static TestLogger logger = new TestLogger();
+
+    @BeforeSuite
+    public void beforeSuite() throws Exception
+    {
+        TestInitializer.initWithIndex();
+        startApplicationServer();
+        startAfsServer();
+    }
 
     @BeforeMethod
     public void beforeTest(Method method)
     {
-        System.out.println("BEFORE " + render(method));
-        getLogAppender().resetLogContent();
+        logger.log("BEFORE " + method.getDeclaringClass().getName() + "." + method.getName());
     }
 
     @AfterMethod
     public void afterTest(Method method)
     {
-        System.out.println("AFTER  " + render(method));
+        logger.log("AFTER  " + method.getDeclaringClass().getName() + "." + method.getName());
     }
 
-    private String render(Method method)
+    private void startApplicationServer() throws Exception
     {
-        return method.getDeclaringClass().getName() + "." + method.getName();
-    }
-
-    @BeforeSuite
-    public void beforeSuite() throws Exception
-    {
-        TestInitializer.initWithIndex();
-
         Server server = new Server();
         HttpConfiguration httpConfig = new HttpConfiguration();
         ServerConnector connector =
@@ -85,33 +84,27 @@ public abstract class AbstractIntegrationTest
             @Override
             protected WebApplicationContext findWebApplicationContext()
             {
-                XmlBeanFactory f =
+                XmlBeanFactory beanFactory =
                         new XmlBeanFactory(new FileSystemResource("../server-application-server/resource/server/spring-servlet.xml"));
-                applicationContext = new GenericWebApplicationContext(f);
-                applicationContext.setParent(new ClassPathXmlApplicationContext("classpath:applicationContext.xml"));
-                applicationContext.refresh();
-                return applicationContext;
+                applicationServerSpringContext = new GenericWebApplicationContext(beanFactory);
+                applicationServerSpringContext.setParent(new ClassPathXmlApplicationContext("classpath:applicationContext.xml"));
+                applicationServerSpringContext.refresh();
+                return applicationServerSpringContext;
             }
         };
-        ServletContextHandler sch =
+        ServletContextHandler servletContext =
                 new ServletContextHandler(server, "/", ServletContextHandler.SESSIONS);
-        sch.addServlet(new ServletHolder(dispatcherServlet), "/*");
+        servletContext.addServlet(new ServletHolder(dispatcherServlet), "/*");
         server.start();
     }
 
-    @BeforeTest
-    public void setUpLogAppender()
+    private void startAfsServer() throws Exception
     {
-        logAppender = LogRecordingUtils.createRecorder();
-    }
-
-    private BufferedAppender getLogAppender()
-    {
-        if (logAppender == null)
-        {
-            logAppender = LogRecordingUtils.createRecorder("%d %p [%t] %c - %m%n", Level.INFO);
-        }
-        return logAppender;
+        Configuration configuration = new Configuration(List.of(AtomicFileSystemServerParameter.class),
+                "../server-data-store/src/main/resources/server-data-store-config.properties");
+        configuration.setProperty(AtomicFileSystemServerParameter.logConfigFile, "etc/log4j2.xml");
+        DummyServerObserver dummyServerObserver = new DummyServerObserver();
+        new ch.ethz.sis.afsserver.server.Server<>(configuration, dummyServerObserver, dummyServerObserver);
     }
 
 }
diff --git a/test-integration/sourceTest/java/ch/ethz/sis/openbis/systemtests/IntegrationTest.java b/test-integration/sourceTest/java/ch/ethz/sis/openbis/systemtests/IntegrationTest.java
index 58dcfeab246ef3ad07e397a93b552c9bc3efe5e2..ccc84698b4f11da659a23b6ebaf97afbeae7bf29 100644
--- a/test-integration/sourceTest/java/ch/ethz/sis/openbis/systemtests/IntegrationTest.java
+++ b/test-integration/sourceTest/java/ch/ethz/sis/openbis/systemtests/IntegrationTest.java
@@ -1,8 +1,12 @@
 package ch.ethz.sis.openbis.systemtests;
 
+import java.nio.charset.StandardCharsets;
+import java.security.MessageDigest;
+
 import org.testng.annotations.Test;
 
-import ch.ethz.sis.openbis.generic.asapi.v3.IApplicationServerApi;
+import ch.ethz.sis.openbis.generic.OpenBIS;
+import ch.systemsx.cisd.openbis.generic.shared.util.TestInstanceHostUtils;
 
 public class IntegrationTest extends AbstractIntegrationTest
 {
@@ -10,9 +14,27 @@ public class IntegrationTest extends AbstractIntegrationTest
     @Test
     public void helloWorld()
     {
-        IApplicationServerApi v3 = applicationContext.getBean(IApplicationServerApi.class);
-        String sessionToken = v3.login("test", "password");
+        OpenBIS openBIS = new OpenBIS("http://localhost:" + TestInstanceHostUtils.getOpenBISPort() + "/openbis/openbis", "OLD_DSS_IS_NOT_USED", "http://localhost:8085/data-store-server");
+
+        String sessionToken = openBIS.login("test","password");
+
+        openBIS.getAfsServerFacade().write("another-sample", "anotherdir/anotherfile", 0L, "Hello World!".getBytes(StandardCharsets.UTF_8),
+                calculateMD5("Hello World!".getBytes(StandardCharsets.UTF_8)));
+
         System.out.println("Session token: " + sessionToken);
     }
 
+    public static byte[] calculateMD5(byte[] data)
+    {
+        try
+        {
+            MessageDigest md = MessageDigest.getInstance("MD5");
+            md.update(data);
+            return md.digest();
+        } catch (Exception e)
+        {
+            throw new RuntimeException("Checksum calculation failed", e);
+        }
+    }
+
 }
diff --git a/test-integration/sourceTest/java/ch/ethz/sis/openbis/systemtests/TestLogger.java b/test-integration/sourceTest/java/ch/ethz/sis/openbis/systemtests/TestLogger.java
new file mode 100644
index 0000000000000000000000000000000000000000..9c2ea86c04e408256632a98b055842dbf4f7bff3
--- /dev/null
+++ b/test-integration/sourceTest/java/ch/ethz/sis/openbis/systemtests/TestLogger.java
@@ -0,0 +1,11 @@
+package ch.ethz.sis.openbis.systemtests;
+
+public class TestLogger
+{
+
+    public void log(String message)
+    {
+        System.out.println("[TEST] " + message);
+    }
+
+}