Merge pull request #30 from apache/WAYANG-34

[WAYANG-34] Addition of terasort, 
diff --git a/.travis.yml b/.travis.yml
index bf473fe..84dcf1a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -86,13 +86,14 @@
 #  - chmod +x ./docs/script/cibuild
 script:
   #- jdk_switcher use openjdk8
-  - bin/change-scala-version.sh 2.11.12 && mvn clean install -Pdistro,scala-11 "${mvn_opts[@]}" &> result.log
-  - bin/change-scala-version.sh 2.12.12 && mvn clean install -Pdistro,scala-12 "${mvn_opts[@]}" &>> result.log
+  - mvn clean install -Pdistro,scala-11 "${mvn_opts[@]}" &> result.log
+  - mvn clean install -Pdistro,scala-12 "${mvn_opts[@]}" &>> result.log
+  #- mvn clean install -Pdistro,scala-13 "${mvn_opts[@]}" &>> result.log # This is not working for now because of Spark and Flink not supporting Scala 2.13
   - cat /home/travis/build/apache/incubator-wayang/target/rat.txt || echo "file doesn't exist"
   - tail -n 2000 result.log
 
 after_success:
-  # generate the documentation and create a update of the documentation if something change there
+  # generate the documentation and create an update of the documentation if something changes there
   - if [ "${GENERATE_DOCS}" = "true" ] ; then mvn clean gem:exec@bundle-install gem:exec@generate-documentation gem:exec@generate-documentation-as-latest site -pl wayang-docs -Pweb-documentation ; fi
 
 env:
