diff --git a/README.md b/README.md
index 20d82f9..4e09b2c 100644
--- a/README.md
+++ b/README.md
@@ -35,6 +35,8 @@ You can find instructions on how to apply the plugin at http://plugins.gradle.or
 
     `gradle checkScoverage` will automatically invoke `reportScoverage` but it won't generate aggregated reports.
     In order to check coverage of aggregated reports one should use `gradle checkScoverage aggregateScoverage`.
+
+**Note:** The plugin is not compatible with composite builds. For more information, see [the relevant issue](https://github.com/scoverage/gradle-scoverage/issues/98).
     
 ### Configuration
 
diff --git a/build.gradle b/build.gradle
index 745d7dd..268de3e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -44,6 +44,7 @@ apply plugin: 'groovy'
 sourceCompatibility = '1.8'
 targetCompatibility = '1.8'
 
+
 dependencies {
     compileOnly "org.scoverage:scalac-scoverage-plugin_2.12:1.4.1"
     implementation group: 'commons-io', name: 'commons-io', version: '2.6'
@@ -58,39 +59,51 @@ dependencies {
 sourceSets {
     functionalTest {
         java.srcDir file('src/functionalTest/java')
-        resources.srcDir file('src/functionalTest/resources')
-        compileClasspath += sourceSets.main.output  + configurations.testRuntimeClasspath
-        runtimeClasspath += output + compileClasspath
+        compileClasspath += sourceSets.main.output
+        runtimeClasspath += sourceSets.main.output
+    }
+    crossScalaVersionTest {
+        java.srcDir file('src/crossScalaVersionTest/java')
+        compileClasspath += sourceSets.main.output + sourceSets.functionalTest.output
+        runtimeClasspath += sourceSets.main.output + sourceSets.functionalTest.output
     }
 }
 
-task crossScalaVersionFunctionalTest(type: Test) {
+configurations {
+    functionalTestImplementation.extendsFrom testImplementation
+    functionalTestRuntimeOnly.extendsFrom testRuntimeOnly
+
+    crossScalaVersionTestImplementation.extendsFrom testImplementation
+    crossScalaVersionTestRuntimeOnly.extendsFrom testRuntimeOnly
+}
+
+task crossScalaVersionTest(type: Test) {
     description = 'Runs the cross scala version functional test.'
     group = 'verification'
-    testClassesDirs = sourceSets.functionalTest.output.classesDirs
-    classpath = sourceSets.functionalTest.runtimeClasspath
-    include "**/ScalaMultiModuleCrossVersionTest.*"
+    testClassesDirs = sourceSets.crossScalaVersionTest.output
+    classpath = sourceSets.crossScalaVersionTest.runtimeClasspath
+    forkEvery = 1 // crucial to run every test in its own JVM
 
     testLogging.showStandardStreams = true
 
     mustRunAfter test
 }
+check.dependsOn crossScalaVersionTest
 
 task functionalTest(type: Test) {
     description = 'Runs the functional tests.'
     group = 'verification'
-    testClassesDirs = sourceSets.functionalTest.output.classesDirs
+    testClassesDirs = sourceSets.functionalTest.output
     classpath = sourceSets.functionalTest.runtimeClasspath
-    exclude "**/ScalaMultiModuleCrossVersionTest.*"
 
     testLogging.showStandardStreams = true
 
-    dependsOn crossScalaVersionFunctionalTest
+    mustRunAfter crossScalaVersionTest
 }
 check.dependsOn functionalTest
 
 gradlePlugin {
-    testSourceSets sourceSets.functionalTest
+    testSourceSets sourceSets.functionalTest, sourceSets.crossScalaVersionTest
 }
 
 task groovydocJar(type: Jar, dependsOn: groovydoc) {
diff --git a/src/crossScalaVersionTest/java/org/scoverage/Scala211Test.java b/src/crossScalaVersionTest/java/org/scoverage/Scala211Test.java
new file mode 100644
index 0000000..ac06067
--- /dev/null
+++ b/src/crossScalaVersionTest/java/org/scoverage/Scala211Test.java
@@ -0,0 +1,7 @@
+package org.scoverage;
+
+public class Scala211Test extends ScalaVersionTest {
+    public Scala211Test() {
+        super("2_11");
+    }
+}
\ No newline at end of file
diff --git a/src/crossScalaVersionTest/java/org/scoverage/Scala212Test.java b/src/crossScalaVersionTest/java/org/scoverage/Scala212Test.java
new file mode 100644
index 0000000..2c538ae
--- /dev/null
+++ b/src/crossScalaVersionTest/java/org/scoverage/Scala212Test.java
@@ -0,0 +1,7 @@
+package org.scoverage;
+
+public class Scala212Test extends ScalaVersionTest {
+    public Scala212Test() {
+        super("2_12");
+    }
+}
\ No newline at end of file
diff --git a/src/crossScalaVersionTest/java/org/scoverage/Scala213Test.java b/src/crossScalaVersionTest/java/org/scoverage/Scala213Test.java
new file mode 100644
index 0000000..0f6ed71
--- /dev/null
+++ b/src/crossScalaVersionTest/java/org/scoverage/Scala213Test.java
@@ -0,0 +1,15 @@
+package org.scoverage;
+
+import org.junit.Ignore;
+
+/**
+ * Tests is currently ignored as support for Scala 2.13 is not available yet.
+ *
+ * @see <a href="https://github.com/scoverage/gradle-scoverage/issues/106">Issue #106</a>.
+ */
+@Ignore
+public class Scala213Test extends ScalaVersionTest {
+    public Scala213Test() {
+        super("2_13");
+    }
+}
\ No newline at end of file
diff --git a/src/crossScalaVersionTest/java/org/scoverage/ScalaCrossVersionAggregationTest.java b/src/crossScalaVersionTest/java/org/scoverage/ScalaCrossVersionAggregationTest.java
new file mode 100644
index 0000000..d3b66ae
--- /dev/null
+++ b/src/crossScalaVersionTest/java/org/scoverage/ScalaCrossVersionAggregationTest.java
@@ -0,0 +1,46 @@
+package org.scoverage;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.jupiter.api.Tag;
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.scoverage.ScoverageFunctionalTest;
+import org.scoverage.ScoveragePlugin;
+
+import java.io.File;
+
+public class ScalaCrossVersionAggregationTest extends ScoverageFunctionalTest {
+
+    public ScalaCrossVersionAggregationTest() {
+        super("scala-multi-module-cross-version");
+    }
+
+    @Test
+    public void checkAndAggregateAll() throws Exception {
+
+        AssertableBuildResult result = run("clean", ScoveragePlugin.getCHECK_NAME(),
+                ScoveragePlugin.getAGGREGATE_NAME());
+
+        result.assertTaskSkipped(ScoveragePlugin.getREPORT_NAME());
+        result.assertTaskSucceeded("2_11:" + ScoveragePlugin.getREPORT_NAME());
+        result.assertTaskSucceeded("2_12:" + ScoveragePlugin.getREPORT_NAME());
+        result.assertTaskSucceeded("2_13:" + ScoveragePlugin.getREPORT_NAME());
+        result.assertTaskSucceeded(ScoveragePlugin.getCHECK_NAME());
+        result.assertTaskSucceeded("2_11:" + ScoveragePlugin.getCHECK_NAME());
+        result.assertTaskSucceeded("2_12:" + ScoveragePlugin.getCHECK_NAME());
+        result.assertTaskSucceeded("2_13:" + ScoveragePlugin.getCHECK_NAME());
+        result.assertTaskSucceeded(ScoveragePlugin.getAGGREGATE_NAME());
+
+        assertAggregationFilesExist();
+        assertCoverage(100.0);
+    }
+
+    private void assertAggregationFilesExist() {
+
+        Assert.assertTrue(resolve(reportDir(), "index.html").exists());
+        Assert.assertTrue(resolve(reportDir(), "2_11/src/main/scala/org/hello/World2_11.scala.html").exists());
+        Assert.assertTrue(resolve(reportDir(), "2_12/src/main/scala/org/hello/World2_12.scala.html").exists());
+        Assert.assertTrue(resolve(reportDir(), "2_13/src/main/scala/org/hello/World2_13.scala.html").exists());
+    }
+}
diff --git a/src/crossScalaVersionTest/java/org/scoverage/ScalaVersionTest.java b/src/crossScalaVersionTest/java/org/scoverage/ScalaVersionTest.java
new file mode 100644
index 0000000..59160f3
--- /dev/null
+++ b/src/crossScalaVersionTest/java/org/scoverage/ScalaVersionTest.java
@@ -0,0 +1,35 @@
+package org.scoverage;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.jupiter.api.Tag;
+import org.scoverage.ScoverageFunctionalTest;
+import org.scoverage.ScoveragePlugin;
+
+import java.io.File;
+
+/**
+ * This abstract class is used to test each scala version in an individual class.
+ * It is crucial that each test will be separated into its own class,
+ * as this is the only way to run these tests in separate JVM processes (via `forkEvery` gradle configuration).
+ */
+public abstract class ScalaVersionTest extends ScoverageFunctionalTest {
+
+    private final String scalaVersion;
+
+    public ScalaVersionTest(String scalaVersion) {
+        super("scala-multi-module-cross-version");
+        this.scalaVersion = scalaVersion;
+    }
+
+    @Test
+    public void report() throws Exception {
+
+        AssertableBuildResult result = run("clean", ":" + scalaVersion + ":" + ScoveragePlugin.getREPORT_NAME());
+        result.assertTaskSucceeded(scalaVersion + ":" + ScoveragePlugin.getREPORT_NAME());
+
+        File reportDir = reportDir(projectDir().toPath().resolve(scalaVersion).toFile());
+        Assert.assertTrue(resolve(reportDir, "index.html").exists());
+        Assert.assertTrue(resolve(reportDir, "src/main/scala/org/hello/World" + scalaVersion + ".scala.html").exists());
+    }
+}
\ No newline at end of file
diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/build.gradle b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_11/build.gradle
similarity index 100%
rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/build.gradle
rename to src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_11/build.gradle
diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/main/scala/org/hello/World211.scala b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_11/src/main/scala/org/hello/World2_11.scala
similarity index 81%
rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/main/scala/org/hello/World211.scala
rename to src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_11/src/main/scala/org/hello/World2_11.scala
index 7c7f57b..cab6958 100644
--- a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/main/scala/org/hello/World211.scala
+++ b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_11/src/main/scala/org/hello/World2_11.scala
@@ -1,6 +1,6 @@
 package org.hello
 
-class World211 {
+class World2_11 {
 
   def foo(): String = {
     val s = "2" + "11"
diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World213Suite.scala b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_11/src/test/scala/org/hello/World2_11Suite.scala
similarity index 72%
rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World213Suite.scala
rename to src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_11/src/test/scala/org/hello/World2_11Suite.scala
index ad43f08..2d99209 100644
--- a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World213Suite.scala
+++ b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_11/src/test/scala/org/hello/World2_11Suite.scala
@@ -5,9 +5,9 @@ import org.scalatest.FunSuite
 import org.scalatest.junit.JUnitRunner
 
 @RunWith(classOf[JUnitRunner])
-class World212Suite extends FunSuite {
+class World2_11Suite extends FunSuite {
 
   test("foo") {
-    new World213().foo()
+    new World2_11().foo()
   }
 }
\ No newline at end of file
diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/build.gradle b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_12/build.gradle
similarity index 100%
rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/build.gradle
rename to src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_12/build.gradle
diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World213.scala b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_12/src/main/scala/org/hello/World2_12.scala
similarity index 81%
rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World213.scala
rename to src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_12/src/main/scala/org/hello/World2_12.scala
index b5fc8fb..c0cc10b 100644
--- a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World213.scala
+++ b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_12/src/main/scala/org/hello/World2_12.scala
@@ -1,6 +1,6 @@
 package org.hello
 
-class World213 {
+class World2_12 {
 
   def foo(): String = {
     val s = "2" + "12"
diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/test/scala/org/hello/World211Suite.scala b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_12/src/test/scala/org/hello/World2_12Suite.scala
similarity index 72%
rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/test/scala/org/hello/World211Suite.scala
rename to src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_12/src/test/scala/org/hello/World2_12Suite.scala
index f872840..23e5b04 100644
--- a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_11/src/test/scala/org/hello/World211Suite.scala
+++ b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_12/src/test/scala/org/hello/World2_12Suite.scala
@@ -5,9 +5,9 @@ import org.scalatest.FunSuite
 import org.scalatest.junit.JUnitRunner
 
 @RunWith(classOf[JUnitRunner])
-class World211Suite extends FunSuite {
+class World2_12Suite extends FunSuite {
 
   test("foo") {
-    new World211().foo()
+    new World2_12().foo()
   }
 }
\ No newline at end of file
diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/build.gradle b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_13/build.gradle
similarity index 100%
rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_13/build.gradle
rename to src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_13/build.gradle
diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/main/scala/org/hello/World212.scala b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World2_13.scala
similarity index 81%
rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/main/scala/org/hello/World212.scala
rename to src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World2_13.scala
index 0968efa..d18034b 100644
--- a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/main/scala/org/hello/World212.scala
+++ b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_13/src/main/scala/org/hello/World2_13.scala
@@ -1,6 +1,6 @@
 package org.hello
 
-class World212 {
+class World2_13 {
 
   def foo(): String = {
     val s = "2" + "12"
diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/test/scala/org/hello/World212Suite.scala b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World2_13Suite.scala
similarity index 89%
rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/test/scala/org/hello/World212Suite.scala
rename to src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World2_13Suite.scala
index cd26ad3..0628dc4 100644
--- a/src/functionalTest/resources/projects/scala-multi-module-cross-version/2_12/src/test/scala/org/hello/World212Suite.scala
+++ b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/2_13/src/test/scala/org/hello/World2_13Suite.scala
@@ -8,6 +8,6 @@ import org.scalatest.junit.JUnitRunner
 class World212Suite extends FunSuite {
 
   test("foo") {
-    new World212().foo()
+    new World2_13().foo()
   }
 }
\ No newline at end of file
diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/build.gradle b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/build.gradle
similarity index 100%
rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/build.gradle
rename to src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/build.gradle
diff --git a/src/functionalTest/resources/projects/scala-multi-module-cross-version/settings.gradle b/src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/settings.gradle
similarity index 100%
rename from src/functionalTest/resources/projects/scala-multi-module-cross-version/settings.gradle
rename to src/crossScalaVersionTest/resources/projects/scala-multi-module-cross-version/settings.gradle
diff --git a/src/functionalTest/java/org.scoverage/ScalaMultiModuleCrossVersionTest.java b/src/functionalTest/java/org.scoverage/ScalaMultiModuleCrossVersionTest.java
deleted file mode 100644
index 22ef656..0000000
--- a/src/functionalTest/java/org.scoverage/ScalaMultiModuleCrossVersionTest.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package org.scoverage;
-
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.io.File;
-
-/**
- * Note that it is important to test the case of all of the modules together,
- * along with the cases of each module individually, as they behave differently.
- */
-public class ScalaMultiModuleCrossVersionTest extends ScoverageFunctionalTest {
-
-    public ScalaMultiModuleCrossVersionTest() {
-        super("scala-multi-module-cross-version");
-    }
-
-    @Test
-    public void checkAndAggregateAll() throws Exception {
-
-        AssertableBuildResult result = run("clean", ScoveragePlugin.getCHECK_NAME(),
-                ScoveragePlugin.getAGGREGATE_NAME());
-
-        result.assertTaskSkipped(ScoveragePlugin.getREPORT_NAME());
-        result.assertTaskSucceeded("2_11:" + ScoveragePlugin.getREPORT_NAME());
-        result.assertTaskSucceeded("2_12:" + ScoveragePlugin.getREPORT_NAME());
-        result.assertTaskSucceeded("2_13:" + ScoveragePlugin.getREPORT_NAME());
-        result.assertTaskSucceeded(ScoveragePlugin.getCHECK_NAME());
-        result.assertTaskSucceeded("2_11:" + ScoveragePlugin.getCHECK_NAME());
-        result.assertTaskSucceeded("2_12:" + ScoveragePlugin.getCHECK_NAME());
-        result.assertTaskSucceeded("2_13:" + ScoveragePlugin.getCHECK_NAME());
-        result.assertTaskSucceeded(ScoveragePlugin.getAGGREGATE_NAME());
-
-        assertAllReportFilesExist();
-        assertCoverage(100.0);
-    }
-
-    @Test
-    public void report211() throws Exception {
-
-        AssertableBuildResult result = run("clean", ":2_11:" + ScoveragePlugin.getREPORT_NAME());
-        result.assertTaskSucceeded("2_11:" + ScoveragePlugin.getREPORT_NAME());
-        assert211ReportFilesExist();
-    }
-
-    @Test
-    public void report212() throws Exception {
-
-        AssertableBuildResult result = run("clean", ":2_12:" + ScoveragePlugin.getREPORT_NAME());
-        result.assertTaskSucceeded("2_12:" + ScoveragePlugin.getREPORT_NAME());
-        assert212ReportFilesExist();
-    }
-
-    @Test
-    public void report213() throws Exception {
-
-        AssertableBuildResult result = run("clean", ":2_13:" + ScoveragePlugin.getREPORT_NAME());
-        result.assertTaskSucceeded("2_13:" + ScoveragePlugin.getREPORT_NAME());
-        assert213ReportFilesExist();
-    }
-
-    private void assertAllReportFilesExist() {
-
-        assert211ReportFilesExist();
-        assert212ReportFilesExist();
-        assert213ReportFilesExist();
-        assertAggregationFilesExist();
-    }
-
-    private void assertAggregationFilesExist() {
-
-        Assert.assertTrue(resolve(reportDir(), "index.html").exists());
-        Assert.assertTrue(resolve(reportDir(), "2_11/src/main/scala/org/hello/World211.scala.html").exists());
-        Assert.assertTrue(resolve(reportDir(), "2_12/src/main/scala/org/hello/World212.scala.html").exists());
-        Assert.assertTrue(resolve(reportDir(), "2_13/src/main/scala/org/hello/World213.scala.html").exists());
-    }
-
-    private void assert211ReportFilesExist() {
-
-        File reportDir = reportDir(projectDir().toPath().resolve("2_11").toFile());
-        Assert.assertTrue(resolve(reportDir, "index.html").exists());
-        Assert.assertTrue(resolve(reportDir, "src/main/scala/org/hello/World211.scala.html").exists());
-    }
-
-    private void assert212ReportFilesExist() {
-
-        File reportDir = reportDir(projectDir().toPath().resolve("2_12").toFile());
-        Assert.assertTrue(resolve(reportDir, "index.html").exists());
-        Assert.assertTrue(resolve(reportDir, "src/main/scala/org/hello/World212.scala.html").exists());
-    }
-
-    private void assert213ReportFilesExist() {
-
-        File reportDir = reportDir(projectDir().toPath().resolve("2_13").toFile());
-        Assert.assertTrue(resolve(reportDir, "index.html").exists());
-        Assert.assertTrue(resolve(reportDir, "src/main/scala/org/hello/World213.scala.html").exists());
-    }
-}
diff --git a/src/functionalTest/java/org/scoverage/CompositeBuildTest.java b/src/functionalTest/java/org/scoverage/CompositeBuildTest.java
new file mode 100644
index 0000000..98a9ee8
--- /dev/null
+++ b/src/functionalTest/java/org/scoverage/CompositeBuildTest.java
@@ -0,0 +1,46 @@
+package org.scoverage;
+
+import org.junit.Ignore;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Tests are currently ignored as composite builds are not supported yet.
+ *
+ * @see <a href="https://github.com/scoverage/gradle-scoverage/issues/98">Issue #94</a>.
+ */
+public class CompositeBuildTest extends ScoverageFunctionalTest {
+
+    public CompositeBuildTest() {
+        super("composite-build");
+    }
+
+    @Ignore
+    @Test
+    public void buildComposite() {
+
+        runComposite("clean", "build");
+    }
+
+    @Ignore
+    @Test
+    public void reportComposite() {
+
+        runComposite("clean", ScoveragePlugin.getREPORT_NAME());
+    }
+
+    private AssertableBuildResult runComposite(String... arguments) {
+
+        List<String> fullArguments = new ArrayList<String>();
+        fullArguments.add("-p");
+        fullArguments.add("proj1");
+        fullArguments.add("--include-build");
+        fullArguments.add("../proj2");
+        fullArguments.addAll(Arrays.asList(arguments));
+
+        return run(fullArguments.toArray(new String[0]));
+    }
+}
diff --git a/src/functionalTest/java/org.scoverage/DetectScalaLibraryTest.java b/src/functionalTest/java/org/scoverage/DetectScalaLibraryTest.java
similarity index 100%
rename from src/functionalTest/java/org.scoverage/DetectScalaLibraryTest.java
rename to src/functionalTest/java/org/scoverage/DetectScalaLibraryTest.java
diff --git a/src/functionalTest/java/org.scoverage/MultiModulePluginNotConfiguredForScalaTest.java b/src/functionalTest/java/org/scoverage/MultiModulePluginNotConfiguredForScalaTest.java
similarity index 100%
rename from src/functionalTest/java/org.scoverage/MultiModulePluginNotConfiguredForScalaTest.java
rename to src/functionalTest/java/org/scoverage/MultiModulePluginNotConfiguredForScalaTest.java
diff --git a/src/functionalTest/java/org.scoverage/MultipleCheckTasksTest.java b/src/functionalTest/java/org/scoverage/MultipleCheckTasksTest.java
similarity index 100%
rename from src/functionalTest/java/org.scoverage/MultipleCheckTasksTest.java
rename to src/functionalTest/java/org/scoverage/MultipleCheckTasksTest.java
diff --git a/src/functionalTest/java/org.scoverage/ScalaJavaMultiModuleTest.java b/src/functionalTest/java/org/scoverage/ScalaJavaMultiModuleTest.java
similarity index 100%
rename from src/functionalTest/java/org.scoverage/ScalaJavaMultiModuleTest.java
rename to src/functionalTest/java/org/scoverage/ScalaJavaMultiModuleTest.java
diff --git a/src/functionalTest/java/org.scoverage/ScalaMultiModuleTest.java b/src/functionalTest/java/org/scoverage/ScalaMultiModuleTest.java
similarity index 100%
rename from src/functionalTest/java/org.scoverage/ScalaMultiModuleTest.java
rename to src/functionalTest/java/org/scoverage/ScalaMultiModuleTest.java
diff --git a/src/functionalTest/java/org.scoverage/ScalaMultiModuleWithMultipleTestTasksTest.java b/src/functionalTest/java/org/scoverage/ScalaMultiModuleWithMultipleTestTasksTest.java
similarity index 100%
rename from src/functionalTest/java/org.scoverage/ScalaMultiModuleWithMultipleTestTasksTest.java
rename to src/functionalTest/java/org/scoverage/ScalaMultiModuleWithMultipleTestTasksTest.java
diff --git a/src/functionalTest/java/org.scoverage/ScalaMultiModuleWithPartialScoverageUseTest.java b/src/functionalTest/java/org/scoverage/ScalaMultiModuleWithPartialScoverageUseTest.java
similarity index 100%
rename from src/functionalTest/java/org.scoverage/ScalaMultiModuleWithPartialScoverageUseTest.java
rename to src/functionalTest/java/org/scoverage/ScalaMultiModuleWithPartialScoverageUseTest.java
diff --git a/src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java b/src/functionalTest/java/org/scoverage/ScalaSingleModuleTest.java
similarity index 100%
rename from src/functionalTest/java/org.scoverage/ScalaSingleModuleTest.java
rename to src/functionalTest/java/org/scoverage/ScalaSingleModuleTest.java
diff --git a/src/functionalTest/java/org.scoverage/ScalaSingleModuleWithDependencyManagerTest.java b/src/functionalTest/java/org/scoverage/ScalaSingleModuleWithDependencyManagerTest.java
similarity index 100%
rename from src/functionalTest/java/org.scoverage/ScalaSingleModuleWithDependencyManagerTest.java
rename to src/functionalTest/java/org/scoverage/ScalaSingleModuleWithDependencyManagerTest.java
diff --git a/src/functionalTest/java/org.scoverage/ScalaSingleModuleWithMultipleTestTasksTest.java b/src/functionalTest/java/org/scoverage/ScalaSingleModuleWithMultipleTestTasksTest.java
similarity index 100%
rename from src/functionalTest/java/org.scoverage/ScalaSingleModuleWithMultipleTestTasksTest.java
rename to src/functionalTest/java/org/scoverage/ScalaSingleModuleWithMultipleTestTasksTest.java
diff --git a/src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java b/src/functionalTest/java/org/scoverage/ScoverageFunctionalTest.java
similarity index 98%
rename from src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java
rename to src/functionalTest/java/org/scoverage/ScoverageFunctionalTest.java
index 0341cc2..c1bd0b1 100644
--- a/src/functionalTest/java/org.scoverage/ScoverageFunctionalTest.java
+++ b/src/functionalTest/java/org/scoverage/ScoverageFunctionalTest.java
@@ -50,7 +50,7 @@ protected void setProjectName(String projectName) {
 
     protected File projectDir() {
 
-        return new File("src/functionalTest/resources/projects/" + projectName);
+        return new File(getClass().getClassLoader().getResource("projects/" + projectName).getFile());
     }
 
     protected File buildDir() {
diff --git a/src/functionalTest/resources/projects/composite-build/proj1/build.gradle b/src/functionalTest/resources/projects/composite-build/proj1/build.gradle
new file mode 100644
index 0000000..d0e32d3
--- /dev/null
+++ b/src/functionalTest/resources/projects/composite-build/proj1/build.gradle
@@ -0,0 +1,32 @@
+plugins {
+	id 'org.scoverage'
+}
+
+repositories {
+	jcenter()
+}
+
+description = 'a single-module Scala project taking part in a composite build (1)'
+
+apply plugin: 'java'
+apply plugin: 'scala'
+
+
+group "org.composite"
+version '1.0'
+
+dependencies {
+	compile group: 'org.scala-lang', name: 'scala-library', version: "${scalaVersionMajor}.${scalaVersionMinor}.${scalaVersionBuild}"
+
+	testRuntime group: 'org.junit.vintage', name: 'junit-vintage-engine', version: junitVersion
+	testCompile group: 'org.junit.platform', name: 'junit-platform-runner', version: junitPlatformVersion
+
+	testCompile group: 'org.scalatest', name: "scalatest_${scalaVersionMajor}.${scalaVersionMinor}", version: scalatestVersion
+
+    compile "org.composite:proj2:1.0"
+}
+
+test {
+	useJUnitPlatform()
+}
+
diff --git a/src/functionalTest/resources/projects/composite-build/proj1/settings.gradle b/src/functionalTest/resources/projects/composite-build/proj1/settings.gradle
new file mode 100644
index 0000000..e69de29
diff --git a/src/functionalTest/resources/projects/composite-build/proj1/src/main/scala/org/composite/proj1/Foo.scala b/src/functionalTest/resources/projects/composite-build/proj1/src/main/scala/org/composite/proj1/Foo.scala
new file mode 100644
index 0000000..cc5333e
--- /dev/null
+++ b/src/functionalTest/resources/projects/composite-build/proj1/src/main/scala/org/composite/proj1/Foo.scala
@@ -0,0 +1,7 @@
+package org.composite.proj1
+
+import org.composite.proj2.Reporter
+
+class Foo {
+  def bar(): String = "bar"
+}
\ No newline at end of file
diff --git a/src/functionalTest/resources/projects/composite-build/proj1/src/test/scala/org/composite/proj1/FooSuite.scala b/src/functionalTest/resources/projects/composite-build/proj1/src/test/scala/org/composite/proj1/FooSuite.scala
new file mode 100644
index 0000000..370252a
--- /dev/null
+++ b/src/functionalTest/resources/projects/composite-build/proj1/src/test/scala/org/composite/proj1/FooSuite.scala
@@ -0,0 +1,14 @@
+package org.composite.proj1
+
+import org.scalatest.FunSuite
+import org.junit.runner.RunWith
+import org.scalatest.junit.JUnitRunner
+
+@RunWith(classOf[JUnitRunner])
+class FooSuite extends FunSuite {
+
+  test("bar"){
+
+    new Foo().bar()
+  }
+}
\ No newline at end of file
diff --git a/src/functionalTest/resources/projects/composite-build/proj2/build.gradle b/src/functionalTest/resources/projects/composite-build/proj2/build.gradle
new file mode 100644
index 0000000..b86570e
--- /dev/null
+++ b/src/functionalTest/resources/projects/composite-build/proj2/build.gradle
@@ -0,0 +1,30 @@
+plugins {
+	id 'org.scoverage'
+}
+
+repositories {
+	jcenter()
+}
+
+description = 'a single-module Scala project taking part in a composite build (2)'
+
+apply plugin: 'java'
+apply plugin: 'scala'
+
+
+group "org.composite"
+version '1.0'
+
+dependencies {
+	compile group: 'org.scala-lang', name: 'scala-library', version: "${scalaVersionMajor}.${scalaVersionMinor}.${scalaVersionBuild}"
+
+	testRuntime group: 'org.junit.vintage', name: 'junit-vintage-engine', version: junitVersion
+	testCompile group: 'org.junit.platform', name: 'junit-platform-runner', version: junitPlatformVersion
+
+	testCompile group: 'org.scalatest', name: "scalatest_${scalaVersionMajor}.${scalaVersionMinor}", version: scalatestVersion
+}
+
+test {
+	useJUnitPlatform()
+}
+
diff --git a/src/functionalTest/resources/projects/composite-build/proj2/src/main/scala/org/composite/proj2/Reporter.scala b/src/functionalTest/resources/projects/composite-build/proj2/src/main/scala/org/composite/proj2/Reporter.scala
new file mode 100644
index 0000000..11ef036
--- /dev/null
+++ b/src/functionalTest/resources/projects/composite-build/proj2/src/main/scala/org/composite/proj2/Reporter.scala
@@ -0,0 +1,19 @@
+package org.composite.proj2
+
+class Reporter {
+
+  def report(rawData: String): Report = {
+    Report(1,2)
+  }
+
+  class InnerReporter {
+
+    def lala(): Unit = {
+
+      val x = 1 + 1
+      x
+    }
+  }
+}
+
+case class Report(id: Long, count: Int)
\ No newline at end of file
diff --git a/src/functionalTest/resources/projects/composite-build/proj2/src/test/scala/org/composite/proj2/ReporterSuite.scala b/src/functionalTest/resources/projects/composite-build/proj2/src/test/scala/org/composite/proj2/ReporterSuite.scala
new file mode 100644
index 0000000..89de304
--- /dev/null
+++ b/src/functionalTest/resources/projects/composite-build/proj2/src/test/scala/org/composite/proj2/ReporterSuite.scala
@@ -0,0 +1,16 @@
+package org.composite.proj2
+
+import org.scalatest.FunSuite
+import org.junit.runner.RunWith
+import org.scalatest.junit.JUnitRunner
+
+@RunWith(classOf[JUnitRunner])
+class ReporterSuite extends FunSuite {
+
+  test("report"){
+
+    val report = new Reporter().report("x")
+
+    assertResult(Report(1, 2))(report)
+  }
+}