diff --git a/project/build/funcheck.scala b/project/build/funcheck.scala
index b2de809e155252fa9da03be6bf4eba7194edea9f..ea79831c49c82dbbba52018b15810102acabe0a2 100644
--- a/project/build/funcheck.scala
+++ b/project/build/funcheck.scala
@@ -1,15 +1,33 @@
 import sbt._
 
-class FunCheckProject(info: ProjectInfo) extends DefaultProject(info) {
+class FunCheckProject(info: ProjectInfo) extends ParentProject(info) {
   override def outputDirectoryName = "bin"
-  override def mainScalaSourcePath = "src"
-  override def mainResourcesPath   = "resources"
   override def dependencyPath      = "lib"
+  override def shouldCheckOutputDirectories = false
+  lazy val purescala = project(".", "PureScala Definitions", new PureScalaProject(_))
+  lazy val plugin    = project(".", "FunCheck Plugin", new PluginProject(_), purescala)
+  lazy val multisets = project(".", "Multiset Solver", new MultisetsProject(_), plugin, purescala)
 
-  override def compileOptions = super.compileOptions ++ Seq(Unchecked)
+  sealed abstract class PersonalizedProject(info: ProjectInfo) extends DefaultProject(info) {
+    override def dependencyPath = "lib"
+    override def outputDirectoryName = "bin" 
+    override def compileOptions = super.compileOptions ++ Seq(Unchecked)
+  }  
 
-  lazy val scalac = task {
-    println("Running scalac...")
-    None
-  } dependsOn(`package`) describedAs("Runs scalac with the FunCheck plugin.")
+  class PureScalaProject(info: ProjectInfo) extends PersonalizedProject(info) {
+    override def outputPath = "bin" / "purescala"
+    override def mainScalaSourcePath = "src" / "purescala"
+
+  }
+  class PluginProject(info: ProjectInfo) extends PersonalizedProject(info) {
+    override def outputPath = "bin" / "funcheck"
+    override def mainScalaSourcePath = "src" / "funcheck"
+    override def unmanagedClasspath = super.unmanagedClasspath +++ purescala.jarPath
+    override def mainResourcesPath   = "resources" / "funcheck"
+  }
+  class MultisetsProject(info: ProjectInfo) extends PersonalizedProject(info) {
+    override def outputPath = "bin" / "multisets"
+    override def mainScalaSourcePath = "src" / "multisets"
+    override def unmanagedClasspath = super.unmanagedClasspath +++ purescala.jarPath
+  }
 }
diff --git a/resources/scalac-plugin.xml b/resources/funcheck/scalac-plugin.xml
similarity index 100%
rename from resources/scalac-plugin.xml
rename to resources/funcheck/scalac-plugin.xml