diff --git a/NOTICE.TXT b/NOTICE.TXT
index bdcd080..d407ab1 100644
--- a/NOTICE.TXT
+++ b/NOTICE.TXT
@@ -4,4 +4,33 @@
 This product includes software developed at
 The Apache Software Foundation (http://www.apache.org/).
 
-============================================================================
\ No newline at end of file
+----------------------------------------------
+
+This product includes software developed at
+The Apache Spark (https://spark.apache.org/).
+
+----------------------------------------------
+----------------------------------------------
+
+This product includes software developed at
+The Apache Flink (https://flink.apache.org/).
+
+----------------------------------------------
+----------------------------------------------
+
+This product includes software developed at
+The Apache Giraph (https://giraph.apache.org/).
+
+----------------------------------------------
+----------------------------------------------
+
+This product includes software developed at
+The Apache Hadoop (https://hadoop.apache.org/).
+
+----------------------------------------------
+----------------------------------------------
+
+This product includes software developed at
+The GraphChi-java (https://github.com/GraphChi/graphchi-java).
+
+----------------------------------------------
diff --git a/RELEASE_NOTES b/RELEASE_NOTES
new file mode 100644
index 0000000..d1b92c8
--- /dev/null
+++ b/RELEASE_NOTES
@@ -0,0 +1,47 @@
+==============================================================
+Apache Wayang (incubating) 0.6.0
+==============================================================
+
+This is the first official release of Apache Wayang.
+
+On this release is possible to found the the implementation of
+the following platforms:
+- Apache Flink v1.7.1
+- Apache Giraph v1.2.0-hadoop2
+- GraphChi v0.2.2(This is only available wit scala 11.x)
+- Java Streams (version depends on the java version)
+- JDBC-Template
+- Postgres v9.4.1208(It's a implementation of JDBC-Template)
+- Apache Spark v3.1.2 (scala 12.x) and v2.4.8 (scala 11.x)
+- SQLite3 v3.8.11.2(It's a implementation of JDBC-Template)
+
+NOTE: depending on the scala version the list of platforms available
+could be modified.
+
+
+New Features
+------------
+
+- NONE -
+
+Incompatible changes
+--------------------
+
+- NONE -
+
+Miscellaneous changes
+---------------------
+
+WAYANG-3 Unification of the logs
+WAYANG-[32, 33, 35, 38] License issues removed
+
+Known Issues
+------------
+
+WAYANG-23 Iteration Memory Issue
+
+Bug Fixes
+---------
+
+WAYANG-12 Issues on the compilation
+WAYANG-40 Different version of platform depending on the scala version
diff --git a/bin/build.sh b/bin/build.sh
index 8bd6e8e..f69be5d 100755
--- a/bin/build.sh
+++ b/bin/build.sh
@@ -48,15 +48,14 @@
 fi
 
 
-scala_versions=(2.11.8) # 2.12.2 was not supported as of creating this script
+scala_versions=(scala-11 scala-12)
 failures=()
 successes=()
 
 for scala_version in "${scala_versions[@]}"; do
 	echo "Running 'mvn ${mvn_opts[@]}' with Scala $scala_version..."
 
-	"$basedir/bin/change-scala-version.sh" "$scala_version"
-	if mvn "${mvn_opts[@]}"; then
+	if mvn "${mvn_opts[@]}" -P $scala_version; then
 		successes+=("$scala_version")
 	else
 		failures+=("$scala_version")
@@ -64,7 +63,7 @@
 done
 
 echo "Summary:"
-echo "* Successes with Scala versions ${successes[@]}"
-echo "* Failures with Scala versions ${failures[@]}"
+echo "* Successes with Scala versions: ${successes[@]}"
+echo "* Failures with Scala versions: ${failures[@]}"
 
 exit ${#failures[@]}
diff --git a/bin/change-scala-version.sh b/bin/change-scala-version.sh
index 79f4a32..d3378ce 100755
--- a/bin/change-scala-version.sh
+++ b/bin/change-scala-version.sh
@@ -19,6 +19,8 @@
 ##
 ################################################################################
 
+# THIS SCRIPT IS DEPRECATED since https://github.com/apache/incubator-wayang/pull/26
+
 if [ $# -eq 0 ]; then
 	>&2 echo "No parameters given."
 	echo "This script changes the Scala version used in this project."
diff --git a/pom.xml b/pom.xml
index fad1193..93194fa 100644
--- a/pom.xml
+++ b/pom.xml
@@ -583,6 +583,9 @@
 
         <profile>
             <id>scala-12</id>
+            <activation>
+                <jdk>11</jdk>
+            </activation>
             <properties>
                 <scala.version>2.12.12</scala.version>
                 <scala.mayor.version>2.12</scala.mayor.version>
diff --git a/wayang-api/wayang-api-python/src/test/java/org/apache/wayang/api/python/PythonAPITest.java b/wayang-api/wayang-api-python/src/test/java/org/apache/wayang/api/python/PythonAPITest.java
index e841298..189ee20 100644
--- a/wayang-api/wayang-api-python/src/test/java/org/apache/wayang/api/python/PythonAPITest.java
+++ b/wayang-api/wayang-api-python/src/test/java/org/apache/wayang/api/python/PythonAPITest.java
@@ -18,8 +18,6 @@
 
 package org.apache.wayang.api.python;
 
-import static org.junit.jupiter.api.Assertions.*;
-
 class PythonAPITest {
 
-}
\ No newline at end of file
+}
diff --git a/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/DataQuanta.scala b/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/DataQuanta.scala
index ed1f426..22956a1 100644
--- a/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/DataQuanta.scala
+++ b/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/DataQuanta.scala
@@ -22,9 +22,12 @@
 import _root_.java.lang.{Iterable => JavaIterable}
 import _root_.java.util.function.{Consumer, IntUnaryOperator, BiFunction => JavaBiFunction, Function => JavaFunction}
 import _root_.java.util.{Collection => JavaCollection}
+
 import org.apache.commons.lang3.Validate
+import org.apache.wayang.basic.data.{Tuple2 => WayangTuple2}
 import org.apache.wayang.basic.function.ProjectionDescriptor
 import org.apache.wayang.basic.operators._
+import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.function.FunctionDescriptor.{SerializableBinaryOperator, SerializableFunction, SerializablePredicate}
 import org.apache.wayang.core.function._
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval
@@ -33,8 +36,6 @@
 import org.apache.wayang.core.plan.wayangplan._
 import org.apache.wayang.core.platform.Platform
 import org.apache.wayang.core.util.{Tuple => WayangTuple}
-import org.apache.wayang.basic.data.{Tuple2 => WayangTuple2}
-import org.apache.wayang.commons.util.profiledb.model.Experiment
 
 import scala.collection.JavaConversions
 import scala.collection.JavaConversions._
@@ -796,6 +797,34 @@
   }
 
   /**
+   * Write the data quanta in this instance to a Object file. Triggers execution.
+   *
+   * @param url          URL to the text file
+   */
+  def writeObjectFile(url: String)(implicit classTag: ClassTag[Out]): Unit = {
+    writeObjectFileJava(url, classTag)
+  }
+
+  /**
+   * Write the data quanta in this instance to a Object file. Triggers execution.
+   *
+   * @param url          URL to the text file
+   */
+  def writeObjectFileJava(url: String, classTag: ClassTag[Out]): Unit ={
+    val sink = new ObjectFileSink[Out](
+      url,
+      basicDataUnitType(classTag).getTypeClass
+    )
+    sink.setName(s"Write objects to $url")
+    this.connectTo(sink, 0)
+
+    // Do the execution.
+    this.planBuilder.sinks += sink
+    this.planBuilder.buildAndExecute()
+    this.planBuilder.sinks.clear()
+  }
+
+  /**
     * Restrict the producing [[Operator]] to run on certain [[Platform]]s.
     *
     * @param platforms on that the [[Operator]] may be executed
diff --git a/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/DataQuantaBuilder.scala b/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/DataQuantaBuilder.scala
index 29b4965..6ab7eec 100644
--- a/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/DataQuantaBuilder.scala
+++ b/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/DataQuantaBuilder.scala
@@ -21,6 +21,7 @@
 
 import java.util.function.{Consumer, IntUnaryOperator, Function => JavaFunction}
 import java.util.{Collection => JavaCollection}
+
 import org.apache.wayang.api.graph.{Edge, EdgeDataQuantaBuilder, EdgeDataQuantaBuilderDecorator}
 import org.apache.wayang.api.util.{DataQuantaBuilderCache, TypeTrap}
 import org.apache.wayang.basic.data.{Record, Tuple2 => RT2}
diff --git a/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/JavaPlanBuilder.scala b/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/JavaPlanBuilder.scala
index d21870a..53e9207 100644
--- a/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/JavaPlanBuilder.scala
+++ b/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/JavaPlanBuilder.scala
@@ -19,6 +19,7 @@
 package org.apache.wayang.api
 
 import java.util.{Collection => JavaCollection}
+
 import org.apache.commons.lang3.Validate
 import org.apache.wayang.api.util.DataQuantaBuilderCache
 import org.apache.wayang.basic.data.Record
diff --git a/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/PlanBuilder.scala b/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/PlanBuilder.scala
index 3709f7f..f77ffc4 100644
--- a/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/PlanBuilder.scala
+++ b/wayang-api/wayang-api-scala-java/src/main/scala/org/apache/wayang/api/PlanBuilder.scala
@@ -21,7 +21,7 @@
 import org.apache.commons.lang3.Validate
 import org.apache.wayang.api
 import org.apache.wayang.basic.data.Record
-import org.apache.wayang.basic.operators.{CollectionSource, TableSource, TextFileSource}
+import org.apache.wayang.basic.operators.{CollectionSource, ObjectFileSource, TableSource, TextFileSource}
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.WayangContext
 import org.apache.wayang.core.plan.wayangplan._
@@ -111,6 +111,15 @@
     */
   def readTextFile(url: String): DataQuanta[String] = load(new TextFileSource(url))
 
+
+  /**
+   * Read a object's file and provide it as a dataset of [[Object]]s.
+   *
+   * @param url the URL of the Object's file
+   * @return [[DataQuanta]] representing the file
+   */
+  def readObjectFile[T: ClassTag](url: String): DataQuanta[T] = load(new ObjectFileSource(url, dataSetType[T]))
+
   /**
     * Reads a database table and provides them as a dataset of [[Record]]s.
     *
diff --git a/wayang-api/wayang-api-scala-java/src/test/java/org/apache/wayang/api/JavaApiTest.java b/wayang-api/wayang-api-scala-java/src/test/java/org/apache/wayang/api/JavaApiTest.java
index 2d4bb6c..420a82e 100644
--- a/wayang-api/wayang-api-scala-java/src/test/java/org/apache/wayang/api/JavaApiTest.java
+++ b/wayang-api/wayang-api-scala-java/src/test/java/org/apache/wayang/api/JavaApiTest.java
@@ -18,27 +18,6 @@
 
 package org.apache.wayang.api;
 
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
-import org.apache.wayang.basic.data.Tuple2;
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.api.WayangContext;
-import org.apache.wayang.core.function.ExecutionContext;
-import org.apache.wayang.core.function.FunctionDescriptor;
-import org.apache.wayang.core.function.PredicateDescriptor;
-import org.apache.wayang.core.function.TransformationDescriptor;
-import org.apache.wayang.core.types.DataSetType;
-import org.apache.wayang.core.util.WayangArrays;
-import org.apache.wayang.core.util.WayangCollections;
-import org.apache.wayang.core.util.Tuple;
-import org.apache.wayang.core.util.fs.LocalFileSystem;
-import org.apache.wayang.java.Java;
-import org.apache.wayang.java.operators.JavaMapOperator;
-import org.apache.wayang.spark.Spark;
-import org.apache.wayang.sqlite3.Sqlite3;
-import org.apache.wayang.sqlite3.operators.Sqlite3TableSource;
-
 import java.io.File;
 import java.io.IOException;
 import java.net.URI;
@@ -56,6 +35,26 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.StreamSupport;
+import org.apache.wayang.basic.data.Tuple2;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.api.WayangContext;
+import org.apache.wayang.core.function.ExecutionContext;
+import org.apache.wayang.core.function.FunctionDescriptor;
+import org.apache.wayang.core.function.PredicateDescriptor;
+import org.apache.wayang.core.function.TransformationDescriptor;
+import org.apache.wayang.core.types.DataSetType;
+import org.apache.wayang.core.util.Tuple;
+import org.apache.wayang.core.util.WayangArrays;
+import org.apache.wayang.core.util.WayangCollections;
+import org.apache.wayang.core.util.fs.LocalFileSystem;
+import org.apache.wayang.java.Java;
+import org.apache.wayang.java.operators.JavaMapOperator;
+import org.apache.wayang.spark.Spark;
+import org.apache.wayang.sqlite3.Sqlite3;
+import org.apache.wayang.sqlite3.operators.Sqlite3TableSource;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Test suite for the Java API.
diff --git a/wayang-api/wayang-api-scala-java/src/test/scala/org/apache/wayang/api/ApiTest.scala b/wayang-api/wayang-api-scala-java/src/test/scala/org/apache/wayang/api/ApiTest.scala
index cc05bd2..83e2548 100644
--- a/wayang-api/wayang-api-scala-java/src/test/scala/org/apache/wayang/api/ApiTest.scala
+++ b/wayang-api/wayang-api-scala-java/src/test/scala/org/apache/wayang/api/ApiTest.scala
@@ -24,7 +24,6 @@
 import java.sql.{Connection, Statement}
 import java.util.function.Consumer
 
-import org.junit.{Assert, Test}
 import org.apache.wayang.basic.WayangBasics
 import org.apache.wayang.core.api.{Configuration, WayangContext}
 import org.apache.wayang.core.function.FunctionDescriptor.ExtendedSerializablePredicate
@@ -35,6 +34,7 @@
 import org.apache.wayang.spark.Spark
 import org.apache.wayang.sqlite3.Sqlite3
 import org.apache.wayang.sqlite3.operators.Sqlite3TableSource
+import org.junit.{Assert, Test}
 
 /**
   * Tests the Wayang API.
diff --git a/wayang-benchmark/pom.xml b/wayang-benchmark/pom.xml
index 477c752..829ec88 100644
--- a/wayang-benchmark/pom.xml
+++ b/wayang-benchmark/pom.xml
@@ -71,6 +71,16 @@
       <artifactId>wayang-sqlite3</artifactId>
       <version>0.6.0-SNAPSHOT</version>
     </dependency>
+    <dependency>
+      <groupId>org.apache.hadoop</groupId>
+      <artifactId>hadoop-common</artifactId>
+      <version>2.7.7</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.spark</groupId>
+      <artifactId>spark-core_${scala.mayor.version}</artifactId>
+      <version>${spark.version}</version>
+    </dependency>
   </dependencies>
 
 
diff --git a/wayang-benchmark/src/main/java/org/apache/wayang/apps/sgd/SGDImpl.java b/wayang-benchmark/src/main/java/org/apache/wayang/apps/sgd/SGDImpl.java
index dbd7eac..d953908 100644
--- a/wayang-benchmark/src/main/java/org/apache/wayang/apps/sgd/SGDImpl.java
+++ b/wayang-benchmark/src/main/java/org/apache/wayang/apps/sgd/SGDImpl.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.apps.sgd;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
 import org.apache.wayang.api.DataQuantaBuilder;
 import org.apache.wayang.api.JavaPlanBuilder;
 import org.apache.wayang.basic.data.Tuple2;
@@ -27,12 +30,8 @@
 import org.apache.wayang.core.function.ExecutionContext;
 import org.apache.wayang.core.function.FunctionDescriptor;
 import org.apache.wayang.core.plugin.Plugin;
-import org.apache.wayang.core.util.WayangCollections;
 import org.apache.wayang.core.util.Tuple;
-
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
+import org.apache.wayang.core.util.WayangCollections;
 
 /**
  * This class executes a stochastic gradient descent optimization on Apache Wayang.
diff --git a/wayang-benchmark/src/main/java/org/apache/wayang/apps/sgd/SGDImprovedImpl.java b/wayang-benchmark/src/main/java/org/apache/wayang/apps/sgd/SGDImprovedImpl.java
index 1532f57..866fab1 100644
--- a/wayang-benchmark/src/main/java/org/apache/wayang/apps/sgd/SGDImprovedImpl.java
+++ b/wayang-benchmark/src/main/java/org/apache/wayang/apps/sgd/SGDImprovedImpl.java
@@ -18,22 +18,21 @@
 
 package org.apache.wayang.apps.sgd;
 
-import org.apache.wayang.commons.util.profiledb.model.Experiment;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
 import org.apache.wayang.api.DataQuantaBuilder;
 import org.apache.wayang.api.JavaPlanBuilder;
 import org.apache.wayang.basic.data.Tuple2;
+import org.apache.wayang.commons.util.profiledb.model.Experiment;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.WayangContext;
 import org.apache.wayang.core.function.ExecutionContext;
 import org.apache.wayang.core.function.FunctionDescriptor;
 import org.apache.wayang.core.plugin.Plugin;
-import org.apache.wayang.core.util.WayangCollections;
 import org.apache.wayang.core.util.Tuple;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
+import org.apache.wayang.core.util.WayangCollections;
 
 /**
  * This class executes a stochastic gradient descent optimization on Apache Wayang, just like {@link SGDImpl}. However,
diff --git a/wayang-benchmark/src/main/java/org/apache/wayang/apps/terasort/Random16.java b/wayang-benchmark/src/main/java/org/apache/wayang/apps/terasort/Random16.java
new file mode 100644
index 0000000..6e85d92
--- /dev/null
+++ b/wayang-benchmark/src/main/java/org/apache/wayang/apps/terasort/Random16.java
@@ -0,0 +1,376 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wayang.apps.terasort;
+
+/**
+ * This class implements a 128-bit linear congruential generator.
+ * Specifically, if X0 is the most recently issued 128-bit random
+ * number (or a seed of 0 if no random number has already been generated,
+ * the next number to be generated, X1, is equal to:
+ * X1 = (a * X0 + c) mod 2**128
+ * where a is 47026247687942121848144207491837523525
+ *            or 0x2360ed051fc65da44385df649fccf645
+ *   and c is 98910279301475397889117759788405497857
+ *            or 0x4a696d47726179524950202020202001
+ * The coefficient "a" is suggested by:
+ * Pierre L'Ecuyer, "Tables of linear congruential generators of different
+ * sizes and good lattice structure", Mathematics of Computation, 68
+ * pp. 249 - 260 (1999)
+ * http://www.ams.org/mcom/1999-68-225/S0025-5718-99-00996-5/S0025-5718-99-00996-5.pdf
+ * The constant "c" meets the simple suggestion by the same reference that
+ * it be odd.
+ *
+ * There is also a facility for quickly advancing the state of the
+ * generator by a fixed number of steps - this facilitates parallel
+ * generation.
+ *
+ * This is based on 1.0 of rand16.c from Chris Nyberg 
+ * <chris.nyberg@ordinal.com>.
+ *
+ * code copied from <a href="https://github.com/apache/hadoop/blob/trunk/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/terasort/Random16.java">Terasort Example</a>
+ */
+class Random16 {
+
+  /**
+   * The "Gen" array contain powers of 2 of the linear congruential generator.
+   * The index 0 struct contain the "a" coefficient and "c" constant for the
+   * generator.  That is, the generator is:
+   *    f(x) = (Gen[0].a * x + Gen[0].c) mod 2**128
+   *
+   * All structs after the first contain an "a" and "c" that
+   * comprise the square of the previous function.
+   *
+   * f**2(x) = (Gen[1].a * x + Gen[1].c) mod 2**128
+   * f**4(x) = (Gen[2].a * x + Gen[2].c) mod 2**128
+   * f**8(x) = (Gen[3].a * x + Gen[3].c) mod 2**128
+   * ...
+
+   */
+  private static class RandomConstant {
+    final Unsigned16 a;
+    final Unsigned16 c;
+    public RandomConstant(String left, String right) {
+      a = new Unsigned16(left);
+      c = new Unsigned16(right);
+    }
+  }
+
+  private static final RandomConstant[] genArray = new RandomConstant[]{
+      /* [  0] */ new RandomConstant("2360ed051fc65da44385df649fccf645",
+      "4a696d47726179524950202020202001"),
+      /* [  1] */ new RandomConstant("17bce35bdf69743c529ed9eb20e0ae99",
+      "95e0e48262b3edfe04479485c755b646"),
+      /* [  2] */ new RandomConstant("f4dd417327db7a9bd194dfbe42d45771",
+      "882a02c315362b60765f100068b33a1c"),
+      /* [  3] */ new RandomConstant("6347af777a7898f6d1a2d6f33505ffe1",
+      "5efc4abfaca23e8ca8edb1f2dfbf6478"),
+      /* [  4] */ new RandomConstant("b6a4239f3b315f84f6ef6d3d288c03c1",
+      "f25bd15439d16af594c1b1bafa6239f0"),
+      /* [  5] */ new RandomConstant("2c82901ad1cb0cd182b631ba6b261781",
+      "89ca67c29c9397d59c612596145db7e0"),
+      /* [  6] */ new RandomConstant("dab03f988288676ee49e66c4d2746f01",
+      "8b6ae036713bd578a8093c8eae5c7fc0"),
+      /* [  7] */ new RandomConstant("602167331d86cf5684fe009a6d09de01",
+      "98a2542fd23d0dbdff3b886cdb1d3f80"),
+      /* [  8] */ new RandomConstant("61ecb5c24d95b058f04c80a23697bc01",
+      "954db923fdb7933e947cd1edcecb7f00"),
+      /* [  9] */ new RandomConstant("4a5c31e0654c28aa60474e83bf3f7801",
+      "00be4a36657c98cd204e8c8af7dafe00"),
+      /* [ 10] */ new RandomConstant("ae4f079d54fbece1478331d3c6bef001",
+      "991965329dccb28d581199ab18c5fc00"),
+      /* [ 11] */ new RandomConstant("101b8cb830c7cb927ff1ed50ae7de001",
+      "e1a8705b63ad5b8cd6c3d268d5cbf800"),
+      /* [ 12] */ new RandomConstant("f54a27fc056b00e7563f3505e0fbc001",
+      "2b657bbfd6ed9d632079e70c3c97f000"),
+      /* [ 13] */ new RandomConstant("df8a6fc1a833d201f98d719dd1f78001",
+      "59b60ee4c52fa49e9fe90682bd2fe000"),
+      /* [ 14] */ new RandomConstant("5480a5015f101a4ea7e3f183e3ef0001",
+      "cc099c88030679464fe86aae8a5fc000"),
+      /* [ 15] */ new RandomConstant("a498509e76e5d7925f539c28c7de0001",
+      "06b9abff9f9f33dd30362c0154bf8000"),
+      /* [ 16] */ new RandomConstant("0798a3d8b10dc72e60121cd58fbc0001",
+      "e296707121688d5a0260b293a97f0000"),
+      /* [ 17] */ new RandomConstant("1647d1e78ec02e665fafcbbb1f780001",
+      "189ffc4701ff23cb8f8acf6b52fe0000"),
+      /* [ 18] */ new RandomConstant("a7c982285e72bf8c0c8ddfb63ef00001",
+      "5141110ab208fb9d61fb47e6a5fc0000"),
+      /* [ 19] */ new RandomConstant("3eb78ee8fb8c56dbc5d4e06c7de00001",
+      "3c97caa62540f2948d8d340d4bf80000"),
+      /* [ 20] */ new RandomConstant("72d03b6f4681f2f9fe8e44d8fbc00001",
+      "1b25cb9cfe5a0c963174f91a97f00000"),
+      /* [ 21] */ new RandomConstant("ea85f81e4f502c9bc8ae99b1f7800001",
+      "0c644570b4a487103c5436352fe00000"),
+      /* [ 22] */ new RandomConstant("629c320db08b00c6bfa57363ef000001",
+      "3d0589c28869472bde517c6a5fc00000"),
+      /* [ 23] */ new RandomConstant("c5c4b9ce268d074a386be6c7de000001",
+      "bc95e5ab36477e65534738d4bf800000"),
+      /* [ 24] */ new RandomConstant("f30bbbbed1596187555bcd8fbc000001",
+      "ddb02ff72a031c01011f71a97f000000"),
+      /* [ 25] */ new RandomConstant("4a1000fb26c9eeda3cc79b1f78000001",
+      "2561426086d9acdb6c82e352fe000000"),
+      /* [ 26] */ new RandomConstant("89fb5307f6bf8ce2c1cf363ef0000001",
+      "64a788e3c118ed1c8215c6a5fc000000"),
+      /* [ 27] */ new RandomConstant("830b7b3358a5d67ea49e6c7de0000001",
+      "e65ea321908627cfa86b8d4bf8000000"),
+      /* [ 28] */ new RandomConstant("fd8a51da91a69fe1cd3cd8fbc0000001",
+      "53d27225604d85f9e1d71a97f0000000"),
+      /* [ 29] */ new RandomConstant("901a48b642b90b55aa79b1f780000001",
+      "ca5ec7a3ed1fe55e07ae352fe0000000"),
+      /* [ 30] */ new RandomConstant("118cdefdf32144f394f363ef00000001",
+      "4daebb2e085330651f5c6a5fc0000000"),
+      /* [ 31] */ new RandomConstant("0a88c0a91cff430829e6c7de00000001",
+      "9d6f1a00a8f3f76e7eb8d4bf80000000"),
+      /* [ 32] */ new RandomConstant("433bef4314f16a9453cd8fbc00000001",
+      "158c62f2b31e496dfd71a97f00000000"),
+      /* [ 33] */ new RandomConstant("c294b02995ae6738a79b1f7800000001",
+      "290e84a2eb15fd1ffae352fe00000000"),
+      /* [ 34] */ new RandomConstant("913575e0da8b16b14f363ef000000001",
+      "e3dc1bfbe991a34ff5c6a5fc00000000"),
+      /* [ 35] */ new RandomConstant("2f61b9f871cf4e629e6c7de000000001",
+      "ddf540d020b9eadfeb8d4bf800000000"),
+      /* [ 36] */ new RandomConstant("78d26ccbd68320c53cd8fbc000000001",
+      "8ee4950177ce66bfd71a97f000000000"),
+      /* [ 37] */ new RandomConstant("8b7ebd037898518a79b1f78000000001",
+      "39e0f787c907117fae352fe000000000"),
+      /* [ 38] */ new RandomConstant("0b5507b61f78e314f363ef0000000001",
+      "659d2522f7b732ff5c6a5fc000000000"),
+      /* [ 39] */ new RandomConstant("4f884628f812c629e6c7de0000000001",
+      "9e8722938612a5feb8d4bf8000000000"),
+      /* [ 40] */ new RandomConstant("be896744d4a98c53cd8fbc0000000001",
+      "e941a65d66b64bfd71a97f0000000000"),
+      /* [ 41] */ new RandomConstant("daf63a553b6318a79b1f780000000001",
+      "7b50d19437b097fae352fe0000000000"),
+      /* [ 42] */ new RandomConstant("2d7a23d8bf06314f363ef00000000001",
+      "59d7b68e18712ff5c6a5fc0000000000"),
+      /* [ 43] */ new RandomConstant("392b046a9f0c629e6c7de00000000001",
+      "4087bab2d5225feb8d4bf80000000000"),
+      /* [ 44] */ new RandomConstant("eb30fbb9c218c53cd8fbc00000000001",
+      "b470abc03b44bfd71a97f00000000000"),
+      /* [ 45] */ new RandomConstant("b9cdc30594318a79b1f7800000000001",
+      "366630eaba897fae352fe00000000000"),
+      /* [ 46] */ new RandomConstant("014ab453686314f363ef000000000001",
+      "a2dfc77e8512ff5c6a5fc00000000000"),
+      /* [ 47] */ new RandomConstant("395221c7d0c629e6c7de000000000001",
+      "1e0d25a14a25feb8d4bf800000000000"),
+      /* [ 48] */ new RandomConstant("4d972813a18c53cd8fbc000000000001",
+      "9d50a5d3944bfd71a97f000000000000"),
+      /* [ 49] */ new RandomConstant("06f9e2374318a79b1f78000000000001",
+      "bf7ab5eb2897fae352fe000000000000"),
+      /* [ 50] */ new RandomConstant("bd220cae86314f363ef0000000000001",
+      "925b14e6512ff5c6a5fc000000000000"),
+      /* [ 51] */ new RandomConstant("36fd3a5d0c629e6c7de0000000000001",
+      "724cce0ca25feb8d4bf8000000000000"),
+      /* [ 52] */ new RandomConstant("60def8ba18c53cd8fbc0000000000001",
+      "1af42d1944bfd71a97f0000000000000"),
+      /* [ 53] */ new RandomConstant("8d500174318a79b1f780000000000001",
+      "0f529e32897fae352fe0000000000000"),
+      /* [ 54] */ new RandomConstant("48e842e86314f363ef00000000000001",
+      "844e4c6512ff5c6a5fc0000000000000"),
+      /* [ 55] */ new RandomConstant("4af185d0c629e6c7de00000000000001",
+      "9f40d8ca25feb8d4bf80000000000000"),
+      /* [ 56] */ new RandomConstant("7a670ba18c53cd8fbc00000000000001",
+      "9912b1944bfd71a97f00000000000000"),
+      /* [ 57] */ new RandomConstant("86de174318a79b1f7800000000000001",
+      "9c69632897fae352fe00000000000000"),
+      /* [ 58] */ new RandomConstant("55fc2e86314f363ef000000000000001",
+      "e1e2c6512ff5c6a5fc00000000000000"),
+      /* [ 59] */ new RandomConstant("ccf85d0c629e6c7de000000000000001",
+      "68058ca25feb8d4bf800000000000000"),
+      /* [ 60] */ new RandomConstant("1df0ba18c53cd8fbc000000000000001",
+      "610b1944bfd71a97f000000000000000"),
+      /* [ 61] */ new RandomConstant("4be174318a79b1f78000000000000001",
+      "061632897fae352fe000000000000000"),
+      /* [ 62] */ new RandomConstant("d7c2e86314f363ef0000000000000001",
+      "1c2c6512ff5c6a5fc000000000000000"),
+      /* [ 63] */ new RandomConstant("af85d0c629e6c7de0000000000000001",
+      "7858ca25feb8d4bf8000000000000000"),
+      /* [ 64] */ new RandomConstant("5f0ba18c53cd8fbc0000000000000001",
+      "f0b1944bfd71a97f0000000000000000"),
+      /* [ 65] */ new RandomConstant("be174318a79b1f780000000000000001",
+      "e1632897fae352fe0000000000000000"),
+      /* [ 66] */ new RandomConstant("7c2e86314f363ef00000000000000001",
+      "c2c6512ff5c6a5fc0000000000000000"),
+      /* [ 67] */ new RandomConstant("f85d0c629e6c7de00000000000000001",
+      "858ca25feb8d4bf80000000000000000"),
+      /* [ 68] */ new RandomConstant("f0ba18c53cd8fbc00000000000000001",
+      "0b1944bfd71a97f00000000000000000"),
+      /* [ 69] */ new RandomConstant("e174318a79b1f7800000000000000001",
+      "1632897fae352fe00000000000000000"),
+      /* [ 70] */ new RandomConstant("c2e86314f363ef000000000000000001",
+      "2c6512ff5c6a5fc00000000000000000"),
+      /* [ 71] */ new RandomConstant("85d0c629e6c7de000000000000000001",
+      "58ca25feb8d4bf800000000000000000"),
+      /* [ 72] */ new RandomConstant("0ba18c53cd8fbc000000000000000001",
+      "b1944bfd71a97f000000000000000000"),
+      /* [ 73] */ new RandomConstant("174318a79b1f78000000000000000001",
+      "632897fae352fe000000000000000000"),
+      /* [ 74] */ new RandomConstant("2e86314f363ef0000000000000000001",
+      "c6512ff5c6a5fc000000000000000000"),
+      /* [ 75] */ new RandomConstant("5d0c629e6c7de0000000000000000001",
+      "8ca25feb8d4bf8000000000000000000"),
+      /* [ 76] */ new RandomConstant("ba18c53cd8fbc0000000000000000001",
+      "1944bfd71a97f0000000000000000000"),
+      /* [ 77] */ new RandomConstant("74318a79b1f780000000000000000001",
+      "32897fae352fe0000000000000000000"),
+      /* [ 78] */ new RandomConstant("e86314f363ef00000000000000000001",
+      "6512ff5c6a5fc0000000000000000000"),
+      /* [ 79] */ new RandomConstant("d0c629e6c7de00000000000000000001",
+      "ca25feb8d4bf80000000000000000000"),
+      /* [ 80] */ new RandomConstant("a18c53cd8fbc00000000000000000001",
+      "944bfd71a97f00000000000000000000"),
+      /* [ 81] */ new RandomConstant("4318a79b1f7800000000000000000001",
+      "2897fae352fe00000000000000000000"),
+      /* [ 82] */ new RandomConstant("86314f363ef000000000000000000001",
+      "512ff5c6a5fc00000000000000000000"),
+      /* [ 83] */ new RandomConstant("0c629e6c7de000000000000000000001",
+      "a25feb8d4bf800000000000000000000"),
+      /* [ 84] */ new RandomConstant("18c53cd8fbc000000000000000000001",
+      "44bfd71a97f000000000000000000000"),
+      /* [ 85] */ new RandomConstant("318a79b1f78000000000000000000001",
+      "897fae352fe000000000000000000000"),
+      /* [ 86] */ new RandomConstant("6314f363ef0000000000000000000001",
+      "12ff5c6a5fc000000000000000000000"),
+      /* [ 87] */ new RandomConstant("c629e6c7de0000000000000000000001",
+      "25feb8d4bf8000000000000000000000"),
+      /* [ 88] */ new RandomConstant("8c53cd8fbc0000000000000000000001",
+      "4bfd71a97f0000000000000000000000"),
+      /* [ 89] */ new RandomConstant("18a79b1f780000000000000000000001",
+      "97fae352fe0000000000000000000000"),
+      /* [ 90] */ new RandomConstant("314f363ef00000000000000000000001",
+      "2ff5c6a5fc0000000000000000000000"),
+      /* [ 91] */ new RandomConstant("629e6c7de00000000000000000000001",
+      "5feb8d4bf80000000000000000000000"),
+      /* [ 92] */ new RandomConstant("c53cd8fbc00000000000000000000001",
+      "bfd71a97f00000000000000000000000"),
+      /* [ 93] */ new RandomConstant("8a79b1f7800000000000000000000001",
+      "7fae352fe00000000000000000000000"),
+      /* [ 94] */ new RandomConstant("14f363ef000000000000000000000001",
+      "ff5c6a5fc00000000000000000000000"),
+      /* [ 95] */ new RandomConstant("29e6c7de000000000000000000000001",
+      "feb8d4bf800000000000000000000000"),
+      /* [ 96] */ new RandomConstant("53cd8fbc000000000000000000000001",
+      "fd71a97f000000000000000000000000"),
+      /* [ 97] */ new RandomConstant("a79b1f78000000000000000000000001",
+      "fae352fe000000000000000000000000"),
+      /* [ 98] */ new RandomConstant("4f363ef0000000000000000000000001",
+      "f5c6a5fc000000000000000000000000"),
+      /* [ 99] */ new RandomConstant("9e6c7de0000000000000000000000001",
+      "eb8d4bf8000000000000000000000000"),
+      /* [100] */ new RandomConstant("3cd8fbc0000000000000000000000001",
+      "d71a97f0000000000000000000000000"),
+      /* [101] */ new RandomConstant("79b1f780000000000000000000000001",
+      "ae352fe0000000000000000000000000"),
+      /* [102] */ new RandomConstant("f363ef00000000000000000000000001",
+      "5c6a5fc0000000000000000000000000"),
+      /* [103] */ new RandomConstant("e6c7de00000000000000000000000001",
+      "b8d4bf80000000000000000000000000"),
+      /* [104] */ new RandomConstant("cd8fbc00000000000000000000000001",
+      "71a97f00000000000000000000000000"),
+      /* [105] */ new RandomConstant("9b1f7800000000000000000000000001",
+      "e352fe00000000000000000000000000"),
+      /* [106] */ new RandomConstant("363ef000000000000000000000000001",
+      "c6a5fc00000000000000000000000000"),
+      /* [107] */ new RandomConstant("6c7de000000000000000000000000001",
+      "8d4bf800000000000000000000000000"),
+      /* [108] */ new RandomConstant("d8fbc000000000000000000000000001",
+      "1a97f000000000000000000000000000"),
+      /* [109] */ new RandomConstant("b1f78000000000000000000000000001",
+      "352fe000000000000000000000000000"),
+      /* [110] */ new RandomConstant("63ef0000000000000000000000000001",
+      "6a5fc000000000000000000000000000"),
+      /* [111] */ new RandomConstant("c7de0000000000000000000000000001",
+      "d4bf8000000000000000000000000000"),
+      /* [112] */ new RandomConstant("8fbc0000000000000000000000000001",
+      "a97f0000000000000000000000000000"),
+      /* [113] */ new RandomConstant("1f780000000000000000000000000001",
+      "52fe0000000000000000000000000000"),
+      /* [114] */ new RandomConstant("3ef00000000000000000000000000001",
+      "a5fc0000000000000000000000000000"),
+      /* [115] */ new RandomConstant("7de00000000000000000000000000001",
+      "4bf80000000000000000000000000000"),
+      /* [116] */ new RandomConstant("fbc00000000000000000000000000001",
+      "97f00000000000000000000000000000"),
+      /* [117] */ new RandomConstant("f7800000000000000000000000000001",
+      "2fe00000000000000000000000000000"),
+      /* [118] */ new RandomConstant("ef000000000000000000000000000001",
+      "5fc00000000000000000000000000000"),
+      /* [119] */ new RandomConstant("de000000000000000000000000000001",
+      "bf800000000000000000000000000000"),
+      /* [120] */ new RandomConstant("bc000000000000000000000000000001",
+      "7f000000000000000000000000000000"),
+      /* [121] */ new RandomConstant("78000000000000000000000000000001",
+      "fe000000000000000000000000000000"),
+      /* [122] */ new RandomConstant("f0000000000000000000000000000001",
+      "fc000000000000000000000000000000"),
+      /* [123] */ new RandomConstant("e0000000000000000000000000000001",
+      "f8000000000000000000000000000000"),
+      /* [124] */ new RandomConstant("c0000000000000000000000000000001",
+      "f0000000000000000000000000000000"),
+      /* [125] */ new RandomConstant("80000000000000000000000000000001",
+      "e0000000000000000000000000000000"),
+      /* [126] */ new RandomConstant("00000000000000000000000000000001",
+      "c0000000000000000000000000000000"),
+      /* [127] */ new RandomConstant("00000000000000000000000000000001",
+      "80000000000000000000000000000000")};
+
+  /**
+   *  generate the random number that is "advance" steps
+   *  from an initial random number of 0.  This is done by
+   *  starting with 0, and then advancing the by the
+   *  appropriate powers of 2 of the linear congruential
+   *  generator.
+   */
+  public static Unsigned16 skipAhead(Unsigned16 advance) {
+    Unsigned16 result = new Unsigned16();
+    long          bit_map;
+
+    bit_map = advance.getLow8();
+    for (int i = 0; bit_map != 0 && i < 64; i++) {
+      if ((bit_map & (1L << i)) != 0) {
+        /* advance random number by f**(2**i) (x)
+         */
+        result.multiply(genArray[i].a);
+        result.add(genArray[i].c);
+        bit_map &= ~(1L << i);
+      }
+    }
+    bit_map = advance.getHigh8();
+    for (int i = 0; bit_map != 0 && i < 64; i++)
+    {
+      if ((bit_map & (1L << i)) != 0) {
+        /* advance random number by f**(2**(i + 64)) (x)
+         */
+        result.multiply(genArray[i+64].a);
+        result.add(genArray[i+64].c);
+        bit_map &= ~(1L << i);
+      }
+    }
+    return result;
+  }
+
+  /**
+   * Generate the next 16 byte random number.
+   */
+  public static void nextRand(Unsigned16 rand) {
+    /* advance the random number forward once using the linear congruential
+     * generator, and then return the new random number
+     */
+    rand.multiply(genArray[0].a);
+    rand.add(genArray[0].c);
+  }
+}
diff --git a/wayang-benchmark/src/main/java/org/apache/wayang/apps/terasort/Unsigned16.java b/wayang-benchmark/src/main/java/org/apache/wayang/apps/terasort/Unsigned16.java
new file mode 100644
index 0000000..ce6b662
--- /dev/null
+++ b/wayang-benchmark/src/main/java/org/apache/wayang/apps/terasort/Unsigned16.java
@@ -0,0 +1,299 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.wayang.apps.terasort;
+
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.io.Serializable;
+import org.apache.hadoop.io.Writable;
+
+/**
+ * An unsigned 16 byte integer class that supports addition, multiplication,
+ * and left shifts.
+ *
+ *  * code copied from <a href="https://github.com/apache/hadoop/blob/trunk/hadoop-mapreduce-project/hadoop-mapreduce-examples/src/main/java/org/apache/hadoop/examples/terasort/Unsigned16.java">Terasort Example</a>
+ */
+class Unsigned16 implements Writable, Serializable {
+  private long hi8;
+  private long lo8;
+
+  public Unsigned16() {
+    hi8 = 0;
+    lo8 = 0;
+  }
+
+  public Unsigned16(long l) {
+    hi8 = 0;
+    lo8 = l;
+  }
+
+  public Unsigned16(Unsigned16 other) {
+    hi8 = other.hi8;
+    lo8 = other.lo8;
+  }
+
+  @Override
+  public boolean equals(Object o) {
+    if (o instanceof Unsigned16) {
+      Unsigned16 other = (Unsigned16) o;
+      return other.hi8 == hi8 && other.lo8 == lo8;
+    }
+    return false;
+  }
+
+  @Override
+  public int hashCode() {
+    return (int) lo8;
+  }
+
+  /**
+   * Parse a hex string
+   * @param s the hex string
+   */
+  public Unsigned16(String s) throws NumberFormatException {
+    set(s);
+  }
+
+  /**
+   * Set the number from a hex string
+   * @param s the number in hexadecimal
+   * @throws NumberFormatException if the number is invalid
+   */
+  public void set(String s) throws NumberFormatException {
+    hi8 = 0;
+    lo8 = 0;
+    final long lastDigit = 0xfl << 60;
+    for (int i = 0; i < s.length(); ++i) {
+      int digit = getHexDigit(s.charAt(i));
+      if ((lastDigit & hi8) != 0) {
+        throw new NumberFormatException(s + " overflowed 16 bytes");
+      }
+      hi8 <<= 4;
+      hi8 |= (lo8 & lastDigit) >>> 60;
+      lo8 <<= 4;
+      lo8 |= digit;
+    }
+  }
+
+  /**
+   * Set the number to a given long.
+   * @param l the new value, which is treated as an unsigned number
+   */
+  public void set(long l) {
+    lo8 = l;
+    hi8 = 0;
+  }
+
+  /**
+   * Map a hexadecimal character into a digit.
+   * @param ch the character
+   * @return the digit from 0 to 15
+   * @throws NumberFormatException
+   */
+  private static int getHexDigit(char ch) throws NumberFormatException {
+    if (ch >= '0' && ch <= '9') {
+      return ch - '0';
+    }
+    if (ch >= 'a' && ch <= 'f') {
+      return ch - 'a' + 10;
+    }
+    if (ch >= 'A' && ch <= 'F') {
+      return ch - 'A' + 10;
+    }
+    throw new NumberFormatException(ch + " is not a valid hex digit");
+  }
+
+  private static final Unsigned16 TEN = new Unsigned16(10);
+
+  public static Unsigned16 fromDecimal(String s) throws NumberFormatException {
+    Unsigned16 result = new Unsigned16();
+    Unsigned16 tmp = new Unsigned16();
+    for(int i=0; i < s.length(); i++) {
+      char ch = s.charAt(i);
+      if (ch < '0' || ch > '9') {
+        throw new NumberFormatException(ch + " not a valid decimal digit");
+      }
+      int digit = ch - '0';
+      result.multiply(TEN);
+      tmp.set(digit);
+      result.add(tmp);
+    }
+    return result;
+  }
+
+  /**
+   * Return the number as a hex string.
+   */
+  public String toString() {
+    if (hi8 == 0) {
+      return Long.toHexString(lo8);
+    } else {
+      StringBuilder result = new StringBuilder();
+      result.append(Long.toHexString(hi8));
+      String loString = Long.toHexString(lo8);
+      for(int i=loString.length(); i < 16; ++i) {
+        result.append('0');
+      }
+      result.append(loString);
+      return result.toString();
+    }
+  }
+
+  /**
+   * Get a given byte from the number.
+   * @param b the byte to get with 0 meaning the most significant byte
+   * @return the byte or 0 if b is outside of 0..15
+   */
+  public byte getByte(int b) {
+    if (b >= 0 && b < 16) {
+      if (b < 8) {
+        return (byte) (hi8 >> (56 - 8*b));
+      } else {
+        return (byte) (lo8 >> (120 - 8*b));
+      }
+    }
+    return 0;
+  }
+
+  /**
+   * Get the hexadecimal digit at the given position.
+   * @param p the digit position to get with 0 meaning the most significant
+   * @return the character or '0' if p is outside of 0..31
+   */
+  public char getHexDigit(int p) {
+    byte digit = getByte(p / 2);
+    if (p % 2 == 0) {
+      digit >>>= 4;
+    }
+    digit &= 0xf;
+    if (digit < 10) {
+      return (char) ('0' + digit);
+    } else {
+      return (char) ('A' + digit - 10);
+    }
+  }
+
+  /**
+   * Get the high 8 bytes as a long.
+   */
+  public long getHigh8() {
+    return hi8;
+  }
+
+  /**
+   * Get the low 8 bytes as a long.
+   */
+  public long getLow8() {
+    return lo8;
+  }
+
+  /**
+   * Multiple the current number by a 16 byte unsigned integer. Overflow is not
+   * detected and the result is the low 16 bytes of the result. The numbers 
+   * are divided into 32 and 31 bit chunks so that the product of two chucks
+   * fits in the unsigned 63 bits of a long.
+   * @param b the other number
+   */
+  void multiply(Unsigned16 b) {
+    // divide the left into 4 32 bit chunks
+    long[] left = new long[4];
+    left[0] = lo8 & 0xffffffffl;
+    left[1] = lo8 >>> 32;
+    left[2] = hi8 & 0xffffffffl;
+    left[3] = hi8 >>> 32;
+    // divide the right into 5 31 bit chunks
+    long[] right = new long[5];
+    right[0] = b.lo8 & 0x7fffffffl;
+    right[1] = (b.lo8 >>> 31) & 0x7fffffffl;
+    right[2] = (b.lo8 >>> 62) + ((b.hi8 & 0x1fffffffl) << 2);
+    right[3] = (b.hi8 >>> 29) & 0x7fffffffl;
+    right[4] = (b.hi8 >>> 60);
+    // clear the cur value
+    set(0);
+    Unsigned16 tmp = new Unsigned16();
+    for(int l=0; l < 4; ++l) {
+      for (int r=0; r < 5; ++r) {
+        long prod = left[l] * right[r];
+        if (prod != 0) {
+          int off = l*32 + r*31;
+          tmp.set(prod);
+          tmp.shiftLeft(off);
+          add(tmp);
+        }
+      }
+    }
+  }
+
+  /**
+   * Add the given number into the current number.
+   * @param b the other number
+   */
+  public void add(Unsigned16 b) {
+    long sumHi;
+    long sumLo;
+    long  reshibit, hibit0, hibit1;
+
+    sumHi = hi8 + b.hi8;
+
+    hibit0 = (lo8 & 0x8000000000000000L);
+    hibit1 = (b.lo8 & 0x8000000000000000L);
+    sumLo = lo8 + b.lo8;
+    reshibit = (sumLo & 0x8000000000000000L);
+    if ((hibit0 & hibit1) != 0 | ((hibit0 ^ hibit1) != 0 && reshibit == 0))
+      sumHi++;  /* add carry bit */
+    hi8 = sumHi;
+    lo8 = sumLo;
+  }
+
+  /**
+   * Shift the number a given number of bit positions. The number is the low
+   * order bits of the result.
+   * @param bits the bit positions to shift by
+   */
+  public void shiftLeft(int bits) {
+    if (bits != 0) {
+      if (bits < 64) {
+        hi8 <<= bits;
+        hi8 |= (lo8 >>> (64 - bits));
+        lo8 <<= bits;
+      } else if (bits < 128) {
+        hi8 = lo8 << (bits - 64);
+        lo8 = 0;
+      } else {
+        hi8 = 0;
+        lo8 = 0;
+      }
+    }
+  }
+
+  @Override
+  public void readFields(DataInput in) throws IOException {
+    hi8 = in.readLong();
+    lo8 = in.readLong();
+  }
+
+  @Override
+  public void write(DataOutput out) throws IOException {
+    out.writeLong(hi8);
+    out.writeLong(lo8);
+  }
+
+
+}
diff --git a/wayang-benchmark/src/main/java/org/apache/wayang/apps/tpch/Main.java b/wayang-benchmark/src/main/java/org/apache/wayang/apps/tpch/Main.java
index c020b34..f77abe2 100644
--- a/wayang-benchmark/src/main/java/org/apache/wayang/apps/tpch/Main.java
+++ b/wayang-benchmark/src/main/java/org/apache/wayang/apps/tpch/Main.java
@@ -21,14 +21,17 @@
 import org.apache.wayang.apps.tpch.data.LineItemTuple;
 import org.apache.wayang.apps.tpch.data.q1.GroupKey;
 import org.apache.wayang.apps.tpch.data.q1.ReturnTuple;
-import org.apache.wayang.basic.operators.*;
+import org.apache.wayang.basic.operators.FilterOperator;
+import org.apache.wayang.basic.operators.LocalCallbackSink;
+import org.apache.wayang.basic.operators.MapOperator;
+import org.apache.wayang.basic.operators.ReduceByOperator;
+import org.apache.wayang.basic.operators.TextFileSource;
 import org.apache.wayang.core.api.WayangContext;
 import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.util.ReflectionUtils;
 import org.apache.wayang.java.Java;
 import org.apache.wayang.java.platform.JavaPlatform;
 import org.apache.wayang.spark.Spark;
-import org.apache.wayang.spark.platform.SparkPlatform;
 
 /**
  * Main class for the TPC-H app based on Apache Wayang.
diff --git a/wayang-benchmark/src/main/java/org/apache/wayang/apps/wordcount/Main.java b/wayang-benchmark/src/main/java/org/apache/wayang/apps/wordcount/Main.java
index 9b613cd..0cd0f4d 100644
--- a/wayang-benchmark/src/main/java/org/apache/wayang/apps/wordcount/Main.java
+++ b/wayang-benchmark/src/main/java/org/apache/wayang/apps/wordcount/Main.java
@@ -18,8 +18,19 @@
 
 package org.apache.wayang.apps.wordcount;
 
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
 import org.apache.wayang.basic.data.Tuple2;
-import org.apache.wayang.basic.operators.*;
+import org.apache.wayang.basic.operators.FilterOperator;
+import org.apache.wayang.basic.operators.FlatMapOperator;
+import org.apache.wayang.basic.operators.LocalCallbackSink;
+import org.apache.wayang.basic.operators.MapOperator;
+import org.apache.wayang.basic.operators.ReduceByOperator;
+import org.apache.wayang.basic.operators.TextFileSource;
 import org.apache.wayang.core.api.WayangContext;
 import org.apache.wayang.core.function.FlatMapDescriptor;
 import org.apache.wayang.core.function.ReduceDescriptor;
@@ -32,14 +43,6 @@
 import org.apache.wayang.java.Java;
 import org.apache.wayang.java.platform.JavaPlatform;
 import org.apache.wayang.spark.Spark;
-import org.apache.wayang.spark.platform.SparkPlatform;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
 
 /**
  * Example Apache Wayang App that does a word count -- the Hello World of Map/Reduce-like systems.
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/benchmark/OptimizerScalabilityTest.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/benchmark/OptimizerScalabilityTest.scala
index f1c598a..d4b6b39 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/benchmark/OptimizerScalabilityTest.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/benchmark/OptimizerScalabilityTest.scala
@@ -19,7 +19,6 @@
 package org.apache.wayang.apps.benchmark
 
 import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper}
-import org.apache.wayang.apps.util.ProfileDBHelper
 import org.apache.wayang.core.api.{Configuration, WayangContext}
 
 /**
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/benchmark/PlanGenerator.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/benchmark/PlanGenerator.scala
index 7aaccbe..3e7f720 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/benchmark/PlanGenerator.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/benchmark/PlanGenerator.scala
@@ -18,8 +18,8 @@
 
 package org.apache.wayang.apps.benchmark
 
-import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.api.{DataQuanta, PlanBuilder}
+import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.WayangContext
 import org.apache.wayang.core.plan.wayangplan.WayangPlan
 
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/crocopr/CrocoPR.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/crocopr/CrocoPR.scala
index 9a92ba5..7f16921 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/crocopr/CrocoPR.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/crocopr/CrocoPR.scala
@@ -18,10 +18,9 @@
 
 package org.apache.wayang.apps.crocopr
 
-import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper, StdOut}
 import org.apache.wayang.api.graph._
 import org.apache.wayang.api.{DataQuanta, PlanBuilder}
-import org.apache.wayang.apps.util.ProfileDBHelper
+import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper, StdOut}
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.exception.WayangException
 import org.apache.wayang.core.api.{Configuration, WayangContext}
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/kmeans/Kmeans.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/kmeans/Kmeans.scala
index 5a1f1fc..bad00ec 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/kmeans/Kmeans.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/kmeans/Kmeans.scala
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.apps.kmeans
 
-import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper}
-
 import java.util
+
 import org.apache.wayang.api._
-import org.apache.wayang.apps.util.ProfileDBHelper
+import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper}
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.{Configuration, WayangContext}
 import org.apache.wayang.core.function.ExecutionContext
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/kmeans/postgres/Kmeans.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/kmeans/postgres/Kmeans.scala
index 301d953..362de09 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/kmeans/postgres/Kmeans.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/kmeans/postgres/Kmeans.scala
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.apps.kmeans.postgres
 
-import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper}
-
 import java.util
+
 import org.apache.wayang.api.{PlanBuilder, _}
-import org.apache.wayang.apps.util.ProfileDBHelper
+import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper}
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.{Configuration, WayangContext}
 import org.apache.wayang.core.function.ExecutionContext
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/sgd/SGD.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/sgd/SGD.scala
index 981cf1d..2fa5189 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/sgd/SGD.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/sgd/SGD.scala
@@ -19,7 +19,6 @@
 package org.apache.wayang.apps.sgd
 
 import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper}
-import org.apache.wayang.apps.util.ProfileDBHelper
 import org.apache.wayang.core.api.Configuration
 
 /**
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/ScrubFunction.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/ScrubFunction.scala
index a24f403..246f38e 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/ScrubFunction.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/ScrubFunction.scala
@@ -18,7 +18,6 @@
 
 package org.apache.wayang.apps.simwords
 
-import java.lang.Iterable
 import java.util
 
 import org.apache.wayang.core.function.ExecutionContext
@@ -33,7 +32,7 @@
 
   override def open(ctx: ExecutionContext): Unit = {}
 
-  override def apply(line: String): Iterable[String] = {
+  override def apply(line: String): java.lang.Iterable[String] = {
     val result = new util.LinkedList[String]()
     textScrubber.splitAndScrub(line, result)
     result
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/SelectNearestCentroidFunction.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/SelectNearestCentroidFunction.scala
index c98a961..37eaefb 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/SelectNearestCentroidFunction.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/SelectNearestCentroidFunction.scala
@@ -18,10 +18,10 @@
 
 package org.apache.wayang.apps.simwords
 
+import org.apache.logging.log4j.LogManager
 import org.apache.wayang.core.function.ExecutionContext
 import org.apache.wayang.core.function.FunctionDescriptor.ExtendedSerializableFunction
 import org.apache.wayang.core.util.WayangCollections
-import org.slf4j.LoggerFactory
 
 import scala.collection.JavaConversions._
 import scala.util.Random
@@ -33,7 +33,7 @@
 class SelectNearestCentroidFunction(broadcastName: String)
   extends ExtendedSerializableFunction[(Int, SparseVector), (Int, SparseVector, Int)] {
 
-  private lazy val logger = LoggerFactory.getLogger(getClass)
+  private lazy val logger = LogManager.getLogger(getClass)
 
   private var centroids: java.util.List[(Int, SparseVector)] = _
 
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/SimWords.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/SimWords.scala
index f1ace56..183e52a 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/SimWords.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/SimWords.scala
@@ -18,9 +18,8 @@
 
 package org.apache.wayang.apps.simwords
 
-import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper}
 import org.apache.wayang.api._
-import org.apache.wayang.apps.util.ProfileDBHelper
+import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper}
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.{Configuration, WayangContext}
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/Word2NVec.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/Word2NVec.scala
index adbe05c..5696800 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/Word2NVec.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/simwords/Word2NVec.scala
@@ -18,9 +18,8 @@
 
 package org.apache.wayang.apps.simwords
 
-import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper}
 import org.apache.wayang.api._
-import org.apache.wayang.apps.util.ProfileDBHelper
+import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper}
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.{Configuration, WayangContext}
 import org.apache.wayang.core.function.ExecutionContext
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/sindy/Sindy.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/sindy/Sindy.scala
index 01db9ea..f189f70 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/sindy/Sindy.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/sindy/Sindy.scala
@@ -18,13 +18,11 @@
 
 package org.apache.wayang.apps.sindy
 
-import java.lang.Iterable
 import java.util
+
 import org.apache.wayang.api._
-import org.apache.wayang.apps
-import Sindy.{CellCreator, CellMerger, IndCandidateGenerator, IndCandidateMerger}
+import org.apache.wayang.apps.sindy.Sindy.{CellCreator, CellMerger, IndCandidateGenerator, IndCandidateMerger}
 import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper, StdOut}
-import org.apache.wayang.apps.util.ProfileDBHelper
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.{Configuration, WayangContext}
 import org.apache.wayang.core.function.FunctionDescriptor.{SerializableBinaryOperator, SerializableFunction}
@@ -149,7 +147,7 @@
     */
   class CellCreator(val offset: Int, val separator: Char) extends SerializableFunction[String, java.lang.Iterable[(String, Int)]] {
 
-    override def apply(row: String): Iterable[(String, Int)] = {
+    override def apply(row: String): java.lang.Iterable[(String, Int)] = {
       val fields = row.split(separator)
       val cells = new util.ArrayList[(String, Int)](fields.length)
       var columnId = offset
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/terasort/TeraApp.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/terasort/TeraApp.scala
new file mode 100644
index 0000000..531bb19
--- /dev/null
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/terasort/TeraApp.scala
@@ -0,0 +1,152 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.wayang.apps.terasort
+
+import java.util.regex.Pattern
+
+import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters}
+import org.apache.wayang.core.api.Configuration
+
+object TeraApp extends ExperimentDescriptor {
+
+  val KEY_LEN = 10
+  val VALUE_LEN = 100
+  val RECORD_LEN : Int = KEY_LEN + VALUE_LEN
+
+  override def version = "0.1.0"
+
+  def main(args: Array[String]) {
+    // Parse args.
+    if (args.isEmpty) {
+      println(s"Usage: " +
+        s"${Parameters.experimentHelp} " +
+        s"<plugin(,plugin)*> " +
+        s"<task could be[generate|sort|validate]> " +
+        s"<file size ([0-9]+(.[0-9]+)?)([B|k|K|m|M|g|G|t|T])> " +
+        s"<partitions>" +
+        s"<input file if not value is null> " +
+        s"<output file if not value is null>")
+      sys.exit(1)
+    }
+    implicit val configuration = new Configuration
+    implicit val experiment = Parameters.createExperiment(args(0), this)
+    val plugins = Parameters.loadPlugins(args(1))
+    experiment.getSubject.addConfiguration("plugins", args(1))
+    val task = args(2)
+    experiment.getSubject.addConfiguration("task", task)
+    val fileSize = sizeStrToBytes(args(3))
+    experiment.getSubject.addConfiguration("fileSize", fileSize)
+    val partitions = args(4).toInt
+    experiment.getSubject.addConfiguration("partitions", partitions)
+    val input_file = if(args(5).equals("null")) null else args(5)
+    val output_file = if(args.length > 6){ if(args(6).equals("null")) null else args(6) } else null
+    experiment.getSubject.addConfiguration("inputFile", input_file)
+    experiment.getSubject.addConfiguration("outputFile", output_file)
+
+    task match {
+      case "generate" => new TeraGen(plugins: _*).apply(output_file, fileSize, partitions)
+      case "sort" => new TeraSort(plugins: _*).apply(input_file, output_file)
+      case "validate" => new TeraValidate(plugins: _*).apply(input_file)
+    }
+
+
+    // Run wordCount.
+//    val wordCount = new WordCountScala(plugins: _*)
+//    val words =
+//      (if (wordsPerLine != null) {
+//        wordCount(inputFile, wordsPerLine)
+//      } else {
+//        wordCount(inputFile)
+//      }).toSeq.sortBy(-_._2)
+//
+//    // Store experiment data.
+//    val inputFileSize = FileSystems.getFileSize(inputFile)
+//    if (inputFileSize.isPresent) experiment.getSubject.addConfiguration("inputSize", inputFileSize.getAsLong)
+//    ProfileDBHelper.store(experiment, configuration)
+//
+//    // Print results.
+//    println(s"Found ${words.size} words:")
+//    words.take(10).foreach(wc => println(s"${wc._2}x ${wc._1}"))
+//    if (words.size > 10) print(s"${words.size - 10} more...")
+
+
+  }
+
+  /**
+   * Convert the string format ([0-9]+(.[0-9]+)?)([B|k|K|m|M|g|G|t|T]) to the
+   * number on bytes
+   *
+   * B = Bytes
+   * k|K = Kilobytes (1_024 Bytes)
+   * m|M = Megabytes (1_048_576 Bytes)
+   * g|G = Gigabytes (1_073_741_824 Bytes)
+   * t|T = Terabytes (1_099_511_627_776 Bytes)
+   *
+   * @param str in the format
+   * @return number equivalent to the byte
+   */
+  def sizeStrToBytes(str: String): Long = {
+    val reg = "(\\d+(\\.\\d+)?)([B|k|K|m|M|g|G|t|T])"
+    val groups = Pattern.compile(reg).matcher(str)
+    groups.find()
+
+    val number_part:Double = groups.group(1).toDouble
+    val letter_part:String = groups.group(3)
+
+    val conversion = letter_part match {
+      case "B" => 1L //2^0
+      case "k" => 1024L //2^10
+      case "K" => 1024L //2^10
+      case "m" => 1048576L //2^20
+      case "M" => 1048576L //2^20
+      case "g" => 1073741824L //2^30
+      case "G" => 1073741824L //2^30
+      case "t" => 1099511627776L //2^40
+      case "T" => 1099511627776L //2^40
+      case _ => 1L //2^0
+    }
+    (number_part * conversion).toLong
+  }
+
+  /**
+   * take a number that represent a size on bytes return the human readable version
+   *
+   * @param size number that represent the size
+   * @return human readable version of the size
+   */
+  def sizeToSizeStr(size: Long): String = {
+    val kbScale: Long = 1024L
+    val mbScale: Long = 1024L * kbScale
+    val gbScale: Long = 1024L * mbScale
+    val tbScale: Long = 1024L * gbScale
+
+    if (size > tbScale) {
+      size / tbScale + "TB"
+    } else if (size > gbScale) {
+      size / gbScale  + "GB"
+    } else if (size > mbScale) {
+      size / mbScale + "MB"
+    } else if (size > kbScale) {
+      size / kbScale + "KB"
+    } else {
+      size + "B"
+    }
+  }
+
+}
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/terasort/TeraGen.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/terasort/TeraGen.scala
new file mode 100644
index 0000000..4d6cd74
--- /dev/null
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/terasort/TeraGen.scala
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.wayang.apps.terasort
+
+import org.apache.wayang.api.PlanBuilder
+import org.apache.wayang.commons.util.profiledb.model.Experiment
+import org.apache.wayang.core.api.{Configuration, WayangContext}
+import org.apache.wayang.core.plugin.Plugin
+
+class TeraGen(@transient plugins: Plugin*) extends Serializable {
+
+  def apply(output_url: String, file_size: Long, partitions: Int)
+           (implicit configuration: Configuration, experiment: Experiment) = {
+    val wayangCtx = new WayangContext(configuration)
+    plugins.foreach(wayangCtx.register)
+    val planBuilder = new PlanBuilder(wayangCtx)
+
+    val parts = partitions
+    val recordsPerPartition = file_size / TeraApp.VALUE_LEN / parts.toLong
+    val numRecords = recordsPerPartition * parts.toLong
+
+    assert(recordsPerPartition < Int.MaxValue, s"records per partition > ${Int.MaxValue}")
+
+    println("===========================================================================")
+    println("===========================================================================")
+    println(s"Input size: $file_size")
+    println(s"Total number of records: $numRecords")
+    println(s"Number of output partitions: $parts")
+    println("Number of records/output partition: " + (numRecords / parts))
+    println("===========================================================================")
+    println("===========================================================================")
+
+    planBuilder
+      .withJobName(s"Terasort generate ${file_size}")
+      .withExperiment(experiment)
+      .withUdfJarsOf(this.getClass)
+      .loadCollection(1 to parts)
+      .flatMap( index => {
+        val one = new Unsigned16(1)
+        val firstRecordNumber = new Unsigned16(index.toLong * recordsPerPartition.toLong)
+        val recordsToGenerate = new Unsigned16(recordsPerPartition)
+
+        val recordNumber = new Unsigned16(firstRecordNumber)
+        val lastRecordNumber = new Unsigned16(firstRecordNumber)
+        lastRecordNumber.add(recordsToGenerate)
+
+        val rand = Random16.skipAhead(firstRecordNumber)
+
+        Iterator.tabulate(recordsPerPartition.toInt) { offset =>
+          val rowBytes: Array[Byte] = new Array[Byte](TeraApp.RECORD_LEN)
+          val key = new Array[Byte](TeraApp.KEY_LEN)
+          val value = new Array[Byte](TeraApp.VALUE_LEN)
+          Random16.nextRand(rand)
+          generateRecord(rowBytes, rand, recordNumber)
+          recordNumber.add(one)
+          rowBytes.copyToArray(key, 0, TeraApp.KEY_LEN)
+          rowBytes.takeRight(TeraApp.VALUE_LEN).copyToArray(value, 0, TeraApp.VALUE_LEN)
+          (key, value)
+        }.toStream
+      })
+      .writeObjectFile(output_url)
+  }
+
+  /**
+   * Generate a binary record suitable for all sort benchmarks except PennySort.
+   *
+   * @param recBuf record to return
+   */
+  def generateRecord(recBuf: Array[Byte], rand: Unsigned16, recordNumber: Unsigned16): Unit = {
+    // Generate the 10-byte key using the high 10 bytes of the 128-bit random number
+    var i = 0
+    while (i < 10) {
+      recBuf(i) = rand.getByte(i)
+      i += 1
+    }
+
+    // Add 2 bytes of "break"
+    recBuf(10) = 0x00.toByte
+    recBuf(11) = 0x11.toByte
+
+    // Convert the 128-bit record number to 32 bits of ascii hexadecimal
+    // as the next 32 bytes of the record.
+    i = 0
+    while (i < 32) {
+      recBuf(12 + i) = recordNumber.getHexDigit(i).toByte
+      i += 1
+    }
+
+    // Add 4 bytes of "break" data
+    recBuf(44) = 0x88.toByte
+    recBuf(45) = 0x99.toByte
+    recBuf(46) = 0xAA.toByte
+    recBuf(47) = 0xBB.toByte
+
+    // Add 48 bytes of filler based on low 48 bits of random number
+    i = 0
+    while (i < 12) {
+      val v = rand.getHexDigit(20 + i).toByte
+      recBuf(48 + i * 4) = v
+      recBuf(49 + i * 4) = v
+      recBuf(50 + i * 4) = v
+      recBuf(51 + i * 4) = v
+      i += 1
+    }
+
+    // Add 4 bytes of "break" data
+    recBuf(96) = 0xCC.toByte
+    recBuf(97) = 0xDD.toByte
+    recBuf(98) = 0xEE.toByte
+    recBuf(99) = 0xFF.toByte
+  }
+
+}
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/terasort/TeraSort.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/terasort/TeraSort.scala
new file mode 100644
index 0000000..8b66230
--- /dev/null
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/terasort/TeraSort.scala
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.wayang.apps.terasort
+
+import com.google.common.primitives.Longs
+import org.apache.wayang.api.PlanBuilder
+import org.apache.wayang.commons.util.profiledb.model.Experiment
+import org.apache.wayang.core.api.{Configuration, WayangContext}
+import org.apache.wayang.core.plugin.Plugin
+
+class TeraSort(@transient plugins: Plugin*) extends Serializable {
+
+  def apply(input_url: String, output_url: String)
+           (implicit configuration: Configuration, experiment: Experiment) = {
+
+    val wayangCtx = new WayangContext(configuration)
+    plugins.foreach(wayangCtx.register)
+    val planBuilder = new PlanBuilder(wayangCtx)
+
+    planBuilder
+      .readObjectFile[Tuple2[Array[Byte], Array[Byte]]](input_url)
+      .sort(t => {
+        val bytes = t._1;
+        Longs.fromBytes(0, bytes(0), bytes(1), bytes(2), bytes(3), bytes(4), bytes(5), bytes(6))
+      })
+      .writeObjectFile(output_url);
+  }
+
+}
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/terasort/TeraValidate.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/terasort/TeraValidate.scala
new file mode 100644
index 0000000..d4e035c
--- /dev/null
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/terasort/TeraValidate.scala
@@ -0,0 +1,100 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.wayang.apps.terasort
+
+import com.google.common.primitives.UnsignedBytes
+import org.apache.hadoop.util.PureJavaCrc32
+import org.apache.wayang.api.PlanBuilder
+import org.apache.wayang.commons.util.profiledb.model.Experiment
+import org.apache.wayang.core.api.{Configuration, WayangContext}
+import org.apache.wayang.core.plugin.Plugin
+
+class TeraValidate(@transient plugins: Plugin*) extends Serializable {
+
+  def apply(input_url: String)
+           (implicit configuration: Configuration, experiment: Experiment) = {
+
+    val wayangCtx = new WayangContext(configuration)
+    plugins.foreach(wayangCtx.register)
+    val planBuilder = new PlanBuilder(wayangCtx)
+    val dataset = planBuilder
+      .readObjectFile[Tuple2[Array[Byte], Array[Byte]]](input_url)
+
+    val output = dataset.mapPartitions(
+      iterable_element => {
+        val iter = iterable_element.iterator
+        val sum = new Unsigned16
+        val checksum = new Unsigned16
+        val crc32 = new PureJavaCrc32()
+        val min = new Array[Byte](10)
+        val max = new Array[Byte](10)
+
+        val cmp = UnsignedBytes.lexicographicalComparator()
+
+        var pos = 0L
+        var prev = new Array[Byte](10)
+
+        while (iter.hasNext) {
+          val key = iter.next()._1
+          assert(cmp.compare(key, prev) >= 0)
+
+          crc32.reset()
+          crc32.update(key, 0, key.length)
+          checksum.set(crc32.getValue)
+          sum.add(checksum)
+
+          if (pos == 0) {
+            key.copyToArray(min, 0, 10)
+          }
+          pos += 1
+          prev = key
+        }
+        prev.copyToArray(max, 0, 10)
+        Iterator((sum, min, max)).toStream
+      }
+    )
+
+    val checksumOutput = output.collect()
+    val cmp = UnsignedBytes.lexicographicalComparator()
+    val sum = new Unsigned16
+    var numRecords = dataset.count.collect().head
+
+    checksumOutput.foreach { case (partSum, min, max) =>
+      sum.add(partSum)
+    }
+    println("num records: " + numRecords)
+    println("checksum: " + sum.toString)
+    var lastMax = new Array[Byte](10)
+    checksumOutput.map{ case (partSum, min, max) =>
+      (partSum, min.clone(), max.clone())
+    }.zipWithIndex.foreach { case ((partSum, min, max), i) =>
+      println(s"part $i")
+      println(s"lastMax" + lastMax.toSeq.map(x => if (x < 0) 256 + x else x))
+      println(s"min " + min.toSeq.map(x => if (x < 0) 256 + x else x))
+      println(s"max " + max.toSeq.map(x => if (x < 0) 256 + x else x))
+      assert(cmp.compare(min, max) <= 0, "min >= max")
+      assert(cmp.compare(lastMax, min) <= 0, "current partition min < last partition max")
+      lastMax = max
+    }
+    println("num records: " + numRecords)
+    println("checksum: " + sum.toString)
+    println("partitions are properly sorted")
+  }
+
+}
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/TpcH.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/TpcH.scala
index 60e35a7..c28952f 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/TpcH.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/TpcH.scala
@@ -20,17 +20,15 @@
 
 import org.apache.wayang.apps.tpch.queries.{Query1, Query3Database, Query3File, Query3Hybrid}
 import org.apache.wayang.apps.util.{Parameters, ProfileDBHelper, StdOut}
-import org.apache.wayang.apps.tpch.queries.Query1
-import org.apache.wayang.apps.util.ProfileDBHelper
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.Configuration
+import org.apache.wayang.core.platform.Platform
 import org.apache.wayang.jdbc.platform.JdbcPlatformTemplate
 import org.apache.wayang.postgres.Postgres
 import org.apache.wayang.postgres.operators.PostgresTableSource
 import org.apache.wayang.sqlite3.Sqlite3
 import org.apache.wayang.sqlite3.operators.Sqlite3TableSource
 
-import scala.collection.JavaConversions._
 
 /**
   * This app adapts some TPC-H queries.
@@ -50,7 +48,17 @@
 
     val jdbcPlatform = {
       val jdbcPlatforms = plugins
-        .flatMap(_.getRequiredPlatforms)
+        .flatMap(
+          plugin => {
+            val list = plugin.getRequiredPlatforms
+            var array: List[Platform] = List[Platform]()
+            val iterator = list.iterator()
+            while(iterator.hasNext){
+              array :+= iterator.next()
+            }
+            array
+          }
+        )
         .filter(_.isInstanceOf[JdbcPlatformTemplate])
         .distinct
       if (jdbcPlatforms.size == 1) jdbcPlatforms.head.asInstanceOf[JdbcPlatformTemplate]
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query1.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query1.scala
index 01c6a3d..b63af06 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query1.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query1.scala
@@ -18,10 +18,10 @@
 
 package org.apache.wayang.apps.tpch.queries
 
+import org.apache.wayang.api._
 import org.apache.wayang.apps.tpch.CsvUtils
 import org.apache.wayang.apps.tpch.data.LineItem
 import org.apache.wayang.apps.util.ExperimentDescriptor
-import org.apache.wayang.api._
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.{Configuration, WayangContext}
 import org.apache.wayang.core.plugin.Plugin
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query3Database.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query3Database.scala
index d3ea4e7..f146555 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query3Database.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query3Database.scala
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.apps.tpch.queries
 
+import org.apache.wayang.api._
 import org.apache.wayang.apps.tpch.CsvUtils
 import org.apache.wayang.apps.tpch.data.{Customer, LineItem, Order}
 import org.apache.wayang.apps.util.ExperimentDescriptor
-import org.apache.wayang.api._
-import org.apache.wayang.apps.tpch.data.LineItem
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.{Configuration, WayangContext}
 import org.apache.wayang.core.plugin.Plugin
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query3File.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query3File.scala
index 171e184..63aef01 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query3File.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query3File.scala
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.apps.tpch.queries
 
+import org.apache.wayang.api._
 import org.apache.wayang.apps.tpch.CsvUtils
 import org.apache.wayang.apps.tpch.data.{Customer, LineItem, Order}
 import org.apache.wayang.apps.util.ExperimentDescriptor
-import org.apache.wayang.api._
-import org.apache.wayang.apps.tpch.data.LineItem
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.{Configuration, WayangContext}
 import org.apache.wayang.core.plugin.Plugin
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query3Hybrid.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query3Hybrid.scala
index 06a8cc7..930c39d 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query3Hybrid.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/tpch/queries/Query3Hybrid.scala
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.apps.tpch.queries
 
+import org.apache.wayang.api._
 import org.apache.wayang.apps.tpch.CsvUtils
 import org.apache.wayang.apps.tpch.data.{Customer, LineItem, Order}
 import org.apache.wayang.apps.util.ExperimentDescriptor
-import org.apache.wayang.api._
-import org.apache.wayang.apps.tpch.data.LineItem
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.{Configuration, WayangContext}
 import org.apache.wayang.core.plugin.Plugin
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/util/Parameters.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/util/Parameters.scala
index 135c46a..211fba7 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/util/Parameters.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/util/Parameters.scala
@@ -18,8 +18,8 @@
 
 package org.apache.wayang.apps.util
 
-import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.basic.WayangBasics
+import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval
 import org.apache.wayang.core.plugin.{DynamicPlugin, Plugin}
 //import org.apache.wayang.graphchi.GraphChi
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/util/ProfileDBHelper.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/util/ProfileDBHelper.scala
index 7c4b381..3d98487 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/util/ProfileDBHelper.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/util/ProfileDBHelper.scala
@@ -20,9 +20,6 @@
 
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.Configuration
-import org.apache.wayang.core.profiling.ProfileDBs
-
-import java.io.File
 
 /**
   * Helper utility to employ with [[ProfileDB]].
diff --git a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/wordcount/WordCountScala.scala b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/wordcount/WordCountScala.scala
index 722cf43..af61bcd 100644
--- a/wayang-benchmark/src/main/scala/org/apache/wayang/apps/wordcount/WordCountScala.scala
+++ b/wayang-benchmark/src/main/scala/org/apache/wayang/apps/wordcount/WordCountScala.scala
@@ -18,9 +18,8 @@
 
 package org.apache.wayang.apps.wordcount
 
-import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper}
 import org.apache.wayang.api._
-import org.apache.wayang.apps.util.ProfileDBHelper
+import org.apache.wayang.apps.util.{ExperimentDescriptor, Parameters, ProfileDBHelper}
 import org.apache.wayang.commons.util.profiledb.model.Experiment
 import org.apache.wayang.core.api.{Configuration, WayangContext}
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval
diff --git a/wayang-benchmark/src/test/java/org/apache/wayang/apps/tpch/data/LineItemTupleTest.java b/wayang-benchmark/src/test/java/org/apache/wayang/apps/tpch/data/LineItemTupleTest.java
index 506a0cb..e53a258 100644
--- a/wayang-benchmark/src/test/java/org/apache/wayang/apps/tpch/data/LineItemTupleTest.java
+++ b/wayang-benchmark/src/test/java/org/apache/wayang/apps/tpch/data/LineItemTupleTest.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.apps.tpch.data;
 
-import org.junit.Assert;
-import org.junit.Test;
-
 import java.util.Calendar;
 import java.util.GregorianCalendar;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suited for {@link LineItemTuple}.
diff --git a/wayang-benchmark/src/test/scala/org/apache/wayang/apps/kmeans/KmeansTest.scala b/wayang-benchmark/src/test/scala/org/apache/wayang/apps/kmeans/KmeansTest.scala
index 53d6fea..72c3853 100644
--- a/wayang-benchmark/src/test/scala/org/apache/wayang/apps/kmeans/KmeansTest.scala
+++ b/wayang-benchmark/src/test/scala/org/apache/wayang/apps/kmeans/KmeansTest.scala
@@ -19,11 +19,11 @@
 package org.apache.wayang.apps.kmeans
 
 import org.apache.wayang.commons.util.profiledb.model.{Experiment, Subject}
-import org.junit.Assert._
-import org.junit.Test
 import org.apache.wayang.core.api.Configuration
 import org.apache.wayang.java.Java
 import org.apache.wayang.spark.Spark
+import org.junit.Assert._
+import org.junit.Test
 
 /**
   * Test suite for [[Kmeans]].
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/channels/FileChannel.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/channels/FileChannel.java
index 9a56afb..17efde9 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/channels/FileChannel.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/channels/FileChannel.java
@@ -18,6 +18,13 @@
 
 package org.apache.wayang.basic.channels;
 
+import java.io.IOException;
+import java.io.UncheckedIOException;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.Random;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.exception.WayangException;
 import org.apache.wayang.core.optimizer.OptimizationContext;
@@ -31,14 +38,6 @@
 import org.apache.wayang.core.util.fs.FileSystem;
 import org.apache.wayang.core.util.fs.FileSystems;
 
-import java.io.IOException;
-import java.io.UncheckedIOException;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.Random;
-
 /**
  * Represents a {@link Channel} that is realized via a file/set of files.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/data/Record.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/data/Record.java
index d11506c..dac710b 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/data/Record.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/data/Record.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.basic.data;
 
-import org.apache.wayang.core.util.Copyable;
-import org.apache.wayang.core.util.ReflectionUtils;
-
 import java.io.Serializable;
 import java.util.Arrays;
 import java.util.Objects;
+import org.apache.wayang.core.util.Copyable;
+import org.apache.wayang.core.util.ReflectionUtils;
 
 /**
  * A Type that represents a record with a schema, might be replaced with something standard like JPA entity.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/function/ProjectionDescriptor.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/function/ProjectionDescriptor.java
index 5db00d7..b4ab9ae 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/function/ProjectionDescriptor.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/function/ProjectionDescriptor.java
@@ -18,17 +18,16 @@
 
 package org.apache.wayang.basic.function;
 
+import java.lang.reflect.Field;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
 import org.apache.wayang.basic.data.Record;
 import org.apache.wayang.basic.types.RecordType;
 import org.apache.wayang.core.function.FunctionDescriptor;
 import org.apache.wayang.core.function.TransformationDescriptor;
 import org.apache.wayang.core.types.BasicDataUnitType;
 
-import java.lang.reflect.Field;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * This descriptor pertains to projections. It takes field names of the input type to describe the projection.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/GlobalReduceMapping.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/GlobalReduceMapping.java
index 3fe03d6..1888143 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/GlobalReduceMapping.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/GlobalReduceMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.basic.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.GlobalReduceOperator;
 import org.apache.wayang.basic.operators.GroupByOperator;
 import org.apache.wayang.basic.operators.ReduceByOperator;
@@ -31,9 +33,6 @@
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * This mapping detects combinations of the {@link GroupByOperator} and {@link ReduceOperator} and merges them into
  * a single {@link ReduceByOperator}.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/Mappings.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/Mappings.java
index 38bf55b..ecd7a68 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/Mappings.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/Mappings.java
@@ -18,10 +18,9 @@
 
 package org.apache.wayang.basic.mapping;
 
-import org.apache.wayang.core.mapping.Mapping;
-
 import java.util.Arrays;
 import java.util.Collection;
+import org.apache.wayang.core.mapping.Mapping;
 
 /**
  * Register for the components provided in the basic plugin.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/MaterializedGroupByMapping.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/MaterializedGroupByMapping.java
index 62c49c3..039bf52 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/MaterializedGroupByMapping.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/MaterializedGroupByMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.basic.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.GroupByOperator;
 import org.apache.wayang.basic.operators.MaterializedGroupByOperator;
 import org.apache.wayang.core.mapping.Mapping;
@@ -29,9 +31,6 @@
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * This mapping translates the {@link GroupByOperator} into the {@link MaterializedGroupByOperator}.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/PageRankMapping.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/PageRankMapping.java
index 9491b4d..49ed260 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/PageRankMapping.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/PageRankMapping.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.basic.mapping;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.wayang.basic.data.Tuple2;
 import org.apache.wayang.basic.operators.CountOperator;
 import org.apache.wayang.basic.operators.DistinctOperator;
@@ -44,11 +48,6 @@
 import org.apache.wayang.core.util.ReflectionUtils;
 import org.apache.wayang.core.util.WayangCollections;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * This {@link Mapping} translates a {@link PageRankOperator} into a {@link Subplan} of basic {@link Operator}s.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/ReduceByMapping.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/ReduceByMapping.java
index f9b9e1a..97a1328 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/ReduceByMapping.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/ReduceByMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.basic.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.GroupByOperator;
 import org.apache.wayang.basic.operators.ReduceByOperator;
 import org.apache.wayang.basic.operators.ReduceOperator;
@@ -30,9 +32,6 @@
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * This mapping detects combinations of the {@link GroupByOperator} and {@link ReduceOperator} and merges them into
  * a single {@link ReduceByOperator}.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/RepeatMapping.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/RepeatMapping.java
index d92edf2..c56d3b2 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/RepeatMapping.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/mapping/RepeatMapping.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.basic.mapping;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.CollectionSource;
 import org.apache.wayang.basic.operators.LoopOperator;
 import org.apache.wayang.basic.operators.MapOperator;
@@ -31,10 +34,6 @@
 import org.apache.wayang.core.types.DataSetType;
 import org.apache.wayang.core.util.WayangCollections;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * This {@link Mapping} translates a {@link RepeatOperator} into a {@link Subplan} with the {@link LoopOperator}.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CartesianOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CartesianOperator.java
index 4fde9fc..89f64a9 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CartesianOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CartesianOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.basic.data.Tuple2;
 import org.apache.wayang.core.api.Configuration;
@@ -26,8 +27,6 @@
 import org.apache.wayang.core.plan.wayangplan.BinaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 
 /**
  * This operator returns the cartesian product of elements of input datasets.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CoGroupOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CoGroupOperator.java
index 22676e9..b8f2da7 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CoGroupOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CoGroupOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.basic.data.Tuple2;
 import org.apache.wayang.core.api.Configuration;
@@ -28,8 +29,6 @@
 import org.apache.wayang.core.plan.wayangplan.BinaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 
 /**
  * This operator groups both inputs by some key and then matches groups with the same key. If a key appears in only
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CollectionSource.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CollectionSource.java
index 0150263..2df6de1 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CollectionSource.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CollectionSource.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
@@ -26,10 +29,6 @@
 import org.apache.wayang.core.plan.wayangplan.UnarySource;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Optional;
-
 /**
  * This source takes as input a Java {@link java.util.Collection}.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CountOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CountOperator.java
index 0740575..b990609 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CountOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/CountOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
@@ -25,8 +26,6 @@
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 
 /**
  * This operator returns the count of elements in this stream.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/DistinctOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/DistinctOperator.java
index bf1e2d4..8e461f2 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/DistinctOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/DistinctOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
@@ -25,8 +26,6 @@
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 
 /**
  * This operator returns the distinct elements in this dataset.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/DoWhileOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/DoWhileOperator.java
index 8966f01..ef4376c 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/DoWhileOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/DoWhileOperator.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Optional;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.function.PredicateDescriptor;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
@@ -31,11 +35,6 @@
 import org.apache.wayang.core.types.DataSetType;
 import org.apache.wayang.core.util.ReflectionUtils;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Optional;
-
 /**
  * This operator has three inputs and two outputs.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/FilterOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/FilterOperator.java
index 767ff69..876fa20 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/FilterOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/FilterOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.function.PredicateDescriptor;
@@ -27,8 +28,6 @@
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 
 /**
  * This operator returns a new dataset after filtering by applying predicateDescriptor.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/FlatMapOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/FlatMapOperator.java
index e2d4406..7cb0e39 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/FlatMapOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/FlatMapOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.function.FlatMapDescriptor;
@@ -28,8 +29,6 @@
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 /**
  * A flatmap operator represents semantics as they are known from frameworks, such as Spark and Flink. It pulls each
  * available element from the input slot, applies a function to it, returning zero or more output elements,
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/GlobalMaterializedGroupOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/GlobalMaterializedGroupOperator.java
index 3ddb8b5..7f51a16 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/GlobalMaterializedGroupOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/GlobalMaterializedGroupOperator.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
 import org.apache.wayang.core.optimizer.cardinality.FixedSizeCardinalityEstimator;
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 /**
  * This operator groups the elements of a data set into a single data quantum.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/GlobalReduceOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/GlobalReduceOperator.java
index 3c03e1c..9301a30 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/GlobalReduceOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/GlobalReduceOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.function.FunctionDescriptor;
@@ -28,8 +29,6 @@
 import org.apache.wayang.core.types.BasicDataUnitType;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 /**
  * This operator groups the elements of a data set and aggregates the groups.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/IntersectOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/IntersectOperator.java
index d082695..e354a0c 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/IntersectOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/IntersectOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
@@ -25,8 +26,6 @@
 import org.apache.wayang.core.plan.wayangplan.BinaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 
 /**
  * This operator returns the set intersection of elements of input datasets.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/JoinOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/JoinOperator.java
index 1d4d1f3..7601652 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/JoinOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/JoinOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.basic.data.Tuple2;
 import org.apache.wayang.core.api.Configuration;
@@ -28,8 +29,6 @@
 import org.apache.wayang.core.plan.wayangplan.BinaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 
 /**
  * This operator returns the cartesian product of elements of input datasets.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/LocalCallbackSink.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/LocalCallbackSink.java
index d88e963..4671dc1 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/LocalCallbackSink.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/LocalCallbackSink.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Collection;
+import java.util.Optional;
+import java.util.function.Consumer;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.function.ConsumerDescriptor;
@@ -27,10 +30,6 @@
 import org.apache.wayang.core.types.BasicDataUnitType;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Collection;
-import java.util.Optional;
-import java.util.function.Consumer;
-
 /**
  * This sink executes a callback on each received data unit into a Java {@link Collection}.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/LoopOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/LoopOperator.java
index e83022c..6ae1864 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/LoopOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/LoopOperator.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Optional;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.function.PredicateDescriptor;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
@@ -31,11 +35,6 @@
 import org.apache.wayang.core.types.DataSetType;
 import org.apache.wayang.core.util.ReflectionUtils;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Optional;
-
 /**
  * This operator has three inputs and three outputs.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/MapOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/MapOperator.java
index 13c25a1..1ecb9b1 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/MapOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/MapOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.basic.data.Record;
 import org.apache.wayang.basic.function.ProjectionDescriptor;
@@ -30,8 +31,6 @@
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 /**
  * A map operator represents semantics as they are known from frameworks, such as Spark and Flink. It pulls each
  * available element from the input slot, applies a function to it, and pushes that element to the output slot.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/MapPartitionsOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/MapPartitionsOperator.java
index 976845e..942a252 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/MapPartitionsOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/MapPartitionsOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.function.FunctionDescriptor;
@@ -28,8 +29,6 @@
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 /**
  * This operator takes as input potentially multiple input data quanta and outputs multiple input data quanta.
  * <p>Since Wayang is not a physical execution engine, its notion of partitions is rather loose. Implementors
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/MaterializedGroupByOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/MaterializedGroupByOperator.java
index 4b06020..11bca6a 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/MaterializedGroupByOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/MaterializedGroupByOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.function.FunctionDescriptor;
@@ -27,8 +28,6 @@
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 /**
  * This operator collocates the data units in a data set w.r.t. a key function.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ObjectFileSink.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ObjectFileSink.java
new file mode 100644
index 0000000..c648c17
--- /dev/null
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ObjectFileSink.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.wayang.basic.operators;
+
+import org.apache.wayang.core.plan.wayangplan.UnarySink;
+import org.apache.wayang.core.types.DataSetType;
+
+/**
+ * This {@link UnarySink} writes all incoming data quanta to a Object file.
+ *
+ * @param <T> type of the object to store
+ */
+public class ObjectFileSink<T> extends UnarySink<T> {
+
+  protected final String textFileUrl;
+
+  protected final Class<T> tClass;
+
+  /**
+   * Creates a new instance.
+   *
+   * @param targetPath  URL to file that should be written
+   * @param type        {@link DataSetType} of the incoming data quanta
+   */
+  public ObjectFileSink(String targetPath, DataSetType<T> type) {
+    super(type);
+    this.textFileUrl = targetPath;
+    this.tClass = type.getDataUnitType().getTypeClass();
+  }
+
+  /**
+   * Creates a new instance.
+   *
+   * @param textFileUrl        URL to file that should be written
+   * @param typeClass          {@link Class} of incoming data quanta
+   */
+  public ObjectFileSink(String textFileUrl, Class<T> typeClass) {
+    super(DataSetType.createDefault(typeClass));
+    this.textFileUrl = textFileUrl;
+    this.tClass = typeClass;
+  }
+
+  /**
+   * Creates a copied instance.
+   *
+   * @param that should be copied
+   */
+  public ObjectFileSink(ObjectFileSink<T> that) {
+    super(that);
+    this.textFileUrl = that.textFileUrl;
+    this.tClass = that.tClass;
+  }
+}
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ObjectFileSource.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ObjectFileSource.java
new file mode 100644
index 0000000..7ca3410
--- /dev/null
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ObjectFileSource.java
@@ -0,0 +1,197 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.wayang.basic.operators;
+
+import java.util.Optional;
+import java.util.OptionalDouble;
+import java.util.OptionalLong;
+import org.apache.commons.lang3.Validate;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.commons.util.profiledb.model.measurement.TimeMeasurement;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
+import org.apache.wayang.core.plan.wayangplan.UnarySource;
+import org.apache.wayang.core.types.DataSetType;
+import org.apache.wayang.core.util.fs.FileSystems;
+
+/**
+ * This source reads a text file and outputs the lines as data units.
+ */
+public class ObjectFileSource<T> extends UnarySource<T> {
+
+    private final Logger logger = LogManager.getLogger(this.getClass());
+
+    private final String inputUrl;
+
+    private final Class<T> tClass;
+
+    public ObjectFileSource(String inputUrl, DataSetType<T> type) {
+        super(type);
+        this.inputUrl = inputUrl;
+        this.tClass = type.getDataUnitType().getTypeClass();
+    }
+
+    public ObjectFileSource(String inputUrl, Class<T> tClass) {
+        super(DataSetType.createDefault(tClass));
+        this.inputUrl = inputUrl;
+        this.tClass = tClass;
+    }
+
+    /**
+     * Copies an instance (exclusive of broadcasts).
+     *
+     * @param that that should be copied
+     */
+    public ObjectFileSource(ObjectFileSource that) {
+        super(that);
+        this.inputUrl = that.getInputUrl();
+        this.tClass = that.getTypeClass();
+    }
+
+    public String getInputUrl() {
+        return this.inputUrl;
+    }
+
+    public Class<T> getTypeClass(){
+        return this.tClass;
+    }
+
+    @Override
+    public Optional<org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator> createCardinalityEstimator(
+            final int outputIndex,
+            final Configuration configuration) {
+        Validate.inclusiveBetween(0, this.getNumOutputs() - 1, outputIndex);
+        return Optional.of(new ObjectFileSource.CardinalityEstimator());
+    }
+
+
+    /**
+     * Custom {@link org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator} for {@link FlatMapOperator}s.
+     */
+    protected class CardinalityEstimator implements org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator {
+
+        public final CardinalityEstimate FALLBACK_ESTIMATE = new CardinalityEstimate(1000L, 100000000L, 0.7);
+
+        public static final double CORRECTNESS_PROBABILITY = 0.95d;
+
+        /**
+         * We expect selectivities to be correct within a factor of {@value #EXPECTED_ESTIMATE_DEVIATION}.
+         */
+        public static final double EXPECTED_ESTIMATE_DEVIATION = 0.05;
+
+        @Override
+        public CardinalityEstimate estimate(OptimizationContext optimizationContext, CardinalityEstimate... inputEstimates) {
+            //TODO validate if the implementation apply for the case
+            Validate.isTrue(ObjectFileSource.this.getNumInputs() == inputEstimates.length);
+
+            // see Job for StopWatch measurements
+            final TimeMeasurement timeMeasurement = optimizationContext.getJob().getStopWatch().start(
+                    "Optimization", "Cardinality&Load Estimation", "Push Estimation", "Estimate source cardinalities"
+            );
+
+            // Query the job cache first to see if there is already an estimate.
+            String jobCacheKey = String.format("%s.estimate(%s)", this.getClass().getCanonicalName(), ObjectFileSource.this.inputUrl);
+            CardinalityEstimate cardinalityEstimate = optimizationContext.queryJobCache(jobCacheKey, CardinalityEstimate.class);
+            if (cardinalityEstimate != null) return  cardinalityEstimate;
+
+            // Otherwise calculate the cardinality.
+            // First, inspect the size of the file and its line sizes.
+            OptionalLong fileSize = FileSystems.getFileSize(ObjectFileSource.this.inputUrl);
+            if (!fileSize.isPresent()) {
+                ObjectFileSource.this.logger.warn("Could not determine size of {}... deliver fallback estimate.",
+                        ObjectFileSource.this.inputUrl);
+                timeMeasurement.stop();
+                return this.FALLBACK_ESTIMATE;
+
+            } else if (fileSize.getAsLong() == 0L) {
+                timeMeasurement.stop();
+                return new CardinalityEstimate(0L, 0L, 1d);
+            }
+
+            OptionalDouble bytesPerLine = this.estimateBytesPerLine();
+            if (!bytesPerLine.isPresent()) {
+                ObjectFileSource.this.logger.warn("Could not determine average line size of {}... deliver fallback estimate.",
+                        ObjectFileSource.this.inputUrl);
+                timeMeasurement.stop();
+                return this.FALLBACK_ESTIMATE;
+            }
+
+            // Extrapolate a cardinality estimate for the complete file.
+            double numEstimatedLines = fileSize.getAsLong() / bytesPerLine.getAsDouble();
+            double expectedDeviation = numEstimatedLines * EXPECTED_ESTIMATE_DEVIATION;
+            cardinalityEstimate = new CardinalityEstimate(
+                    (long) (numEstimatedLines - expectedDeviation),
+                    (long) (numEstimatedLines + expectedDeviation),
+                    CORRECTNESS_PROBABILITY
+            );
+
+            // Cache the result, so that it will not be recalculated again.
+            optimizationContext.putIntoJobCache(jobCacheKey, cardinalityEstimate);
+
+            timeMeasurement.stop();
+            return cardinalityEstimate;
+        }
+
+        /**
+         * Estimate the number of bytes that are in each line of a given file.
+         *
+         * @return the average number of bytes per line if it could be determined
+         */
+        private OptionalDouble estimateBytesPerLine() {
+            //TODO validate if the implementation apply for the case
+//            final Optional<FileSystem> fileSystem = FileSystems.getFileSystem(ObjectFileSource.this.inputUrl);
+//            if (fileSystem.isPresent()) {
+//
+//                // Construct a limited reader for the first x KiB of the file.
+//                final int KiB = 1024;
+//                final int MiB = 1024 * KiB;
+//                try (LimitedInputStream lis = new LimitedInputStream(fileSystem.get().open(
+//                    ObjectFileSource.this.inputUrl), 1 * MiB)) {
+//                    final BufferedReader bufferedReader = new BufferedReader(
+//                            new InputStreamReader(lis, ObjectFileSource.this.encoding)
+//                    );
+//
+//                    // Read as much as possible.
+//                    char[] cbuf = new char[1024];
+//                    int numReadChars, numLineFeeds = 0;
+//                    while ((numReadChars = bufferedReader.read(cbuf)) != -1) {
+//                        for (int i = 0; i < numReadChars; i++) {
+//                            if (cbuf[i] == '\n') {
+//                                numLineFeeds++;
+//                            }
+//                        }
+//                    }
+//
+//                    if (numLineFeeds == 0) {
+//                        ObjectFileSource.this.logger.warn("Could not find any newline character in {}.", ObjectFileSource.this.inputUrl);
+//                        return OptionalDouble.empty();
+//                    }
+//                    return OptionalDouble.of((double) lis.getNumReadBytes() / numLineFeeds);
+//                } catch (IOException e) {
+//                    ObjectFileSource.this.logger.error("Could not estimate bytes per line of an input file.", e);
+//                }
+//            }
+
+            return OptionalDouble.empty();
+        }
+    }
+
+}
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/PageRankOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/PageRankOperator.java
index 49a9cc6..1358879 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/PageRankOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/PageRankOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.wayang.basic.data.Tuple2;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
@@ -28,8 +29,6 @@
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 /**
  * {@link Operator} for the PageRank algorithm. It takes as input a list of directed edges, whereby each edge
  * is represented as {@code (source vertex ID, target vertex ID)} tuple. Its output are the page ranks, codified
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ReduceByOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ReduceByOperator.java
index dd078d0..627bf0e 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ReduceByOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ReduceByOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.function.FunctionDescriptor;
@@ -28,8 +29,6 @@
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 /**
  * This operator groups the elements of a data set and aggregates the groups.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ReduceOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ReduceOperator.java
index 8d93f0b..153df73 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ReduceOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ReduceOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.function.FunctionDescriptor;
 import org.apache.wayang.core.function.ReduceDescriptor;
@@ -26,8 +27,6 @@
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 /**
  * This operator is context dependent: after a {@link GroupByOperator}, it is meant to be a {@link ReduceByOperator};
  * otherwise, it is a {@link GlobalReduceOperator}.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/RepeatOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/RepeatOperator.java
index a2c97b7..3919c5c 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/RepeatOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/RepeatOperator.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Optional;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
 import org.apache.wayang.core.optimizer.cardinality.SwitchForwardCardinalityEstimator;
@@ -29,11 +33,6 @@
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Optional;
-
 /**
  * This {@link Operator} repeats a certain subplan of {@link Operator}s for a given number of times.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/SampleOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/SampleOperator.java
index 50db0d7..5d0c773 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/SampleOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/SampleOperator.java
@@ -18,19 +18,18 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
+import java.util.function.IntUnaryOperator;
+import java.util.function.LongUnaryOperator;
 import org.apache.commons.lang3.Validate;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
 import org.apache.wayang.core.optimizer.cardinality.FixedSizeCardinalityEstimator;
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.Optional;
-import java.util.function.IntUnaryOperator;
-import java.util.function.LongUnaryOperator;
 
 /**
  * A random sample operator randomly selects its inputs from the input slot and pushes that element to the output slot.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/SortOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/SortOperator.java
index 3436b98..49a7273 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/SortOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/SortOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.function.FunctionDescriptor;
@@ -27,8 +28,6 @@
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 
 /**
  * This operator sorts the elements in this dataset.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/TextFileSink.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/TextFileSink.java
index 970a11f..35f8d99 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/TextFileSink.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/TextFileSink.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Objects;
 import org.apache.wayang.core.function.TransformationDescriptor;
 import org.apache.wayang.core.optimizer.costs.DefaultLoadEstimator;
 import org.apache.wayang.core.optimizer.costs.NestableLoadProfileEstimator;
 import org.apache.wayang.core.plan.wayangplan.UnarySink;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Objects;
-
 /**
  * This {@link UnarySink} writes all incoming data quanta to a text file.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/TextFileSource.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/TextFileSource.java
index 67ddf49..76474b1 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/TextFileSource.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/TextFileSource.java
@@ -19,7 +19,15 @@
 package org.apache.wayang.basic.operators;
 
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.Optional;
+import java.util.OptionalDouble;
+import java.util.OptionalLong;
 import org.apache.commons.lang3.Validate;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.commons.util.profiledb.model.measurement.TimeMeasurement;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
@@ -29,15 +37,6 @@
 import org.apache.wayang.core.util.LimitedInputStream;
 import org.apache.wayang.core.util.fs.FileSystem;
 import org.apache.wayang.core.util.fs.FileSystems;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.Optional;
-import java.util.OptionalDouble;
-import java.util.OptionalLong;
 
 /**
  * This source reads a text file and outputs the lines as data units.
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/UnionAllOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/UnionAllOperator.java
index 449ee9e..5f4a075 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/UnionAllOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/UnionAllOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
@@ -27,8 +28,6 @@
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 
 /**
  * This {@link Operator} creates the union (bag semantics) of two .
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ZipWithIdOperator.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ZipWithIdOperator.java
index 001b010..eba1ec2 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ZipWithIdOperator.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/operators/ZipWithIdOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.basic.operators;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.basic.data.Tuple2;
 import org.apache.wayang.core.api.Configuration;
@@ -26,8 +27,6 @@
 import org.apache.wayang.core.plan.wayangplan.UnaryToUnaryOperator;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Optional;
-
 /**
  * This operators attaches a unique ID to each input data quantum.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/plugin/WayangBasic.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/plugin/WayangBasic.java
index e580af7..5a9321d 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/plugin/WayangBasic.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/plugin/WayangBasic.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.basic.plugin;
 
+import java.io.File;
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.mapping.Mappings;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.mapping.Mapping;
@@ -27,10 +30,6 @@
 import org.apache.wayang.core.util.ReflectionUtils;
 import org.apache.wayang.core.util.fs.LocalFileSystem;
 
-import java.io.File;
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Activator for the basic Wayang package.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/plugin/WayangBasicGraph.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/plugin/WayangBasicGraph.java
index 87c7045..5b867de 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/plugin/WayangBasicGraph.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/plugin/WayangBasicGraph.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.basic.plugin;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.mapping.Mappings;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.mapping.Mapping;
@@ -25,9 +27,6 @@
 import org.apache.wayang.core.platform.Platform;
 import org.apache.wayang.core.plugin.Plugin;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Activator for graph operations being executed with Wayang's basic operators.
  */
diff --git a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/types/RecordType.java b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/types/RecordType.java
index 7988e99..09e79e2 100644
--- a/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/types/RecordType.java
+++ b/wayang-commons/wayang-basic/src/main/java/org/apache/wayang/basic/types/RecordType.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.basic.types;
 
-import org.apache.wayang.basic.data.Record;
-import org.apache.wayang.core.types.BasicDataUnitType;
-
 import java.util.Arrays;
 import java.util.Objects;
+import org.apache.wayang.basic.data.Record;
+import org.apache.wayang.core.types.BasicDataUnitType;
 
 /**
  * This is a specific {@link BasicDataUnitType} for {@link Record}s. In particular, it adds schema information.
diff --git a/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/function/ProjectionDescriptorTest.java b/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/function/ProjectionDescriptorTest.java
index 4532264..80862ac 100644
--- a/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/function/ProjectionDescriptorTest.java
+++ b/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/function/ProjectionDescriptorTest.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.basic.function;
 
-import org.junit.Assert;
-import org.junit.Test;
+import java.util.function.Function;
 import org.apache.wayang.basic.data.Record;
 import org.apache.wayang.basic.types.RecordType;
-
-import java.util.function.Function;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Tests for the {@link ProjectionDescriptor}.
diff --git a/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/mapping/ReduceByMappingTest.java b/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/mapping/ReduceByMappingTest.java
index 20d5a63..7b0b0a4 100644
--- a/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/mapping/ReduceByMappingTest.java
+++ b/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/mapping/ReduceByMappingTest.java
@@ -18,8 +18,6 @@
 
 package org.apache.wayang.basic.mapping;
 
-import org.junit.Assert;
-import org.junit.Test;
 import org.apache.wayang.basic.data.Tuple2;
 import org.apache.wayang.basic.function.ProjectionDescriptor;
 import org.apache.wayang.basic.operators.GroupByOperator;
@@ -31,11 +29,13 @@
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.PlanTransformation;
 import org.apache.wayang.core.plan.wayangplan.Operator;
-import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.plan.wayangplan.UnarySink;
 import org.apache.wayang.core.plan.wayangplan.UnarySource;
+import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.types.DataSetType;
 import org.apache.wayang.core.types.DataUnitType;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for the {@link ReduceByMapping}.
diff --git a/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/operators/MaterializedGroupByOperatorTest.java b/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/operators/MaterializedGroupByOperatorTest.java
index d5f21a7..2410a61 100644
--- a/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/operators/MaterializedGroupByOperatorTest.java
+++ b/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/operators/MaterializedGroupByOperatorTest.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.basic.operators;
 
-import org.junit.Test;
+import java.util.stream.StreamSupport;
 import org.apache.wayang.core.function.TransformationDescriptor;
 import org.apache.wayang.core.types.DataSetType;
 import org.apache.wayang.core.types.DataUnitType;
-
-import java.util.stream.StreamSupport;
+import org.junit.Test;
 
 /**
  * Tests for the {@link MaterializedGroupByOperator}.
diff --git a/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/operators/TextFileSourceTest.java b/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/operators/TextFileSourceTest.java
index 909169c..a12f832 100644
--- a/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/operators/TextFileSourceTest.java
+++ b/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/operators/TextFileSourceTest.java
@@ -19,19 +19,8 @@
 package org.apache.wayang.basic.operators;
 
 
-import org.apache.wayang.commons.util.profiledb.instrumentation.StopWatch;
-import org.apache.wayang.commons.util.profiledb.model.Experiment;
-import org.apache.wayang.commons.util.profiledb.model.Subject;
-import org.junit.Assert;
-import org.junit.Test;
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.api.Job;
-import org.apache.wayang.core.optimizer.DefaultOptimizationContext;
-import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
-import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -41,9 +30,18 @@
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.Optional;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.commons.util.profiledb.instrumentation.StopWatch;
+import org.apache.wayang.commons.util.profiledb.model.Experiment;
+import org.apache.wayang.commons.util.profiledb.model.Subject;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.api.Job;
+import org.apache.wayang.core.optimizer.DefaultOptimizationContext;
+import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
+import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for {@link TextFileSource}.
diff --git a/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/types/RecordTypeTest.java b/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/types/RecordTypeTest.java
index 9d8b472..d7de74c 100644
--- a/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/types/RecordTypeTest.java
+++ b/wayang-commons/wayang-basic/src/test/java/org/apache/wayang/basic/types/RecordTypeTest.java
@@ -18,10 +18,10 @@
 
 package org.apache.wayang.basic.types;
 
-import org.junit.Assert;
-import org.junit.Test;
 import org.apache.wayang.basic.data.Record;
 import org.apache.wayang.core.types.DataSetType;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Tests for the {@link RecordType}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/Configuration.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/Configuration.java
index 966ecc5..9c264a6 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/Configuration.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/Configuration.java
@@ -18,8 +18,27 @@
 
 package org.apache.wayang.core.api;
 
+import static org.apache.wayang.core.util.ReflectionUtils.instantiateDefault;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Optional;
+import java.util.OptionalDouble;
+import java.util.OptionalLong;
+import java.util.Properties;
+import java.util.Random;
+import java.util.function.ToDoubleFunction;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.configuration.CollectionProvider;
 import org.apache.wayang.core.api.configuration.ConstantValueProvider;
 import org.apache.wayang.core.api.configuration.ExplicitCollectionProvider;
@@ -58,26 +77,6 @@
 import org.apache.wayang.core.util.ReflectionUtils;
 import org.apache.wayang.core.util.fs.FileSystem;
 import org.apache.wayang.core.util.fs.FileSystems;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStream;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Optional;
-import java.util.OptionalDouble;
-import java.util.OptionalLong;
-import java.util.Properties;
-import java.util.Random;
-import java.util.function.ToDoubleFunction;
-
-import static org.apache.wayang.core.util.ReflectionUtils.instantiateDefault;
 
 /**
  * Describes both the configuration of a {@link WayangContext} and {@link Job}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/Job.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/Job.java
index 97454b3..cbfa05f 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/Job.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/Job.java
@@ -18,6 +18,19 @@
 
 package org.apache.wayang.core.api;
 
+import java.io.IOException;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Queue;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.stream.Collectors;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.commons.util.profiledb.instrumentation.StopWatch;
 import org.apache.wayang.commons.util.profiledb.model.Experiment;
 import org.apache.wayang.commons.util.profiledb.model.measurement.TimeMeasurement;
@@ -67,20 +80,6 @@
 import org.apache.wayang.core.util.OneTimeExecutable;
 import org.apache.wayang.core.util.ReflectionUtils;
 import org.apache.wayang.core.util.WayangCollections;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.io.IOException;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Queue;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.stream.Collectors;
 
 /**
  * Describes a job that is to be executed using Wayang.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/WayangContext.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/WayangContext.java
index f40f536..9c3150a 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/WayangContext.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/WayangContext.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.core.api;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.commons.util.profiledb.model.Experiment;
 import org.apache.wayang.commons.util.profiledb.model.Subject;
 import org.apache.wayang.core.monitor.Monitor;
@@ -27,8 +29,6 @@
 import org.apache.wayang.core.plugin.Plugin;
 import org.apache.wayang.core.profiling.CardinalityRepository;
 import org.apache.wayang.core.util.ReflectionUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
 
 /**
  * This is the entry point for users to work with Wayang.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/CollectionProvider.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/CollectionProvider.java
index e9e9b73..3a55bd4 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/CollectionProvider.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/CollectionProvider.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.api.configuration;
 
+import java.util.Collection;
+import java.util.Iterator;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.Configuration;
 
-import java.util.Collection;
-import java.util.Iterator;
-
 /**
  * Provides a {@link Collection} of objects.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/ExplicitCollectionProvider.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/ExplicitCollectionProvider.java
index 28850a7..c67ab63 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/ExplicitCollectionProvider.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/ExplicitCollectionProvider.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.api.configuration;
 
-import org.apache.wayang.core.api.Configuration;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.Set;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.core.api.Configuration;
 
 /**
  * {@link CollectionProvider} implementation based on a blacklist and a whitelist.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/FunctionalCollectionProvider.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/FunctionalCollectionProvider.java
index d18211a..821eeb7 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/FunctionalCollectionProvider.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/FunctionalCollectionProvider.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.core.api.configuration;
 
-import org.apache.wayang.core.api.Configuration;
-
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.function.Function;
+import org.apache.wayang.core.api.Configuration;
 
 /**
  * {@link CollectionProvider} implementation based on a blacklist and a whitelist.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/FunctionalKeyValueProvider.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/FunctionalKeyValueProvider.java
index a567ab6..555c23a 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/FunctionalKeyValueProvider.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/FunctionalKeyValueProvider.java
@@ -18,10 +18,9 @@
 
 package org.apache.wayang.core.api.configuration;
 
-import org.apache.wayang.core.api.Configuration;
-
 import java.util.function.BiFunction;
 import java.util.function.Function;
+import org.apache.wayang.core.api.Configuration;
 
 /**
  * Implementation of {@link KeyValueProvider} that uses a {@link Function} to provide a value.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/FunctionalValueProvider.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/FunctionalValueProvider.java
index d861290..93e0be3 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/FunctionalValueProvider.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/FunctionalValueProvider.java
@@ -18,9 +18,8 @@
 
 package org.apache.wayang.core.api.configuration;
 
-import org.apache.wayang.core.api.Configuration;
-
 import java.util.function.Function;
+import org.apache.wayang.core.api.Configuration;
 
 /**
  * Used by {@link Configuration}s to provide some value.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/KeyValueProvider.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/KeyValueProvider.java
index 512d14c..b19d73a 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/KeyValueProvider.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/KeyValueProvider.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.api.configuration;
 
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.api.exception.WayangException;
+import java.util.Optional;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-
-import java.util.Optional;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.api.exception.WayangException;
 
 /**
  * Used by {@link Configuration}s to provide some value.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/MapBasedKeyValueProvider.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/MapBasedKeyValueProvider.java
index 96881d9..0160d98 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/MapBasedKeyValueProvider.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/MapBasedKeyValueProvider.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.core.api.configuration;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.api.Configuration;
-
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.commons.lang3.Validate;
+import org.apache.wayang.core.api.Configuration;
 
 /**
  * Implementation of {@link KeyValueProvider} that uses a {@link Map} to provide a value.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/ValueProvider.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/ValueProvider.java
index 3b8a905..5346816 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/ValueProvider.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/api/configuration/ValueProvider.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.api.configuration;
 
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.api.exception.WayangException;
+import java.util.Optional;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-
-import java.util.Optional;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.api.exception.WayangException;
 
 /**
  * Used by {@link Configuration}s to provide some value.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/AggregationDescriptor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/AggregationDescriptor.java
index b1a6c4a..6f19937 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/AggregationDescriptor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/AggregationDescriptor.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.core.function;
 
+import java.util.Iterator;
 import org.apache.wayang.core.optimizer.costs.LoadEstimator;
 import org.apache.wayang.core.optimizer.costs.LoadProfileEstimator;
 import org.apache.wayang.core.optimizer.costs.NestableLoadProfileEstimator;
@@ -25,8 +26,6 @@
 import org.apache.wayang.core.types.DataUnitGroupType;
 import org.apache.wayang.core.types.DataUnitType;
 
-import java.util.Iterator;
-
 /**
  * This descriptor pertains to functions that take multiple data units and aggregate them into a single data unit.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/ConsumerDescriptor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/ConsumerDescriptor.java
index 83221bd..b3507bc 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/ConsumerDescriptor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/ConsumerDescriptor.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.function;
 
+import java.util.Optional;
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
 import org.apache.wayang.core.optimizer.costs.LoadProfileEstimator;
 import org.apache.wayang.core.types.BasicDataUnitType;
 
-import java.util.Optional;
-
 /**
  * Created by bertty on 13-07-17.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/ExecutionContext.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/ExecutionContext.java
index a870ef0..ebfffdc 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/ExecutionContext.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/ExecutionContext.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.core.function;
 
+import java.util.Collection;
 import org.apache.wayang.core.plan.wayangplan.LoopSubplan;
 import org.apache.wayang.core.platform.Platform;
 
-import java.util.Collection;
-
 /**
  * While a function is executed on a certain {@link Platform}, allows access to some information of the context in
  * which the function is being executed.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/FlatMapDescriptor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/FlatMapDescriptor.java
index 948af92..2b1f991 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/FlatMapDescriptor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/FlatMapDescriptor.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.function;
 
+import java.util.Optional;
+import java.util.function.Function;
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
 import org.apache.wayang.core.optimizer.costs.LoadProfileEstimator;
 import org.apache.wayang.core.types.BasicDataUnitType;
 import org.apache.wayang.core.types.DataUnitType;
 
-import java.util.Optional;
-import java.util.function.Function;
-
 /**
  * This descriptor pertains to functions that consume a single data unit and output a group of data units.
  *
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/FunctionDescriptor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/FunctionDescriptor.java
index 18d13e0..dfd2d9b 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/FunctionDescriptor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/FunctionDescriptor.java
@@ -18,11 +18,6 @@
 
 package org.apache.wayang.core.function;
 
-import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
-import org.apache.wayang.core.optimizer.costs.LoadEstimator;
-import org.apache.wayang.core.optimizer.costs.LoadProfileEstimator;
-import org.apache.wayang.core.optimizer.costs.NestableLoadProfileEstimator;
-
 import java.io.Serializable;
 import java.util.Optional;
 import java.util.function.BiFunction;
@@ -30,6 +25,10 @@
 import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Predicate;
+import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
+import org.apache.wayang.core.optimizer.costs.LoadEstimator;
+import org.apache.wayang.core.optimizer.costs.LoadProfileEstimator;
+import org.apache.wayang.core.optimizer.costs.NestableLoadProfileEstimator;
 
 /**
  * A function operates on single data units or collections of those.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/MapPartitionsDescriptor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/MapPartitionsDescriptor.java
index d93833c..08f230c 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/MapPartitionsDescriptor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/MapPartitionsDescriptor.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.function;
 
+import java.util.Optional;
+import java.util.function.Function;
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
 import org.apache.wayang.core.optimizer.costs.LoadProfileEstimator;
 import org.apache.wayang.core.types.BasicDataUnitType;
 import org.apache.wayang.core.types.DataUnitType;
 
-import java.util.Optional;
-import java.util.function.Function;
-
 /**
  * This descriptor pertains to functions that consume and output multiple data quanta.
  *
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/PredicateDescriptor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/PredicateDescriptor.java
index 6b90e27..01b5eef 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/PredicateDescriptor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/PredicateDescriptor.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.function;
 
+import java.util.Optional;
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
 import org.apache.wayang.core.optimizer.costs.LoadProfileEstimator;
 import org.apache.wayang.core.types.BasicDataUnitType;
 
-import java.util.Optional;
-
 /**
  * This descriptor pertains to predicates that consume a single data unit.
  *
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/ReduceDescriptor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/ReduceDescriptor.java
index 0bd3853..fbc090c 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/ReduceDescriptor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/ReduceDescriptor.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.core.function;
 
+import java.util.function.BinaryOperator;
 import org.apache.wayang.core.optimizer.costs.LoadEstimator;
 import org.apache.wayang.core.optimizer.costs.LoadProfileEstimator;
 import org.apache.wayang.core.optimizer.costs.NestableLoadProfileEstimator;
@@ -25,8 +26,6 @@
 import org.apache.wayang.core.types.DataUnitGroupType;
 import org.apache.wayang.core.types.DataUnitType;
 
-import java.util.function.BinaryOperator;
-
 /**
  * This descriptor pertains to functions that take multiple data units and aggregate them into a single data unit
  * by means of a tree-like fold, i.e., using a commutative, associative function..
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/TransformationDescriptor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/TransformationDescriptor.java
index 3de70e7..34c7b6a 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/TransformationDescriptor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/function/TransformationDescriptor.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.function;
 
+import java.util.function.Function;
 import org.apache.wayang.core.optimizer.costs.LoadEstimator;
 import org.apache.wayang.core.optimizer.costs.LoadProfileEstimator;
 import org.apache.wayang.core.optimizer.costs.NestableLoadProfileEstimator;
 import org.apache.wayang.core.types.BasicDataUnitType;
 
-import java.util.function.Function;
-
 /**
  * This descriptor pertains to functions that consume a single data unit and output a single data unit.
  *
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/OperatorPattern.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/OperatorPattern.java
index 03de5b2..f876dfa 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/OperatorPattern.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/OperatorPattern.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.core.mapping;
 
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.function.Predicate;
 import org.apache.wayang.core.plan.wayangplan.InputSlot;
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.plan.wayangplan.OperatorBase;
@@ -26,10 +29,6 @@
 import org.apache.wayang.core.plan.wayangplan.TopDownPlanVisitor;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.function.Predicate;
-
 /**
  * An operator pattern matches to a class of operator instances.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/PlanTransformation.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/PlanTransformation.java
index 090a05b..39e0720 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/PlanTransformation.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/PlanTransformation.java
@@ -18,6 +18,12 @@
 
 package org.apache.wayang.core.mapping;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.plan.wayangplan.InputSlot;
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.plan.wayangplan.OperatorAlternative;
@@ -25,13 +31,6 @@
 import org.apache.wayang.core.plan.wayangplan.PlanTraversal;
 import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.platform.Platform;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
 
 /**
  * Looks for a {@link SubplanPattern} in a {@link WayangPlan} and replaces it with an alternative {@link Operator}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/ReplacementSubplanFactory.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/ReplacementSubplanFactory.java
index 9315f65..b9c2f30 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/ReplacementSubplanFactory.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/ReplacementSubplanFactory.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.core.mapping;
 
+import java.util.Map;
+import java.util.function.BiFunction;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.plan.wayangplan.ActualOperator;
 import org.apache.wayang.core.plan.wayangplan.InputSlot;
@@ -27,9 +29,6 @@
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
 import org.apache.wayang.core.plan.wayangplan.Subplan;
 
-import java.util.Map;
-import java.util.function.BiFunction;
-
 /**
  * This factory takes an {@link SubplanMatch} and derives a replacement {@link Subplan} from it.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/SubplanMatch.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/SubplanMatch.java
index 5f100b3..7bfc084 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/SubplanMatch.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/SubplanMatch.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.mapping;
 
-import org.apache.wayang.core.plan.wayangplan.Operator;
-import org.apache.wayang.core.platform.Platform;
-
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+import org.apache.wayang.core.plan.wayangplan.Operator;
+import org.apache.wayang.core.platform.Platform;
 
 /**
  * A subplan match correlates a {@link SubplanPattern} with its actually matched .
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/SubplanPattern.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/SubplanPattern.java
index a53065d..b6eadda 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/SubplanPattern.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/mapping/SubplanPattern.java
@@ -18,6 +18,12 @@
 
 package org.apache.wayang.core.mapping;
 
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Objects;
+import java.util.Set;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.exception.WayangException;
 import org.apache.wayang.core.plan.wayangplan.InputSlot;
@@ -25,15 +31,8 @@
 import org.apache.wayang.core.plan.wayangplan.OperatorBase;
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
 import org.apache.wayang.core.plan.wayangplan.PlanTraversal;
-import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.plan.wayangplan.TopDownPlanVisitor;
-
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 
 /**
  * A subplan pattern describes a class of subplans in a {@link WayangPlan}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/DisabledMonitor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/DisabledMonitor.java
index ebb598b..45077d9 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/DisabledMonitor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/DisabledMonitor.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.monitor;
 
-import org.apache.wayang.core.api.Configuration;
-
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.wayang.core.api.Configuration;
 
 
 public class DisabledMonitor extends Monitor {
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/FileMonitor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/FileMonitor.java
index aee3af3..e264fd9 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/FileMonitor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/FileMonitor.java
@@ -19,16 +19,15 @@
 package org.apache.wayang.core.monitor;
 
 
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.util.fs.FileSystem;
-import org.apache.wayang.core.util.fs.FileSystems;
-
 import java.io.IOException;
 import java.io.OutputStreamWriter;
 import java.io.UncheckedIOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.util.fs.FileSystem;
+import org.apache.wayang.core.util.fs.FileSystems;
 import org.apache.wayang.core.util.json.JSONObject;
 
 public class FileMonitor extends Monitor {
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/HttpMonitor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/HttpMonitor.java
index dda6335..86b234c 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/HttpMonitor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/HttpMonitor.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.monitor;
 
-import org.apache.wayang.core.api.Configuration;
-
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.wayang.core.api.Configuration;
 
 /**
  * TODO: Implement
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/Monitor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/Monitor.java
index 2d5e7c9..a4e8f83 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/Monitor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/Monitor.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.monitor;
 
-import org.apache.wayang.core.api.Configuration;
-
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.wayang.core.api.Configuration;
 
 public abstract class Monitor {
 
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/ZeroMQMonitor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/ZeroMQMonitor.java
index c031032..881560e 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/ZeroMQMonitor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/monitor/ZeroMQMonitor.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.monitor;
 
-import org.apache.wayang.core.api.Configuration;
-
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import org.apache.wayang.core.api.Configuration;
 
 /**
  * TODO: Implement
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/AggregateOptimizationContext.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/AggregateOptimizationContext.java
index 964d94a..2592632 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/AggregateOptimizationContext.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/AggregateOptimizationContext.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.optimizer;
 
-import org.apache.wayang.core.plan.wayangplan.LoopSubplan;
-import org.apache.wayang.core.plan.wayangplan.Operator;
-
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.stream.Collectors;
+import org.apache.wayang.core.plan.wayangplan.LoopSubplan;
+import org.apache.wayang.core.plan.wayangplan.Operator;
 
 /**
  * This {@link OptimizationContext} implementation aggregates several {@link OptimizationContext}s and exposes
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/DefaultOptimizationContext.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/DefaultOptimizationContext.java
index 187979d..f7dc525 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/DefaultOptimizationContext.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/DefaultOptimizationContext.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.core.optimizer;
 
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
 import org.apache.wayang.core.api.Job;
 import org.apache.wayang.core.optimizer.channels.ChannelConversionGraph;
 import org.apache.wayang.core.optimizer.enumeration.PlanEnumerationPruningStrategy;
@@ -25,16 +30,10 @@
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.plan.wayangplan.OperatorAlternative;
 import org.apache.wayang.core.plan.wayangplan.PlanTraversal;
-import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.plan.wayangplan.Subplan;
+import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.util.WayangArrays;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-
 /**
  * This implementation of {@link OptimizationContext} represents a direct mapping from {@link OptimizationContext.OperatorContext}
  * to executions of the respective {@link Operator}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/OptimizationContext.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/OptimizationContext.java
index 19e7b01..bf10011 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/OptimizationContext.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/OptimizationContext.java
@@ -18,6 +18,17 @@
 
 package org.apache.wayang.core.optimizer;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.function.ToDoubleFunction;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.Job;
 import org.apache.wayang.core.api.exception.WayangException;
@@ -40,23 +51,11 @@
 import org.apache.wayang.core.plan.wayangplan.OperatorContainer;
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
 import org.apache.wayang.core.plan.wayangplan.PlanTraversal;
-import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.plan.wayangplan.Slot;
+import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.platform.Platform;
 import org.apache.wayang.core.platform.lineage.ExecutionLineageNode;
 import org.apache.wayang.core.util.ReflectionUtils;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.function.ToDoubleFunction;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * Manages contextual information required during the optimization of a {@link WayangPlan}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/OptimizationUtils.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/OptimizationUtils.java
index 3f71b5d..56f523b 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/OptimizationUtils.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/OptimizationUtils.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.core.optimizer;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.exception.WayangException;
 import org.apache.wayang.core.optimizer.enumeration.PlanEnumerationPruningStrategy;
@@ -26,14 +30,9 @@
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 import org.apache.wayang.core.plan.wayangplan.InputSlot;
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
-import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.plan.wayangplan.Slot;
 import org.apache.wayang.core.plan.wayangplan.SlotMapping;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.Set;
+import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 
 /**
  * Utility methods for the optimization process.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/ProbabilisticIntervalEstimate.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/ProbabilisticIntervalEstimate.java
index 5e8a112..39027c6 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/ProbabilisticIntervalEstimate.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/ProbabilisticIntervalEstimate.java
@@ -18,10 +18,9 @@
 
 package org.apache.wayang.core.optimizer;
 
-import org.apache.wayang.core.util.Formats;
-
 import java.util.Comparator;
 import java.util.Objects;
+import org.apache.wayang.core.util.Formats;
 
 /***
  * An estimate that is capable of expressing uncertainty.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/SanityChecker.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/SanityChecker.java
index d4a5703..f3061b2 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/SanityChecker.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/SanityChecker.java
@@ -18,17 +18,16 @@
 
 package org.apache.wayang.core.optimizer;
 
+import java.util.Collection;
+import java.util.concurrent.atomic.AtomicBoolean;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.plan.wayangplan.OperatorAlternative;
 import org.apache.wayang.core.plan.wayangplan.PlanTraversal;
-import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.plan.wayangplan.Subplan;
+import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.util.WayangCollections;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.Collection;
-import java.util.concurrent.atomic.AtomicBoolean;
 
 /**
  * This class checks a {@link WayangPlan} for several sanity criteria:
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/AggregatingCardinalityEstimator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/AggregatingCardinalityEstimator.java
index 7d404a1..1a7f438 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/AggregatingCardinalityEstimator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/AggregatingCardinalityEstimator.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.optimizer.OptimizationContext;
-
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.commons.lang3.Validate;
+import org.apache.wayang.core.optimizer.OptimizationContext;
 
 /**
  * {@link CardinalityEstimator} implementation that can have multiple ways of calculating a {@link CardinalityEstimate}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/CardinalityEstimationTraversal.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/CardinalityEstimationTraversal.java
index 7dc5ae9..4cb5f1c 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/CardinalityEstimationTraversal.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/CardinalityEstimationTraversal.java
@@ -18,17 +18,6 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.optimizer.OptimizationContext;
-import org.apache.wayang.core.plan.wayangplan.InputSlot;
-import org.apache.wayang.core.plan.wayangplan.Operator;
-import org.apache.wayang.core.plan.wayangplan.OperatorContainer;
-import org.apache.wayang.core.plan.wayangplan.OutputSlot;
-import org.apache.wayang.core.plan.wayangplan.PlanTraversal;
-import org.apache.wayang.core.util.OneTimeExecutable;
-import org.apache.wayang.core.util.WayangCollections;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -41,6 +30,16 @@
 import java.util.Queue;
 import java.util.Set;
 import java.util.stream.Stream;
+import org.apache.commons.lang3.Validate;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.apache.wayang.core.plan.wayangplan.InputSlot;
+import org.apache.wayang.core.plan.wayangplan.Operator;
+import org.apache.wayang.core.plan.wayangplan.OperatorContainer;
+import org.apache.wayang.core.plan.wayangplan.OutputSlot;
+import org.apache.wayang.core.plan.wayangplan.PlanTraversal;
+import org.apache.wayang.core.util.OneTimeExecutable;
+import org.apache.wayang.core.util.WayangCollections;
 
 /**
  * {@link CardinalityEstimator} that subsumes a DAG of operators, each one providing a local {@link CardinalityEstimator}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/CardinalityEstimatorManager.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/CardinalityEstimatorManager.java
index 5c046cc..0c930e7 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/CardinalityEstimatorManager.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/CardinalityEstimatorManager.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
+import java.util.Collections;
+import java.util.Map;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.optimizer.OptimizationUtils;
@@ -30,11 +34,8 @@
 import org.apache.wayang.core.platform.ChannelInstance;
 import org.apache.wayang.core.platform.ExecutionState;
 import org.apache.wayang.core.platform.Junction;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;;
 
-import java.util.Collections;
-import java.util.Map;
+;
 
 /**
  * Handles the {@link CardinalityEstimate}s of a {@link WayangPlan}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/CardinalityPusher.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/CardinalityPusher.java
index bb3bd58..13fb901 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/CardinalityPusher.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/CardinalityPusher.java
@@ -18,16 +18,15 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
+import java.util.Arrays;
+import java.util.Objects;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.optimizer.costs.TimeEstimate;
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.util.WayangArrays;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.Arrays;
-import java.util.Objects;
 
 /**
  * Pushes a input {@link CardinalityEstimate}s through an {@link Operator} and yields its output
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/DefaultCardinalityEstimator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/DefaultCardinalityEstimator.java
index 7582261..d52c444 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/DefaultCardinalityEstimator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/DefaultCardinalityEstimator.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.optimizer.OptimizationContext;
-
 import java.util.Arrays;
 import java.util.function.ToLongBiFunction;
 import java.util.function.ToLongFunction;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.optimizer.OptimizationContext;
 
 /**
  * Default implementation of the {@link CardinalityEstimator}. Generalizes a single-point estimation function.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/LoopHeadAlternativeCardinalityPusher.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/LoopHeadAlternativeCardinalityPusher.java
index 67a1b7a..627936e 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/LoopHeadAlternativeCardinalityPusher.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/LoopHeadAlternativeCardinalityPusher.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
+import java.util.Collection;
+import java.util.function.BiFunction;
+import java.util.stream.Collectors;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.wayangplan.InputSlot;
@@ -28,10 +31,6 @@
 import org.apache.wayang.core.plan.wayangplan.Slot;
 import org.apache.wayang.core.util.Tuple;
 
-import java.util.Collection;
-import java.util.function.BiFunction;
-import java.util.stream.Collectors;
-
 /**
  * {@link CardinalityPusher} implementation for {@link LoopHeadAlternative}s.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/LoopSubplanCardinalityPusher.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/LoopSubplanCardinalityPusher.java
index 4834bc2..32ddec7 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/LoopSubplanCardinalityPusher.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/LoopSubplanCardinalityPusher.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.wayangplan.InputSlot;
@@ -26,12 +31,6 @@
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
 
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Collectors;
-
 /**
  * {@link CardinalityPusher} implementation for {@link LoopSubplan}s.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/OperatorAlternativeCardinalityPusher.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/OperatorAlternativeCardinalityPusher.java
index d5886fc..5beb60e 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/OperatorAlternativeCardinalityPusher.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/OperatorAlternativeCardinalityPusher.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
+import java.util.List;
+import java.util.stream.Collectors;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.wayangplan.OperatorAlternative;
 import org.apache.wayang.core.util.Tuple;
 
-import java.util.List;
-import java.util.stream.Collectors;
-
 /**
  * {@link CardinalityPusher} implementation for {@link OperatorAlternative}s.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/SubplanCardinalityPusher.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/SubplanCardinalityPusher.java
index 50184bc..71683a2 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/SubplanCardinalityPusher.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/SubplanCardinalityPusher.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Collectors;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.wayangplan.CompositeOperator;
@@ -28,12 +33,6 @@
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
 import org.apache.wayang.core.plan.wayangplan.Subplan;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.stream.Collectors;
-
 /**
  * {@link CardinalityPusher} implementation for {@link Subplan}s (but not for {@link LoopSubplan}s!)
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/SwitchForwardCardinalityEstimator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/SwitchForwardCardinalityEstimator.java
index 7f69fe5..bb50881 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/SwitchForwardCardinalityEstimator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/cardinality/SwitchForwardCardinalityEstimator.java
@@ -18,9 +18,9 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
+import org.apache.logging.log4j.LogManager;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.wayangplan.InputSlot;
-import org.apache.logging.log4j.LogManager;
 
 /**
  * Forwards the {@link CardinalityEstimate} of any given {@link InputSlot} that is not {@code null}. Asserts that
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/channels/ChannelConversion.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/channels/ChannelConversion.java
index 95590a8..fffbce5 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/channels/ChannelConversion.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/channels/ChannelConversion.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.core.optimizer.channels;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
@@ -26,9 +28,6 @@
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.platform.ChannelDescriptor;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Can convert a given {@link Channel} to another {@link Channel}.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/channels/ChannelConversionGraph.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/channels/ChannelConversionGraph.java
index 3e06c95..fcce46e 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/channels/ChannelConversionGraph.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/channels/ChannelConversionGraph.java
@@ -18,6 +18,22 @@
 
 package org.apache.wayang.core.optimizer.channels;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+import java.util.Set;
+import java.util.function.ToDoubleFunction;
+import java.util.stream.Collectors;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.DefaultOptimizationContext;
 import org.apache.wayang.core.optimizer.OptimizationContext;
@@ -37,25 +53,8 @@
 import org.apache.wayang.core.util.Bitmask;
 import org.apache.wayang.core.util.OneTimeExecutable;
 import org.apache.wayang.core.util.ReflectionUtils;
-import org.apache.wayang.core.util.WayangCollections;
 import org.apache.wayang.core.util.Tuple;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-import java.util.Set;
-import java.util.function.ToDoubleFunction;
-import java.util.stream.Collectors;
+import org.apache.wayang.core.util.WayangCollections;
 
 /**
  * This graph contains a set of {@link ChannelConversion}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/channels/DefaultChannelConversion.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/channels/DefaultChannelConversion.java
index d4c97a8..7c38140 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/channels/DefaultChannelConversion.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/channels/DefaultChannelConversion.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.core.optimizer.channels;
 
+import java.util.Collection;
+import java.util.function.BiFunction;
+import java.util.function.Supplier;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
@@ -28,10 +31,6 @@
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
 import org.apache.wayang.core.platform.ChannelDescriptor;
 
-import java.util.Collection;
-import java.util.function.BiFunction;
-import java.util.function.Supplier;
-
 /**
  * Default implementation of the {@link ChannelConversion}. Can be used without further subclassing.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/DefaultLoadEstimator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/DefaultLoadEstimator.java
index 775129e..dc13005 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/DefaultLoadEstimator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/DefaultLoadEstimator.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.optimizer.costs;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
-import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
-
 import java.util.Arrays;
 import java.util.function.ToDoubleBiFunction;
 import java.util.function.ToLongBiFunction;
 import java.util.stream.LongStream;
+import org.apache.commons.lang3.Validate;
+import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
+import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 
 /**
  * Implementation of {@link LoadEstimator} that uses a single-point cost function.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/EstimationContext.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/EstimationContext.java
index d1896fd..789b4d8 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/EstimationContext.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/EstimationContext.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.optimizer.costs;
 
+import java.util.Arrays;
+import java.util.Collection;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.util.JsonSerializables;
 import org.apache.wayang.core.util.JsonSerializer;
-
-import java.util.Arrays;
-import java.util.Collection;
 import org.apache.wayang.core.util.json.JSONObject;
 
 /**
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/IntervalLoadEstimator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/IntervalLoadEstimator.java
index 2d7d697..9a5c395 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/IntervalLoadEstimator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/IntervalLoadEstimator.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.optimizer.costs;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
-import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
-
 import java.util.Arrays;
 import java.util.function.ToDoubleBiFunction;
 import java.util.function.ToLongBiFunction;
 import java.util.stream.LongStream;
+import org.apache.commons.lang3.Validate;
+import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
+import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 
 /**
  * Implementation of {@link LoadEstimator} that uses a interval-based cost function.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadEstimator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadEstimator.java
index 0f07067..9fb40ba 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadEstimator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadEstimator.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.optimizer.costs;
 
+import java.util.Arrays;
 import org.apache.wayang.core.function.FunctionDescriptor;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 
-import java.util.Arrays;
-
 /**
  * Describes the resource utilization of something executable within an {@link EstimationContext}, such as an
  * {@link ExecutionOperator} or a {@link FunctionDescriptor}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadProfile.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadProfile.java
index 94f5856..c0da95d 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadProfile.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadProfile.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.optimizer.costs;
 
+import java.util.Collection;
+import java.util.LinkedList;
 import org.apache.wayang.core.function.FunctionDescriptor;
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.util.JsonSerializable;
 import org.apache.wayang.core.util.JsonSerializables;
-
-import java.util.Collection;
-import java.util.LinkedList;
 import org.apache.wayang.core.util.json.JSONObject;
 
 /**
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadProfileEstimator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadProfileEstimator.java
index 1eb2dc3..7e933b2 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadProfileEstimator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadProfileEstimator.java
@@ -18,10 +18,9 @@
 
 package org.apache.wayang.core.optimizer.costs;
 
-import org.apache.wayang.core.api.Configuration;
-
 import java.util.Collection;
 import java.util.LinkedList;
+import org.apache.wayang.core.api.Configuration;
 
 /**
  * Estimates the {@link LoadProfile} of some executable artifact that takes some input data quanta and produces them.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadProfileEstimators.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadProfileEstimators.java
index fcfe1fe..a0e5ca4 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadProfileEstimators.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/LoadProfileEstimators.java
@@ -18,6 +18,19 @@
 
 package org.apache.wayang.core.optimizer.costs;
 
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.function.ToDoubleBiFunction;
+import java.util.function.ToDoubleFunction;
+import java.util.function.ToLongBiFunction;
+import java.util.stream.Collectors;
+import java.util.stream.StreamSupport;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.exception.WayangException;
 import org.apache.wayang.core.function.FunctionDescriptor;
@@ -33,20 +46,6 @@
 import org.apache.wayang.core.util.mathex.Expression;
 import org.apache.wayang.core.util.mathex.ExpressionBuilder;
 import org.apache.wayang.core.util.mathex.exceptions.EvaluationException;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Optional;
-import java.util.function.ToDoubleBiFunction;
-import java.util.function.ToDoubleFunction;
-import java.util.function.ToLongBiFunction;
-import java.util.stream.Collectors;
-import java.util.stream.StreamSupport;
 
 /**
  * Utilities to deal with {@link LoadProfileEstimator}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/NestableLoadProfileEstimator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/NestableLoadProfileEstimator.java
index 7bd64c2..58be3d1 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/NestableLoadProfileEstimator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/NestableLoadProfileEstimator.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.optimizer.costs;
 
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.api.exception.WayangException;
-import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
-
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.function.Function;
 import java.util.function.ToDoubleBiFunction;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.api.exception.WayangException;
+import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
 
 /**
  * {@link LoadProfileEstimator} that can host further {@link LoadProfileEstimator}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/SimpleEstimationContext.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/SimpleEstimationContext.java
index 5e3cac2..38b9851 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/SimpleEstimationContext.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/costs/SimpleEstimationContext.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.optimizer.costs;
 
+import java.util.Collection;
 import java.util.HashMap;
+import java.util.List;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
 import org.apache.wayang.core.util.JsonSerializables;
 import org.apache.wayang.core.util.JsonSerializer;
-
-import java.util.Collection;
-import java.util.List;
 import org.apache.wayang.core.util.json.JSONObject;
 
 /**
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/ExecutionTaskFlow.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/ExecutionTaskFlow.java
index 6f6daea..06f22cd 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/ExecutionTaskFlow.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/ExecutionTaskFlow.java
@@ -18,16 +18,6 @@
 
 package org.apache.wayang.core.optimizer.enumeration;
 
-import org.apache.wayang.core.plan.executionplan.Channel;
-import org.apache.wayang.core.plan.executionplan.ExecutionPlan;
-import org.apache.wayang.core.plan.executionplan.ExecutionStage;
-import org.apache.wayang.core.plan.executionplan.ExecutionTask;
-import org.apache.wayang.core.plan.executionplan.PlatformExecution;
-import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
-import org.apache.wayang.core.plan.wayangplan.traversal.AbstractTopologicalTraversal;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -36,6 +26,15 @@
 import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Stream;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.core.plan.executionplan.Channel;
+import org.apache.wayang.core.plan.executionplan.ExecutionPlan;
+import org.apache.wayang.core.plan.executionplan.ExecutionStage;
+import org.apache.wayang.core.plan.executionplan.ExecutionTask;
+import org.apache.wayang.core.plan.executionplan.PlatformExecution;
+import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
+import org.apache.wayang.core.plan.wayangplan.traversal.AbstractTopologicalTraversal;
 
 /**
  * Graph of {@link ExecutionTask}s and {@link Channel}s. Does not define {@link ExecutionStage}s and
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/ExecutionTaskFlowCompiler.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/ExecutionTaskFlowCompiler.java
index 972fb4e..098af4d 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/ExecutionTaskFlowCompiler.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/ExecutionTaskFlowCompiler.java
@@ -18,6 +18,17 @@
 
 package org.apache.wayang.core.optimizer.enumeration;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+import org.apache.logging.log4j.LogManager;
 import org.apache.wayang.core.optimizer.OptimizationUtils;
 import org.apache.wayang.core.plan.executionplan.Channel;
 import org.apache.wayang.core.plan.executionplan.ExecutionPlan;
@@ -33,18 +44,6 @@
 import org.apache.wayang.core.plan.wayangplan.traversal.AbstractTopologicalTraversal;
 import org.apache.wayang.core.platform.Junction;
 import org.apache.wayang.core.platform.Platform;
-import org.apache.logging.log4j.LogManager;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Objects;
-import java.util.Set;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
 
 /**
  * Creates an {@link ExecutionTaskFlow} from a {@link PlanImplementation}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/LatentOperatorPruningStrategy.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/LatentOperatorPruningStrategy.java
index a228f14..7aaee98 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/LatentOperatorPruningStrategy.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/LatentOperatorPruningStrategy.java
@@ -18,19 +18,18 @@
 
 package org.apache.wayang.core.optimizer.enumeration;
 
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.exception.WayangException;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 import org.apache.wayang.core.plan.wayangplan.Slot;
 import org.apache.wayang.core.platform.Platform;
 import org.apache.wayang.core.util.Tuple;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.Collection;
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * This {@link PlanEnumerationPruningStrategy} follows the idea that we can prune a
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/LoopEnumerator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/LoopEnumerator.java
index f884364..1ac5c4e 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/LoopEnumerator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/LoopEnumerator.java
@@ -18,6 +18,12 @@
 
 package org.apache.wayang.core.optimizer.enumeration;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import org.apache.logging.log4j.LogManager;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.wayangplan.InputSlot;
 import org.apache.wayang.core.plan.wayangplan.LoopHeadOperator;
@@ -26,13 +32,6 @@
 import org.apache.wayang.core.platform.Junction;
 import org.apache.wayang.core.util.OneTimeExecutable;
 import org.apache.wayang.core.util.Tuple;
-import org.apache.logging.log4j.LogManager;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
 
 /**
  * Enumerator for {@link LoopSubplan}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/LoopImplementation.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/LoopImplementation.java
index 57416fa..0b577f0 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/LoopImplementation.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/LoopImplementation.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.core.optimizer.enumeration;
 
+import java.util.LinkedList;
+import java.util.List;
+import java.util.stream.Stream;
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
 import org.apache.wayang.core.optimizer.costs.TimeEstimate;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
@@ -27,10 +30,6 @@
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
 import org.apache.wayang.core.platform.Junction;
 
-import java.util.LinkedList;
-import java.util.List;
-import java.util.stream.Stream;
-
 /**
  * Describes the enumeration of a {@link LoopSubplan}.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/PlanEnumeration.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/PlanEnumeration.java
index e00753c..b441ebb 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/PlanEnumeration.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/PlanEnumeration.java
@@ -19,6 +19,19 @@
 package org.apache.wayang.core.optimizer.enumeration;
 
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.commons.util.profiledb.model.measurement.TimeMeasurement;
 import org.apache.wayang.core.api.Job;
 import org.apache.wayang.core.optimizer.OptimizationContext;
@@ -33,22 +46,8 @@
 import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.platform.Junction;
 import org.apache.wayang.core.util.MultiMap;
-import org.apache.wayang.core.util.WayangCollections;
 import org.apache.wayang.core.util.Tuple;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
+import org.apache.wayang.core.util.WayangCollections;
 
 /**
  * Represents a collection of {@link PlanImplementation}s that all implement the same section of a {@link WayangPlan} (which
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/PlanEnumerator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/PlanEnumerator.java
index 17ce28b..a490690 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/PlanEnumerator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/PlanEnumerator.java
@@ -18,30 +18,6 @@
 
 package org.apache.wayang.core.optimizer.enumeration;
 
-import org.apache.wayang.commons.util.profiledb.model.measurement.TimeMeasurement;
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.api.exception.WayangException;
-import org.apache.wayang.core.optimizer.OptimizationContext;
-import org.apache.wayang.core.optimizer.OptimizationUtils;
-import org.apache.wayang.core.plan.executionplan.Channel;
-import org.apache.wayang.core.plan.executionplan.ExecutionPlan;
-import org.apache.wayang.core.plan.executionplan.ExecutionTask;
-import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
-import org.apache.wayang.core.plan.wayangplan.InputSlot;
-import org.apache.wayang.core.plan.wayangplan.LoopHeadOperator;
-import org.apache.wayang.core.plan.wayangplan.LoopSubplan;
-import org.apache.wayang.core.plan.wayangplan.Operator;
-import org.apache.wayang.core.plan.wayangplan.OperatorAlternative;
-import org.apache.wayang.core.plan.wayangplan.OperatorContainer;
-import org.apache.wayang.core.plan.wayangplan.Operators;
-import org.apache.wayang.core.plan.wayangplan.OutputSlot;
-import org.apache.wayang.core.plan.wayangplan.WayangPlan;
-import org.apache.wayang.core.plan.wayangplan.Slot;
-import org.apache.wayang.core.util.WayangCollections;
-import org.apache.wayang.core.util.Tuple;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -59,6 +35,29 @@
 import java.util.function.ToDoubleFunction;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.commons.util.profiledb.model.measurement.TimeMeasurement;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.api.exception.WayangException;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.apache.wayang.core.optimizer.OptimizationUtils;
+import org.apache.wayang.core.plan.executionplan.Channel;
+import org.apache.wayang.core.plan.executionplan.ExecutionPlan;
+import org.apache.wayang.core.plan.executionplan.ExecutionTask;
+import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
+import org.apache.wayang.core.plan.wayangplan.InputSlot;
+import org.apache.wayang.core.plan.wayangplan.LoopHeadOperator;
+import org.apache.wayang.core.plan.wayangplan.LoopSubplan;
+import org.apache.wayang.core.plan.wayangplan.Operator;
+import org.apache.wayang.core.plan.wayangplan.OperatorAlternative;
+import org.apache.wayang.core.plan.wayangplan.OperatorContainer;
+import org.apache.wayang.core.plan.wayangplan.Operators;
+import org.apache.wayang.core.plan.wayangplan.OutputSlot;
+import org.apache.wayang.core.plan.wayangplan.Slot;
+import org.apache.wayang.core.plan.wayangplan.WayangPlan;
+import org.apache.wayang.core.util.Tuple;
+import org.apache.wayang.core.util.WayangCollections;
 
 /**
  * The plan partitioner recursively dissects a {@link WayangPlan} into {@link PlanEnumeration}s and then assembles
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/PlanImplementation.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/PlanImplementation.java
index d8f49af..6cf32c1 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/PlanImplementation.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/PlanImplementation.java
@@ -18,31 +18,6 @@
 
 package org.apache.wayang.core.optimizer.enumeration;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.optimizer.OptimizationContext;
-import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
-import org.apache.wayang.core.optimizer.costs.TimeEstimate;
-import org.apache.wayang.core.optimizer.costs.TimeToCostConverter;
-import org.apache.wayang.core.plan.executionplan.Channel;
-import org.apache.wayang.core.plan.executionplan.ExecutionTask;
-import org.apache.wayang.core.plan.wayangplan.ElementaryOperator;
-import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
-import org.apache.wayang.core.plan.wayangplan.InputSlot;
-import org.apache.wayang.core.plan.wayangplan.LoopSubplan;
-import org.apache.wayang.core.plan.wayangplan.Operator;
-import org.apache.wayang.core.plan.wayangplan.OperatorAlternative;
-import org.apache.wayang.core.plan.wayangplan.OutputSlot;
-import org.apache.wayang.core.plan.wayangplan.WayangPlan;
-import org.apache.wayang.core.plan.wayangplan.Slot;
-import org.apache.wayang.core.platform.Junction;
-import org.apache.wayang.core.platform.Platform;
-import org.apache.wayang.core.util.Canonicalizer;
-import org.apache.wayang.core.util.WayangCollections;
-import org.apache.wayang.core.util.Tuple;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -58,6 +33,30 @@
 import java.util.function.ToDoubleFunction;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import org.apache.commons.lang3.Validate;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
+import org.apache.wayang.core.optimizer.costs.TimeEstimate;
+import org.apache.wayang.core.optimizer.costs.TimeToCostConverter;
+import org.apache.wayang.core.plan.executionplan.Channel;
+import org.apache.wayang.core.plan.executionplan.ExecutionTask;
+import org.apache.wayang.core.plan.wayangplan.ElementaryOperator;
+import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
+import org.apache.wayang.core.plan.wayangplan.InputSlot;
+import org.apache.wayang.core.plan.wayangplan.LoopSubplan;
+import org.apache.wayang.core.plan.wayangplan.Operator;
+import org.apache.wayang.core.plan.wayangplan.OperatorAlternative;
+import org.apache.wayang.core.plan.wayangplan.OutputSlot;
+import org.apache.wayang.core.plan.wayangplan.Slot;
+import org.apache.wayang.core.plan.wayangplan.WayangPlan;
+import org.apache.wayang.core.platform.Junction;
+import org.apache.wayang.core.platform.Platform;
+import org.apache.wayang.core.util.Canonicalizer;
+import org.apache.wayang.core.util.Tuple;
+import org.apache.wayang.core.util.WayangCollections;
 
 /**
  * Represents a partial execution plan.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/RandomPruningStrategy.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/RandomPruningStrategy.java
index c10eb32..21c7731 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/RandomPruningStrategy.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/RandomPruningStrategy.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.core.optimizer.enumeration;
 
-import org.apache.wayang.core.api.Configuration;
-
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Random;
+import org.apache.wayang.core.api.Configuration;
 
 /**
  * This {@link PlanEnumerationPruningStrategy} retains only the best {@code k} {@link PlanImplementation}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/StageAssignmentTraversal.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/StageAssignmentTraversal.java
index 2ff313c..70c0746 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/StageAssignmentTraversal.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/StageAssignmentTraversal.java
@@ -18,7 +18,20 @@
 
 package org.apache.wayang.core.optimizer.enumeration;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Queue;
+import java.util.Set;
+import java.util.stream.Collectors;
 import org.apache.commons.lang3.Validate;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.plan.executionplan.Channel;
 import org.apache.wayang.core.plan.executionplan.ExecutionPlan;
 import org.apache.wayang.core.plan.executionplan.ExecutionStage;
@@ -34,20 +47,6 @@
 import org.apache.wayang.core.util.Iterators;
 import org.apache.wayang.core.util.OneTimeExecutable;
 import org.apache.wayang.core.util.Tuple;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Queue;
-import java.util.Set;
-import java.util.stream.Collectors;
 
 /**
  * Builds an {@link ExecutionPlan} from a {@link ExecutionTaskFlow}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/TopKPruningStrategy.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/TopKPruningStrategy.java
index a80f9d9..2447710 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/TopKPruningStrategy.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/optimizer/enumeration/TopKPruningStrategy.java
@@ -18,9 +18,8 @@
 
 package org.apache.wayang.core.optimizer.enumeration;
 
-import org.apache.wayang.core.api.Configuration;
-
 import java.util.ArrayList;
+import org.apache.wayang.core.api.Configuration;
 
 /**
  * This {@link PlanEnumerationPruningStrategy} retains only the best {@code k} {@link PlanImplementation}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/Channel.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/Channel.java
index f6e5804..a96b347 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/Channel.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/Channel.java
@@ -18,22 +18,6 @@
 
 package org.apache.wayang.core.plan.executionplan;
 
-import org.apache.wayang.core.optimizer.OptimizationContext;
-import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
-import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
-import org.apache.wayang.core.plan.wayangplan.InputSlot;
-import org.apache.wayang.core.plan.wayangplan.OutputSlot;
-import org.apache.wayang.core.plan.wayangplan.WayangPlan;
-import org.apache.wayang.core.plan.wayangplan.Slot;
-import org.apache.wayang.core.platform.Breakpoint;
-import org.apache.wayang.core.platform.ChannelDescriptor;
-import org.apache.wayang.core.platform.ChannelInstance;
-import org.apache.wayang.core.platform.Executor;
-import org.apache.wayang.core.platform.Platform;
-import org.apache.wayang.core.types.DataSetType;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
@@ -45,6 +29,21 @@
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
+import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
+import org.apache.wayang.core.plan.wayangplan.InputSlot;
+import org.apache.wayang.core.plan.wayangplan.OutputSlot;
+import org.apache.wayang.core.plan.wayangplan.Slot;
+import org.apache.wayang.core.plan.wayangplan.WayangPlan;
+import org.apache.wayang.core.platform.Breakpoint;
+import org.apache.wayang.core.platform.ChannelDescriptor;
+import org.apache.wayang.core.platform.ChannelInstance;
+import org.apache.wayang.core.platform.Executor;
+import org.apache.wayang.core.platform.Platform;
+import org.apache.wayang.core.types.DataSetType;
 
 /**
  * Models the data movement between to {@link ExecutionTask}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/ExecutionPlan.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/ExecutionPlan.java
index 352c413..2961f1f 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/ExecutionPlan.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/ExecutionPlan.java
@@ -18,12 +18,6 @@
 
 package org.apache.wayang.core.plan.executionplan;
 
-import org.apache.wayang.core.optimizer.enumeration.ExecutionTaskFlow;
-import org.apache.wayang.core.optimizer.enumeration.StageAssignmentTraversal;
-import org.apache.wayang.core.util.Counter;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -35,6 +29,11 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.core.optimizer.enumeration.ExecutionTaskFlow;
+import org.apache.wayang.core.optimizer.enumeration.StageAssignmentTraversal;
+import org.apache.wayang.core.util.Counter;
 
 /**
  * Represents an executable, cross-platform data flow. Consists of muliple {@link PlatformExecution}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/ExecutionStage.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/ExecutionStage.java
index ced3433..e6a1e8f 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/ExecutionStage.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/ExecutionStage.java
@@ -18,11 +18,6 @@
 
 package org.apache.wayang.core.plan.executionplan;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.plan.wayangplan.LoopHeadOperator;
-import org.apache.wayang.core.platform.Platform;
-import org.apache.wayang.core.util.WayangCollections;
-
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -34,6 +29,10 @@
 import java.util.Queue;
 import java.util.Set;
 import java.util.stream.Collectors;
+import org.apache.commons.lang3.Validate;
+import org.apache.wayang.core.plan.wayangplan.LoopHeadOperator;
+import org.apache.wayang.core.platform.Platform;
+import org.apache.wayang.core.util.WayangCollections;
 
 /**
  * Resides within a {@link PlatformExecution} and represents the minimum execution unit that is controlled by Wayang.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/ExecutionStageLoop.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/ExecutionStageLoop.java
index b2b6e94..f112738 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/ExecutionStageLoop.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/ExecutionStageLoop.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.plan.executionplan;
 
+import java.util.Collection;
+import java.util.HashSet;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 import org.apache.wayang.core.plan.wayangplan.LoopHeadOperator;
 import org.apache.wayang.core.plan.wayangplan.LoopSubplan;
 
-import java.util.Collection;
-import java.util.HashSet;
-
 /**
  * This class models the execution equivalent of {@link LoopSubplan}s.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/PlatformExecution.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/PlatformExecution.java
index 877eba4..a338e18 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/PlatformExecution.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/executionplan/PlatformExecution.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.plan.executionplan;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.platform.Platform;
-
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
+import org.apache.commons.lang3.Validate;
+import org.apache.wayang.core.platform.Platform;
 
 /**
  * Complete data flow on a single platform, that consists of multiple {@link ExecutionStage}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/ElementaryOperator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/ElementaryOperator.java
index b56f05a..3a4ae67 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/ElementaryOperator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/ElementaryOperator.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
 
-import java.util.Optional;
-
 /**
  * Indivisible {@link Operator} that is not containing other {@link Operator}s.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/EstimationContextProperty.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/EstimationContextProperty.java
index c64ac69..73763b8 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/EstimationContextProperty.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/EstimationContextProperty.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.apache.wayang.core.optimizer.costs.EstimationContext;
-
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
+import org.apache.wayang.core.optimizer.costs.EstimationContext;
 
 /**
  * Marks a property of an {@link Operator} that is relevant to the estimation process, i.e., should be provided
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/ExecutionOperator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/ExecutionOperator.java
index f95a946..ce3b055 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/ExecutionOperator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/ExecutionOperator.java
@@ -18,6 +18,12 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Optional;
+import org.apache.logging.log4j.LogManager;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
@@ -33,13 +39,6 @@
 import org.apache.wayang.core.platform.lineage.ExecutionLineageNode;
 import org.apache.wayang.core.platform.lineage.LazyExecutionLineageNode;
 import org.apache.wayang.core.util.Tuple;
-import org.apache.logging.log4j.LogManager;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Optional;
 
 /**
  * An execution operator is handled by a certain platform.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/InputSlot.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/InputSlot.java
index 6713f48..e846e3e 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/InputSlot.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/InputSlot.java
@@ -18,9 +18,8 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.apache.wayang.core.types.DataSetType;
-
 import java.util.List;
+import org.apache.wayang.core.types.DataSetType;
 
 /**
  * An input slot declares an input of an {@link Operator}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopHeadAlternative.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopHeadAlternative.java
index 70d9854..cd1adfb 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopHeadAlternative.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopHeadAlternative.java
@@ -18,15 +18,14 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
+import java.util.Collection;
+import java.util.Objects;
+import java.util.stream.Collectors;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityPusher;
 import org.apache.wayang.core.optimizer.cardinality.LoopHeadAlternativeCardinalityPusher;
 import org.apache.wayang.core.util.WayangCollections;
 
-import java.util.Collection;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
 /**
  * Special {@link OperatorAlternative} for {@link LoopHeadOperator}s.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopHeadOperator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopHeadOperator.java
index 5db5c24..63d0bc6 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopHeadOperator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopHeadOperator.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
+import java.util.Collection;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityPusher;
 import org.apache.wayang.core.optimizer.cardinality.DefaultCardinalityPusher;
 
-import java.util.Collection;
-
 /**
  * Head of a {@link LoopSubplan}.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopIsolator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopIsolator.java
index e497c08..d8dcf7f 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopIsolator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopIsolator.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.util.OneTimeExecutable;
-import org.apache.logging.log4j.LogManager;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
+import org.apache.commons.lang3.Validate;
+import org.apache.logging.log4j.LogManager;
+import org.apache.wayang.core.util.OneTimeExecutable;
 
 /**
  * Goes over a {@link WayangPlan} and isolates its loops.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopSubplan.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopSubplan.java
index 079d071..a86790c 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopSubplan.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/LoopSubplan.java
@@ -18,15 +18,14 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityPusher;
 import org.apache.wayang.core.optimizer.cardinality.LoopSubplanCardinalityPusher;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Wraps a loop of {@link Operator}s.
  *
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/Operator.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/Operator.java
index 5095342..de856eb 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/Operator.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/Operator.java
@@ -18,14 +18,6 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.optimizer.OptimizationContext;
-import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
-import org.apache.wayang.core.optimizer.cardinality.CardinalityPusher;
-import org.apache.wayang.core.optimizer.cardinality.DefaultCardinalityPusher;
-import org.apache.wayang.core.platform.Platform;
-
 import java.lang.reflect.Field;
 import java.util.Arrays;
 import java.util.Collection;
@@ -36,6 +28,13 @@
 import java.util.Queue;
 import java.util.Set;
 import java.util.stream.Collectors;
+import org.apache.commons.lang3.Validate;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
+import org.apache.wayang.core.optimizer.cardinality.CardinalityPusher;
+import org.apache.wayang.core.optimizer.cardinality.DefaultCardinalityPusher;
+import org.apache.wayang.core.platform.Platform;
 
 /**
  * An operator is any node that within a {@link WayangPlan}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorAlternative.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorAlternative.java
index babad5d..aff41f8 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorAlternative.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorAlternative.java
@@ -18,12 +18,6 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.optimizer.OptimizationContext;
-import org.apache.wayang.core.optimizer.cardinality.CardinalityPusher;
-import org.apache.wayang.core.optimizer.cardinality.OperatorAlternativeCardinalityPusher;
-import org.apache.wayang.core.util.WayangCollections;
-
 import java.util.Collection;
 import java.util.Collections;
 import java.util.LinkedList;
@@ -31,6 +25,11 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.apache.wayang.core.optimizer.cardinality.CardinalityPusher;
+import org.apache.wayang.core.optimizer.cardinality.OperatorAlternativeCardinalityPusher;
+import org.apache.wayang.core.util.WayangCollections;
 
 /**
  * This operator encapsulates operators that are alternative to each other.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorBase.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorBase.java
index e351b49..e3d662c 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorBase.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorBase.java
@@ -26,6 +26,13 @@
 import com.google.gson.JsonParseException;
 import com.google.gson.JsonSerializationContext;
 import com.google.gson.JsonSerializer;
+import java.lang.reflect.Type;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.function.Supplier;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.function.FlatMapDescriptor;
 import org.apache.wayang.core.function.FunctionDescriptor;
@@ -39,14 +46,6 @@
 import org.apache.wayang.core.types.DataSetType;
 import org.apache.wayang.core.util.Tuple;
 
-import java.lang.reflect.Type;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.function.Supplier;
-
 /**
  * Helper class for the implementation of the {@link Operator} interface.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorContainer.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorContainer.java
index 38e86dd..d9d6087 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorContainer.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorContainer.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.apache.wayang.core.optimizer.OptimizationContext;
-import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
-import org.apache.wayang.core.util.WayangCollections;
-import org.apache.logging.log4j.LogManager;
-
 import java.util.Collection;
 import java.util.Collections;
 import java.util.stream.Collectors;
+import org.apache.logging.log4j.LogManager;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
+import org.apache.wayang.core.util.WayangCollections;
 
 /**
  * This is not an {@link Operator} in its own right. However, it contains a set of operators and can redirect
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorContainers.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorContainers.java
index becd0a3..4e0d0c4 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorContainers.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OperatorContainers.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.apache.commons.lang3.Validate;
-
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.stream.Stream;
+import org.apache.commons.lang3.Validate;
 
 /**
  * Utilities to deal with {@link OperatorContainer}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OutputSlot.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OutputSlot.java
index b9a0b91..c9f3762 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OutputSlot.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/OutputSlot.java
@@ -18,8 +18,6 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.apache.wayang.core.types.DataSetType;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.LinkedList;
@@ -29,6 +27,7 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import org.apache.wayang.core.types.DataSetType;
 
 /**
  * An output slot declares an output of an {@link Operator}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/PlanTraversal.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/PlanTraversal.java
index f289e5e..317ebc0 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/PlanTraversal.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/PlanTraversal.java
@@ -18,9 +18,6 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.HashSet;
@@ -28,6 +25,8 @@
 import java.util.function.Predicate;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 /**
  * Traverse a plan. In each instance, every operator will be traversed only once.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/Slot.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/Slot.java
index 93f1488..09bb233 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/Slot.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/Slot.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
+import java.util.Collection;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Collection;
-
 /**
  * Abstract class for inputs and outputs to operators.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/SlotMapping.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/SlotMapping.java
index 48a1e8a..64bcd93 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/SlotMapping.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/SlotMapping.java
@@ -18,18 +18,16 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import java.util.Map.Entry;
-import org.apache.wayang.core.util.WayangCollections;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.LinkedList;
 import java.util.Map;
-import java.util.stream.Collectors;
+import java.util.Map.Entry;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.core.util.WayangCollections;
 
 /**
  * This mapping can be used to encapsulate subplans by connecting slots (usually <b>against</b> the data flow direction,
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/Subplan.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/Subplan.java
index 4954f37..a599229 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/Subplan.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/Subplan.java
@@ -18,12 +18,6 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.optimizer.OptimizationContext;
-import org.apache.wayang.core.optimizer.cardinality.CardinalityPusher;
-import org.apache.wayang.core.optimizer.cardinality.SubplanCardinalityPusher;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -32,6 +26,11 @@
 import java.util.Set;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import org.apache.commons.lang3.Validate;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.apache.wayang.core.optimizer.cardinality.CardinalityPusher;
+import org.apache.wayang.core.optimizer.cardinality.SubplanCardinalityPusher;
 
 /**
  * A subplan encapsulates connected operators as a single operator.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/WayangPlan.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/WayangPlan.java
index 649a121..8ec78fc 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/WayangPlan.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/WayangPlan.java
@@ -18,19 +18,18 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.api.exception.WayangException;
-import org.apache.wayang.core.mapping.PlanTransformation;
-import org.apache.wayang.core.optimizer.SanityChecker;
-import org.apache.wayang.core.util.WayangCollections;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.Set;
+import org.apache.commons.lang3.Validate;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.core.api.exception.WayangException;
+import org.apache.wayang.core.mapping.PlanTransformation;
+import org.apache.wayang.core.optimizer.SanityChecker;
+import org.apache.wayang.core.util.WayangCollections;
 
 /**
  * A Wayang plan consists of a set of {@link Operator}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/traversal/AbstractTopologicalTraversal.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/traversal/AbstractTopologicalTraversal.java
index 10ba588..e08c77c 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/traversal/AbstractTopologicalTraversal.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plan/wayangplan/traversal/AbstractTopologicalTraversal.java
@@ -18,17 +18,16 @@
 
 package org.apache.wayang.core.plan.wayangplan.traversal;
 
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Queue;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.exception.WayangException;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.plan.wayangplan.WayangPlan;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Queue;
 
 /**
  * Encapsulates logic to traverse a {@link WayangPlan} in a topological, bottom-up manner.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/AbstractChannelInstance.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/AbstractChannelInstance.java
index a45b565..878609b 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/AbstractChannelInstance.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/AbstractChannelInstance.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.platform;
 
+import java.util.OptionalLong;
+import org.apache.logging.log4j.LogManager;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.executionplan.ExecutionTask;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 import org.apache.wayang.core.platform.lineage.ChannelLineageNode;
-import org.apache.logging.log4j.LogManager;
-
-import java.util.OptionalLong;
 
 /**
  * Template for {@link ChannelInstance} implementations.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/AtomicExecutionGroup.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/AtomicExecutionGroup.java
index 1f8ba8a..a98d7ee 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/AtomicExecutionGroup.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/AtomicExecutionGroup.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.core.platform;
 
+import java.util.Collection;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.costs.EstimationContext;
 import org.apache.wayang.core.optimizer.costs.LoadProfile;
@@ -26,8 +27,6 @@
 import org.apache.wayang.core.optimizer.costs.TimeEstimate;
 import org.apache.wayang.core.util.JsonSerializables;
 import org.apache.wayang.core.util.JsonSerializer;
-
-import java.util.Collection;
 import org.apache.wayang.core.util.json.JSONObject;
 
 /**
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/CardinalityBreakpoint.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/CardinalityBreakpoint.java
index a80ffdc..f932ff2 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/CardinalityBreakpoint.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/CardinalityBreakpoint.java
@@ -19,6 +19,8 @@
 package org.apache.wayang.core.platform;
 
 import org.apache.commons.lang3.Validate;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
@@ -27,8 +29,6 @@
 import org.apache.wayang.core.plan.wayangplan.InputSlot;
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
 import org.apache.wayang.core.plan.wayangplan.Slot;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
 
 /**
  * {@link Breakpoint} implementation that is based on the {@link CardinalityEstimate}s of {@link Channel}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ChannelDescriptor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ChannelDescriptor.java
index 618609c..abb069d 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ChannelDescriptor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ChannelDescriptor.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.platform;
 
+import java.lang.reflect.Constructor;
+import java.util.Objects;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.plan.executionplan.Channel;
 import org.apache.wayang.core.plan.executionplan.ExecutionStage;
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
 
-import java.lang.reflect.Constructor;
-import java.util.Objects;
-
 /**
  * Describes a certain {@link Channel} type including further parameters.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ChannelInstance.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ChannelInstance.java
index b5a6fd5..787aed8 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ChannelInstance.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ChannelInstance.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.platform;
 
+import java.util.OptionalLong;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.executionplan.Channel;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 import org.apache.wayang.core.platform.lineage.ChannelLineageNode;
 
-import java.util.OptionalLong;
-
 /**
  * Represents the actual, allocated resource represented by {@link Channel}.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ConjunctiveBreakpoint.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ConjunctiveBreakpoint.java
index 6c35138..3c88d00 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ConjunctiveBreakpoint.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ConjunctiveBreakpoint.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.platform;
 
-import org.apache.wayang.core.optimizer.OptimizationContext;
-import org.apache.wayang.core.plan.executionplan.ExecutionStage;
-
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Objects;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.apache.wayang.core.plan.executionplan.ExecutionStage;
 
 /**
  * {@link Breakpoint} implementation that disrupts execution if all aggregated {@link Breakpoint}s request a disruption.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/CrossPlatformExecutor.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/CrossPlatformExecutor.java
index 1f539bd..8c96ac0 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/CrossPlatformExecutor.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/CrossPlatformExecutor.java
@@ -18,6 +18,18 @@
 
 package org.apache.wayang.core.platform;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Map;
+import java.util.Queue;
+import java.util.Set;
+import java.util.function.Supplier;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.Job;
 import org.apache.wayang.core.optimizer.OptimizationContext;
@@ -33,19 +45,8 @@
 import org.apache.wayang.core.profiling.InstrumentationStrategy;
 import org.apache.wayang.core.util.AbstractReferenceCountable;
 import org.apache.wayang.core.util.Formats;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.Map;
-import java.util.Queue;
-import java.util.Set;
-import java.util.function.Supplier;
+;
 
 /**
  * Executes a (cross-platform) {@link ExecutionPlan}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ExecutionState.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ExecutionState.java
index 3cd987e..5301da3 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ExecutionState.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ExecutionState.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.core.platform;
 
+import java.util.Collection;
 import org.apache.wayang.core.optimizer.enumeration.ExecutionTaskFlow;
 import org.apache.wayang.core.plan.executionplan.Channel;
 
-import java.util.Collection;
-
 /**
  * Contains a state of the execution of an {@link ExecutionTaskFlow}.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ExecutorTemplate.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ExecutorTemplate.java
index dd49737..699ee5d 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ExecutorTemplate.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/ExecutorTemplate.java
@@ -18,6 +18,14 @@
 
 package org.apache.wayang.core.platform;
 
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.OptionalLong;
+import java.util.Set;
+import java.util.concurrent.atomic.AtomicInteger;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
@@ -25,15 +33,6 @@
 import org.apache.wayang.core.plan.executionplan.ExecutionStageLoop;
 import org.apache.wayang.core.platform.lineage.ExecutionLineageNode;
 import org.apache.wayang.core.util.AbstractReferenceCountable;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.OptionalLong;
-import java.util.Set;
-import java.util.concurrent.atomic.AtomicInteger;
 
 /**
  * Implements the {@link ExecutionResource} handling as defined by {@link Executor}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/FixBreakpoint.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/FixBreakpoint.java
index f6fb93d..35b6a6b 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/FixBreakpoint.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/FixBreakpoint.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.platform;
 
-import org.apache.wayang.core.optimizer.OptimizationContext;
-import org.apache.wayang.core.plan.executionplan.ExecutionPlan;
-import org.apache.wayang.core.plan.executionplan.ExecutionStage;
-
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.apache.wayang.core.plan.executionplan.ExecutionPlan;
+import org.apache.wayang.core.plan.executionplan.ExecutionStage;
 
 /**
  * Describes when to interrupt the execution of an {@link ExecutionPlan}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/Junction.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/Junction.java
index b590443..159bd91 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/Junction.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/Junction.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.core.platform;
 
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
 import org.apache.wayang.core.optimizer.costs.TimeEstimate;
@@ -27,12 +32,6 @@
 import org.apache.wayang.core.plan.wayangplan.InputSlot;
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
 import org.apache.wayang.core.util.WayangCollections;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
 
 /**
  * Describes the implementation of one {@link OutputSlot} to its occupied {@link InputSlot}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/PartialExecution.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/PartialExecution.java
index ef3a8f1..9d2ab9d 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/PartialExecution.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/PartialExecution.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.core.platform;
 
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.Set;
+import java.util.stream.Collectors;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.optimizer.ProbabilisticDoubleInterval;
@@ -28,11 +32,6 @@
 import org.apache.wayang.core.platform.lineage.ExecutionLineageNode;
 import org.apache.wayang.core.util.JsonSerializables;
 import org.apache.wayang.core.util.JsonSerializer;
-
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.Set;
-import java.util.stream.Collectors;
 import org.apache.wayang.core.util.json.JSONObject;
 
 /**
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/PushExecutorTemplate.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/PushExecutorTemplate.java
index f46ae71..5cb335b 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/PushExecutorTemplate.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/PushExecutorTemplate.java
@@ -18,18 +18,6 @@
 
 package org.apache.wayang.core.platform;
 
-import org.apache.wayang.core.api.Job;
-import org.apache.wayang.core.optimizer.OptimizationContext;
-import org.apache.wayang.core.plan.executionplan.Channel;
-import org.apache.wayang.core.plan.executionplan.ExecutionStage;
-import org.apache.wayang.core.plan.executionplan.ExecutionTask;
-import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
-import org.apache.wayang.core.plan.wayangplan.InputSlot;
-import org.apache.wayang.core.plan.wayangplan.LoopHeadOperator;
-import org.apache.wayang.core.util.OneTimeExecutable;
-import org.apache.wayang.core.util.WayangCollections;
-import org.apache.wayang.core.util.Tuple;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -39,6 +27,17 @@
 import java.util.Objects;
 import java.util.Queue;
 import java.util.Set;
+import org.apache.wayang.core.api.Job;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.apache.wayang.core.plan.executionplan.Channel;
+import org.apache.wayang.core.plan.executionplan.ExecutionStage;
+import org.apache.wayang.core.plan.executionplan.ExecutionTask;
+import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
+import org.apache.wayang.core.plan.wayangplan.InputSlot;
+import org.apache.wayang.core.plan.wayangplan.LoopHeadOperator;
+import org.apache.wayang.core.util.OneTimeExecutable;
+import org.apache.wayang.core.util.Tuple;
+import org.apache.wayang.core.util.WayangCollections;
 
 /**
  * {@link Executor} implementation that employs a push model, i.e., data quanta are "pushed"
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/lineage/ExecutionLineageNode.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/lineage/ExecutionLineageNode.java
index 7d91f7a..39446ec 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/lineage/ExecutionLineageNode.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/lineage/ExecutionLineageNode.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.platform.lineage;
 
+import java.util.Collection;
+import java.util.LinkedList;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.optimizer.costs.LoadProfileEstimator;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 import org.apache.wayang.core.platform.AtomicExecution;
 
-import java.util.Collection;
-import java.util.LinkedList;
-
 /**
  * Encapsulates {@link AtomicExecution}s with a common {@link OptimizationContext.OperatorContext} in a lazy execution lineage.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/lineage/LazyExecutionLineageNode.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/lineage/LazyExecutionLineageNode.java
index ef3f6fc..6359a20 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/lineage/LazyExecutionLineageNode.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/platform/lineage/LazyExecutionLineageNode.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.platform.lineage;
 
-import org.apache.wayang.core.platform.ChannelInstance;
-import org.apache.wayang.core.util.Tuple;
-import org.apache.logging.log4j.LogManager;
-
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.LinkedList;
+import org.apache.logging.log4j.LogManager;
+import org.apache.wayang.core.platform.ChannelInstance;
+import org.apache.wayang.core.util.Tuple;
 
 /**
  * A node wraps a {@link ChannelInstance} and keeps track of predecessor nodes.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plugin/DynamicPlugin.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plugin/DynamicPlugin.java
index c0d7695..a4ca0a9 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plugin/DynamicPlugin.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plugin/DynamicPlugin.java
@@ -18,17 +18,6 @@
 
 package org.apache.wayang.core.plugin;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.api.exception.WayangException;
-import org.apache.wayang.core.mapping.Mapping;
-import org.apache.wayang.core.optimizer.channels.ChannelConversion;
-import org.apache.wayang.core.platform.Platform;
-import org.apache.wayang.core.util.ReflectionUtils;
-import org.apache.wayang.core.util.fs.FileSystem;
-import org.apache.wayang.core.util.fs.FileSystems;
-import org.yaml.snakeyaml.Yaml;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Collection;
@@ -39,6 +28,16 @@
 import java.util.Objects;
 import java.util.Set;
 import java.util.function.Consumer;
+import org.apache.commons.lang3.Validate;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.api.exception.WayangException;
+import org.apache.wayang.core.mapping.Mapping;
+import org.apache.wayang.core.optimizer.channels.ChannelConversion;
+import org.apache.wayang.core.platform.Platform;
+import org.apache.wayang.core.util.ReflectionUtils;
+import org.apache.wayang.core.util.fs.FileSystem;
+import org.apache.wayang.core.util.fs.FileSystems;
+import org.yaml.snakeyaml.Yaml;
 
 /**
  * This {@link Plugin} can be arbitrarily customized.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plugin/Plugin.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plugin/Plugin.java
index a714588..4fdfc3c 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plugin/Plugin.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plugin/Plugin.java
@@ -18,15 +18,14 @@
 
 package org.apache.wayang.core.plugin;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.WayangContext;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.optimizer.channels.ChannelConversion;
 import org.apache.wayang.core.platform.Platform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * A plugin contributes the following components to a {@link WayangContext}:
  * <ul>
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/CardinalityRepository.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/CardinalityRepository.java
index 3418ba0..9814bc0 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/CardinalityRepository.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/CardinalityRepository.java
@@ -18,7 +18,16 @@
 
 package org.apache.wayang.core.profiling;
 
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
 import org.apache.commons.io.IOUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.exception.WayangException;
 import org.apache.wayang.core.optimizer.OptimizationContext;
@@ -29,16 +38,6 @@
 import org.apache.wayang.core.plan.wayangplan.Slot;
 import org.apache.wayang.core.platform.CrossPlatformExecutor;
 import org.apache.wayang.core.platform.ExecutionState;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.io.UnsupportedEncodingException;
 import org.apache.wayang.core.util.json.JSONArray;
 import org.apache.wayang.core.util.json.JSONObject;
 
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/ExecutionLog.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/ExecutionLog.java
index ce1a3d8..6e275f0 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/ExecutionLog.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/ExecutionLog.java
@@ -18,16 +18,6 @@
 
 package org.apache.wayang.core.profiling;
 
-import org.apache.commons.io.IOUtils;
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.api.exception.WayangException;
-import org.apache.wayang.core.platform.CrossPlatformExecutor;
-import org.apache.wayang.core.platform.PartialExecution;
-import org.apache.wayang.core.util.JsonSerializables;
-import org.apache.wayang.core.util.JsonSerializer;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.io.BufferedWriter;
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -39,6 +29,15 @@
 import java.nio.file.Files;
 import java.nio.file.Paths;
 import java.util.stream.Stream;
+import org.apache.commons.io.IOUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.api.exception.WayangException;
+import org.apache.wayang.core.platform.CrossPlatformExecutor;
+import org.apache.wayang.core.platform.PartialExecution;
+import org.apache.wayang.core.util.JsonSerializables;
+import org.apache.wayang.core.util.JsonSerializer;
 import org.apache.wayang.core.util.json.JSONObject;
 
 /**
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/ExecutionPlanMeasurement.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/ExecutionPlanMeasurement.java
index 1459d15..9614df8 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/ExecutionPlanMeasurement.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/ExecutionPlanMeasurement.java
@@ -19,6 +19,11 @@
 package org.apache.wayang.core.profiling;
 
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import org.apache.wayang.commons.util.profiledb.model.Measurement;
 import org.apache.wayang.commons.util.profiledb.model.Type;
 import org.apache.wayang.core.plan.executionplan.Channel;
@@ -26,12 +31,6 @@
 import org.apache.wayang.core.plan.executionplan.ExecutionTask;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
 /**
  * This {@link Measurement} encapsulates an {@link ExecutionPlan}.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/FullInstrumentationStrategy.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/FullInstrumentationStrategy.java
index a90cb0d..d90dd90 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/FullInstrumentationStrategy.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/profiling/FullInstrumentationStrategy.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.core.profiling;
 
+import java.util.Arrays;
 import org.apache.wayang.core.plan.executionplan.Channel;
 import org.apache.wayang.core.plan.executionplan.ExecutionStage;
 
-import java.util.Arrays;
-
 /**
  * Instruments only outbound {@link Channel}s.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/types/DataSetType.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/types/DataSetType.java
index cc409a8..66ff893 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/types/DataSetType.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/types/DataSetType.java
@@ -18,9 +18,8 @@
 
 package org.apache.wayang.core.types;
 
-import org.apache.wayang.core.util.ReflectionUtils;
-
 import java.util.Objects;
+import org.apache.wayang.core.util.ReflectionUtils;
 
 /**
  * A data set is an abstraction of the Wayang programming model. Although never directly materialized, a data set
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/types/DataUnitGroupType.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/types/DataUnitGroupType.java
index af8904e..39f9992 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/types/DataUnitGroupType.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/types/DataUnitGroupType.java
@@ -18,9 +18,8 @@
 
 package org.apache.wayang.core.types;
 
-import org.apache.wayang.core.util.ReflectionUtils;
-
 import java.util.Objects;
+import org.apache.wayang.core.util.ReflectionUtils;
 
 /**
  * A grouped data unit type describes just the structure of data units within a grouped dataset.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/JsonSerializable.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/JsonSerializable.java
index dba692e..7018401 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/JsonSerializable.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/JsonSerializable.java
@@ -18,10 +18,9 @@
 
 package org.apache.wayang.core.util;
 
-import org.apache.wayang.core.api.exception.WayangException;
-
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import org.apache.wayang.core.api.exception.WayangException;
 import org.apache.wayang.core.util.json.JSONObject;
 
 /**
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/JsonSerializables.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/JsonSerializables.java
index b164eac..fe1be2f 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/JsonSerializables.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/JsonSerializables.java
@@ -18,12 +18,10 @@
 
 package org.apache.wayang.core.util;
 
-import org.apache.commons.lang3.SerializationException;
-
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
+import org.apache.commons.lang3.SerializationException;
 import org.apache.wayang.core.util.json.JSONArray;
 import org.apache.wayang.core.util.json.JSONObject;
 
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/JuelUtils.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/JuelUtils.java
index 0ed45ad..c59c055 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/JuelUtils.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/JuelUtils.java
@@ -21,13 +21,12 @@
 import de.odysseus.el.ExpressionFactoryImpl;
 import de.odysseus.el.TreeValueExpression;
 import de.odysseus.el.util.SimpleContext;
-import org.apache.wayang.core.api.exception.WayangException;
-import org.apache.wayang.core.optimizer.OptimizationUtils;
-import org.apache.logging.log4j.LogManager;
-
-import javax.el.ValueExpression;
 import java.util.HashMap;
 import java.util.Map;
+import javax.el.ValueExpression;
+import org.apache.logging.log4j.LogManager;
+import org.apache.wayang.core.api.exception.WayangException;
+import org.apache.wayang.core.optimizer.OptimizationUtils;
 
 /**
  * Utilities to deal with JUEL expressions.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/LruCache.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/LruCache.java
index 0b87241..013486d 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/LruCache.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/LruCache.java
@@ -18,10 +18,9 @@
 
 package org.apache.wayang.core.util;
 
-import org.apache.commons.lang3.Validate;
-
 import java.util.LinkedHashMap;
 import java.util.Map;
+import org.apache.commons.lang3.Validate;
 
 /**
  * Key-value cache with "least recently used" eviction strategy.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/ReflectionUtils.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/ReflectionUtils.java
index c470778..f9871dd 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/ReflectionUtils.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/ReflectionUtils.java
@@ -18,11 +18,6 @@
 
 package org.apache.wayang.core.util;
 
-import org.apache.commons.lang3.Validate;
-import org.apache.wayang.core.api.exception.WayangException;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;;
-
 import java.io.InputStream;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
@@ -46,6 +41,12 @@
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
+import org.apache.commons.lang3.Validate;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.core.api.exception.WayangException;
+
+;
 
 /**
  * Utilities for reflection code.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/WayangCollections.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/WayangCollections.java
index 5b3e891..d0a2d91 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/WayangCollections.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/WayangCollections.java
@@ -18,8 +18,6 @@
 
 package org.apache.wayang.core.util;
 
-import org.apache.commons.lang3.Validate;
-
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -33,6 +31,7 @@
 import java.util.function.BiFunction;
 import java.util.function.Function;
 import java.util.function.Supplier;
+import org.apache.commons.lang3.Validate;
 
 /**
  * Utilities to operate {@link java.util.Collection}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/FileSystems.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/FileSystems.java
index 21ae249..01513f1 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/FileSystems.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/FileSystems.java
@@ -18,11 +18,6 @@
 
 package org.apache.wayang.core.util.fs;
 
-import org.apache.wayang.core.api.exception.WayangException;
-import org.apache.wayang.core.util.LruCache;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.io.FileNotFoundException;
 import java.util.Arrays;
 import java.util.Collection;
@@ -30,6 +25,10 @@
 import java.util.Optional;
 import java.util.OptionalLong;
 import java.util.stream.Collectors;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.core.api.exception.WayangException;
+import org.apache.wayang.core.util.LruCache;
 
 /**
  * Tool to work with {@link FileSystem}s.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/FileUtils.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/FileUtils.java
index 85cc0da..b8dfc8d 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/FileUtils.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/FileUtils.java
@@ -18,9 +18,6 @@
 
 package org.apache.wayang.core.util.fs;
 
-import org.apache.commons.io.IOUtils;
-import org.apache.wayang.core.api.exception.WayangException;
-
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
@@ -29,6 +26,8 @@
 import java.util.Spliterators;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
+import org.apache.commons.io.IOUtils;
+import org.apache.wayang.core.api.exception.WayangException;
 
 public class FileUtils {
 
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/HadoopFileSystem.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/HadoopFileSystem.java
index 735251e..a280af9 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/HadoopFileSystem.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/HadoopFileSystem.java
@@ -18,14 +18,6 @@
 
 package org.apache.wayang.core.util.fs;
 
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FileStatus;
-import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
-import org.apache.hadoop.fs.Path;
-import org.apache.wayang.core.api.exception.WayangException;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
@@ -36,6 +28,13 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.stream.Collectors;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FileStatus;
+import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
+import org.apache.hadoop.fs.Path;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.core.api.exception.WayangException;
 
 /**
  * {@link FileSystem} immplementation for the HDFS.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/LocalFileSystem.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/LocalFileSystem.java
index ff4c24a..cf962ad 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/LocalFileSystem.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/fs/LocalFileSystem.java
@@ -18,10 +18,6 @@
 
 package org.apache.wayang.core.util.fs;
 
-import org.apache.wayang.core.api.exception.WayangException;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -36,6 +32,9 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.stream.Collectors;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.apache.wayang.core.api.exception.WayangException;
 
 /**
  * {@link FileSystem} implementation for the local file system.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/Context.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/Context.java
index bd01fa5..1fbfdc3 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/Context.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/Context.java
@@ -18,9 +18,8 @@
 
 package org.apache.wayang.core.util.mathex;
 
-import org.apache.wayang.core.util.mathex.exceptions.EvaluationException;
-
 import java.util.function.ToDoubleFunction;
+import org.apache.wayang.core.util.mathex.exceptions.EvaluationException;
 
 /**
  * Provides contextual variables and functions in order to evaluate an {@link Expression}.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/DefaultContext.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/DefaultContext.java
index 0bea52c..41b8237 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/DefaultContext.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/DefaultContext.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.core.util.mathex;
 
-import org.apache.wayang.core.util.mathex.exceptions.EvaluationException;
-
 import java.util.HashMap;
 import java.util.Map;
 import java.util.function.ToDoubleFunction;
+import org.apache.wayang.core.util.mathex.exceptions.EvaluationException;
 
 /**
  * Default {@link Context} implementation that can be configured.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/ExpressionBuilder.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/ExpressionBuilder.java
index 6170be4..e95d804 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/ExpressionBuilder.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/ExpressionBuilder.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.core.util.mathex;
 
+import java.util.List;
+import java.util.stream.Collectors;
 import org.antlr.v4.runtime.ANTLRInputStream;
 import org.antlr.v4.runtime.BaseErrorListener;
 import org.antlr.v4.runtime.CommonTokenStream;
@@ -33,9 +35,6 @@
 import org.apache.wayang.core.util.mathex.model.UnaryOperation;
 import org.apache.wayang.core.util.mathex.model.Variable;
 
-import java.util.List;
-import java.util.stream.Collectors;
-
 /**
  * This utility builds {@link Expression}s from an input {@link String}.
  */
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/model/CompiledFunction.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/model/CompiledFunction.java
index 11455ab..06a15ac 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/model/CompiledFunction.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/model/CompiledFunction.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.util.mathex.model;
 
-import org.apache.wayang.core.util.mathex.Context;
-import org.apache.wayang.core.util.mathex.Expression;
-
 import java.util.ArrayList;
 import java.util.List;
 import java.util.function.ToDoubleFunction;
 import java.util.stream.Collectors;
+import org.apache.wayang.core.util.mathex.Context;
+import org.apache.wayang.core.util.mathex.Expression;
 
 /**
  * {@link Expression} implementation that represents a function with a static implementation.
diff --git a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/model/NamedFunction.java b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/model/NamedFunction.java
index 9c26eb4..b27e5f3 100644
--- a/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/model/NamedFunction.java
+++ b/wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/util/mathex/model/NamedFunction.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.util.mathex.model;
 
-import org.apache.wayang.core.util.mathex.Context;
-import org.apache.wayang.core.util.mathex.Expression;
-import org.apache.wayang.core.util.mathex.exceptions.EvaluationException;
-
 import java.util.List;
 import java.util.function.ToDoubleFunction;
 import java.util.stream.Collectors;
+import org.apache.wayang.core.util.mathex.Context;
+import org.apache.wayang.core.util.mathex.Expression;
+import org.apache.wayang.core.util.mathex.exceptions.EvaluationException;
 
 /**
  * {@link Expression} implementation that represents a function that is identified
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/SlotTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/SlotTest.java
index ebc8e8a..6f4b3ca 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/SlotTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/SlotTest.java
@@ -18,13 +18,13 @@
 
 package org.apache.wayang.core;
 
-import org.junit.Test;
 import org.apache.wayang.core.plan.wayangplan.Slot;
 import org.apache.wayang.core.plan.wayangplan.test.TestSink;
 import org.apache.wayang.core.plan.wayangplan.test.TestSource;
 import org.apache.wayang.core.test.TestDataUnit;
 import org.apache.wayang.core.test.TestDataUnit2;
 import org.apache.wayang.core.types.DataSetType;
+import org.junit.Test;
 
 /**
  * Test suite for {@link Slot}s.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/OperatorPatternTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/OperatorPatternTest.java
index 1cc7101..2000d43 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/OperatorPatternTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/OperatorPatternTest.java
@@ -18,9 +18,9 @@
 
 package org.apache.wayang.core.mapping;
 
+import org.apache.wayang.core.test.DummyExecutionOperator;
 import org.junit.Assert;
 import org.junit.Test;
-import org.apache.wayang.core.test.DummyExecutionOperator;
 
 /**
  * Tests for {@link OperatorPattern}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/PlanTransformationTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/PlanTransformationTest.java
index d98cbb8..7457c8a 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/PlanTransformationTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/PlanTransformationTest.java
@@ -18,19 +18,19 @@
 
 package org.apache.wayang.core.mapping;
 
-import org.junit.Assert;
-import org.junit.Test;
 import org.apache.wayang.core.mapping.test.TestSinkToTestSink2Factory;
 import org.apache.wayang.core.plan.wayangplan.Operator;
 import org.apache.wayang.core.plan.wayangplan.OperatorAlternative;
-import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.plan.wayangplan.UnarySink;
 import org.apache.wayang.core.plan.wayangplan.UnarySource;
+import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.plan.wayangplan.test.TestSink;
 import org.apache.wayang.core.plan.wayangplan.test.TestSink2;
 import org.apache.wayang.core.plan.wayangplan.test.TestSource;
 import org.apache.wayang.core.test.TestDataUnit;
 import org.apache.wayang.core.types.DataSetType;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for the {@link org.apache.wayang.core.mapping.PlanTransformation} class.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/SubplanPatternTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/SubplanPatternTest.java
index dec530b..5e84d27 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/SubplanPatternTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/SubplanPatternTest.java
@@ -18,18 +18,17 @@
 
 package org.apache.wayang.core.mapping;
 
-import org.junit.Assert;
-import org.junit.Test;
+import java.util.List;
 import org.apache.wayang.core.plan.wayangplan.Operator;
-import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.plan.wayangplan.UnarySink;
 import org.apache.wayang.core.plan.wayangplan.UnarySource;
+import org.apache.wayang.core.plan.wayangplan.WayangPlan;
 import org.apache.wayang.core.plan.wayangplan.test.TestSink;
 import org.apache.wayang.core.plan.wayangplan.test.TestSource;
 import org.apache.wayang.core.test.TestDataUnit;
 import org.apache.wayang.core.types.DataSetType;
-
-import java.util.List;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for the {@link SubplanPattern}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/test/TestSinkMapping.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/test/TestSinkMapping.java
index 8b57d34..da575e7 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/test/TestSinkMapping.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/mapping/test/TestSinkMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.core.mapping.test;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
 import org.apache.wayang.core.mapping.PlanTransformation;
@@ -28,9 +30,6 @@
 import org.apache.wayang.core.test.DummyPlatform;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Dummy {@link Mapping} implementation from {@link TestSink} to {@link TestSink2}.
  */
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/AggregatingCardinalityEstimatorTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/AggregatingCardinalityEstimatorTest.java
index e72d942..188744b 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/AggregatingCardinalityEstimatorTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/AggregatingCardinalityEstimatorTest.java
@@ -18,16 +18,15 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
-import org.junit.Assert;
-import org.junit.Test;
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.optimizer.OptimizationContext;
-
-import java.util.Arrays;
-
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.util.Arrays;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.junit.Assert;
+import org.junit.Test;
+
 /**
  * Test suite for {@link AggregatingCardinalityEstimator}.
  */
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/DefaultCardinalityEstimatorTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/DefaultCardinalityEstimatorTest.java
index 5ffc3ab..7ec3312 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/DefaultCardinalityEstimatorTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/DefaultCardinalityEstimatorTest.java
@@ -18,16 +18,15 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
-import org.junit.Assert;
-import org.junit.Test;
-import org.apache.wayang.core.api.Configuration;
-import org.apache.wayang.core.optimizer.OptimizationContext;
-
-import java.util.function.ToLongFunction;
-
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
+import java.util.function.ToLongFunction;
+import org.apache.wayang.core.api.Configuration;
+import org.apache.wayang.core.optimizer.OptimizationContext;
+import org.junit.Assert;
+import org.junit.Test;
+
 
 /**
  * Test suite for the {@link DefaultCardinalityEstimator}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/LoopSubplanCardinalityPusherTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/LoopSubplanCardinalityPusherTest.java
index 5a4583e..d50b266 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/LoopSubplanCardinalityPusherTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/LoopSubplanCardinalityPusherTest.java
@@ -18,9 +18,6 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.Job;
 import org.apache.wayang.core.api.configuration.FunctionalKeyValueProvider;
@@ -38,6 +35,9 @@
 import org.apache.wayang.core.plan.wayangplan.test.TestSource;
 import org.apache.wayang.core.test.MockFactory;
 import org.apache.wayang.core.util.WayangCollections;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Test suite for {@link LoopSubplanCardinalityPusher}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/SubplanCardinalityPusherTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/SubplanCardinalityPusherTest.java
index 60b194a..a689a52 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/SubplanCardinalityPusherTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/cardinality/SubplanCardinalityPusherTest.java
@@ -18,9 +18,6 @@
 
 package org.apache.wayang.core.optimizer.cardinality;
 
-import org.junit.Assert;
-import org.junit.Before;
-import org.junit.Test;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.Job;
 import org.apache.wayang.core.api.configuration.FunctionalKeyValueProvider;
@@ -35,6 +32,9 @@
 import org.apache.wayang.core.plan.wayangplan.test.TestSource;
 import org.apache.wayang.core.test.MockFactory;
 import org.apache.wayang.core.types.DataSetType;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
 
 /**
  * Test suite for {@link SubplanCardinalityPusher}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/channels/ChannelConversionGraphTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/channels/ChannelConversionGraphTest.java
index 7013c6c..c08fc14 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/channels/ChannelConversionGraphTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/channels/ChannelConversionGraphTest.java
@@ -18,9 +18,8 @@
 
 package org.apache.wayang.core.optimizer.channels;
 
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import java.util.Arrays;
+import java.util.function.Supplier;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.Job;
 import org.apache.wayang.core.optimizer.DefaultOptimizationContext;
@@ -38,9 +37,9 @@
 import org.apache.wayang.core.test.DummyReusableChannel;
 import org.apache.wayang.core.test.MockFactory;
 import org.apache.wayang.core.util.WayangCollections;
-
-import java.util.Arrays;
-import java.util.function.Supplier;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
 /**
  * Test suite for {@link ChannelConversionGraph}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/costs/NestableLoadProfileEstimatorTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/costs/NestableLoadProfileEstimatorTest.java
index 6295021..20c12c2 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/costs/NestableLoadProfileEstimatorTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/costs/NestableLoadProfileEstimatorTest.java
@@ -19,8 +19,7 @@
 package org.apache.wayang.core.optimizer.costs;
 
 import java.util.HashMap;
-import org.junit.Assert;
-import org.junit.Test;
+import java.util.List;
 import org.apache.wayang.core.optimizer.OptimizationUtils;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimate;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
@@ -28,8 +27,8 @@
 import org.apache.wayang.core.platform.ChannelDescriptor;
 import org.apache.wayang.core.platform.Platform;
 import org.apache.wayang.core.types.DataSetType;
-
-import java.util.List;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Tests for the {@link NestableLoadProfileEstimator}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/enumeration/StageAssignmentTraversalTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/enumeration/StageAssignmentTraversalTest.java
index 9d3d2eb..b0604a3 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/enumeration/StageAssignmentTraversalTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/optimizer/enumeration/StageAssignmentTraversalTest.java
@@ -18,8 +18,7 @@
 
 package org.apache.wayang.core.optimizer.enumeration;
 
-import org.junit.Assert;
-import org.junit.Test;
+import java.util.Collections;
 import org.apache.wayang.core.plan.executionplan.Channel;
 import org.apache.wayang.core.plan.executionplan.ExecutionPlan;
 import org.apache.wayang.core.plan.executionplan.ExecutionStage;
@@ -28,8 +27,8 @@
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 import org.apache.wayang.core.platform.Platform;
 import org.apache.wayang.core.test.MockFactory;
-
-import java.util.Collections;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for {@link StageAssignmentTraversal}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/LoopIsolatorTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/LoopIsolatorTest.java
index 6eae428..546e635 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/LoopIsolatorTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/LoopIsolatorTest.java
@@ -18,15 +18,14 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.junit.Assert;
-import org.junit.Test;
+import java.util.ArrayList;
+import java.util.List;
 import org.apache.wayang.core.plan.wayangplan.test.TestLoopHead;
 import org.apache.wayang.core.plan.wayangplan.test.TestMapOperator;
 import org.apache.wayang.core.plan.wayangplan.test.TestSink;
 import org.apache.wayang.core.plan.wayangplan.test.TestSource;
-
-import java.util.ArrayList;
-import java.util.List;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for the {@link LoopIsolator}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/OperatorTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/OperatorTest.java
index 4018ee1..c2638eb 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/OperatorTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/OperatorTest.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.junit.Assert;
-import org.junit.Test;
+import java.util.Collection;
 import org.apache.wayang.core.util.ReflectionUtils;
 import org.apache.wayang.core.util.WayangCollections;
-
-import java.util.Collection;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for the {@link Operator} class.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/SlotMappingTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/SlotMappingTest.java
index 6659beb..1a8da28 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/SlotMappingTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/SlotMappingTest.java
@@ -18,15 +18,14 @@
 
 package org.apache.wayang.core.plan.wayangplan;
 
-import org.junit.Assert;
-import org.junit.Test;
-import org.apache.wayang.core.plan.wayangplan.test.TestSink;
-import org.apache.wayang.core.plan.wayangplan.test.TestSource;
-import org.apache.wayang.core.types.DataSetType;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import org.apache.wayang.core.plan.wayangplan.test.TestSink;
+import org.apache.wayang.core.plan.wayangplan.test.TestSource;
+import org.apache.wayang.core.types.DataSetType;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for {@link SlotMapping}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestFilterOperator.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestFilterOperator.java
index c05ad58..e524993 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestFilterOperator.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestFilterOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.core.plan.wayangplan.test;
 
+import java.util.Optional;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
 import org.apache.wayang.core.optimizer.cardinality.DefaultCardinalityEstimator;
@@ -25,8 +26,6 @@
 import org.apache.wayang.core.types.DataSetType;
 import org.apache.wayang.core.types.DataUnitType;
 
-import java.util.Optional;
-
 /**
  * Test operator that exposes filter-like behavior.
  */
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestJoin.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestJoin.java
index 6c8424e..f91bd53 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestJoin.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestJoin.java
@@ -19,6 +19,7 @@
 package org.apache.wayang.core.plan.wayangplan.test;
 
 
+import java.util.Optional;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
 import org.apache.wayang.core.optimizer.cardinality.DefaultCardinalityEstimator;
@@ -30,8 +31,6 @@
 import org.apache.wayang.core.types.DataSetType;
 import org.apache.wayang.core.types.DataUnitType;
 
-import java.util.Optional;
-
 /**
  * Join-like operator.
  */
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestLoopHead.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestLoopHead.java
index f938da9..c6f79cc 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestLoopHead.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestLoopHead.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.core.plan.wayangplan.test;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Optional;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
 import org.apache.wayang.core.optimizer.cardinality.SwitchForwardCardinalityEstimator;
@@ -29,10 +32,6 @@
 import org.apache.wayang.core.types.DataSetType;
 import org.apache.wayang.core.types.DataUnitType;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Optional;
-
 /**
  * {@link LoopHeadOperator} implementation for test purposes.
  */
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestMapOperator.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestMapOperator.java
index 216f0a4..3988fe5 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestMapOperator.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestMapOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.core.plan.wayangplan.test;
 
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
@@ -26,8 +27,6 @@
 import org.apache.wayang.core.types.DataSetType;
 import org.apache.wayang.core.types.DataUnitType;
 
-import java.util.Optional;
-
 /**
  * Test operator that exposes map-like behavior.
  */
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestSink.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestSink.java
index e934f31..bfd1dea 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestSink.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestSink.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.core.plan.wayangplan.test;
 
+import java.util.Optional;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
 import org.apache.wayang.core.plan.wayangplan.UnarySink;
 import org.apache.wayang.core.types.DataSetType;
 import org.apache.wayang.core.types.DataUnitType;
 
-import java.util.Optional;
-
 /**
  * Dummy sink for testing purposes.
  */
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestSource.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestSource.java
index 06ea764..a81e922 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestSource.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plan/wayangplan/test/TestSource.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.core.plan.wayangplan.test;
 
+import java.util.Optional;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.cardinality.CardinalityEstimator;
 import org.apache.wayang.core.optimizer.cardinality.FixedSizeCardinalityEstimator;
@@ -25,8 +26,6 @@
 import org.apache.wayang.core.types.DataSetType;
 import org.apache.wayang.core.types.DataUnitType;
 
-import java.util.Optional;
-
 /**
  * Dummy source for testing purposes.
  */
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/platform/PartialExecutionTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/platform/PartialExecutionTest.java
index f39d331..5740114 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/platform/PartialExecutionTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/platform/PartialExecutionTest.java
@@ -18,9 +18,10 @@
 
 package org.apache.wayang.core.platform;
 
-import org.apache.wayang.core.util.json.JSONObject;
-import org.junit.Assert;
-import org.junit.Test;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Arrays;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.configuration.KeyValueProvider;
 import org.apache.wayang.core.optimizer.OptimizationContext;
@@ -33,11 +34,9 @@
 import org.apache.wayang.core.test.SerializableDummyExecutionOperator;
 import org.apache.wayang.core.util.JsonSerializables;
 import org.apache.wayang.core.util.WayangCollections;
-
-import java.util.Arrays;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import org.apache.wayang.core.util.json.JSONObject;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suites for {@link PartialExecution}s.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plugin/DynamicPluginTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plugin/DynamicPluginTest.java
index 6fd6b39..713613a 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plugin/DynamicPluginTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/plugin/DynamicPluginTest.java
@@ -18,8 +18,11 @@
 
 package org.apache.wayang.core.plugin;
 
-import org.junit.Assert;
-import org.junit.Test;
+import static org.mockito.Mockito.mock;
+
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Set;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.test.TestSinkMapping;
@@ -30,12 +33,8 @@
 import org.apache.wayang.core.test.DummyPlatform;
 import org.apache.wayang.core.util.ReflectionUtils;
 import org.apache.wayang.core.util.WayangCollections;
-
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Set;
-
-import static org.mockito.Mockito.mock;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for the {@link DynamicPlugin} class.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/test/DummyExecutionOperator.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/test/DummyExecutionOperator.java
index ae3e7ec..97234de 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/test/DummyExecutionOperator.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/test/DummyExecutionOperator.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.core.test;
 
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 import org.apache.wayang.core.plan.wayangplan.InputSlot;
 import org.apache.wayang.core.plan.wayangplan.OperatorBase;
@@ -26,10 +29,6 @@
 import org.apache.wayang.core.platform.Platform;
 import org.apache.wayang.core.types.DataSetType;
 
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-
 /**
  * Dummy {@link ExecutionOperator} for test purposes.
  */
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/test/MockFactory.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/test/MockFactory.java
index a125d21..fa672c2 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/test/MockFactory.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/test/MockFactory.java
@@ -18,7 +18,10 @@
 
 package org.apache.wayang.core.test;
 
-import org.mockito.Answers;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.Collections;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.Job;
 import org.apache.wayang.core.optimizer.DefaultOptimizationContext;
@@ -29,11 +32,7 @@
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
 import org.apache.wayang.core.platform.Platform;
 import org.apache.wayang.core.types.DataSetType;
-
-import java.util.Collections;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import org.mockito.Answers;
 
 /**
  * Utility to mock Wayang objects.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/ConsumerIteratorAdapterTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/ConsumerIteratorAdapterTest.java
index 5b1faa1..071b139 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/ConsumerIteratorAdapterTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/ConsumerIteratorAdapterTest.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.util;
 
-import org.junit.Assert;
-import org.junit.Test;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
 import java.util.Iterator;
 import java.util.function.Consumer;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for the {@link ConsumerIteratorAdapter}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/CrossProductIterableTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/CrossProductIterableTest.java
index 021d5c8..8f1b124 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/CrossProductIterableTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/CrossProductIterableTest.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.core.util;
 
-import org.junit.Assert;
-import org.junit.Test;
-
 import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
 import java.util.stream.StreamSupport;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for {@link CrossProductIterable}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/LimitedInputStreamTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/LimitedInputStreamTest.java
index f757d79..48dfde5 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/LimitedInputStreamTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/LimitedInputStreamTest.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.core.util;
 
-import org.junit.Assert;
-import org.junit.Test;
-
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for the {@link LimitedInputStream}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/ReflectionUtilsTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/ReflectionUtilsTest.java
index 380b250..f6b53ea 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/ReflectionUtilsTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/ReflectionUtilsTest.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.util;
 
-import org.junit.Assert;
-import org.junit.Test;
-
 import java.lang.reflect.Type;
 import java.util.HashMap;
 import java.util.Map;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for {@link ReflectionUtils}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/WayangCollectionsTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/WayangCollectionsTest.java
index 210e831..b26e192 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/WayangCollectionsTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/WayangCollectionsTest.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.core.util;
 
-import org.junit.Assert;
-import org.junit.Test;
-
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.List;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for {@link WayangCollections}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/mathex/ExpressionBuilderTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/mathex/ExpressionBuilderTest.java
index 05c9a97..b311548 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/mathex/ExpressionBuilderTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/mathex/ExpressionBuilderTest.java
@@ -19,12 +19,11 @@
 package org.apache.wayang.core.util.mathex;
 
 
-import org.junit.Assert;
-import org.junit.Test;
-import org.apache.wayang.core.util.mathex.exceptions.ParseException;
-
 import java.util.Arrays;
 import java.util.Collection;
+import org.apache.wayang.core.util.mathex.exceptions.ParseException;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for the class {@link ExpressionBuilder}.
diff --git a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/mathex/ExpressionTest.java b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/mathex/ExpressionTest.java
index b2ac236..a789b0b 100644
--- a/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/mathex/ExpressionTest.java
+++ b/wayang-commons/wayang-core/src/test/java/org/apache/wayang/core/util/mathex/ExpressionTest.java
@@ -18,15 +18,14 @@
 
 package org.apache.wayang.core.util.mathex;
 
-import org.junit.Assert;
-import org.junit.Test;
+import java.util.Arrays;
+import java.util.Collection;
 import org.apache.wayang.core.util.mathex.exceptions.EvaluationException;
 import org.apache.wayang.core.util.mathex.model.CompiledFunction;
 import org.apache.wayang.core.util.mathex.model.Constant;
 import org.apache.wayang.core.util.mathex.model.NamedFunction;
-
-import java.util.Arrays;
-import java.util.Collection;
+import org.junit.Assert;
+import org.junit.Test;
 
 /**
  * Test suite for the {@link Expression} subclasses.
diff --git a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/ProfileDB.java b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/ProfileDB.java
index d5550b9..a3ab9ae 100644
--- a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/ProfileDB.java
+++ b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/ProfileDB.java
@@ -20,18 +20,19 @@
 
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.function.Consumer;
 import org.apache.wayang.commons.util.profiledb.json.MeasurementDeserializer;
 import org.apache.wayang.commons.util.profiledb.json.MeasurementSerializer;
 import org.apache.wayang.commons.util.profiledb.model.Experiment;
 import org.apache.wayang.commons.util.profiledb.model.Measurement;
 import org.apache.wayang.commons.util.profiledb.storage.Storage;
 
-import java.io.*;
-import java.util.Collection;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.function.Consumer;
-
 /**
  * This class provides facilities to save and load {@link Experiment}s.
  */
diff --git a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/json/MeasurementDeserializer.java b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/json/MeasurementDeserializer.java
index 4592cf4..3fce0d1 100644
--- a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/json/MeasurementDeserializer.java
+++ b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/json/MeasurementDeserializer.java
@@ -22,11 +22,10 @@
 import com.google.gson.JsonDeserializer;
 import com.google.gson.JsonElement;
 import com.google.gson.JsonParseException;
-import org.apache.wayang.commons.util.profiledb.model.Measurement;
-
 import java.lang.reflect.Type;
 import java.util.HashMap;
 import java.util.Map;
+import org.apache.wayang.commons.util.profiledb.model.Measurement;
 
 /**
  * Custom deserializer for {@link Measurement}s
diff --git a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/json/MeasurementSerializer.java b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/json/MeasurementSerializer.java
index 7691a04..f6341ee 100644
--- a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/json/MeasurementSerializer.java
+++ b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/json/MeasurementSerializer.java
@@ -22,9 +22,8 @@
 import com.google.gson.JsonObject;
 import com.google.gson.JsonSerializationContext;
 import com.google.gson.JsonSerializer;
-import org.apache.wayang.commons.util.profiledb.model.Measurement;
-
 import java.lang.reflect.Type;
+import org.apache.wayang.commons.util.profiledb.model.Measurement;
 
 /**
  * Custom serializer for {@link Measurement}s
diff --git a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/model/measurement/TimeMeasurement.java b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/model/measurement/TimeMeasurement.java
index 821dbde..e7682be 100644
--- a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/model/measurement/TimeMeasurement.java
+++ b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/model/measurement/TimeMeasurement.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.commons.util.profiledb.model.measurement;
 
-import org.apache.wayang.commons.util.profiledb.model.Measurement;
-import org.apache.wayang.commons.util.profiledb.model.Type;
-
 import java.util.Collection;
 import java.util.LinkedList;
+import org.apache.wayang.commons.util.profiledb.model.Measurement;
+import org.apache.wayang.commons.util.profiledb.model.Type;
 
 /**
  * A {@link Measurement} that captures a certain amount of time in milliseconds. Instances can be nested within
diff --git a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/storage/FileStorage.java b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/storage/FileStorage.java
index 663eefc..64e7705 100644
--- a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/storage/FileStorage.java
+++ b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/storage/FileStorage.java
@@ -18,12 +18,14 @@
 
 package org.apache.wayang.commons.util.profiledb.storage;
 
-import org.apache.wayang.commons.util.profiledb.model.Experiment;
-
-import java.io.*;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.net.URI;
 import java.util.Arrays;
 import java.util.Collection;
+import org.apache.wayang.commons.util.profiledb.model.Experiment;
 
 public class FileStorage extends Storage {
 
diff --git a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/storage/JDBCStorage.java b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/storage/JDBCStorage.java
index 3b57add..726112c 100644
--- a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/storage/JDBCStorage.java
+++ b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/storage/JDBCStorage.java
@@ -18,8 +18,6 @@
 
 package org.apache.wayang.commons.util.profiledb.storage;
 
-import org.apache.wayang.commons.util.profiledb.model.Experiment;
-
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -27,6 +25,7 @@
 import java.net.URI;
 import java.util.Arrays;
 import java.util.Collection;
+import org.apache.wayang.commons.util.profiledb.model.Experiment;
 
 public class JDBCStorage extends Storage {
 
diff --git a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/storage/Storage.java b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/storage/Storage.java
index 6102fb8..650dd12 100644
--- a/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/storage/Storage.java
+++ b/wayang-commons/wayang-utils-profile-db/src/main/java/org/apache/wayang/commons/util/profiledb/storage/Storage.java
@@ -19,13 +19,21 @@
 package org.apache.wayang.commons.util.profiledb.storage;
 
 import com.google.gson.Gson;
-import org.apache.wayang.commons.util.profiledb.ProfileDB;
-import org.apache.wayang.commons.util.profiledb.model.Experiment;
-
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Reader;
+import java.io.UnsupportedEncodingException;
+import java.io.Writer;
 import java.net.URI;
 import java.util.Collection;
 import java.util.LinkedList;
+import org.apache.wayang.commons.util.profiledb.ProfileDB;
+import org.apache.wayang.commons.util.profiledb.model.Experiment;
 
 /**
  * Controls how conducted experiments will be persisted and loaded
diff --git a/wayang-commons/wayang-utils-profile-db/src/test/java/org/apache/wayang/commons/util/profiledb/ProfileDBTest.java b/wayang-commons/wayang-utils-profile-db/src/test/java/org/apache/wayang/commons/util/profiledb/ProfileDBTest.java
index 20948b4..e57d881 100644
--- a/wayang-commons/wayang-utils-profile-db/src/test/java/org/apache/wayang/commons/util/profiledb/ProfileDBTest.java
+++ b/wayang-commons/wayang-utils-profile-db/src/test/java/org/apache/wayang/commons/util/profiledb/ProfileDBTest.java
@@ -18,6 +18,17 @@
 
 package org.apache.wayang.commons.util.profiledb;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
 import org.apache.wayang.commons.util.profiledb.measurement.TestMemoryMeasurement;
 import org.apache.wayang.commons.util.profiledb.measurement.TestTimeMeasurement;
 import org.apache.wayang.commons.util.profiledb.model.Experiment;
@@ -27,13 +38,6 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.io.ByteArrayInputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.File;
-import java.io.IOException;
-import java.nio.file.Files;
-import java.util.*;
-
 public class ProfileDBTest {
 
     @Test
diff --git a/wayang-commons/wayang-utils-profile-db/src/test/java/org/apache/wayang/commons/util/profiledb/measurement/TestMemoryMeasurement.java b/wayang-commons/wayang-utils-profile-db/src/test/java/org/apache/wayang/commons/util/profiledb/measurement/TestMemoryMeasurement.java
index be85515..a50abb6 100644
--- a/wayang-commons/wayang-utils-profile-db/src/test/java/org/apache/wayang/commons/util/profiledb/measurement/TestMemoryMeasurement.java
+++ b/wayang-commons/wayang-utils-profile-db/src/test/java/org/apache/wayang/commons/util/profiledb/measurement/TestMemoryMeasurement.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.commons.util.profiledb.measurement;
 
+import java.util.Objects;
 import org.apache.wayang.commons.util.profiledb.model.Measurement;
 import org.apache.wayang.commons.util.profiledb.model.Type;
 
-import java.util.Objects;
-
 /**
  * {@link Measurement} implementation for test purposes.
  */
diff --git a/wayang-commons/wayang-utils-profile-db/src/test/java/org/apache/wayang/commons/util/profiledb/measurement/TestTimeMeasurement.java b/wayang-commons/wayang-utils-profile-db/src/test/java/org/apache/wayang/commons/util/profiledb/measurement/TestTimeMeasurement.java
index addb644..eae47a5 100644
--- a/wayang-commons/wayang-utils-profile-db/src/test/java/org/apache/wayang/commons/util/profiledb/measurement/TestTimeMeasurement.java
+++ b/wayang-commons/wayang-utils-profile-db/src/test/java/org/apache/wayang/commons/util/profiledb/measurement/TestTimeMeasurement.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.commons.util.profiledb.measurement;
 
-import org.apache.wayang.commons.util.profiledb.model.Measurement;
-import org.apache.wayang.commons.util.profiledb.model.Type;
-
 import java.util.Collection;
 import java.util.LinkedList;
 import java.util.Objects;
+import org.apache.wayang.commons.util.profiledb.model.Measurement;
+import org.apache.wayang.commons.util.profiledb.model.Type;
 
 /**
  * {@link Measurement} implementation for test purposes.
diff --git a/wayang-docs/src/main/resources/Gemfile.lock b/wayang-docs/src/main/resources/Gemfile.lock
index 433ff60..b592def 100644
--- a/wayang-docs/src/main/resources/Gemfile.lock
+++ b/wayang-docs/src/main/resources/Gemfile.lock
@@ -68,6 +68,7 @@
     unicode-display_width (1.7.0)
 
 PLATFORMS
+  universal-darwin-19
   universal-darwin-20
   universal-java-1.8
 
@@ -78,4 +79,4 @@
   jekyll-menus
 
 BUNDLED WITH
-   2.2.14
+   2.2.27
diff --git a/wayang-docs/src/main/resources/_data/menus.yml b/wayang-docs/src/main/resources/_data/menus.yml
index c684d4c..f5335f3 100644
--- a/wayang-docs/src/main/resources/_data/menus.yml
+++ b/wayang-docs/src/main/resources/_data/menus.yml
@@ -13,25 +13,25 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 header:
-  - url: /what_is_wayang/
-    title: What is Wayang?
-    identifier: what_wayang
-    weight: 1
+#  - url: /what_is_wayang/
+#    title: What is Wayang?
+#    identifier: what_wayang
+#    weight: 1
 
-  - url: /getting_start/
-    title: Getting Started with Wayang
-    identifier: getting_start
-    weight: 2
+#  - url: /getting_start/
+#    title: Getting Started with Wayang
+#    identifier: getting_start
+#    weight: 2
 
-  - url: /using_wayang/
-    title: Using Wayang
-    identifier: using
-    weight: 3
+#  - url: /using_wayang/
+#    title: Using Wayang
+#    identifier: using
+#    weight: 3
 
-  - url: /extending_wayang/
-    title: Extending Wayang
-    identifier: extending
-    weight: 4
+#  - url: /extending_wayang/
+#    title: Extending Wayang
+#    identifier: extending
+#    weight: 4
 
   - url: /how_contribute/
     title: How To Contribute
@@ -39,53 +39,53 @@
     weight: 5
 
 
-getting_start:
-  - url: /getting_start/how_build/
-    title: How To Build Wayang
-    identifier: build
-    weight: 0
+#getting_start:
+#  - url: /getting_start/how_build/
+#    title: How To Build Wayang
+#    identifier: build
+#    weight: 0
+#
+#  - url: /getting_start/how_install/
+#    title: How To Install Wayang
+#    identifier: install
+#    weight: 1
+#
+#  - url: /getting_start/how_run/
+#    title: How To Run Wayang
+#    identifier: run
+#    weight: 2
+#
+#  - url: /getting_start/writting_wayang_plan/
+#    title: Writting a Wayang Plan
+#    identifier: writting
+#    weight: 3
 
-  - url: /getting_start/how_install/
-    title: How To Install Wayang
-    identifier: install
-    weight: 1
-
-  - url: /getting_start/how_run/
-    title: How To Run Wayang
-    identifier: run
-    weight: 2
-
-  - url: /getting_start/writting_wayang_plan/
-    title: Writting a Wayang Plan
-    identifier: writting
-    weight: 3
-
-using:
-  - url: /using_wayang/api_java_scala/
-    title: API Java/Scala
-    identifier: api_java
-    weight: 0
-
-  - url: /using_wayang/api_python/
-    title: API Python
-    identifier: api_python
-    weight: 1
-
-  - url: /using_wayang/api_rest/
-    title: API REST
-    identifier: api_rest
-    weight: 2
+#using:
+#  - url: /using_wayang/api_java_scala/
+#    title: API Java/Scala
+#    identifier: api_java
+#    weight: 0
+#
+#  - url: /using_wayang/api_python/
+#    title: API Python
+#    identifier: api_python
+#    weight: 1
+#
+#  - url: /using_wayang/api_rest/
+#    title: API REST
+#    identifier: api_rest
+#    weight: 2
 
 #  - url: /using_wayang/api_sql/
 #    title: API SQL
 #    identifier: api_sql
 #    weight: 3
 
-extending:
-  - url: /extending_wayang/adding_platform/
-    title: Adding Platform
-    identifier: platform
-    weight: 0
+#extending:
+#  - url: /extending_wayang/adding_platform/
+#    title: Adding Platform
+#    identifier: platform
+#    weight: 0
 
 contribute:
   - url: /how_contribute/code_changes/
diff --git a/wayang-docs/src/main/resources/how_contribute/bugs_report.md b/wayang-docs/src/main/resources/how_contribute/bugs_report.md
index 32117ff..d3bd5e7 100644
--- a/wayang-docs/src/main/resources/how_contribute/bugs_report.md
+++ b/wayang-docs/src/main/resources/how_contribute/bugs_report.md
@@ -47,4 +47,9 @@
 
 ### Label meaning
 
-TODO: add the label meaning
+Description of error types:
+
+* Functional error: It is a Generic error type that requires further analysis. Happens whenever software does not behave as intended. For example, if the end user clicks the “Save” button, but their entered data isn’t saved, this is a functional error.
+* Logic error: The error represents a mistake in the software flow and causes the software to behave incorrectly. This type of error can cause the program to produce an incorrect output, or even hang or crash.
+* Calculation error: Anytime software returns an incorrect value. There may be used an incorrect algorithm or a data type mismatch during arithmetic operations.
+* Out of bounds error: End user interacts with the software in ways that were not expected. This often occurs when the user sets a parameter outside the limits of intended use.
diff --git a/wayang-docs/src/main/resources/how_contribute/code_changes/preparing_contribute_code_changes/pull_request.md b/wayang-docs/src/main/resources/how_contribute/code_changes/preparing_contribute_code_changes/pull_request.md
index 37f4b5d..b3b253b 100644
--- a/wayang-docs/src/main/resources/how_contribute/code_changes/preparing_contribute_code_changes/pull_request.md
+++ b/wayang-docs/src/main/resources/how_contribute/code_changes/preparing_contribute_code_changes/pull_request.md
@@ -29,4 +29,26 @@
 
 # Pull Request
 
-TODO: add this
+The simplest way to submit code changes, is via a GitHub pull-request.
+
+In order to do this first create a GitHub account and sign into you account.
+
+After that’s done, please visit our GitHub site and create a so-called Fork.
+
+
+
+What happens now, is that GitHub creates a full copy of the Wayang repository in your account. Only you can commit to this.
+
+Now ideally you check-out your cloned repository:
+
+* git clone https://github.com/{your-user-id}/incubator-wayang.git
+
+Now you have a copy of Wayang on your computer and you can change whatever you want and as it’s your copy, you can even commit these changes without any danger of breaking things.
+
+As soon as you’re finished with your changes and want us to have a look, it’s time to create a so-called Pull-Request.
+
+You do that by going to your forked repository page on GitHub.
+
+Every forked repository has an additional button called "New Pull Request":
+
+If you click on it, we will receive a notification on your changes and can review them. We also can discuss your changes and have you perfect your pull request before we accept and merge it into Wayang.
\ No newline at end of file
diff --git a/wayang-docs/src/main/resources/how_contribute/helping_users.md b/wayang-docs/src/main/resources/how_contribute/helping_users.md
index b7adfb8..38e9454 100644
--- a/wayang-docs/src/main/resources/how_contribute/helping_users.md
+++ b/wayang-docs/src/main/resources/how_contribute/helping_users.md
@@ -29,7 +29,7 @@
 
 # Helping Other Users
 
-A great way to contribute to Wayang is to help answer user questions on the StackOverflow. There are always many new Wayang users; taking a few minutes to help answer a question is a very valuable community service.
+A great way to contribute to Wayang is to help answer user questions on StackOverflow. There are always many new Wayang users; taking a few minutes to help answer a question is a very valuable community service.
 
 Contributors should subscribe to email list (`dev@wayang.apache.org`) and follow it in order to keep up to date on what’s happening in Wayang. Answering questions is an excellent and visible way to help the community, which also demonstrates your expertise.
 
diff --git a/wayang-docs/src/main/resources/how_contribute/jira_issue_maintenance.md b/wayang-docs/src/main/resources/how_contribute/jira_issue_maintenance.md
index fda271f..16f2d4c 100644
--- a/wayang-docs/src/main/resources/how_contribute/jira_issue_maintenance.md
+++ b/wayang-docs/src/main/resources/how_contribute/jira_issue_maintenance.md
@@ -48,9 +48,19 @@
 
 ## Types of Label of the Issues
 
-TODO: complete this part
-* Bug:
-* Feature Request:
-* Suggestion: 
 
+* Change : Requesting a change in the current IT profile.
 
+* IT help: Requesting help for an IT related problem.
+
+* Incident: Reporting an incident or IT service outage.
+
+* New feature: Requesting new capability or software feature.
+
+* Problem: Investigating and reporting the root cause of multiple incidents.
+
+* Service request: Requesting help from an internal or customer service team.
+
+* Service request with approval: Requesting help that requires a manager or board approval.
+
+* Support: Requesting help for customer support issues. 
\ No newline at end of file
diff --git a/wayang-docs/src/main/resources/how_contribute/preparing_releases.md b/wayang-docs/src/main/resources/how_contribute/preparing_releases.md
new file mode 100644
index 0000000..c693f11
--- /dev/null
+++ b/wayang-docs/src/main/resources/how_contribute/preparing_releases.md
@@ -0,0 +1,388 @@
+---
+license: |
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+    
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+layout: default
+title: "Testing Releases"
+previous:
+    url: /how_contribute/reviewing_changes/
+    title: Reviewing Changes
+next:
+    url: /how_contribute/user_libraries_wayang/
+    title: User Libraries to Wayang
+menus:
+    contribute:
+        weight: 7
+---
+
+# Release process
+
+Wayang’s release process is community-oriented, and members of the community can vote on new releases on the [email list@dev](mailto:dev@wayang.apache.org). Wayang users are invited to subscribe to the email list \#Dev to receive announcements, and test their workloads on newer release and provide feedback on any performance or correctness issues found in the newer release.
+
+## Preparing your system
+
+As part of the release process, Maven will upload maven release artifacts to a so-called staging repository.
+
+This can be thought of as an ad-hoc Maven repository that contains only the artifacts for one release. This helps reviewers to see what’s in the convenience maven package and to release that to the public repos with one click.
+
+In order to be allowed to upload artifacts, your account has to be enabled for this, and you have to tell Maven about your credentials.
+
+In order to do this, you should provide these credentials via `.m2/settings.xml`.
+
+So if you don’t already have one, you should create a .m2 directory in your user home and inside that create a `settings.xml` file with at least this content:
+
+```xml
+<?xml version="1.0" encoding="UTF-8"?>
+<settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd" xmlns="http://maven.apache.org/SETTINGS/1.1.0"
+xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+    <servers>
+    <!-- Apache Repo Settings -->
+        <server>
+            <id>apache.snapshots.https</id>
+            <username>{user-id}</username>
+            <password>{user-pass}</password>
+        </server>
+        <server>
+            <id>apache.releases.https</id>
+            <username>{user-id}</username>
+            <password>{user-pass}</password>
+        </server>
+    </servers>
+</settings>
+```
+
+
+This tells maven to use above credentials as soon as a repository with the id `apache.snapshots.https` or `apache.releases.https` is being used. For a release all you need is the releases repo, but it is good to have the other in place as it enables you to also deploy SNAPSHOTs from your system. There repos are defined in the apache parent pom and is identical for all Apache projects.
+
+Additionally, all artifacts are automatically signed by the release build. In order to be able to do this you need to set up GPG.
+
+The key being used to sign the artifacts will have to be linked to your Apache E-Mail ({apache-id}@apache.org) and verified by at least one fellow Apache committer (Ideally more) that have trusted keys themselves. Usually for this you have to get in touch - in real life - with any Apache committer with a trusted key. Attending an ApacheCon is usually a great way to do this as usually every ApacheCon has a Key Signing event in its schedule. He can then sign your key and hereby enable you to sign Apache release artifacts.
+
+If you happen to have multiple keys, adding the following profile to your settings.xml should help:
+
+```xml
+<profile>
+  <id>apache-release</id>
+  <properties>
+    <gpg.keyname>5C60D6B9</gpg.keyname><!-- Your GPG Keyname here -->
+    <!-- Use an agent: Prevents being asked for the password during the build -->
+    <gpg.useagent>true</gpg.useagent>
+    <gpg.passphrase>topsecret-password</gpg.passphrase>
+  </properties>
+</profile>
+```
+
+
+
+## Creating a release branch
+
+For each new release we create a new branch at the beginning of a code-freeze phase. So if currently the project version in develop is `0.6.0-SNAPSHOT`, we create a branch `rel/0.6`. When creating the branch is exactly the moment in which the version in develop is incremented to the next minor version.
+
+This can and should be automated by the maven-release-plugin. Per default the plugin will ask for the working copy version during the build execution. This is the version the develop branch will be changed to.
+
+In contrast to normal builds, it is important to enable all profiles when creating the branch as only this way will all modules versions be updated. Otherwise, the non-default modules on develop will reference the old version which will cause problems when building.
+
+Being 0.6 the minor version
+```shell
+mvn release:branch -P scala-12 -DbranchName=rel/0.6
+```
+The plugin will then aks for the version:
+
+```shell
+What is the new working copy version for "Wayang"? (org.apache.wayang:wayang-parent) 0.6.1-SNAPSHOT: : 0.7.0-SNAPSHOT
+```
+
+## Preparing a release
+
+Same as with creating the branch it is important to enable all profiles when creating the branch as only this way will all modules versions be updated. Otherwise, the non-default modules on develop will reference the old version which will cause problems when building. For people building with some additional profiles from the source release will be impossible.
+
+As especially when switching a lot between different branches, it is recommended to do a clean checkout of the repository. Otherwise, a lot of directories can be left over, which would be included in the `source-release` zip. In order to prepare a `release-candidate`, the first step is switching to the corresponding `release-branch`.
+
+After that, the following command will to all preparation steps for the release:
+
+```shell
+mvn release:prepare -P scala-12
+```
+
+(The -P scala-12 tells maven to activate all the profiles that partition the build and makes sure the versions of all modules are updated as part of the release) In general the plugin will now ask you 3 questions:
+
+1. The version we want to release as (It will suggest the version you get by omitting the `-SNAPSHOT` suffix)
+
+2. The name of the tag the release commit will be tagged with in the SCM (Name it `v{release-version}` (`v0.6.0` in our case)
+
+3. The next development version (The version present in the pom after the release) (`{current-next-bugfix-version}` in our case)
+
+Usually for 1 and 3 the defaults are just fine, make sure the tag name is correct as this usually is different.
+
+What the plugin now does, is automatically execute the following operations:
+
+1. Check we aren’t referencing any `SNAPSHOT` dependencies.
+
+2. Update all pom versions to the release version.
+
+3. Run a build with all tests
+
+4. Commit the changes (commit message: [maven-release-plugin] prepare release `v0.6.0`)
+
+5. Push the commit
+
+6. Tag the commit
+
+7. Update all poms to the next development version.
+
+8. Commit the changes (commit message: [maven-release-plugin] prepare for next development iteration)
+
+9. Push the commit
+
+However, this just prepared the git repository for the release, we have to perform the release to produce and stage the release artifacts.
+
+Please verify the git repository at: `https://gitbox.apache.org/repos/asf?p=incubator-wayang.git` is in the correct state. Please select the release branch and verify the commit log. It is important that the commit with the message "[maven-release-plugin] prepare release `v{release-version}`" is tagged with the release tag (in this case `v0.6.0`)
+
+# What if something goes wrong?
+
+If something goes wrong, you can always execute:
+
+```shell
+mvn release:rollback
+```
+
+It will change the versions back and commit and push things.
+
+However, it will not delete the tag in GIT (locally and remotely). So you have to do that manually or use a different tag next time.
+
+# Performing a release
+
+This is done by executing another goal of the maven-release-plugin:
+
+```shell
+mvn release:perform
+```
+
+This executes automatically as all information it requires is located in the release.properties file the prepare-goal prepared.
+
+The first step is that the perform-goal checks out the previously tagged revision into the root modules target/checkout directory. Here it automatically executes a maven build (You don’t have to do this, it’s just that you know what’s happening):
+
+```shell
+mvn clean deploy -P apache-release
+```
+
+As the apache-release profile is also activated, this builds and tests the project as well as creates the JavaDocs, Source packages and signs each of these with your PGP key.
+
+We are intentionally not adding the other profiles, as these either produce binary artifacts that usually only work on the system they were compiled on (C++, .Net).
+
+As this time the build is building with release versions, Maven will automatically choose the release url for deploying artifacts.
+
+The way things are set up in the apache parent pom, is that release artifacts are deployed to a so-called staging repository.
+
+You can think of a staging repository as a dedicated repository created on the fly as soon as the first artifact comes in.
+
+After the build you will have a nice and clean Maven repository at `https://repository.apache.org/` that contains only artifacts from the current build.
+
+At this point, it is important to log in to Nexus at `https://repository.apache.org/`, select Staging Repositories and find the repository with the name: `orgapachewayang-{somenumber}`.
+
+Select that and click on the Close button.
+
+Now Nexus will do some checks on the artifacts and check the signatures.
+
+As soon as it’s finished, we are done on the Maven side and ready to continue with the rest of the release process.
+
+A release build also produces a so-called source-assembly zip.
+
+This contains all sources of the project and will be what’s actually the release from an Apache point of view and will be the thing we will be voting on.
+
+This file will also be signed and SHA512 hashes will be created.
+
+## Staging a release
+
+Each new release and release-candidate has to be staged in the Apache SVN under:
+
+* `https://dist.apache.org/repos/dist/dev/wayang/`
+
+The directory structure of this directory is as follows:
+
+```shell
+./KEYS
+./0.6.0/
+./0.6.0/rc1
+./0.6.0/rc1/README
+./0.6.0/rc1/RELEASE_NOTES
+./0.6.0/rc1/apache-wayang-0.6.0-source-release.zip
+./0.6.0/rc1/apache-wayang-0.6.0-source-release.zip.asc
+./0.6.0/rc1/apache-wayang-0.6.0-source-release.zip.sha512
+```
+
+You can generally import the stuff, by preparing a directory structure like above locally and then using svn import to do the importing:
+
+```shell
+cd ./{current-full-version}
+svn import rc1 https://dist.apache.org/repos/dist/dev/wayang/{current-full-version}/rc1 -m"Staging of rc1 of Wayang {current-full-version}"
+```
+
+* The KEYS file contains the PGP public key which belongs to the private key used to sign the release artifacts.
+
+If this is your first release be sure to add your key to this file. For the format have a look at the file itself. It should contain all the information needed.
+
+Be sure to stage exactly the README and RELEASE_NOTES files contained in the root of your project. Ideally you just copy them there from there.
+
+All three `-source-relese.zip` artifacts should be located in the directory: `target/checkout/target`
+
+After committing these files to SVN you are ready to start the vote.
+
+## Starting a vote on the mailing list
+
+After staging the release candidate in the Apache SVN, it is time to actually call out the vote.
+
+For this we usually send two emails. The following would be the one used to do our first TLP release:
+
+E-Mail Topic:
+<div style="border: 1px solid gray; padding: 1em;">
+<pre>
+[VOTE] Apache Wayang 0.6.0 RC1
+</pre>
+</div>
+
+Message:
+<div style="border: 1px solid gray; padding: 1em;">
+<pre>
+Apache Wayang 0.6.0 has been staged under [2] and it’s time to vote on accepting it for release. All Maven artifacts are available under [1].
+Voting will be open for 72hr. A minimum of 3 binding +1 votes and more binding +1 than binding -1
+are required to pass.
+
+* Release tag: v0.6.0
+
+Hash for the release tag: {replacethiswiththerealgitcommittag}
+
+Per [3] "Before voting +1 PMC members are required to download
+the signed source code package, compile it as provided, and test
+the resulting executable on their own platform, along with also
+verifying that the package meets the requirements of the ASF policy
+on releases."
+
+You can achieve the above by following [4].
+
+[ ]  +1 accept (indicate what you validated - e.g. performed the non-RM items in [4])
+
+[ ]  -1 reject (explanation required)
+
+
+<a style="color: dodgerblue">1. https://repository.apache.org/content/repositories/orgapachewayang-{somefourdigitnumber}</a>
+<a style="color: dodgerblue">2. https://dist.apache.org/repos/dist/dev/wayang/0.6.0/rc1</a>
+<a style="color: dodgerblue">3. https://www.apache.org/dev/release.html#approving-a-release</a>
+
+</pre>
+</div>
+
+As it is sometimes to do the vote counting, if voting and discussions are going on in the same thread, we send a second email:
+
+E-Mail Topic:
+<div style="border: 1px solid gray; padding: 1em;">
+<pre>[DISCUSS] Apache Wayang 0.6.0 RC1</pre>
+</div>
+
+
+Message:
+<div style="border: 1px solid gray; padding: 1em;">
+<pre>
+This is the discussion thread for the corresponding VOTE thread.
+
+Please keep discussions in this thread to simplify the counting of votes.
+
+If you have to vote -1 please mention a brief description on why and then take the details to this thread.
+</pre>
+</div>
+
+
+
+Now we have to wait 72 hours till we can announce the result of the vote. The vote passes, if at least 3 +1 votes are received and more +1 are received than -1.
+
+## Releasing after a successful vote
+
+As soon as the votes are finished, and the results were in favor of a release, the staged artifacts can be released. This is done by moving them inside the Apache SVN.
+
+```shell
+svn move -m "Release Apache Wayang 0.6.0" \
+  https://dist.apache.org/repos/dist/dev/wayang/0.6.0/rc1 \
+  https://dist.apache.org/repos/dist/release/wayang/0.6.0
+```
+
+This will make the release artifacts available and will trigger them being copied to mirror sites.
+
+This is also the reason why you should wait at least 24 hours before sending out the release notification emails.
+
+## Cleaning up older release versions
+
+As a lot of mirrors are serving our releases, it is the Apache policy to clean old releases from the repo if newer versions are released.
+
+This can be done like this:
+
+```shell
+svn delete https://dist.apache.org/repos/dist/release/wayang/{current-full-version}/ -m"deleted version {current-full-version}"
+```
+
+After this `https://dist.apache.org/repos/dist/release/wayang` should only contain the latest release directory.
+
+## Releasing the Maven artifacts
+
+Probably the simplest part is releasing the Maven artifacts.
+
+In order to do this, the release manager logs into Nexus at `https://repository.apache.org/`, selects the staging repository and clicks on the Release button.
+
+This will move all artifacts into the Apache release repository and delete the staging repository after that.
+
+All release artifacts released to the Apache release repo, will automatically be synced to Maven central.
+
+
+## Add the version to the DOAP file
+Now that the release is out, in the develop branch, update the DOAP file for Wayang.
+
+This is found at: 
+
+* `src/site/resources-filtered/wayang-doap.rdf`
+
+Please add the just released version to the top of the versions.
+
+This file is needed for Apache’s tooling to automatically keep track of project release activity, and we use this internally too to automatically update the documentation to always reference the latest released version automatically.
+
+## Releasing the Maven artifacts
+
+Probably the simplest part is releasing the Maven artifacts.
+
+In order to do this, the release manager logs into Nexus at `https://repository.apache.org/`, selects the staging repository and clicks on the Release button.
+
+This will move all artifacts into the Apache release repository and delete the staging repository after that.
+
+All release artifacts released to the Apache release repo, will automatically be synced to Maven central.
+
+## Merge back release version to release branch
+
+The release branch should always point to the last released version. This has to be done with git
+
+```shell
+git checkout release
+```
+```shell
+git merge v0.6.0
+```
+When there are conflicts it could help to use the theirs merge strategy, i.e.,
+```shell
+git merge -X theirs v0.6.0
+```
+  Possibly a manual conflict resolution has to be done afterwards. After that, changes need to be pushed.
+
+## Updating Jira
+
+Set the released version to "released" and set the "release-date"
+
+Add the next version to the versions.
\ No newline at end of file
diff --git a/wayang-docs/src/main/resources/how_contribute/slack_channels.md b/wayang-docs/src/main/resources/how_contribute/slack_channels.md
index 8af8fb8..9e90824 100644
--- a/wayang-docs/src/main/resources/how_contribute/slack_channels.md
+++ b/wayang-docs/src/main/resources/how_contribute/slack_channels.md
@@ -26,6 +26,7 @@
 
 # Slack Channels
 
-TODO: analyse if is necessary to do it
+In case of any doubts, our community will be glad to answer your questions.
 
+Join the Apache Wayang slack. After creating account in slack you can join #wayang where you can look for help in using and developing Apache Wayang.
 
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/channels/ChannelConversions.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/channels/ChannelConversions.java
index 64013a8..29d0060 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/channels/ChannelConversions.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/channels/ChannelConversions.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.channels;
 
+import java.util.Arrays;
+import java.util.Collection;
 import org.apache.wayang.basic.channels.FileChannel;
 import org.apache.wayang.basic.data.Tuple2;
 import org.apache.wayang.core.optimizer.channels.ChannelConversion;
@@ -31,9 +33,6 @@
 import org.apache.wayang.flink.platform.FlinkPlatform;
 import org.apache.wayang.java.channels.CollectionChannel;
 
-import java.util.Arrays;
-import java.util.Collection;
-
 /**
  * {@link ChannelConversion}s used by the {@link FlinkPlatform}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/channels/DataSetChannel.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/channels/DataSetChannel.java
index 5a45b82..e69bb77 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/channels/DataSetChannel.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/channels/DataSetChannel.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.flink.channels;
 
+import java.util.OptionalLong;
 import org.apache.flink.api.java.DataSet;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.executionplan.Channel;
@@ -28,8 +29,6 @@
 import org.apache.wayang.core.platform.Executor;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.OptionalLong;
-
 /**
  * Describes the situation where one {@link DataSet} is operated on, producing a further {@link DataSet}.
  * <p><i>NB: We might be more specific: Distinguish between cached/uncached and pipelined/aggregated.</i></p>
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/FunctionCompiler.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/FunctionCompiler.java
index 2eb5aaf..378ff6c 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/FunctionCompiler.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/FunctionCompiler.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.flink.compiler;
 
+import java.util.Collection;
+import java.util.function.BiFunction;
+import java.util.function.Function;
 import org.apache.flink.api.common.functions.CoGroupFunction;
 import org.apache.flink.api.common.functions.FilterFunction;
 import org.apache.flink.api.common.functions.FlatMapFunction;
@@ -41,10 +44,6 @@
 import org.apache.wayang.flink.compiler.criterion.WayangConvergenceCriterion;
 import org.apache.wayang.flink.execution.FlinkExecutionContext;
 
-import java.util.Collection;
-import java.util.function.BiFunction;
-import java.util.function.Function;
-
 /**
  * A compiler translates Wayang functions into executable Flink functions.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/KeySelectorDistinct.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/KeySelectorDistinct.java
index 732c745..f26dfc4 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/KeySelectorDistinct.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/KeySelectorDistinct.java
@@ -18,12 +18,11 @@
 
 package org.apache.wayang.flink.compiler;
 
-import org.apache.flink.api.java.functions.KeySelector;
-
 import java.io.ByteArrayOutputStream;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.util.Base64;
+import org.apache.flink.api.java.functions.KeySelector;
 
 /**
  * Wrapper for {@Link KeySelector}
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/KeySelectorFunction.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/KeySelectorFunction.java
index 06098a3..06acfed 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/KeySelectorFunction.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/KeySelectorFunction.java
@@ -18,14 +18,13 @@
 
 package org.apache.wayang.flink.compiler;
 
+import java.io.Serializable;
+import java.util.function.Function;
 import org.apache.flink.api.common.typeinfo.TypeInformation;
 import org.apache.flink.api.java.functions.KeySelector;
 import org.apache.flink.api.java.typeutils.ResultTypeQueryable;
 import org.apache.wayang.core.function.TransformationDescriptor;
 
-import java.io.Serializable;
-import java.util.function.Function;
-
 /**
  * Wrapper for {@Link KeySelector}
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/OutputFormatConsumer.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/OutputFormatConsumer.java
index 91e67f8..8007de8 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/OutputFormatConsumer.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/OutputFormatConsumer.java
@@ -18,13 +18,12 @@
 
 package org.apache.wayang.flink.compiler;
 
+import java.io.IOException;
+import java.io.Serializable;
 import org.apache.flink.api.common.io.OutputFormat;
 import org.apache.flink.configuration.Configuration;
 import org.apache.wayang.core.function.ConsumerDescriptor;
 
-import java.io.IOException;
-import java.io.Serializable;
-
 /**
  * Wrapper for {@Link OutputFormat}
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/WayangFileOutputFormat.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/WayangFileOutputFormat.java
index e2d8eb5..55713b4 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/WayangFileOutputFormat.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/WayangFileOutputFormat.java
@@ -18,6 +18,13 @@
 
 package org.apache.wayang.flink.compiler;
 
+import java.io.ByteArrayOutputStream;
+import java.io.FileNotFoundException;
+import java.io.FilterOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutputStream;
+import java.io.OutputStream;
+import java.net.URI;
 import org.apache.flink.api.common.io.BlockInfo;
 import org.apache.flink.api.common.io.CleanupWhenUnsuccessful;
 import org.apache.flink.api.common.io.FileOutputFormat;
@@ -32,17 +39,9 @@
 import org.apache.hadoop.io.BytesWritable;
 import org.apache.hadoop.io.NullWritable;
 import org.apache.hadoop.io.SequenceFile;
-import org.apache.wayang.core.api.exception.WayangException;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
-
-import java.io.ByteArrayOutputStream;
-import java.io.FileNotFoundException;
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.net.URI;
+import org.apache.wayang.core.api.exception.WayangException;
 
 /**
  * Wrapper for {@link FileOutputFormat}
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangAggregator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangAggregator.java
index add4daf..080d53b 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangAggregator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangAggregator.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.flink.compiler.criterion;
 
-import org.apache.flink.api.common.aggregators.Aggregator;
-import org.apache.flink.types.ListValue;
-
 import java.util.ArrayList;
 import java.util.List;
+import org.apache.flink.api.common.aggregators.Aggregator;
+import org.apache.flink.types.ListValue;
 
 /**
  * Class create a {@Link Aggregator} that generate aggregatorWrapper
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangConvergenceCriterion.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangConvergenceCriterion.java
index 17c7e2e..14a4c16 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangConvergenceCriterion.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangConvergenceCriterion.java
@@ -19,12 +19,11 @@
 package org.apache.wayang.flink.compiler.criterion;
 
 
-import org.apache.flink.api.common.aggregators.ConvergenceCriterion;
-import org.apache.wayang.core.function.FunctionDescriptor;
-
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.stream.Collectors;
+import org.apache.flink.api.common.aggregators.ConvergenceCriterion;
+import org.apache.wayang.core.function.FunctionDescriptor;
 
 /**
  * Class create a {@Link ConvergenceCriterion} that generate aggregatorWrapper
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangListValue.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangListValue.java
index 2333e3b..5fb0c92 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangListValue.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangListValue.java
@@ -18,9 +18,8 @@
 
 package org.apache.wayang.flink.compiler.criterion;
 
-import org.apache.flink.types.ListValue;
-
 import java.util.Collection;
+import org.apache.flink.types.ListValue;
 
 /**
  * Is a Wrapper for used in the criterion of the Loops
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangValue.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangValue.java
index 2fc0d6b..3e85e17 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangValue.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/compiler/criterion/WayangValue.java
@@ -19,10 +19,6 @@
 package org.apache.wayang.flink.compiler.criterion;
 
 
-import org.apache.flink.core.memory.DataInputView;
-import org.apache.flink.core.memory.DataOutputView;
-import org.apache.flink.types.Value;
-
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -30,6 +26,9 @@
 import java.io.ObjectInputStream;
 import java.io.ObjectOutput;
 import java.io.ObjectOutputStream;
+import org.apache.flink.core.memory.DataInputView;
+import org.apache.flink.core.memory.DataOutputView;
+import org.apache.flink.types.Value;
 /**
  * Implementation of {@link Value} of flink for use in Wayang
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/execution/FlinkExecutionContext.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/execution/FlinkExecutionContext.java
index a14b38d..2521cd2 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/execution/FlinkExecutionContext.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/execution/FlinkExecutionContext.java
@@ -18,15 +18,14 @@
 
 package org.apache.wayang.flink.execution;
 
+import java.io.Serializable;
+import java.util.Collection;
 import org.apache.flink.api.common.functions.RichFunction;
 import org.apache.wayang.core.function.ExecutionContext;
 import org.apache.wayang.core.platform.ChannelInstance;
 import org.apache.wayang.flink.operators.FlinkExecutionOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.io.Serializable;
-import java.util.Collection;
-
 /**
  * {@link ExecutionContext} implementation for the {@link FlinkPlatform}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/execution/FlinkExecutor.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/execution/FlinkExecutor.java
index 61eef4a..f95c9a8 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/execution/FlinkExecutor.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/execution/FlinkExecutor.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.flink.execution;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
 import org.apache.flink.api.java.ExecutionEnvironment;
 import org.apache.wayang.core.api.Job;
 import org.apache.wayang.core.api.exception.WayangException;
@@ -36,10 +39,6 @@
 import org.apache.wayang.flink.operators.FlinkExecutionOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
 /**
  * {@link Executor} implementation for the {@link FlinkPlatform}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CartesianMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CartesianMapping.java
index 08f4927..27c5684 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CartesianMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CartesianMapping.java
@@ -19,6 +19,8 @@
 package org.apache.wayang.flink.mapping;
 
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.CartesianOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -29,9 +31,6 @@
 import org.apache.wayang.flink.operators.FlinkCartesianOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link CartesianOperator} to {@link FlinkCartesianOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CoGroupMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CoGroupMapping.java
index b2e79a2..7f48397 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CoGroupMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CoGroupMapping.java
@@ -19,6 +19,8 @@
 package org.apache.wayang.flink.mapping;
 
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.CoGroupOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -29,9 +31,6 @@
 import org.apache.wayang.flink.operators.FlinkCoGroupOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link CoGroupOperator} to {@link FlinkCoGroupOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CollectionSourceMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CollectionSourceMapping.java
index 289207f..b8aa313 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CollectionSourceMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CollectionSourceMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.CollectionSource;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkCollectionSource;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link CollectionSource} to {@link FlinkCollectionSource}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CountMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CountMapping.java
index 95e9975..fa5921b 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CountMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/CountMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.CountOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkCountOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link CountOperator} to {@link FlinkCountOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/DistinctMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/DistinctMapping.java
index adf2481..ec53f68 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/DistinctMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/DistinctMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.DistinctOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkDistinctOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link DistinctOperator} to {@link FlinkDistinctOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/DoWhileMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/DoWhileMapping.java
index d4fc663..f89b66c 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/DoWhileMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/DoWhileMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.DoWhileOperator;
 import org.apache.wayang.core.function.PredicateDescriptor;
 import org.apache.wayang.core.mapping.Mapping;
@@ -29,9 +31,6 @@
 import org.apache.wayang.flink.operators.FlinkDoWhileOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link DoWhileOperator} to {@link FlinkDoWhileOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/FilterMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/FilterMapping.java
index 8afea3b..fc1f811 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/FilterMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/FilterMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.FilterOperator;
 import org.apache.wayang.core.function.PredicateDescriptor;
 import org.apache.wayang.core.mapping.Mapping;
@@ -29,9 +31,6 @@
 import org.apache.wayang.flink.operators.FlinkFilterOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 
 /**
  * Mapping from {@link FilterOperator} to {@link FlinkFilterOperator}.
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/FlatMapMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/FlatMapMapping.java
index 2a898ed..8a7d61a 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/FlatMapMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/FlatMapMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.FlatMapOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkFlatMapOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link FlatMapOperator} to {@link FlinkFlatMapOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/GlobalMaterializedGroupMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/GlobalMaterializedGroupMapping.java
index 870e1aa..b05fa61 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/GlobalMaterializedGroupMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/GlobalMaterializedGroupMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.GlobalMaterializedGroupOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkGlobalMaterializedGroupOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link GlobalMaterializedGroupOperator} to {@link FlinkGlobalMaterializedGroupOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/GlobalReduceMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/GlobalReduceMapping.java
index 7ced46d..aaf3a2b 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/GlobalReduceMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/GlobalReduceMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.GlobalReduceOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkGlobalReduceOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link GlobalReduceOperator} to {@link FlinkGlobalReduceOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/GroupByMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/GroupByMapping.java
index 9c9faa0..51ce3d7 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/GroupByMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/GroupByMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.GroupByOperator;
 import org.apache.wayang.core.function.FunctionDescriptor;
 import org.apache.wayang.core.mapping.Mapping;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkGroupByOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link GroupByOperator} to {@link FlinkGroupByOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/IntersectMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/IntersectMapping.java
index 368a040..2676e55 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/IntersectMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/IntersectMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.IntersectOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkIntersectOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link IntersectOperator} to {@link FlinkIntersectOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/JoinMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/JoinMapping.java
index cc98c82..f1e2b52 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/JoinMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/JoinMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.JoinOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkJoinOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link JoinOperator} to {@link FlinkJoinOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/LocalCallbackSinkMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/LocalCallbackSinkMapping.java
index 586c309..19291cb 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/LocalCallbackSinkMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/LocalCallbackSinkMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.LocalCallbackSink;
 import org.apache.wayang.core.function.FunctionDescriptor;
 import org.apache.wayang.core.mapping.Mapping;
@@ -29,9 +31,6 @@
 import org.apache.wayang.flink.operators.FlinkLocalCallbackSink;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link LocalCallbackSink} to {@link FlinkLocalCallbackSink}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/LoopMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/LoopMapping.java
index dab0374..1645a69 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/LoopMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/LoopMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.LoopOperator;
 import org.apache.wayang.core.function.PredicateDescriptor;
 import org.apache.wayang.core.mapping.Mapping;
@@ -29,9 +31,6 @@
 import org.apache.wayang.flink.operators.FlinkLoopOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link LoopOperator} to {@link FlinkLoopOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/MapMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/MapMapping.java
index dbbe5e2..c0b62df 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/MapMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/MapMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.MapOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkMapOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link MapOperator} to {@link FlinkMapOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/MapPartitionsMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/MapPartitionsMapping.java
index bc2a1e2..b7f0320 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/MapPartitionsMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/MapPartitionsMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.MapPartitionsOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkMapPartitionsOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link MapPartitionsOperator} to {@link FlinkMapPartitionsOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/Mappings.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/Mappings.java
index 2406544..685b9a1 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/Mappings.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/Mappings.java
@@ -18,10 +18,9 @@
 
 package org.apache.wayang.flink.mapping;
 
-import org.apache.wayang.core.mapping.Mapping;
-
 import java.util.Arrays;
 import java.util.Collection;
+import org.apache.wayang.core.mapping.Mapping;
 
 /**
  * Register for {@link Mapping}s for this platform.
@@ -53,7 +52,9 @@
             new SampleMapping(),
             new SortMapping(),
             new TextFileSinkMapping(),
+            new ObjectFileSinkMapping(),
             new TextFileSourceMapping(),
+            new ObjectFileSourceMapping(),
             new UnionAllMapping(),
             new ZipWithIdMapping()
     );
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/MaterializedGroupByMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/MaterializedGroupByMapping.java
index 8fa46c1..72f0049 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/MaterializedGroupByMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/MaterializedGroupByMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.MaterializedGroupByOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkMaterializedGroupByOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link MaterializedGroupByOperator} to {@link FlinkMaterializedGroupByOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ObjectFileSinkMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ObjectFileSinkMapping.java
new file mode 100644
index 0000000..1008119
--- /dev/null
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ObjectFileSinkMapping.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.wayang.flink.mapping;
+
+import java.util.Collection;
+import java.util.Collections;
+import org.apache.wayang.basic.operators.ObjectFileSink;
+import org.apache.wayang.core.mapping.Mapping;
+import org.apache.wayang.core.mapping.OperatorPattern;
+import org.apache.wayang.core.mapping.PlanTransformation;
+import org.apache.wayang.core.mapping.ReplacementSubplanFactory;
+import org.apache.wayang.core.mapping.SubplanPattern;
+import org.apache.wayang.core.types.DataSetType;
+import org.apache.wayang.flink.operators.FlinkObjectFileSink;
+import org.apache.wayang.flink.platform.FlinkPlatform;
+
+/**
+ * Mapping from {@link ObjectFileSink} to {@link FlinkObjectFileSink}.
+ */
+public class ObjectFileSinkMapping implements Mapping {
+
+    @Override
+    public Collection<PlanTransformation> getTransformations() {
+        return Collections.singleton(new PlanTransformation(
+                this.createSubplanPattern(),
+                this.createReplacementSubplanFactory(),
+                FlinkPlatform.getInstance()
+        ));
+    }
+
+    private SubplanPattern createSubplanPattern() {
+        final OperatorPattern operatorPattern = new OperatorPattern<>(
+                "sink",
+                new ObjectFileSink<>(
+                    null,
+                    DataSetType.none().getDataUnitType().getTypeClass()
+                ),
+                false
+        );
+        return SubplanPattern.createSingleton(operatorPattern);
+    }
+
+    private ReplacementSubplanFactory createReplacementSubplanFactory() {
+        return new ReplacementSubplanFactory.OfSingleOperators<ObjectFileSink<?>>(
+                (matchedOperator, epoch) -> new FlinkObjectFileSink<>(matchedOperator).at(epoch)
+        );
+    }
+}
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ObjectFileSourceMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ObjectFileSourceMapping.java
new file mode 100644
index 0000000..f48eba3
--- /dev/null
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ObjectFileSourceMapping.java
@@ -0,0 +1,65 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.wayang.flink.mapping;
+
+import java.util.Collection;
+import java.util.Collections;
+import org.apache.wayang.basic.operators.ObjectFileSource;
+import org.apache.wayang.core.mapping.Mapping;
+import org.apache.wayang.core.mapping.OperatorPattern;
+import org.apache.wayang.core.mapping.PlanTransformation;
+import org.apache.wayang.core.mapping.ReplacementSubplanFactory;
+import org.apache.wayang.core.mapping.SubplanPattern;
+import org.apache.wayang.core.types.DataSetType;
+import org.apache.wayang.flink.operators.FlinkObjectFileSource;
+import org.apache.wayang.flink.platform.FlinkPlatform;
+
+/**
+ * Mapping from {@link ObjectFileSource} to {@link FlinkObjectFileSource}.
+ */
+@SuppressWarnings("unchecked")
+public class ObjectFileSourceMapping implements Mapping {
+    @Override
+    public Collection<PlanTransformation> getTransformations() {
+        return Collections.singleton(new PlanTransformation(
+                this.createSubplanPattern(),
+                this.createReplacementSubplanFactory(),
+                FlinkPlatform.getInstance()
+        ));
+    }
+
+
+    private SubplanPattern createSubplanPattern() {
+        final OperatorPattern operatorPattern = new OperatorPattern(
+            "source",
+            new ObjectFileSource<>(
+                null,
+                DataSetType.none().getDataUnitType().getTypeClass()
+            ),
+            false
+        );
+        return SubplanPattern.createSingleton(operatorPattern);
+    }
+
+    private ReplacementSubplanFactory createReplacementSubplanFactory() {
+        return new ReplacementSubplanFactory.OfSingleOperators<ObjectFileSource>(
+                (matchedOperator, epoch) -> new FlinkObjectFileSource<>(matchedOperator).at(epoch)
+        );
+    }
+}
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/PageRankMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/PageRankMapping.java
index b35a600..6f719aa 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/PageRankMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/PageRankMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.PageRankOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -27,9 +29,6 @@
 import org.apache.wayang.flink.operators.FlinkPageRankOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link PageRankOperator} to {@link FlinkPageRankOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ReduceByMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ReduceByMapping.java
index 8d5d666..3898b09 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ReduceByMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ReduceByMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.ReduceByOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkReduceByOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link ReduceByOperator} to {@link FlinkReduceByOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/RepeatMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/RepeatMapping.java
index 5de4d4a..220e1bc 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/RepeatMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/RepeatMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.RepeatOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -29,9 +31,6 @@
 import org.apache.wayang.flink.operators.FlinkRepeatOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link RepeatOperator} to {@link FlinkRepeatOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/SampleMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/SampleMapping.java
index f1d3feb..5318a81 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/SampleMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/SampleMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.SampleOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkSampleOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link SampleOperator} to {@link FlinkSampleOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/SortMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/SortMapping.java
index 412803f..144e591 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/SortMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/SortMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.SortOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkSortOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link SortOperator} to {@link FlinkSortOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/TextFileSinkMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/TextFileSinkMapping.java
index c5963fb..e3fc257 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/TextFileSinkMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/TextFileSinkMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.TextFileSink;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkTextFileSink;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 
 /**
  * Mapping from {@link TextFileSink} to {@link FlinkTextFileSink}.
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/TextFileSourceMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/TextFileSourceMapping.java
index a57bb66..b6ef0a6 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/TextFileSourceMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/TextFileSourceMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.TextFileSource;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -27,9 +29,6 @@
 import org.apache.wayang.flink.operators.FlinkTextFileSource;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link TextFileSource} to {@link FlinkTextFileSource}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/UnionAllMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/UnionAllMapping.java
index ec2f0ed..ae54c8c 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/UnionAllMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/UnionAllMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.UnionAllOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkUnionAllOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link UnionAllOperator} to {@link FlinkUnionAllOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ZipWithIdMapping.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ZipWithIdMapping.java
index c45de87..94c72a1 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ZipWithIdMapping.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/mapping/ZipWithIdMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.ZipWithIdOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.flink.operators.FlinkZipWithIdOperator;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link ZipWithIdOperator} to {@link FlinkZipWithIdOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCartesianOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCartesianOperator.java
index 280586b..c2fc3af 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCartesianOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCartesianOperator.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.java.DataSet;
 import org.apache.wayang.basic.data.Tuple2;
 import org.apache.wayang.basic.operators.CartesianOperator;
@@ -32,11 +36,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Flink implementation of the {@link CartesianOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCoGroupOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCoGroupOperator.java
index d1230b7..5693be6 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCoGroupOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCoGroupOperator.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.common.functions.CoGroupFunction;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.functions.KeySelector;
@@ -38,12 +43,6 @@
 import org.apache.wayang.flink.compiler.FunctionCompiler;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Flink implementation of the {@link CoGroupOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCollectionSink.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCollectionSink.java
index c88f656..54df5a9 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCollectionSink.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCollectionSink.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
 import org.apache.commons.lang3.Validate;
 import org.apache.flink.api.java.DataSet;
 import org.apache.wayang.core.api.Configuration;
@@ -35,11 +39,6 @@
 import org.apache.wayang.flink.execution.FlinkExecutor;
 import org.apache.wayang.java.channels.CollectionChannel;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
 
 /**
  * Converts {@link DataSetChannel} into a {@link CollectionChannel}
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCollectionSource.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCollectionSource.java
index 577f67f..6e33ec8 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCollectionSource.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCollectionSource.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
 import org.apache.flink.api.java.DataSet;
 import org.apache.wayang.basic.operators.CollectionSource;
 import org.apache.wayang.core.optimizer.OptimizationContext;
@@ -31,10 +34,6 @@
 import org.apache.wayang.flink.execution.FlinkExecutor;
 import org.apache.wayang.java.channels.CollectionChannel;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
 /**
  * This is execution operator implements the {@link CollectionSource}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCountOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCountOperator.java
index 570e97e..daf6278 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCountOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkCountOperator.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.java.DataSet;
 import org.apache.wayang.basic.operators.CountOperator;
 import org.apache.wayang.core.api.exception.WayangException;
@@ -31,11 +35,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Flink implementation of the {@link CountOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkDistinctOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkDistinctOperator.java
index 72037be..be069fc 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkDistinctOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkDistinctOperator.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.java.DataSet;
 import org.apache.wayang.basic.operators.DistinctOperator;
 import org.apache.wayang.core.optimizer.OptimizationContext;
@@ -31,11 +35,6 @@
 import org.apache.wayang.flink.compiler.KeySelectorDistinct;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 
 /**
  * Flink implementation of the {@link DistinctOperator}.
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkDoWhileOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkDoWhileOperator.java
index a558e1d..7164d29 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkDoWhileOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkDoWhileOperator.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
 import org.apache.flink.api.common.aggregators.ConvergenceCriterion;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.operators.IterativeDataSet;
@@ -40,11 +44,6 @@
 import org.apache.wayang.flink.compiler.criterion.WayangFilterCriterion;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
 /**
  * Flink implementation of the {@link DoWhileOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkExecutionOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkExecutionOperator.java
index f8b5da4..9bb8755 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkExecutionOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkExecutionOperator.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.io.Serializable;
+import java.util.Collection;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 import org.apache.wayang.core.platform.ChannelInstance;
@@ -26,9 +28,6 @@
 import org.apache.wayang.flink.execution.FlinkExecutor;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.io.Serializable;
-import java.util.Collection;
-
 /**
  * Execution operator for the Flink platform.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkFilterOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkFilterOperator.java
index 9954f7f..c364840 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkFilterOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkFilterOperator.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
 import org.apache.flink.api.common.functions.FilterFunction;
 import org.apache.flink.api.java.DataSet;
 import org.apache.wayang.basic.operators.FilterOperator;
@@ -35,12 +40,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
 /**
  * Flink implementation of the {@link FilterOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkFlatMapOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkFlatMapOperator.java
index d2f8c41..406d9de 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkFlatMapOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkFlatMapOperator.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
 import org.apache.flink.api.common.functions.FlatMapFunction;
 import org.apache.flink.api.common.functions.RichFlatMapFunction;
 import org.apache.flink.api.java.DataSet;
@@ -38,12 +43,6 @@
 import org.apache.wayang.flink.execution.FlinkExecutionContext;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
 /**
  * Flink implementation of the {@link FlatMapOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkGlobalMaterializedGroupOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkGlobalMaterializedGroupOperator.java
index a2c78f7..cf4a881 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkGlobalMaterializedGroupOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkGlobalMaterializedGroupOperator.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.common.functions.MapPartitionFunction;
 import org.apache.flink.api.java.DataSet;
 import org.apache.wayang.basic.operators.GlobalMaterializedGroupOperator;
@@ -32,12 +37,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Flink implementation of the {@link GlobalMaterializedGroupOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkGlobalReduceOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkGlobalReduceOperator.java
index a5ccec3..20f5544 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkGlobalReduceOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkGlobalReduceOperator.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
 import org.apache.flink.api.common.functions.ReduceFunction;
 import org.apache.flink.api.java.DataSet;
 import org.apache.wayang.basic.operators.GlobalReduceOperator;
@@ -35,12 +40,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
 /**
  * Flink implementation of the {@link GlobalReduceOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkGroupByOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkGroupByOperator.java
index b2f236f..6e86fee 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkGroupByOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkGroupByOperator.java
@@ -18,6 +18,12 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
 import org.apache.flink.api.common.functions.GroupReduceFunction;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.functions.KeySelector;
@@ -37,13 +43,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
 /**
  * Flink implementation of the {@link GroupByOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkIntersectOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkIntersectOperator.java
index 2e4d518..3ab8b97 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkIntersectOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkIntersectOperator.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
 import org.apache.flink.api.common.functions.MapFunction;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.functions.KeySelector;
@@ -34,10 +37,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
 /**
  * Flink implementation of the {@link IntersectOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkJoinOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkJoinOperator.java
index f60b578..3cdd652 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkJoinOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkJoinOperator.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
 import org.apache.flink.api.common.functions.JoinFunction;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.functions.KeySelector;
@@ -38,12 +43,6 @@
 import org.apache.wayang.flink.compiler.FunctionCompiler;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
 /**
  * Flink implementation of the {@link JoinOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkLocalCallbackSink.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkLocalCallbackSink.java
index c3a8e6e..ff8b657 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkLocalCallbackSink.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkLocalCallbackSink.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.io.Serializable;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.io.PrintingOutputFormat;
 import org.apache.wayang.basic.operators.LocalCallbackSink;
@@ -32,11 +36,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.io.Serializable;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
 /**
  * Implementation of the {@link LocalCallbackSink} operator for the Flink platform.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkLoopOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkLoopOperator.java
index 826c187..82aa3f3 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkLoopOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkLoopOperator.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.common.aggregators.ConvergenceCriterion;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.operators.IterativeDataSet;
@@ -36,10 +39,6 @@
 import org.apache.wayang.flink.compiler.criterion.WayangFilterCriterion;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Flink implementation of the {@link RepeatOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkMapOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkMapOperator.java
index 57f7b96..be66622 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkMapOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkMapOperator.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
 import org.apache.flink.api.common.functions.MapFunction;
 import org.apache.flink.api.common.functions.RichMapFunction;
 import org.apache.flink.api.java.DataSet;
@@ -37,11 +41,6 @@
 import org.apache.wayang.flink.execution.FlinkExecutionContext;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Optional;
-
 /**
  * Flink implementation of the {@link MapOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkMapPartitionsOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkMapPartitionsOperator.java
index 215c473..e39fff5 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkMapPartitionsOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkMapPartitionsOperator.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
 import org.apache.flink.api.common.functions.MapPartitionFunction;
 import org.apache.flink.api.common.functions.RichMapPartitionFunction;
 import org.apache.flink.api.java.DataSet;
@@ -37,12 +42,6 @@
 import org.apache.wayang.flink.execution.FlinkExecutionContext;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
 /**
  * Flink implementation of the {@link MapPartitionsOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkMaterializedGroupByOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkMaterializedGroupByOperator.java
index 627259a..15545da 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkMaterializedGroupByOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkMaterializedGroupByOperator.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
 import org.apache.flink.api.common.functions.GroupReduceFunction;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.functions.KeySelector;
@@ -36,12 +41,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Optional;
-
 /**
  * Flink implementation of the {@link MaterializedGroupByOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkObjectFileSink.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkObjectFileSink.java
index 9130a97..51a420e 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkObjectFileSink.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkObjectFileSink.java
@@ -18,13 +18,16 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.java.operators.DataSink;
 import org.apache.flink.core.fs.FileSystem;
 import org.apache.wayang.basic.channels.FileChannel;
+import org.apache.wayang.basic.operators.ObjectFileSink;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 import org.apache.wayang.core.plan.wayangplan.Operator;
-import org.apache.wayang.core.plan.wayangplan.UnarySink;
 import org.apache.wayang.core.platform.ChannelDescriptor;
 import org.apache.wayang.core.platform.ChannelInstance;
 import org.apache.wayang.core.platform.lineage.ExecutionLineageNode;
@@ -35,27 +38,23 @@
 import org.apache.wayang.flink.execution.FlinkExecutor;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * {@link Operator} for the {@link FlinkPlatform} that creates a sequence file.
  *
  * @see FlinkObjectFileSink
  */
-public class FlinkObjectFileSink<Type> extends UnarySink<Type> implements FlinkExecutionOperator {
+public class FlinkObjectFileSink<Type> extends ObjectFileSink<Type> implements FlinkExecutionOperator {
 
-    private final String targetPath;
-
+    public FlinkObjectFileSink(ObjectFileSink<Type> that) {
+        super(that);
+    }
 
     public FlinkObjectFileSink(DataSetType<Type> type) {
         this(null, type);
     }
 
     public FlinkObjectFileSink(String targetPath, DataSetType<Type> type) {
-        super(type);
-        this.targetPath = targetPath;
+        super(targetPath, type);
     }
 
     @Override
@@ -68,10 +67,16 @@
 
         assert inputs.length == this.getNumInputs();
         assert outputs.length <= 1;
+        final FileChannel.Instance output;
+        final String targetPath;
+        if(outputs.length == 1) {
+            output = (FileChannel.Instance) outputs[0];
+            targetPath = output.addGivenOrTempPath(this.textFileUrl, flinkExecutor.getConfiguration());
+        }else{
+            targetPath = this.textFileUrl;
+        }
 
-        final FileChannel.Instance output = (FileChannel.Instance) outputs[0];
-        final String targetPath = output.addGivenOrTempPath(this.targetPath, flinkExecutor.getConfiguration());
-
+        //TODO: remove the set parallelism 1
         DataSetChannel.Instance input = (DataSetChannel.Instance) inputs[0];
         final DataSink<Type> tDataSink = input.<Type>provideDataSet()
                 .write(new WayangFileOutputFormat<Type>(targetPath), targetPath, FileSystem.WriteMode.OVERWRITE)
@@ -83,7 +88,7 @@
 
     @Override
     protected ExecutionOperator createCopy() {
-        return new FlinkObjectFileSink<>(targetPath, this.getType());
+        return new FlinkObjectFileSink<>(this.textFileUrl, this.getType());
     }
 
     @Override
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkObjectFileSource.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkObjectFileSource.java
index fb1e569..d9fba1e 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkObjectFileSource.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkObjectFileSource.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.io.ByteArrayInputStream;
+import java.io.ObjectInputStream;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.common.functions.FlatMapFunction;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.hadoop.mapred.HadoopInputFormat;
@@ -27,10 +32,10 @@
 import org.apache.hadoop.io.NullWritable;
 import org.apache.wayang.basic.channels.FileChannel;
 import org.apache.wayang.basic.data.Tuple2;
+import org.apache.wayang.basic.operators.ObjectFileSource;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 import org.apache.wayang.core.plan.wayangplan.Operator;
-import org.apache.wayang.core.plan.wayangplan.UnarySource;
 import org.apache.wayang.core.platform.ChannelDescriptor;
 import org.apache.wayang.core.platform.ChannelInstance;
 import org.apache.wayang.core.platform.lineage.ExecutionLineageNode;
@@ -40,29 +45,24 @@
 import org.apache.wayang.flink.execution.FlinkExecutor;
 import org.apache.wayang.flink.platform.FlinkPlatform;
 
-import java.io.ByteArrayInputStream;
-import java.io.ObjectInputStream;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 
 /**
  * {@link Operator} for the {@link FlinkPlatform} that creates a sequence file.
  *
  * @see FlinkObjectFileSource
  */
-public class FlinkObjectFileSource<Type> extends UnarySource<Type> implements FlinkExecutionOperator {
+public class FlinkObjectFileSource<Type> extends ObjectFileSource<Type> implements FlinkExecutionOperator {
 
-    private final String sourcePath;
+    public FlinkObjectFileSource(ObjectFileSource<Type> that) {
+        super(that);
+    }
 
     public FlinkObjectFileSource(DataSetType<Type> type) {
         this(null, type);
     }
 
     public FlinkObjectFileSource(String sourcePath, DataSetType<Type> type) {
-        super(type);
-        this.sourcePath = sourcePath;
+        super(sourcePath, type);
     }
 
     @Override
@@ -76,12 +76,12 @@
         assert outputs.length == this.getNumOutputs();
 
         final String path;
-        if (this.sourcePath == null) {
+        if (this.getInputUrl() == null) {
             final FileChannel.Instance input = (FileChannel.Instance) inputs[0];
             path = input.getSinglePath();
         } else {
             assert inputs.length == 0;
-            path = this.sourcePath;
+            path = this.getInputUrl();
         }
         DataSetChannel.Instance output = (DataSetChannel.Instance) outputs[0];
         flinkExecutor.fee.setParallelism(flinkExecutor.getNumDefaultPartitions());
@@ -109,7 +109,7 @@
 
     @Override
     protected ExecutionOperator createCopy() {
-        return new FlinkObjectFileSource<Type>(sourcePath, this.getType());
+        return new FlinkObjectFileSource<Type>(this.getInputUrl(), this.getType());
     }
 
     @Override
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkPageRankOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkPageRankOperator.java
index 6a62337..b5095f5 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkPageRankOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkPageRankOperator.java
@@ -18,6 +18,13 @@
 
 package org.apache.wayang.flink.operators;
 
+import static org.apache.flink.api.java.aggregation.Aggregations.SUM;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.common.functions.FilterFunction;
 import org.apache.flink.api.common.functions.FlatMapFunction;
 import org.apache.flink.api.common.functions.GroupReduceFunction;
@@ -36,14 +43,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
-import static org.apache.flink.api.java.aggregation.Aggregations.SUM;
-
 /**
  * Flink implementation of the {@link PageRankOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkReduceByOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkReduceByOperator.java
index d0d7e03..0f2a78e 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkReduceByOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkReduceByOperator.java
@@ -18,6 +18,11 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Optional;
 import org.apache.flink.api.common.functions.ReduceFunction;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.functions.KeySelector;
@@ -38,12 +43,6 @@
 import org.apache.wayang.flink.compiler.FunctionCompiler;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Optional;
-
 
 /**
  * Flink implementation of the {@link ReduceByOperator}.
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkRepeatExpandedOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkRepeatExpandedOperator.java
index b60abe2..0d551ac 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkRepeatExpandedOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkRepeatExpandedOperator.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.operators.IterativeDataSet;
 import org.apache.wayang.basic.operators.RepeatOperator;
@@ -32,10 +35,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Flink implementation of the {@link RepeatOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkRepeatOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkRepeatOperator.java
index 3b5507c..8b6bb39 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkRepeatOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkRepeatOperator.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.operators.IterativeDataSet;
 import org.apache.wayang.basic.operators.RepeatOperator;
@@ -31,10 +34,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Flink implementation of the {@link RepeatOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkSampleOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkSampleOperator.java
index 86b0613..61c9582 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkSampleOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkSampleOperator.java
@@ -18,6 +18,13 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+import java.util.function.IntUnaryOperator;
+import java.util.function.LongUnaryOperator;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.utils.DataSetUtils;
 import org.apache.wayang.basic.operators.SampleOperator;
@@ -32,14 +39,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import java.util.Random;
-import java.util.function.IntUnaryOperator;
-import java.util.function.LongUnaryOperator;
-
 /**
  * Flink implementation of the {@link SampleOperator}. Sampling with replacement (i.e., the sample may contain duplicates)
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkSortOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkSortOperator.java
index 97e5d19..034426a 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkSortOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkSortOperator.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.common.operators.Order;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.functions.KeySelector;
@@ -34,11 +38,6 @@
 import org.apache.wayang.flink.compiler.FunctionCompiler;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Flink implementation of the {@link SortOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkTextFileSink.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkTextFileSink.java
index 9682344..cfeb271 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkTextFileSink.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkTextFileSink.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+import java.util.Optional;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.io.TextOutputFormat;
 import org.apache.wayang.basic.operators.TextFileSink;
@@ -34,11 +38,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Optional;
-
 /**
  * Implementation of the {@link TextFileSink} operator for the Flink platform.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkTextFileSource.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkTextFileSource.java
index 2485acf..46c4eca 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkTextFileSource.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkTextFileSource.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
 import org.apache.flink.api.java.DataSet;
 import org.apache.wayang.basic.operators.TextFileSource;
 import org.apache.wayang.core.optimizer.OptimizationContext;
@@ -30,10 +33,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
 /**
  * Provides a {@link Collection} to a Flink job.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkTsvFileSink.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkTsvFileSink.java
index 4bc2ba9..3e6721c 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkTsvFileSink.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkTsvFileSink.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.common.functions.MapFunction;
 import org.apache.flink.api.java.DataSet;
 import org.apache.wayang.basic.channels.FileChannel;
@@ -33,11 +37,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Created by bertty on 31-10-17.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkUnionAllOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkUnionAllOperator.java
index 93452ff..f0d1f45 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkUnionAllOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkUnionAllOperator.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
 import org.apache.flink.api.java.DataSet;
 import org.apache.wayang.basic.operators.UnionAllOperator;
 import org.apache.wayang.core.optimizer.OptimizationContext;
@@ -30,10 +33,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
 /**
  * Flink implementation of the {@link UnionAllOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkZipWithIdOperator.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkZipWithIdOperator.java
index 027821a..7d4ad8a 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkZipWithIdOperator.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/operators/FlinkZipWithIdOperator.java
@@ -18,6 +18,10 @@
 
 package org.apache.wayang.flink.operators;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
 import org.apache.flink.api.java.DataSet;
 import org.apache.flink.api.java.utils.DataSetUtils;
 import org.apache.wayang.basic.data.Tuple2;
@@ -34,11 +38,6 @@
 import org.apache.wayang.flink.channels.DataSetChannel;
 import org.apache.wayang.flink.execution.FlinkExecutor;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-
 /**
  * Flink implementation of the {@link MapOperator}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/platform/FlinkPlatform.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/platform/FlinkPlatform.java
index 445e6d0..325afdf 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/platform/FlinkPlatform.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/platform/FlinkPlatform.java
@@ -18,8 +18,14 @@
 
 package org.apache.wayang.flink.platform;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
 import org.apache.flink.api.java.CollectionEnvironment;
 import org.apache.flink.api.java.ExecutionEnvironment;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.basic.plugin.WayangBasic;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.Job;
@@ -32,13 +38,6 @@
 import org.apache.wayang.core.util.ReflectionUtils;
 import org.apache.wayang.flink.execution.FlinkContextReference;
 import org.apache.wayang.flink.execution.FlinkExecutor;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
 
 /**
  * {@link Platform} for Apache Flink.
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/plugin/FlinkBasicPlugin.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/plugin/FlinkBasicPlugin.java
index bc7df27..853e229 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/plugin/FlinkBasicPlugin.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/plugin/FlinkBasicPlugin.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.flink.plugin;
 
+import java.util.Arrays;
+import java.util.Collection;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.optimizer.channels.ChannelConversion;
@@ -29,9 +31,6 @@
 import org.apache.wayang.flink.platform.FlinkPlatform;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Arrays;
-import java.util.Collection;
-
 /**
  * This {@link Plugin} enables to use the basic Wayang {@link Operator}s on the {@link FlinkPlatform}.
  */
diff --git a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/plugin/FlinkConversionPlugin.java b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/plugin/FlinkConversionPlugin.java
index eb4a8c8..b7c0361 100644
--- a/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/plugin/FlinkConversionPlugin.java
+++ b/wayang-platforms/wayang-flink/src/main/java/org/apache/wayang/flink/plugin/FlinkConversionPlugin.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.flink.plugin;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.optimizer.channels.ChannelConversion;
@@ -27,10 +30,6 @@
 import org.apache.wayang.flink.platform.FlinkPlatform;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * This {@link Plugin} provides {@link ChannelConversion}s from the  {@link FlinkPlatform}.
  */
diff --git a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/Algorithm/PageRankAlgorithm.java b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/Algorithm/PageRankAlgorithm.java
index 2e0f688..91710e4 100644
--- a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/Algorithm/PageRankAlgorithm.java
+++ b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/Algorithm/PageRankAlgorithm.java
@@ -19,6 +19,8 @@
 package org.apache.wayang.giraph.Algorithm;
 
 import com.google.common.collect.Lists;
+import java.io.IOException;
+import java.util.List;
 import org.apache.giraph.aggregators.DoubleMaxAggregator;
 import org.apache.giraph.aggregators.DoubleMinAggregator;
 import org.apache.giraph.aggregators.LongSumAggregator;
@@ -41,9 +43,6 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
-import java.io.IOException;
-import java.util.List;
-
 /**
  * Basic PageRank implementation.
  */
diff --git a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/Algorithm/PageRankParameters.java b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/Algorithm/PageRankParameters.java
index 20f7761..86ef4e2 100644
--- a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/Algorithm/PageRankParameters.java
+++ b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/Algorithm/PageRankParameters.java
@@ -18,12 +18,9 @@
 
 package org.apache.wayang.giraph.Algorithm;
 
-import org.apache.wayang.core.api.exception.WayangException;
-
 import java.util.LinkedList;
-import java.util.List;
 import java.util.Queue;
-import java.util.Stack;
+import org.apache.wayang.core.api.exception.WayangException;
 
 /**
  * Parameters for Basic PageRank implementation.
diff --git a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/channels/ChannelConversions.java b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/channels/ChannelConversions.java
index cd1eb61..90bb99d 100644
--- a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/channels/ChannelConversions.java
+++ b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/channels/ChannelConversions.java
@@ -18,10 +18,10 @@
 
 package org.apache.wayang.giraph.channels;
 
-import org.apache.wayang.core.optimizer.channels.ChannelConversion;
-import org.apache.wayang.giraph.platform.GiraphPlatform;
 import java.util.Collection;
 import java.util.Collections;
+import org.apache.wayang.core.optimizer.channels.ChannelConversion;
+import org.apache.wayang.giraph.platform.GiraphPlatform;
 
 /**
  * {@link ChannelConversion}s for the {@link GiraphPlatform}.
diff --git a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/execution/GiraphExecutor.java b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/execution/GiraphExecutor.java
index 86e7aa1..cc615df 100644
--- a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/execution/GiraphExecutor.java
+++ b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/execution/GiraphExecutor.java
@@ -18,20 +18,28 @@
 
 package org.apache.wayang.giraph.execution;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.LinkedList;
+import java.util.Queue;
+import java.util.Set;
 import org.apache.giraph.conf.GiraphConfiguration;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.Job;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.executionplan.ExecutionStage;
 import org.apache.wayang.core.plan.executionplan.ExecutionTask;
-import org.apache.wayang.core.platform.*;
+import org.apache.wayang.core.platform.ChannelInstance;
+import org.apache.wayang.core.platform.ExecutionState;
+import org.apache.wayang.core.platform.Executor;
+import org.apache.wayang.core.platform.ExecutorTemplate;
+import org.apache.wayang.core.platform.PartialExecution;
 import org.apache.wayang.core.platform.lineage.ExecutionLineageNode;
 import org.apache.wayang.core.util.Tuple;
 import org.apache.wayang.giraph.operators.GiraphExecutionOperator;
 import org.apache.wayang.giraph.platform.GiraphPlatform;
 
-import java.util.*;
-
 /**
  * {@link Executor} for the {@link GiraphPlatform}.
  */
diff --git a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/mappings/Mappings.java b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/mappings/Mappings.java
index 7f98c14..6db2dae 100644
--- a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/mappings/Mappings.java
+++ b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/mappings/Mappings.java
@@ -18,10 +18,9 @@
 
 package org.apache.wayang.giraph.mappings;
 
-import org.apache.wayang.core.mapping.Mapping;
-
 import java.util.Collection;
 import java.util.Collections;
+import org.apache.wayang.core.mapping.Mapping;
 
 /**
  * Register for {@link Mapping}s for this platform.
diff --git a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/mappings/PageRankMapping.java b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/mappings/PageRankMapping.java
index cc21b99..a69a65e 100644
--- a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/mappings/PageRankMapping.java
+++ b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/mappings/PageRankMapping.java
@@ -18,15 +18,16 @@
 
 package org.apache.wayang.giraph.mappings;
 
-import org.apache.wayang.basic.operators.PageRankOperator;
-import org.apache.wayang.core.mapping.*;
-import org.apache.wayang.core.plan.wayangplan.Operator;
-import org.apache.wayang.core.plan.wayangplan.Subplan;
-import org.apache.wayang.giraph.operators.GiraphPageRankOperator;
-import org.apache.wayang.giraph.platform.GiraphPlatform;
-
 import java.util.Collection;
 import java.util.Collections;
+import org.apache.wayang.basic.operators.PageRankOperator;
+import org.apache.wayang.core.mapping.Mapping;
+import org.apache.wayang.core.mapping.OperatorPattern;
+import org.apache.wayang.core.mapping.PlanTransformation;
+import org.apache.wayang.core.mapping.ReplacementSubplanFactory;
+import org.apache.wayang.core.mapping.SubplanPattern;
+import org.apache.wayang.giraph.operators.GiraphPageRankOperator;
+import org.apache.wayang.giraph.platform.GiraphPlatform;
 
 /**
  * Maps {@link PageRankOperator}s to {@link GiraphPageRankOperator}s.
diff --git a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/operators/GiraphExecutionOperator.java b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/operators/GiraphExecutionOperator.java
index 21f9b86..988823e 100644
--- a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/operators/GiraphExecutionOperator.java
+++ b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/operators/GiraphExecutionOperator.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.giraph.operators;
 
+import java.util.Collection;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.wayangplan.ExecutionOperator;
 import org.apache.wayang.core.platform.ChannelInstance;
@@ -25,8 +26,6 @@
 import org.apache.wayang.core.util.Tuple;
 import org.apache.wayang.giraph.execution.GiraphExecutor;
 
-import java.util.Collection;
-
 /**
  * {@link ExecutionOperator} that can be run by the {@link GiraphExecutor}.
  */
diff --git a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/operators/GiraphPageRankOperator.java b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/operators/GiraphPageRankOperator.java
index 83e68d3..ac1d5cd 100644
--- a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/operators/GiraphPageRankOperator.java
+++ b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/operators/GiraphPageRankOperator.java
@@ -18,8 +18,17 @@
 
 package org.apache.wayang.giraph.operators;
 
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.stream.Stream;
 import org.apache.giraph.conf.GiraphConfiguration;
 import org.apache.giraph.job.GiraphJob;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 import org.apache.wayang.basic.channels.FileChannel;
 import org.apache.wayang.basic.data.Tuple2;
 import org.apache.wayang.basic.operators.PageRankOperator;
@@ -40,13 +49,6 @@
 import org.apache.wayang.giraph.execution.GiraphExecutor;
 import org.apache.wayang.giraph.platform.GiraphPlatform;
 import org.apache.wayang.java.channels.StreamChannel;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.io.*;
-import java.net.URISyntaxException;
-import java.util.*;
-import java.util.stream.Stream;
 
 /**
  * PageRank {@link Operator} implementation for the {@link GiraphPlatform}.
diff --git a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/platform/GiraphPlatform.java b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/platform/GiraphPlatform.java
index d267e25..51f66bc 100644
--- a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/platform/GiraphPlatform.java
+++ b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/platform/GiraphPlatform.java
@@ -18,7 +18,6 @@
 
 package org.apache.wayang.giraph.platform;
 
-import org.apache.giraph.conf.GiraphConfiguration;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.optimizer.costs.LoadProfileToTimeConverter;
 import org.apache.wayang.core.optimizer.costs.LoadToTimeConverter;
diff --git a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/plugin/GiraphPlugin.java b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/plugin/GiraphPlugin.java
index a1a075d..0700b88 100644
--- a/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/plugin/GiraphPlugin.java
+++ b/wayang-platforms/wayang-giraph/src/main/java/org/apache/wayang/giraph/plugin/GiraphPlugin.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.giraph.plugin;
 
+import java.io.File;
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.optimizer.channels.ChannelConversion;
@@ -28,10 +31,6 @@
 import org.apache.wayang.giraph.mappings.Mappings;
 import org.apache.wayang.giraph.platform.GiraphPlatform;
 
-import java.io.File;
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * This {@link Plugin} activates default capabilities of the {@link GiraphPlatform}.
  */
diff --git a/wayang-platforms/wayang-giraph/src/test/java/org/apache/wayang/giraph/operators/GiraphPagaRankOperatorTest.java b/wayang-platforms/wayang-giraph/src/test/java/org/apache/wayang/giraph/operators/GiraphPagaRankOperatorTest.java
index 436c711..c73592d 100644
--- a/wayang-platforms/wayang-giraph/src/test/java/org/apache/wayang/giraph/operators/GiraphPagaRankOperatorTest.java
+++ b/wayang-platforms/wayang-giraph/src/test/java/org/apache/wayang/giraph/operators/GiraphPagaRankOperatorTest.java
@@ -18,8 +18,10 @@
 
 package org.apache.wayang.giraph.operators;
 
-import org.junit.Before;
-import org.junit.Test;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
 import org.apache.wayang.basic.channels.FileChannel;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.api.Job;
@@ -33,11 +35,7 @@
 import org.apache.wayang.giraph.execution.GiraphExecutor;
 import org.apache.wayang.giraph.platform.GiraphPlatform;
 import org.apache.wayang.java.channels.StreamChannel;
-
-import java.io.IOException;
-
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import org.junit.Before;
 
 /**
  * Test For GiraphPageRank
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/ChannelConversions.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/ChannelConversions.java
index e1e9661..4df344b 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/ChannelConversions.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/ChannelConversions.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.channels;
 
+import java.util.Arrays;
+import java.util.Collection;
 import org.apache.wayang.basic.channels.FileChannel;
 import org.apache.wayang.basic.data.Tuple2;
 import org.apache.wayang.core.optimizer.channels.ChannelConversion;
@@ -30,9 +32,6 @@
 import org.apache.wayang.java.operators.JavaTsvFileSource;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Arrays;
-import java.util.Collection;
-
 /**
  * {@link ChannelConversion}s for the {@link JavaPlatform}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/CollectionChannel.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/CollectionChannel.java
index c71c840..8ab7e22 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/CollectionChannel.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/CollectionChannel.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.channels;
 
+import java.util.Collection;
+import java.util.stream.Stream;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.executionplan.Channel;
 import org.apache.wayang.core.plan.wayangplan.OutputSlot;
@@ -26,9 +28,6 @@
 import org.apache.wayang.core.platform.Executor;
 import org.apache.wayang.java.operators.JavaExecutionOperator;
 
-import java.util.Collection;
-import java.util.stream.Stream;
-
 /**
  * {@link Channel} between two {@link JavaExecutionOperator}s using an intermediate {@link Collection}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/JavaChannelInstance.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/JavaChannelInstance.java
index dbcdf8d..e1393f2 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/JavaChannelInstance.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/JavaChannelInstance.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.java.channels;
 
+import java.util.stream.Stream;
 import org.apache.wayang.core.plan.executionplan.Channel;
 import org.apache.wayang.core.platform.ChannelInstance;
 
-import java.util.stream.Stream;
-
 /**
  * Defines execution logic to handle a {@link Channel}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/StreamChannel.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/StreamChannel.java
index 98d8a89..14fc7ba 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/StreamChannel.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/channels/StreamChannel.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.java.channels;
 
+import java.util.Collection;
+import java.util.OptionalLong;
+import java.util.stream.Stream;
 import org.apache.wayang.core.api.exception.WayangException;
 import org.apache.wayang.core.optimizer.OptimizationContext;
 import org.apache.wayang.core.plan.executionplan.Channel;
@@ -27,10 +30,6 @@
 import org.apache.wayang.core.platform.Executor;
 import org.apache.wayang.java.operators.JavaExecutionOperator;
 
-import java.util.Collection;
-import java.util.OptionalLong;
-import java.util.stream.Stream;
-
 /**
  * {@link Channel} between two {@link JavaExecutionOperator}s using a {@link Stream}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/compiler/FunctionCompiler.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/compiler/FunctionCompiler.java
index 32c3bcb..94945a5 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/compiler/FunctionCompiler.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/compiler/FunctionCompiler.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.java.compiler;
 
+import java.util.function.BinaryOperator;
+import java.util.function.Function;
+import java.util.function.Predicate;
 import org.apache.wayang.core.api.Configuration;
 import org.apache.wayang.core.function.FlatMapDescriptor;
 import org.apache.wayang.core.function.MapPartitionsDescriptor;
@@ -25,10 +28,6 @@
 import org.apache.wayang.core.function.ReduceDescriptor;
 import org.apache.wayang.core.function.TransformationDescriptor;
 
-import java.util.function.BinaryOperator;
-import java.util.function.Function;
-import java.util.function.Predicate;
-
 /**
  * A compiler translates Wayang functions into executable Java functions.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/execution/JavaExecutionContext.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/execution/JavaExecutionContext.java
index 14b46cc..dbc70d2 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/execution/JavaExecutionContext.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/execution/JavaExecutionContext.java
@@ -18,6 +18,7 @@
 
 package org.apache.wayang.java.execution;
 
+import java.util.Collection;
 import org.apache.wayang.core.api.exception.WayangException;
 import org.apache.wayang.core.function.ExecutionContext;
 import org.apache.wayang.core.plan.wayangplan.InputSlot;
@@ -26,8 +27,6 @@
 import org.apache.wayang.java.operators.JavaExecutionOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-
 /**
  * {@link ExecutionContext} implementation for the {@link JavaPlatform}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/execution/JavaExecutor.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/execution/JavaExecutor.java
index 6150b7c..7fddddd 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/execution/JavaExecutor.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/execution/JavaExecutor.java
@@ -18,6 +18,9 @@
 
 package org.apache.wayang.java.execution;
 
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
 import org.apache.wayang.core.api.Job;
 import org.apache.wayang.core.api.exception.WayangException;
 import org.apache.wayang.core.function.ExtendedFunction;
@@ -35,10 +38,6 @@
 import org.apache.wayang.java.operators.JavaExecutionOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-
 /**
  * {@link Executor} implementation for the {@link JavaPlatform}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CartesianMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CartesianMapping.java
index 9fca8af..95925db 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CartesianMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CartesianMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.CartesianOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaCartesianOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link CartesianOperator} to {@link JavaCartesianOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CoGroupMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CoGroupMapping.java
index d029d7c..be2ff24 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CoGroupMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CoGroupMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.CoGroupOperator;
 import org.apache.wayang.basic.operators.JoinOperator;
 import org.apache.wayang.core.mapping.Mapping;
@@ -30,9 +32,6 @@
 import org.apache.wayang.java.operators.JavaJoinOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link JoinOperator} to {@link JavaJoinOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CollectionSourceMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CollectionSourceMapping.java
index d56087b..b7f9558 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CollectionSourceMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CollectionSourceMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.CollectionSource;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaCollectionSource;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link CollectionSource} to {@link JavaCollectionSource}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CountMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CountMapping.java
index ec2c97a..6971e08 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CountMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/CountMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.CountOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaCountOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link CountOperator} to {@link JavaCountOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/DistinctMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/DistinctMapping.java
index bdea8d7..421860f 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/DistinctMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/DistinctMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.DistinctOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaDistinctOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link DistinctOperator} to {@link JavaDistinctOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/DoWhileMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/DoWhileMapping.java
index c71fab6..f33ab1c 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/DoWhileMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/DoWhileMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.DoWhileOperator;
 import org.apache.wayang.basic.operators.LoopOperator;
 import org.apache.wayang.core.function.PredicateDescriptor;
@@ -31,9 +33,6 @@
 import org.apache.wayang.java.operators.JavaLoopOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link LoopOperator} to {@link JavaLoopOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/FilterMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/FilterMapping.java
index a75c4cb..f9710e0 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/FilterMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/FilterMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.FilterOperator;
 import org.apache.wayang.core.function.PredicateDescriptor;
 import org.apache.wayang.core.mapping.Mapping;
@@ -29,9 +31,6 @@
 import org.apache.wayang.java.operators.JavaFilterOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link FilterOperator} to {@link JavaFilterOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/FlatMapMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/FlatMapMapping.java
index 3f282c0..ef34935 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/FlatMapMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/FlatMapMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.FlatMapOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaFlatMapOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link FlatMapOperator} to {@link JavaFlatMapOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/GlobalMaterializedGroupMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/GlobalMaterializedGroupMapping.java
index 7472966..8328094 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/GlobalMaterializedGroupMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/GlobalMaterializedGroupMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.GlobalMaterializedGroupOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaGlobalMaterializedGroupOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link GlobalMaterializedGroupOperator} to {@link JavaGlobalMaterializedGroupOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/GlobalReduceMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/GlobalReduceMapping.java
index c4aa625..d61cb93 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/GlobalReduceMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/GlobalReduceMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.GlobalReduceOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaGlobalReduceOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link GlobalReduceOperator} to {@link JavaGlobalReduceOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/IntersectMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/IntersectMapping.java
index c3e1750..77d24e3 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/IntersectMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/IntersectMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.IntersectOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaIntersectOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link IntersectOperator} to {@link JavaIntersectOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/JoinMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/JoinMapping.java
index e48d0eb..5704f7c 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/JoinMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/JoinMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.JoinOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaJoinOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link JoinOperator} to {@link JavaJoinOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/LocalCallbackSinkMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/LocalCallbackSinkMapping.java
index 51b7819..b0a1777 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/LocalCallbackSinkMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/LocalCallbackSinkMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.LocalCallbackSink;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaLocalCallbackSink;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link LocalCallbackSink} to {@link JavaLocalCallbackSink}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/LoopMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/LoopMapping.java
index de3386d..6b3c5b9 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/LoopMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/LoopMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.LoopOperator;
 import org.apache.wayang.core.function.PredicateDescriptor;
 import org.apache.wayang.core.mapping.Mapping;
@@ -29,9 +31,6 @@
 import org.apache.wayang.java.operators.JavaLoopOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link LoopOperator} to {@link JavaLoopOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/MapMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/MapMapping.java
index 60c73cb..d5f7c4c 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/MapMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/MapMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.MapOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaMapOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link MapOperator} to {@link JavaMapOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/MapPartitionsMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/MapPartitionsMapping.java
index dc1bb5a..49a9d5f 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/MapPartitionsMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/MapPartitionsMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.MapPartitionsOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaMapPartitionsOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link MapPartitionsOperator} to {@link JavaMapPartitionsOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/Mappings.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/Mappings.java
index ee9cebc..c77d531 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/Mappings.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/Mappings.java
@@ -18,11 +18,10 @@
 
 package org.apache.wayang.java.mapping;
 
-import org.apache.wayang.core.mapping.Mapping;
-import org.apache.wayang.java.mapping.graph.PageRankMapping;
-
 import java.util.Arrays;
 import java.util.Collection;
+import org.apache.wayang.core.mapping.Mapping;
+import org.apache.wayang.java.mapping.graph.PageRankMapping;
 
 /**
  * Register for {@link Mapping}s for this platform.
@@ -32,6 +31,8 @@
     public static Collection<Mapping> BASIC_MAPPINGS = Arrays.asList(
             new TextFileSourceMapping(),
             new TextFileSinkMapping(),
+            new ObjectFileSourceMapping(),
+            new ObjectFileSinkMapping(),
             new MapMapping(),
             new MapPartitionsMapping(),
             new ReduceByMapping(),
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/MaterializedGroupByMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/MaterializedGroupByMapping.java
index b74e5e0..4ffad2f 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/MaterializedGroupByMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/MaterializedGroupByMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.MaterializedGroupByOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaMaterializedGroupByOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link MaterializedGroupByOperator} to {@link JavaMaterializedGroupByOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/ObjectFileSinkMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/ObjectFileSinkMapping.java
new file mode 100644
index 0000000..cbc4dca
--- /dev/null
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/ObjectFileSinkMapping.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.wayang.java.mapping;
+
+import java.util.Collection;
+import java.util.Collections;
+import org.apache.wayang.basic.operators.ObjectFileSink;
+import org.apache.wayang.core.mapping.Mapping;
+import org.apache.wayang.core.mapping.OperatorPattern;
+import org.apache.wayang.core.mapping.PlanTransformation;
+import org.apache.wayang.core.mapping.ReplacementSubplanFactory;
+import org.apache.wayang.core.mapping.SubplanPattern;
+import org.apache.wayang.core.types.DataSetType;
+import org.apache.wayang.java.operators.JavaObjectFileSink;
+import org.apache.wayang.java.platform.JavaPlatform;
+
+/**
+ * Mapping from {@link ObjectFileSink} to {@link JavaObjectFileSink}.
+ */
+public class ObjectFileSinkMapping implements Mapping {
+
+    @Override
+    public Collection<PlanTransformation> getTransformations() {
+        return Collections.singleton(new PlanTransformation(
+                this.createSubplanPattern(),
+                this.createReplacementSubplanFactory(),
+                JavaPlatform.getInstance()
+        ));
+    }
+
+    private SubplanPattern createSubplanPattern() {
+        final OperatorPattern operatorPattern = new OperatorPattern<>(
+                "sink", new ObjectFileSink<>(null, DataSetType.none().getDataUnitType().getTypeClass()), false
+        );
+        return SubplanPattern.createSingleton(operatorPattern);
+    }
+
+    private ReplacementSubplanFactory createReplacementSubplanFactory() {
+        return new ReplacementSubplanFactory.OfSingleOperators<ObjectFileSink<?>>(
+                (matchedOperator, epoch) -> new JavaObjectFileSink<>(matchedOperator).at(epoch)
+        );
+    }
+}
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/ObjectFileSourceMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/ObjectFileSourceMapping.java
new file mode 100644
index 0000000..2e5f466
--- /dev/null
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/ObjectFileSourceMapping.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.wayang.java.mapping;
+
+import java.util.Collection;
+import java.util.Collections;
+import org.apache.wayang.basic.operators.ObjectFileSource;
+import org.apache.wayang.core.mapping.Mapping;
+import org.apache.wayang.core.mapping.OperatorPattern;
+import org.apache.wayang.core.mapping.PlanTransformation;
+import org.apache.wayang.core.mapping.ReplacementSubplanFactory;
+import org.apache.wayang.core.mapping.SubplanPattern;
+import org.apache.wayang.core.types.DataSetType;
+import org.apache.wayang.java.operators.JavaObjectFileSource;
+import org.apache.wayang.java.platform.JavaPlatform;
+
+/**
+ * Mapping from {@link ObjectFileSource} to {@link JavaObjectFileSource}.
+ */
+public class ObjectFileSourceMapping implements Mapping {
+
+    @Override
+    public Collection<PlanTransformation> getTransformations() {
+        return Collections.singleton(new PlanTransformation(
+                this.createSubplanPattern(),
+                this.createReplacementSubplanFactory(),
+                JavaPlatform.getInstance()
+        ));
+    }
+
+    private SubplanPattern createSubplanPattern() {
+        final OperatorPattern operatorPattern = new OperatorPattern(
+            "source",
+            new ObjectFileSource(
+                null,
+                DataSetType.none().getDataUnitType().getTypeClass()
+            ),
+            false
+        );
+        return SubplanPattern.createSingleton(operatorPattern);
+    }
+
+    private ReplacementSubplanFactory createReplacementSubplanFactory() {
+        return new ReplacementSubplanFactory.OfSingleOperators<ObjectFileSource>(
+                (matchedOperator, epoch) -> new JavaObjectFileSource(matchedOperator).at(epoch)
+        );
+    }
+}
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/ReduceByMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/ReduceByMapping.java
index cea8d88..45684e9 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/ReduceByMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/ReduceByMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.ReduceByOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaReduceByOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link ReduceByOperator} to {@link JavaReduceByOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/RepeatMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/RepeatMapping.java
index 8d80f33..dbd3b8d 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/RepeatMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/RepeatMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.RepeatOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaRepeatOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link RepeatOperator} to {@link JavaRepeatOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/SampleMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/SampleMapping.java
index 6cf42c2..d67e6ec 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/SampleMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/SampleMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.SampleOperator;
 import org.apache.wayang.core.api.exception.WayangException;
 import org.apache.wayang.core.mapping.Mapping;
@@ -30,9 +32,6 @@
 import org.apache.wayang.java.operators.JavaReservoirSampleOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link SampleOperator} to {@link JavaRandomSampleOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/SortMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/SortMapping.java
index 302f118..8e59b0a 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/SortMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/SortMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.SortOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaSortOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link SortOperator} to {@link JavaSortOperator}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/TextFileSinkMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/TextFileSinkMapping.java
index eb1d05a..34b5140 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/TextFileSinkMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/TextFileSinkMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.TextFileSink;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaTextFileSink;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link TextFileSink} to {@link JavaTextFileSink}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/TextFileSourceMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/TextFileSourceMapping.java
index 3bc5aa1..45e5db9 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/TextFileSourceMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/TextFileSourceMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.TextFileSource;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -27,9 +29,6 @@
 import org.apache.wayang.java.operators.JavaTextFileSource;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-
 /**
  * Mapping from {@link TextFileSource} to {@link JavaTextFileSource}.
  */
diff --git a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/UnionAllMapping.java b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/UnionAllMapping.java
index 8fc0fbf..a847cea 100644
--- a/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/UnionAllMapping.java
+++ b/wayang-platforms/wayang-java/src/main/java/org/apache/wayang/java/mapping/UnionAllMapping.java
@@ -18,6 +18,8 @@
 
 package org.apache.wayang.java.mapping;
 
+import java.util.Collection;
+import java.util.Collections;
 import org.apache.wayang.basic.operators.UnionAllOperator;
 import org.apache.wayang.core.mapping.Mapping;
 import org.apache.wayang.core.mapping.OperatorPattern;
@@ -28,9 +30,6 @@
 import org.apache.wayang.java.operators.JavaUnionAllOperator;
 import org.apache.wayang.java.platform.JavaPlatform;
 
-import java.util.Collection;
-import java.util.Collections;
-<