diff --git a/apps/filecopy/pom.xml b/apps/filecopy/pom.xml
index d6a0ccd..69b2e95 100644
--- a/apps/filecopy/pom.xml
+++ b/apps/filecopy/pom.xml
@@ -24,7 +24,7 @@
   <parent>
     <artifactId>malhar-apps</artifactId>
     <groupId>org.apache.apex</groupId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>filecopy</artifactId>
@@ -79,7 +79,7 @@
     <dependency>
       <groupId>org.apache.apex</groupId>
       <artifactId>malhar-library</artifactId>
-      <version>3.9.0-SNAPSHOT</version>
+      <version>4.0.0-SNAPSHOT</version>
       <exclusions>
         <exclusion>
           <groupId>*</groupId>
diff --git a/apps/filecopy/src/main/java/com/datatorrent/apps/copy/HDFSFileCopyApp.java b/apps/filecopy/src/main/java/com/datatorrent/apps/copy/HDFSFileCopyApp.java
index 2688f1c..bb1e1d9 100644
--- a/apps/filecopy/src/main/java/com/datatorrent/apps/copy/HDFSFileCopyApp.java
+++ b/apps/filecopy/src/main/java/com/datatorrent/apps/copy/HDFSFileCopyApp.java
@@ -19,14 +19,14 @@
 
 package com.datatorrent.apps.copy;
 
+import org.apache.apex.malhar.lib.io.fs.FSInputModule;
+import org.apache.apex.malhar.lib.io.fs.HDFSFileCopyModule;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.fs.FSInputModule;
-import com.datatorrent.lib.io.fs.HDFSFileCopyModule;
 
 /**
  * Application for HDFS to HDFS file copy
diff --git a/apps/logstream/pom.xml b/apps/logstream/pom.xml
index 07a5eee..13cc865 100644
--- a/apps/logstream/pom.xml
+++ b/apps/logstream/pom.xml
@@ -24,7 +24,7 @@
   <parent>
     <artifactId>malhar-apps</artifactId>
     <groupId>org.apache.apex</groupId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.apache.apex</groupId>
diff --git a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/AggregationsToRedisOperator.java b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/AggregationsToRedisOperator.java
index 495987e..74997f4 100644
--- a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/AggregationsToRedisOperator.java
+++ b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/AggregationsToRedisOperator.java
@@ -22,8 +22,8 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import com.datatorrent.lib.logs.DimensionObject;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.logs.DimensionObject;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.DefaultInputPort;
diff --git a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/Application.java b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/Application.java
index 82c9214..e3858b4 100644
--- a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/Application.java
+++ b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/Application.java
@@ -28,25 +28,26 @@
 import org.apache.apex.malhar.contrib.misc.streamquery.SelectOperator;
 import org.apache.apex.malhar.contrib.misc.streamquery.condition.EqualValueCondition;
 import org.apache.apex.malhar.lib.utils.PubSubHelper;
+import org.apache.apex.malhar.contrib.redis.RedisKeyValPairOutputOperator;
+import org.apache.apex.malhar.contrib.redis.RedisMapOutputOperator;
+import org.apache.apex.malhar.contrib.redis.RedisNumberSummationMapOutputOperator;
+import org.apache.apex.malhar.lib.algo.TopN;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketOutputOperator;
+import org.apache.apex.malhar.lib.logs.DimensionObject;
+import org.apache.apex.malhar.lib.logs.MultiWindowDimensionAggregation;
+import org.apache.apex.malhar.lib.logs.MultiWindowDimensionAggregation.AggregateOperation;
+import org.apache.apex.malhar.lib.stream.Counter;
+import org.apache.apex.malhar.lib.stream.JsonByteArrayOperator;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.util.AbstractDimensionTimeBucketOperator;
+import org.apache.apex.malhar.lib.util.DimensionTimeBucketSumOperator;
+import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Operator.InputPort;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.contrib.redis.RedisKeyValPairOutputOperator;
-import com.datatorrent.contrib.redis.RedisMapOutputOperator;
-import com.datatorrent.contrib.redis.RedisNumberSummationMapOutputOperator;
-import com.datatorrent.lib.algo.TopN;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.io.PubSubWebSocketOutputOperator;
-import com.datatorrent.lib.logs.DimensionObject;
-import com.datatorrent.lib.logs.MultiWindowDimensionAggregation;
-import com.datatorrent.lib.logs.MultiWindowDimensionAggregation.AggregateOperation;
-import com.datatorrent.lib.stream.Counter;
-import com.datatorrent.lib.stream.JsonByteArrayOperator;
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.util.AbstractDimensionTimeBucketOperator;
-import com.datatorrent.lib.util.DimensionTimeBucketSumOperator;
 
 /**
  * Log stream processing application based on Apex platform.<br>
diff --git a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/Application1.java b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/Application1.java
index 333b877..a458b3c 100644
--- a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/Application1.java
+++ b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/Application1.java
@@ -18,11 +18,10 @@
  */
 package com.datatorrent.apps.logstream;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.stream.JsonByteArrayOperator;
 import org.apache.hadoop.conf.Configuration;
 
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.stream.JsonByteArrayOperator;
-
 import com.datatorrent.api.Context.PortContext;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
diff --git a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/DimensionOperator.java b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/DimensionOperator.java
index 2650795..de96781 100644
--- a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/DimensionOperator.java
+++ b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/DimensionOperator.java
@@ -28,10 +28,11 @@
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.codec.KryoSerializableStreamCodec;
+import org.apache.apex.malhar.lib.logs.DimensionObject;
 import org.apache.commons.lang.mutable.MutableDouble;
 
-import com.datatorrent.lib.codec.KryoSerializableStreamCodec;
-import com.datatorrent.lib.logs.DimensionObject;
 import com.datatorrent.api.*;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.Partitioner.PartitioningContext;
diff --git a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/DimensionOperatorUnifier.java b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/DimensionOperatorUnifier.java
index e495ee6..606edb7 100644
--- a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/DimensionOperatorUnifier.java
+++ b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/DimensionOperatorUnifier.java
@@ -26,10 +26,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.logs.DimensionObject;
 import org.apache.commons.lang.mutable.MutableDouble;
 
-import com.datatorrent.lib.logs.DimensionObject;
-
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator.Unifier;
diff --git a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/LogScoreOperator.java b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/LogScoreOperator.java
index 57c558b..74dc3a6 100644
--- a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/LogScoreOperator.java
+++ b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/LogScoreOperator.java
@@ -20,10 +20,12 @@
 
 import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.DefaultInputPort;
-import com.datatorrent.lib.logs.DimensionObject;
+
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.logs.DimensionObject;
+
 /**
  * Log Score
  *
diff --git a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/LogstreamTopN.java b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/LogstreamTopN.java
index a09e64f..8df62fa 100644
--- a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/LogstreamTopN.java
+++ b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/LogstreamTopN.java
@@ -28,9 +28,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.algo.TopN;
-import com.datatorrent.lib.codec.KryoSerializableStreamCodec;
-import com.datatorrent.lib.logs.DimensionObject;
+import org.apache.apex.malhar.lib.algo.TopN;
+import org.apache.apex.malhar.lib.codec.KryoSerializableStreamCodec;
+import org.apache.apex.malhar.lib.logs.DimensionObject;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultPartition;
diff --git a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/LogstreamWidgetOutputOperator.java b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/LogstreamWidgetOutputOperator.java
index 29c92e6..715cb6b 100644
--- a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/LogstreamWidgetOutputOperator.java
+++ b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/LogstreamWidgetOutputOperator.java
@@ -26,11 +26,10 @@
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.io.WidgetOutputOperator;
+import org.apache.apex.malhar.lib.logs.DimensionObject;
 import org.apache.commons.lang3.tuple.MutablePair;
 
-import com.datatorrent.lib.io.WidgetOutputOperator;
-import com.datatorrent.lib.logs.DimensionObject;
-
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultInputPort;
 
diff --git a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/RabbitMQLogsInputOperator.java b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/RabbitMQLogsInputOperator.java
index a72dd05..a4e7fd2 100644
--- a/apps/logstream/src/main/java/com/datatorrent/apps/logstream/RabbitMQLogsInputOperator.java
+++ b/apps/logstream/src/main/java/com/datatorrent/apps/logstream/RabbitMQLogsInputOperator.java
@@ -24,13 +24,14 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.contrib.rabbitmq.AbstractSinglePortRabbitMQInputOperator;
+
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.Partitioner.PartitioningContext;
 import com.datatorrent.api.DefaultPartition;
 import com.datatorrent.api.Partitioner;
 import com.datatorrent.apps.logstream.PropertyRegistry.LogstreamPropertyRegistry;
 import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.contrib.rabbitmq.AbstractSinglePortRabbitMQInputOperator;
 
 /**
  *
diff --git a/apps/logstream/src/test/java/com/datatorrent/apps/logstream/DimensionOperatorTest.java b/apps/logstream/src/test/java/com/datatorrent/apps/logstream/DimensionOperatorTest.java
index 1ecd094..6eadc6e 100644
--- a/apps/logstream/src/test/java/com/datatorrent/apps/logstream/DimensionOperatorTest.java
+++ b/apps/logstream/src/test/java/com/datatorrent/apps/logstream/DimensionOperatorTest.java
@@ -26,11 +26,10 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.logs.DimensionObject;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.lang.mutable.MutableDouble;
 
-import com.datatorrent.lib.logs.DimensionObject;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
 import com.datatorrent.apps.logstream.PropertyRegistry.LogstreamPropertyRegistry;
 import com.datatorrent.netlet.util.DTThrowable;
 
diff --git a/apps/logstream/src/test/java/com/datatorrent/apps/logstream/DimensionOperatorUnifierTest.java b/apps/logstream/src/test/java/com/datatorrent/apps/logstream/DimensionOperatorUnifierTest.java
index a835dab..05929e2 100644
--- a/apps/logstream/src/test/java/com/datatorrent/apps/logstream/DimensionOperatorUnifierTest.java
+++ b/apps/logstream/src/test/java/com/datatorrent/apps/logstream/DimensionOperatorUnifierTest.java
@@ -26,11 +26,10 @@
 
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.logs.DimensionObject;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.lang.mutable.MutableDouble;
 
-import com.datatorrent.lib.logs.DimensionObject;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
 /**
  *
  * Tests logstream dimension operator unifier.
diff --git a/apps/logstream/src/test/java/com/datatorrent/apps/logstream/FilterOperatorTest.java b/apps/logstream/src/test/java/com/datatorrent/apps/logstream/FilterOperatorTest.java
index 2b7a5bd..a2bc229 100644
--- a/apps/logstream/src/test/java/com/datatorrent/apps/logstream/FilterOperatorTest.java
+++ b/apps/logstream/src/test/java/com/datatorrent/apps/logstream/FilterOperatorTest.java
@@ -23,7 +23,7 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 import com.datatorrent.apps.logstream.PropertyRegistry.LogstreamPropertyRegistry;
 
diff --git a/apps/logstream/src/test/java/com/datatorrent/apps/logstream/LogstreamTopNTest.java b/apps/logstream/src/test/java/com/datatorrent/apps/logstream/LogstreamTopNTest.java
index 69d0567..d83373c 100644
--- a/apps/logstream/src/test/java/com/datatorrent/apps/logstream/LogstreamTopNTest.java
+++ b/apps/logstream/src/test/java/com/datatorrent/apps/logstream/LogstreamTopNTest.java
@@ -26,11 +26,10 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.logs.DimensionObject;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.lang.mutable.MutableDouble;
 
-import com.datatorrent.lib.logs.DimensionObject;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
 import com.datatorrent.apps.logstream.PropertyRegistry.LogstreamPropertyRegistry;
 
 /**
diff --git a/apps/pom.xml b/apps/pom.xml
index 679d623..1f46ecd 100644
--- a/apps/pom.xml
+++ b/apps/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-apps</artifactId>
diff --git a/benchmark/pom.xml b/benchmark/pom.xml
index 0822549..1b921d7 100644
--- a/benchmark/pom.xml
+++ b/benchmark/pom.xml
@@ -24,7 +24,7 @@
   <parent>
     <artifactId>malhar</artifactId>
     <groupId>org.apache.apex</groupId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <groupId>org.apache.apex</groupId>
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/ApplicationFixed.java b/benchmark/src/main/java/org/apache/apex/benchmark/ApplicationFixed.java
index aa10eea..1491f47 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/ApplicationFixed.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/ApplicationFixed.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
 
 import org.apache.hadoop.conf.Configuration;
 
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/Benchmark.java b/benchmark/src/main/java/org/apache/apex/benchmark/Benchmark.java
index d8d51b8..6992bd8 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/Benchmark.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/Benchmark.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
 
 import org.apache.hadoop.conf.Configuration;
 
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseAppInput.java b/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseAppInput.java
index bf5b876..6e29652 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseAppInput.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseAppInput.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
 
 import org.apache.hadoop.conf.Configuration;
 
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseAppOutput.java b/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseAppOutput.java
index 4f12791..95eaacc 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseAppOutput.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseAppOutput.java
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
 
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
@@ -25,7 +26,6 @@
 
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
 
 /**
  *
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseInputOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseInputOperator.java
index 8ae0a94..12e43e2 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseInputOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseInputOperator.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
 
 import java.util.ArrayList;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.contrib.couchbase.AbstractCouchBaseInputOperator;
-import com.datatorrent.contrib.couchbase.CouchBaseWindowStore;
+import org.apache.apex.malhar.contrib.couchbase.AbstractCouchBaseInputOperator;
+import org.apache.apex.malhar.contrib.couchbase.CouchBaseWindowStore;
 
 /**
  * <p>CouchBaseInputOperator class.</p>
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseOutputOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseOutputOperator.java
index 8b6fc49..43a8e91 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseOutputOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/CouchBaseOutputOperator.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
 
-import com.datatorrent.contrib.couchbase.AbstractCouchBaseSetOperator;
+import org.apache.apex.malhar.contrib.couchbase.AbstractCouchBaseSetOperator;
 
 /**
  * <p>CouchBaseOutputOperator class.</p>
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/FixedTuplesInputOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/FixedTuplesInputOperator.java
index f2582bd..c3248bf 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/FixedTuplesInputOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/FixedTuplesInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
 
 import java.util.ArrayList;
 
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/RandomMapOutput.java b/benchmark/src/main/java/org/apache/apex/benchmark/RandomMapOutput.java
index 3342771..d5af7a5 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/RandomMapOutput.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/RandomMapOutput.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
 
 import java.util.HashMap;
 
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/RandomWordInputModule.java b/benchmark/src/main/java/org/apache/apex/benchmark/RandomWordInputModule.java
index 7d02de2..7224df3 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/RandomWordInputModule.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/RandomWordInputModule.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
 
 import javax.validation.constraints.Min;
 
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/WordCountOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/WordCountOperator.java
index 8c55404..1138e84 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/WordCountOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/WordCountOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
 
 /*
  * To change this template, choose Tools | Templates and open the template in the editor.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/aerospike/AerospikeOutputBenchmarkApplication.java b/benchmark/src/main/java/org/apache/apex/benchmark/aerospike/AerospikeOutputBenchmarkApplication.java
index 0a880fd..3282e32 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/aerospike/AerospikeOutputBenchmarkApplication.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/aerospike/AerospikeOutputBenchmarkApplication.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.aerospike;
+package org.apache.apex.benchmark.aerospike;
 
+import org.apache.apex.malhar.contrib.aerospike.AerospikeTransactionalStore;
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.aerospike.AerospikeTransactionalStore;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
 
 /**
  * Application to benchmark the performance of aerospike output operator.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/aerospike/AerospikeOutputOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/aerospike/AerospikeOutputOperator.java
index f9ee689..bb3661b 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/aerospike/AerospikeOutputOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/aerospike/AerospikeOutputOperator.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.aerospike;
+package org.apache.apex.benchmark.aerospike;
 
 import java.util.List;
 
+import org.apache.apex.malhar.contrib.aerospike.AbstractAerospikeTransactionalPutOperator;
+
 import com.aerospike.client.AerospikeException;
 import com.aerospike.client.Bin;
 import com.aerospike.client.Key;
 
-import com.datatorrent.contrib.aerospike.AbstractAerospikeTransactionalPutOperator;
-
 /**
  * <p>AerospikeOutputOperator class.</p>
  *
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/algo/UniqueValueCountBenchmarkApplication.java b/benchmark/src/main/java/org/apache/apex/benchmark/algo/UniqueValueCountBenchmarkApplication.java
index f74311e..8e1d8b8 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/algo/UniqueValueCountBenchmarkApplication.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/algo/UniqueValueCountBenchmarkApplication.java
@@ -16,8 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.algo;
+package org.apache.apex.benchmark.algo;
 
+import org.apache.apex.malhar.lib.algo.UniqueCounter;
+import org.apache.apex.malhar.lib.converter.MapToKeyHashValuePairConverter;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.stream.Counter;
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
@@ -27,13 +32,6 @@
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.common.partitioner.StatelessPartitioner;
 
-import com.datatorrent.lib.algo.UniqueCounter;
-import com.datatorrent.lib.converter.MapToKeyHashValuePairConverter;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-
-import com.datatorrent.lib.stream.Counter;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
-
 /**
  * Application to demonstrate PartitionableUniqueCount operator. <br>
  * The input operator generate random keys, which is sent to
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/cassandra/CassandraOutputBenchmarkApplication.java b/benchmark/src/main/java/org/apache/apex/benchmark/cassandra/CassandraOutputBenchmarkApplication.java
index 46d503f..6f91cd1 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/cassandra/CassandraOutputBenchmarkApplication.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/cassandra/CassandraOutputBenchmarkApplication.java
@@ -16,8 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.cassandra;
+package org.apache.apex.benchmark.cassandra;
 
+import org.apache.apex.malhar.contrib.cassandra.CassandraTransactionalStore;
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
@@ -26,10 +28,6 @@
 
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 
-import com.datatorrent.contrib.cassandra.CassandraTransactionalStore;
-
-import com.datatorrent.lib.testbench.RandomEventGenerator;
-
 /**
  * Application to benchmark the performance of cassandra output operator.
  * The operator was tested on following configuration:
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/cassandra/CassandraOutputOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/cassandra/CassandraOutputOperator.java
index 592d8a2..90bc44b 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/cassandra/CassandraOutputOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/cassandra/CassandraOutputOperator.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.cassandra;
+package org.apache.apex.benchmark.cassandra;
+
+import org.apache.apex.malhar.contrib.cassandra.AbstractCassandraTransactionableOutputOperator;
 
 import com.datastax.driver.core.BoundStatement;
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Statement;
 import com.datastax.driver.core.exceptions.DriverException;
 
-import com.datatorrent.contrib.cassandra.AbstractCassandraTransactionableOutputOperator;
-
 /**
  * <p>CassandraOutputOperator class.</p>
  *
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/fs/FSByteOutputOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/fs/FSByteOutputOperator.java
index ce0821c..56dd731 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/fs/FSByteOutputOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/fs/FSByteOutputOperator.java
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.fs;
+package org.apache.apex.benchmark.fs;
 
 import java.util.Arrays;
 
 import javax.validation.constraints.Min;
 
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperator;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperator;
 
 /**
  * This output operator receives
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/fs/FSOutputOperatorBenchmark.java b/benchmark/src/main/java/org/apache/apex/benchmark/fs/FSOutputOperatorBenchmark.java
index 7a63d18..baddbc1 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/fs/FSOutputOperatorBenchmark.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/fs/FSOutputOperatorBenchmark.java
@@ -16,8 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.fs;
+package org.apache.apex.benchmark.fs;
 
+import org.apache.apex.malhar.lib.counters.BasicCounters;
+import org.apache.apex.malhar.lib.testbench.RandomWordGenerator;
 import org.apache.commons.lang.mutable.MutableLong;
 import org.apache.hadoop.conf.Configuration;
 
@@ -29,10 +31,6 @@
 
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 
-import com.datatorrent.lib.counters.BasicCounters;
-
-import com.datatorrent.lib.testbench.RandomWordGenerator;
-
 /**
  * Application used to benchmark HDFS output operator
  * The DAG consists of random word generator operator that is
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/hive/HiveInsertBenchmarkingApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/hive/HiveInsertBenchmarkingApp.java
index 95fa961..2ecb2eb 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/hive/HiveInsertBenchmarkingApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/hive/HiveInsertBenchmarkingApp.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.hive;
+package org.apache.apex.benchmark.hive;
 
 import java.sql.SQLException;
 import java.sql.Statement;
@@ -28,6 +28,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.hive.AbstractFSRollingOutputOperator;
+import org.apache.apex.malhar.hive.HiveOperator;
+import org.apache.apex.malhar.hive.HiveStore;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.OperatorContext;
@@ -39,9 +42,6 @@
 import com.datatorrent.api.StreamingApplication;
 
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.hive.AbstractFSRollingOutputOperator;
-import com.datatorrent.contrib.hive.HiveOperator;
-import com.datatorrent.contrib.hive.HiveStore;
 
 /**
  * Application used to benchmark HIVE Insert operator
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/hive/HiveMapInsertBenchmarkingApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/hive/HiveMapInsertBenchmarkingApp.java
index 98d9ce3..800fa5a 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/hive/HiveMapInsertBenchmarkingApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/hive/HiveMapInsertBenchmarkingApp.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.hive;
+package org.apache.apex.benchmark.hive;
 
 import java.sql.SQLException;
 import java.sql.Statement;
@@ -27,18 +27,17 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.benchmark.RandomMapOutput;
+import org.apache.apex.malhar.hive.AbstractFSRollingOutputOperator;
+import org.apache.apex.malhar.hive.HiveOperator;
+import org.apache.apex.malhar.hive.HiveStore;
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.PortContext;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.benchmark.RandomMapOutput;
-
-import com.datatorrent.contrib.hive.AbstractFSRollingOutputOperator;
-import com.datatorrent.contrib.hive.HiveOperator;
-import com.datatorrent.contrib.hive.HiveStore;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
 
 
 /**
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/kafka/BenchmarkKafkaInputOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/kafka/BenchmarkKafkaInputOperator.java
index e147ad7..0bde5ed 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/kafka/BenchmarkKafkaInputOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/kafka/BenchmarkKafkaInputOperator.java
@@ -16,10 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.kafka;
+package org.apache.apex.benchmark.kafka;
+
+import org.apache.apex.malhar.contrib.kafka.AbstractKafkaInputOperator;
 
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.contrib.kafka.AbstractKafkaInputOperator;
 
 import kafka.message.Message;
 
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/kafka/BenchmarkPartitionableKafkaOutputOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/kafka/BenchmarkPartitionableKafkaOutputOperator.java
index 6353c37..37b4d0a 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/kafka/BenchmarkPartitionableKafkaOutputOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/kafka/BenchmarkPartitionableKafkaOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.kafka;
+package org.apache.apex.benchmark.kafka;
 
 import java.util.ArrayList;
 import java.util.Collection;
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/kafka/KafkaInputBenchmark.java b/benchmark/src/main/java/org/apache/apex/benchmark/kafka/KafkaInputBenchmark.java
index ead6c66..e51da05 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/kafka/KafkaInputBenchmark.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/kafka/KafkaInputBenchmark.java
@@ -16,11 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.kafka;
+package org.apache.apex.benchmark.kafka;
 
 import java.util.Properties;
 
-
+import org.apache.apex.malhar.contrib.kafka.HighlevelKafkaConsumer;
+import org.apache.apex.malhar.contrib.kafka.KafkaConsumer;
+import org.apache.apex.malhar.contrib.kafka.SimpleKafkaConsumer;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.OperatorContext;
@@ -35,9 +37,6 @@
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.contrib.kafka.HighlevelKafkaConsumer;
-import com.datatorrent.contrib.kafka.KafkaConsumer;
-import com.datatorrent.contrib.kafka.SimpleKafkaConsumer;
 
 /**
  * The stream app to test the benckmark of kafka
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/kafka/KafkaOutputBenchmark.java b/benchmark/src/main/java/org/apache/apex/benchmark/kafka/KafkaOutputBenchmark.java
index 0dd4352..e8578a6 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/kafka/KafkaOutputBenchmark.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/kafka/KafkaOutputBenchmark.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.kafka;
+package org.apache.apex.benchmark.kafka;
 
 import org.apache.hadoop.conf.Configuration;
 
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/kafka/KafkaTestPartitioner.java b/benchmark/src/main/java/org/apache/apex/benchmark/kafka/KafkaTestPartitioner.java
index 65601d5..64ef2c7 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/kafka/KafkaTestPartitioner.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/kafka/KafkaTestPartitioner.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.kafka;
+package org.apache.apex.benchmark.kafka;
 
 import kafka.producer.Partitioner;
 import kafka.utils.VerifiableProperties;
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/package-info.java b/benchmark/src/main/java/org/apache/apex/benchmark/package-info.java
index 5ee1888..9f99b8f 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/package-info.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/package-info.java
@@ -19,4 +19,4 @@
 /**
  * Apex malhar performance demonstration application.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/script/RubyOperatorBenchmarkApplication.java b/benchmark/src/main/java/org/apache/apex/benchmark/script/RubyOperatorBenchmarkApplication.java
index b86cd01..065f546 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/script/RubyOperatorBenchmarkApplication.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/script/RubyOperatorBenchmarkApplication.java
@@ -16,8 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.script;
+package org.apache.apex.benchmark.script;
 
+import org.apache.apex.benchmark.RandomMapOutput;
+import org.apache.apex.malhar.contrib.ruby.RubyOperator;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.PortContext;
@@ -27,12 +31,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 
-import com.datatorrent.benchmark.RandomMapOutput;
-import com.datatorrent.contrib.ruby.RubyOperator;
-
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
-
 /**
  *
  * Application to benchmark the performance of ruby operator.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/spillable/SpillableBenchmarkApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/spillable/SpillableBenchmarkApp.java
index 300ea64..4419a11 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/spillable/SpillableBenchmarkApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/spillable/SpillableBenchmarkApp.java
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.spillable;
+package org.apache.apex.benchmark.spillable;
 
+import org.apache.apex.malhar.lib.fileaccess.TFileImpl;
 import org.apache.apex.malhar.lib.state.spillable.managed.ManagedStateSpillableStateStore;
 import org.apache.hadoop.conf.Configuration;
 
@@ -26,7 +27,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.fileaccess.TFileImpl;
 
 @ApplicationAnnotation(name = "SpillableBenchmarkApp")
 /**
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/spillable/SpillableTestInputOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/spillable/SpillableTestInputOperator.java
index 9bee9a6..0285f04 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/spillable/SpillableTestInputOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/spillable/SpillableTestInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.spillable;
+package org.apache.apex.benchmark.spillable;
 
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/spillable/SpillableTestOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/spillable/SpillableTestOperator.java
index 7c45106..c827acb 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/spillable/SpillableTestOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/spillable/SpillableTestOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.spillable;
+package org.apache.apex.benchmark.spillable;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/state/ManagedStateBenchmarkApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/state/ManagedStateBenchmarkApp.java
index 2dc6f0d..5ba8a33 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/state/ManagedStateBenchmarkApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/state/ManagedStateBenchmarkApp.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.state;
+package org.apache.apex.benchmark.state;
 
 import java.io.IOException;
 import java.io.Serializable;
@@ -27,7 +27,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.fileaccess.TFileImpl;
 import org.apache.apex.malhar.lib.state.managed.ManagedTimeUnifiedStateImpl;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.collect.Lists;
@@ -43,8 +45,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.fileaccess.TFileImpl;
-import com.datatorrent.lib.util.KeyValPair;
 
 @ApplicationAnnotation(name = "ManagedStateBenchmark")
 /**
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/state/StoreOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/state/StoreOperator.java
index 60a775c..eea4ac5 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/state/StoreOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/state/StoreOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.state;
+package org.apache.apex.benchmark.state;
 
 import java.nio.ByteBuffer;
 import java.util.LinkedList;
@@ -28,6 +28,7 @@
 import org.slf4j.LoggerFactory;
 
 import org.apache.apex.malhar.lib.state.managed.ManagedTimeUnifiedStateImpl;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 import com.google.common.collect.Maps;
 
@@ -35,7 +36,6 @@
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.Operator;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/stream/DevNullCounterBenchmark.java b/benchmark/src/main/java/org/apache/apex/benchmark/stream/DevNullCounterBenchmark.java
index b0b7314..ef853e1 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/stream/DevNullCounterBenchmark.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/stream/DevNullCounterBenchmark.java
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.stream;
+package org.apache.apex.benchmark.stream;
 
+import org.apache.apex.malhar.lib.stream.DevNullCounter;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.PortContext;
@@ -25,11 +26,10 @@
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.stream.DevNullCounter;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.testbench.DevNullCounter}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.testbench.DevNullCounter}.
  * <p>
  * <br>
  * oper.process is called a billion times<br>
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/stream/IntegerOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/stream/IntegerOperator.java
index c716206..1fca7e5 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/stream/IntegerOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/stream/IntegerOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.stream;
+package org.apache.apex.benchmark.stream;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/stream/StreamDuplicaterApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/stream/StreamDuplicaterApp.java
index 2e5bcf9..37936e6 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/stream/StreamDuplicaterApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/stream/StreamDuplicaterApp.java
@@ -16,8 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.stream;
+package org.apache.apex.benchmark.stream;
 
+import org.apache.apex.malhar.lib.stream.DevNull;
+import org.apache.apex.malhar.lib.stream.StreamDuplicater;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.PortContext;
@@ -25,8 +27,6 @@
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.stream.DevNull;
-import com.datatorrent.lib.stream.StreamDuplicater;
 
 /**
  * Benchmark App for StreamDuplicater Operator.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/stream/StreamMergeApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/stream/StreamMergeApp.java
index bb1d081..de9507a 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/stream/StreamMergeApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/stream/StreamMergeApp.java
@@ -16,8 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.stream;
+package org.apache.apex.benchmark.stream;
 
+import org.apache.apex.benchmark.WordCountOperator;
+import org.apache.apex.malhar.lib.stream.StreamMerger;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.PortContext;
@@ -25,8 +27,6 @@
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.benchmark.WordCountOperator;
-import com.datatorrent.lib.stream.StreamMerger;
 
 /**
  * Benchmark App for StreamMerge Operator.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventClassifierApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventClassifierApp.java
index b1ddbee..d12267e 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventClassifierApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventClassifierApp.java
@@ -16,11 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.stream.DevNull;
+import org.apache.apex.malhar.lib.testbench.EventClassifier;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.PortContext;
@@ -28,8 +30,6 @@
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.stream.DevNull;
-import com.datatorrent.lib.testbench.EventClassifier;
 
 /**
  * Benchmark App for EventClassifier Operator.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventClassifierNumberToHashDoubleApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventClassifierNumberToHashDoubleApp.java
index 5fe478b..c1405fc 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventClassifierNumberToHashDoubleApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventClassifierNumberToHashDoubleApp.java
@@ -16,10 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.util.HashMap;
 
+import org.apache.apex.benchmark.WordCountOperator;
+import org.apache.apex.benchmark.stream.IntegerOperator;
+import org.apache.apex.malhar.lib.testbench.EventClassifierNumberToHashDouble;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.PortContext;
@@ -27,9 +30,6 @@
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.benchmark.WordCountOperator;
-import com.datatorrent.benchmark.stream.IntegerOperator;
-import com.datatorrent.lib.testbench.EventClassifierNumberToHashDouble;
 
 /**
  * Benchmark App for EventClassifierNumberToHashDouble Operator.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventGeneratorApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventGeneratorApp.java
index 8f28ae6..0c997dc 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventGeneratorApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventGeneratorApp.java
@@ -16,10 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.stream.DevNull;
+import org.apache.apex.malhar.lib.testbench.EventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.PortContext;
@@ -27,8 +29,6 @@
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.stream.DevNull;
-import com.datatorrent.lib.testbench.EventGenerator;
 
 /**
  * Benchmark App for EventGenerator Operator.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventIncrementerApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventIncrementerApp.java
index e562224..d7aa2dc 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventIncrementerApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/EventIncrementerApp.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.stream.DevNull;
+import org.apache.apex.malhar.lib.testbench.EventIncrementer;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.stream.DevNull;
-import com.datatorrent.lib.testbench.EventIncrementer;
 
 /**
  * Benchmark App for EventIncrementer Operator.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/FilterClassifierApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/FilterClassifierApp.java
index ea2943f..57664ac 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/FilterClassifierApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/FilterClassifierApp.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.stream.DevNull;
+import org.apache.apex.malhar.lib.testbench.FilterClassifier;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.stream.DevNull;
-import com.datatorrent.lib.testbench.FilterClassifier;
 
 /**
  * Benchmark App for FilterClassifier Operator.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/FilteredEventClassifierApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/FilteredEventClassifierApp.java
index 52c0bed..f282838 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/FilteredEventClassifierApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/FilteredEventClassifierApp.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.stream.DevNull;
+import org.apache.apex.malhar.lib.testbench.FilteredEventClassifier;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.stream.DevNull;
-import com.datatorrent.lib.testbench.FilteredEventClassifier;
 
 /**
  * Benchmark App for FilteredEventClassifier Operator.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/HashMapOperator.java b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/HashMapOperator.java
index 29cd079..66fab36 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/HashMapOperator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/HashMapOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -24,10 +24,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.EventGenerator;
+
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
-import com.datatorrent.lib.testbench.EventGenerator;
 
 /**
  * HashMap Input Operator used as a helper in testbench benchmarking apps.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/RandomEventGeneratorApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/RandomEventGeneratorApp.java
index df5b11e..bdca047 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/RandomEventGeneratorApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/RandomEventGeneratorApp.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
+import org.apache.apex.malhar.lib.stream.DevNull;
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.stream.DevNull;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
 
 /**
  * Benchmark App for RandomEventGenerator Operator.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/SeedEventGeneratorApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/SeedEventGeneratorApp.java
index faafcbf..0b7f7b5 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/SeedEventGeneratorApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/SeedEventGeneratorApp.java
@@ -16,10 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+
+import org.apache.apex.malhar.lib.stream.DevNull;
+import org.apache.apex.malhar.lib.testbench.SeedEventGenerator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.PortContext;
@@ -27,9 +31,6 @@
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.stream.DevNull;
-import com.datatorrent.lib.testbench.SeedEventGenerator;
-import com.datatorrent.lib.util.KeyValPair;
 
 
 /**
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/ThroughputCounterApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/ThroughputCounterApp.java
index d6e762e..4ad35f9 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/testbench/ThroughputCounterApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/testbench/ThroughputCounterApp.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.stream.DevNull;
+import org.apache.apex.malhar.lib.testbench.ThroughputCounter;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.stream.DevNull;
-import com.datatorrent.lib.testbench.ThroughputCounter;
 
 /**
  * Benchmark App for ThroughputCounter Operator.
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/window/AbstractGenerator.java b/benchmark/src/main/java/org/apache/apex/benchmark/window/AbstractGenerator.java
index bfdc0ec..a12354e 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/window/AbstractGenerator.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/window/AbstractGenerator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.window;
+package org.apache.apex.benchmark.window;
 
 import java.nio.ByteBuffer;
 import java.util.Random;
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/window/AbstractWindowedOperatorBenchmarkApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/window/AbstractWindowedOperatorBenchmarkApp.java
index 7a345fe..dc0ad48 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/window/AbstractWindowedOperatorBenchmarkApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/window/AbstractWindowedOperatorBenchmarkApp.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.window;
+package org.apache.apex.benchmark.window;
 
 import java.io.IOException;
 import java.io.Serializable;
@@ -25,10 +25,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.benchmark.window.WindowedOperatorBenchmarkApp.WindowedGenerator;
+import org.apache.apex.malhar.lib.fileaccess.TFileImpl;
 import org.apache.apex.malhar.lib.state.managed.UnboundedTimeBucketAssigner;
 import org.apache.apex.malhar.lib.state.spillable.SpillableComplexComponentImpl;
 import org.apache.apex.malhar.lib.state.spillable.SpillableStateStore;
 import org.apache.apex.malhar.lib.state.spillable.managed.ManagedTimeUnifiedStateSpillableStateStore;
+import org.apache.apex.malhar.lib.stream.DevNull;
 import org.apache.apex.malhar.lib.window.Accumulation;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.WindowOption;
@@ -47,9 +50,6 @@
 import com.datatorrent.api.Stats.OperatorStats;
 import com.datatorrent.api.StatsListener;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.benchmark.window.WindowedOperatorBenchmarkApp.WindowedGenerator;
-import com.datatorrent.lib.fileaccess.TFileImpl;
-import com.datatorrent.lib.stream.DevNull;
 
 /**
  * @since 3.7.0
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/window/KeyedWindowedOperatorBenchmarkApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/window/KeyedWindowedOperatorBenchmarkApp.java
index 7e38584..b8dce7f 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/window/KeyedWindowedOperatorBenchmarkApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/window/KeyedWindowedOperatorBenchmarkApp.java
@@ -16,14 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.window;
+package org.apache.apex.benchmark.window;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.fileaccess.TFileImpl;
 import org.apache.apex.malhar.lib.state.spillable.SpillableComplexComponentImpl;
 import org.apache.apex.malhar.lib.state.spillable.SpillableSetMultimapImpl;
 import org.apache.apex.malhar.lib.state.spillable.managed.ManagedStateSpillableStateStore;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.utils.serde.GenericSerde;
 import org.apache.apex.malhar.lib.window.Accumulation;
 import org.apache.apex.malhar.lib.window.Tuple;
@@ -39,8 +41,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.fileaccess.TFileImpl;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * @since 3.7.0
diff --git a/benchmark/src/main/java/org/apache/apex/benchmark/window/WindowedOperatorBenchmarkApp.java b/benchmark/src/main/java/org/apache/apex/benchmark/window/WindowedOperatorBenchmarkApp.java
index 7e402fc..15a577e 100644
--- a/benchmark/src/main/java/org/apache/apex/benchmark/window/WindowedOperatorBenchmarkApp.java
+++ b/benchmark/src/main/java/org/apache/apex/benchmark/window/WindowedOperatorBenchmarkApp.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.window;
+package org.apache.apex.benchmark.window;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/ApplicationFixedTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/ApplicationFixedTest.java
index cd8a3ec..644cd01 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/ApplicationFixedTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/ApplicationFixedTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
 
 import java.io.IOException;
 
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/BenchmarkTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/BenchmarkTest.java
index 0a21a7c..c5249a2 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/BenchmarkTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/BenchmarkTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
 
 import java.io.IOException;
 
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/CouchBaseBenchmarkTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/CouchBaseBenchmarkTest.java
index 6a1c968..aef17b3 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/CouchBaseBenchmarkTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/CouchBaseBenchmarkTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark;
+package org.apache.apex.benchmark;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/accumulo/AccumuloApp.java b/benchmark/src/test/java/org/apache/apex/benchmark/accumulo/AccumuloApp.java
index e2936fe..3417b58 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/accumulo/AccumuloApp.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/accumulo/AccumuloApp.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.accumulo;
+package org.apache.apex.benchmark.accumulo;
 
 import org.apache.accumulo.core.data.Mutation;
+import org.apache.apex.malhar.contrib.accumulo.AbstractAccumuloOutputOperator;
+import org.apache.apex.malhar.contrib.accumulo.AccumuloRowTupleGenerator;
+import org.apache.apex.malhar.contrib.accumulo.AccumuloTestHelper;
+import org.apache.apex.malhar.contrib.accumulo.AccumuloTuple;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.contrib.accumulo.AbstractAccumuloOutputOperator;
-import com.datatorrent.contrib.accumulo.AccumuloRowTupleGenerator;
-import com.datatorrent.contrib.accumulo.AccumuloTestHelper;
-import com.datatorrent.contrib.accumulo.AccumuloTuple;
 
 /**
  * BenchMark Results
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/accumulo/AccumuloAppTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/accumulo/AccumuloAppTest.java
index 8b47a9b..0f48d16 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/accumulo/AccumuloAppTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/accumulo/AccumuloAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.accumulo;
+package org.apache.apex.benchmark.accumulo;
 
 import org.junit.Test;
 
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/aerospike/AerospikeBenchmarkAppTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/aerospike/AerospikeBenchmarkAppTest.java
index 14fe441..9eea1b7 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/aerospike/AerospikeBenchmarkAppTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/aerospike/AerospikeBenchmarkAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.aerospike;
+package org.apache.apex.benchmark.aerospike;
 
 import org.junit.Test;
 
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/algo/UniqueValueCountBenchmarkTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/algo/UniqueValueCountBenchmarkTest.java
index 079d073..56c0cf2 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/algo/UniqueValueCountBenchmarkTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/algo/UniqueValueCountBenchmarkTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.algo;
+package org.apache.apex.benchmark.algo;
 
 import org.junit.Test;
 
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/cassandra/CassandraApplicatonTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/cassandra/CassandraApplicatonTest.java
index ec4f308..1708eaf 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/cassandra/CassandraApplicatonTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/cassandra/CassandraApplicatonTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.cassandra;
+package org.apache.apex.benchmark.cassandra;
 
 import org.junit.Test;
 
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/hbase/HBaseApplicationTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/hbase/HBaseApplicationTest.java
index 32a4907..94bc6a9 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/hbase/HBaseApplicationTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/hbase/HBaseApplicationTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.hbase;
+package org.apache.apex.benchmark.hbase;
 
 import org.junit.Test;
 
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/hbase/HBaseCsvMappingApplication.java b/benchmark/src/test/java/org/apache/apex/benchmark/hbase/HBaseCsvMappingApplication.java
index b61f1d3..b6ec667 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/hbase/HBaseCsvMappingApplication.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/hbase/HBaseCsvMappingApplication.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.hbase;
+package org.apache.apex.benchmark.hbase;
 
+import org.apache.apex.malhar.contrib.hbase.HBaseCsvMappingPutOperator;
+import org.apache.apex.malhar.contrib.hbase.HBaseRowStringGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.hbase.HBaseCsvMappingPutOperator;
-import com.datatorrent.contrib.hbase.HBaseRowStringGenerator;
 
 /**
  * BenchMark Results
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/hive/HiveInsertBenchmarkTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/hive/HiveInsertBenchmarkTest.java
index 653c6f6..aa50e45 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/hive/HiveInsertBenchmarkTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/hive/HiveInsertBenchmarkTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.hive;
+package org.apache.apex.benchmark.hive;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/hive/HiveMapBenchmarkTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/hive/HiveMapBenchmarkTest.java
index e0097c6..6bd2edf 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/hive/HiveMapBenchmarkTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/hive/HiveMapBenchmarkTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.hive;
+package org.apache.apex.benchmark.hive;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/kafka/KafkaInputBenchmarkTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/kafka/KafkaInputBenchmarkTest.java
index 6cb901a..8f2c42c 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/kafka/KafkaInputBenchmarkTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/kafka/KafkaInputBenchmarkTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.kafka;
+package org.apache.apex.benchmark.kafka;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/kafka/KafkaOutputBenchmarkTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/kafka/KafkaOutputBenchmarkTest.java
index 4de7193..1823a00 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/kafka/KafkaOutputBenchmarkTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/kafka/KafkaOutputBenchmarkTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.kafka;
+package org.apache.apex.benchmark.kafka;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlInputBenchmark.java b/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlInputBenchmark.java
index 9201cd5..413438a 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlInputBenchmark.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlInputBenchmark.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.memsql;
+package org.apache.apex.benchmark.memsql;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.contrib.memsql.MemsqlInputOperator;
+import org.apache.apex.malhar.lib.stream.DevNull;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.memsql.MemsqlInputOperator;
-import com.datatorrent.lib.stream.DevNull;
 
 /**
  * BenchMark Results
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlInputBenchmarkTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlInputBenchmarkTest.java
index a596903..f3127a5 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlInputBenchmarkTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlInputBenchmarkTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.memsql;
+package org.apache.apex.benchmark.memsql;
 
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -28,6 +28,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.contrib.memsql.AbstractMemsqlOutputOperatorTest;
+import org.apache.apex.malhar.contrib.memsql.MemsqlPOJOOutputOperator;
+import org.apache.apex.malhar.contrib.memsql.MemsqlStore;
 import org.apache.commons.io.IOUtils;
 import org.apache.hadoop.conf.Configuration;
 
@@ -35,15 +38,12 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.Operator.ProcessingMode;
-import com.datatorrent.contrib.memsql.AbstractMemsqlOutputOperatorTest;
-import com.datatorrent.contrib.memsql.MemsqlPOJOOutputOperator;
-import com.datatorrent.contrib.memsql.MemsqlStore;
 import com.datatorrent.netlet.util.DTThrowable;
 
-import static com.datatorrent.contrib.memsql.AbstractMemsqlOutputOperatorTest.BATCH_SIZE;
-import static com.datatorrent.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.APP_ID;
-import static com.datatorrent.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.OPERATOR_ID;
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.contrib.memsql.AbstractMemsqlOutputOperatorTest.BATCH_SIZE;
+import static org.apache.apex.malhar.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.APP_ID;
+import static org.apache.apex.malhar.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.OPERATOR_ID;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class MemsqlInputBenchmarkTest
 {
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlOutputBenchmark.java b/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlOutputBenchmark.java
index 297bc6d..0b4f126 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlOutputBenchmark.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlOutputBenchmark.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.memsql;
+package org.apache.apex.benchmark.memsql;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.contrib.memsql.MemsqlPOJOOutputOperator;
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.memsql.MemsqlPOJOOutputOperator;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
 
 /**
  * BenchMark Results
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlOutputBenchmarkTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlOutputBenchmarkTest.java
index bf82ab3..3d4766e 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlOutputBenchmarkTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/memsql/MemsqlOutputBenchmarkTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.memsql;
+package org.apache.apex.benchmark.memsql;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
@@ -27,12 +27,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.contrib.memsql.AbstractMemsqlOutputOperatorTest;
+import org.apache.apex.malhar.contrib.memsql.MemsqlStore;
 import org.apache.commons.io.IOUtils;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.LocalMode;
-import com.datatorrent.contrib.memsql.AbstractMemsqlOutputOperatorTest;
-import com.datatorrent.contrib.memsql.MemsqlStore;
 import com.datatorrent.netlet.util.DTThrowable;
 
 public class MemsqlOutputBenchmarkTest
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/script/RubyOperatorBenchmarkAppTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/script/RubyOperatorBenchmarkAppTest.java
index d270e7f..904ea6b 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/script/RubyOperatorBenchmarkAppTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/script/RubyOperatorBenchmarkAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.script;
+package org.apache.apex.benchmark.script;
 
 import org.junit.Test;
 
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/spillable/SpillableBenchmarkAppTester.java b/benchmark/src/test/java/org/apache/apex/benchmark/spillable/SpillableBenchmarkAppTester.java
index cd2c640..6490aa9 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/spillable/SpillableBenchmarkAppTester.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/spillable/SpillableBenchmarkAppTester.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.spillable;
+package org.apache.apex.benchmark.spillable;
 
 import java.io.File;
 
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/spillable/SpillableDSBenchmarkTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/spillable/SpillableDSBenchmarkTest.java
index b87fec1..f6ecf0c 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/spillable/SpillableDSBenchmarkTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/spillable/SpillableDSBenchmarkTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.spillable;
+package org.apache.apex.benchmark.spillable;
 
 import java.util.Random;
 
@@ -27,14 +27,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.fileaccess.TFileImpl;
 import org.apache.apex.malhar.lib.state.spillable.SpillableMapImpl;
 import org.apache.apex.malhar.lib.state.spillable.SpillableTestUtils;
 import org.apache.apex.malhar.lib.state.spillable.managed.ManagedStateSpillableStateStore;
 import org.apache.apex.malhar.lib.utils.serde.Serde;
 import org.apache.apex.malhar.lib.utils.serde.StringSerde;
 
-import com.datatorrent.lib.fileaccess.TFileImpl;
-
 public class SpillableDSBenchmarkTest
 {
   private static final Logger logger = LoggerFactory.getLogger(SpillableDSBenchmarkTest.class);
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/state/ManagedStateBenchmarkAppTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/state/ManagedStateBenchmarkAppTest.java
index dc8f4b4..eb3cc7a 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/state/ManagedStateBenchmarkAppTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/state/ManagedStateBenchmarkAppTest.java
@@ -16,20 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.state;
+package org.apache.apex.benchmark.state;
 
 import java.io.File;
 
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.apex.benchmark.state.StoreOperator.ExecMode;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileUtil;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.benchmark.state.StoreOperator.ExecMode;
 
 /**
  * This is not a really unit test, but in fact a benchmark runner.
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventClassifierAppTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventClassifierAppTest.java
index 99d8a1f..88d66b4 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventClassifierAppTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventClassifierAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventClassifierNumberToHashDoubleAppTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventClassifierNumberToHashDoubleAppTest.java
index 929d8bc..9fb4638 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventClassifierNumberToHashDoubleAppTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventClassifierNumberToHashDoubleAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventGeneratorAppTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventGeneratorAppTest.java
index 5a427a5..0a71ea4 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventGeneratorAppTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventGeneratorAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventIncrementerAppTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventIncrementerAppTest.java
index 1a85a7b..fb4401e 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventIncrementerAppTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/EventIncrementerAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/FilterClassifierAppTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/FilterClassifierAppTest.java
index 9419022..c921a4c 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/FilterClassifierAppTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/FilterClassifierAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/FilteredEventClassifierAppTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/FilteredEventClassifierAppTest.java
index 977d6b7..658e372 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/FilteredEventClassifierAppTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/FilteredEventClassifierAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/ThroughputCounterAppTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/ThroughputCounterAppTest.java
index 92ca0fd..b278f6d 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/testbench/ThroughputCounterAppTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/testbench/ThroughputCounterAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.testbench;
+package org.apache.apex.benchmark.testbench;
 
 import java.io.FileInputStream;
 import java.io.FileNotFoundException;
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/util/serde/GenericSerdePerformanceTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/util/serde/GenericSerdePerformanceTest.java
index 157accc..64fca9e 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/util/serde/GenericSerdePerformanceTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/util/serde/GenericSerdePerformanceTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.util.serde;
+package org.apache.apex.benchmark.util.serde;
 
 import java.util.Random;
 
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/window/KeyedWindowedOperatorBenchmarkAppTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/window/KeyedWindowedOperatorBenchmarkAppTest.java
index 2bc9335..fe9ba0c 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/window/KeyedWindowedOperatorBenchmarkAppTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/window/KeyedWindowedOperatorBenchmarkAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.window;
+package org.apache.apex.benchmark.window;
 
 import java.io.File;
 
diff --git a/benchmark/src/test/java/org/apache/apex/benchmark/window/WindowedOperatorBenchmarkAppTest.java b/benchmark/src/test/java/org/apache/apex/benchmark/window/WindowedOperatorBenchmarkAppTest.java
index 4a16396..b6f3549 100644
--- a/benchmark/src/test/java/org/apache/apex/benchmark/window/WindowedOperatorBenchmarkAppTest.java
+++ b/benchmark/src/test/java/org/apache/apex/benchmark/window/WindowedOperatorBenchmarkAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.benchmark.window;
+package org.apache.apex.benchmark.window;
 
 import java.io.File;
 
diff --git a/contrib/pom.xml b/contrib/pom.xml
index a69ad29..13c77b9 100755
--- a/contrib/pom.xml
+++ b/contrib/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-contrib</artifactId>
@@ -36,7 +36,6 @@
     <!-- skip tests by default as they depend on manual setup -->
     <skip.contrib.module.tests>false</skip.contrib.module.tests>
     <skipTests>true</skipTests>
-    <checkstyle.console>false</checkstyle.console>
   </properties>
   <repositories>
     <repository>
@@ -217,14 +216,6 @@
         <artifactId>japicmp-maven-plugin</artifactId>
       </plugin>
 
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-checkstyle-plugin</artifactId>
-        <configuration>
-          <maxAllowedViolations>2709</maxAllowedViolations>
-          <logViolationsToConsole>${checkstyle.console}</logViolationsToConsole>
-        </configuration>
-      </plugin>
     </plugins>
   </build>
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AbstractAccumuloInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AbstractAccumuloInputOperator.java
index 50a1056..8250cd0 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AbstractAccumuloInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AbstractAccumuloInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.accumulo;
+package org.apache.apex.malhar.contrib.accumulo;
 
 import java.util.Map.Entry;
 
@@ -24,8 +24,8 @@
 import org.apache.accumulo.core.client.Scanner;
 import org.apache.accumulo.core.data.Key;
 import org.apache.accumulo.core.data.Value;
+import org.apache.apex.malhar.lib.db.AbstractStoreInputOperator;
 
-import com.datatorrent.lib.db.AbstractStoreInputOperator;
 /**
  * Base input adapter, which reads data from persistence database and writes into output port(s).&nbsp; Subclasses should provide the
  * implementation of getting the tuples and scanner methods.
@@ -38,18 +38,21 @@
  * @tags key value, accumulo
  * @since 1.0.4
  */
-public abstract class AbstractAccumuloInputOperator<T> extends AbstractStoreInputOperator<T, AccumuloStore> {
+public abstract class AbstractAccumuloInputOperator<T> extends AbstractStoreInputOperator<T, AccumuloStore>
+{
 
   public abstract T getTuple(Entry<Key, Value> entry);
 
   public abstract Scanner getScanner(Connector conn);
 
-  public AbstractAccumuloInputOperator() {
+  public AbstractAccumuloInputOperator()
+  {
     store = new AccumuloStore();
   }
 
   @Override
-  public void emitTuples() {
+  public void emitTuples()
+  {
     Connector conn = store.getConnector();
     Scanner scan = getScanner(conn);
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AbstractAccumuloOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AbstractAccumuloOutputOperator.java
index a4ae1ac..153f88d 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AbstractAccumuloOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AbstractAccumuloOutputOperator.java
@@ -16,19 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.accumulo;
+package org.apache.apex.malhar.contrib.accumulo;
 
 import java.util.List;
 
-import org.apache.accumulo.core.client.MutationsRejectedException;
-import org.apache.accumulo.core.data.Mutation;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.accumulo.core.client.MutationsRejectedException;
+import org.apache.accumulo.core.data.Mutation;
+import org.apache.apex.malhar.lib.db.AbstractAggregateTransactionableStoreOutputOperator;
+
+import com.google.common.collect.Lists;
+
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.lib.db.AbstractAggregateTransactionableStoreOutputOperator;
-import com.google.common.collect.Lists;
 
 /**
  * Base output operator that stores tuples in Accumulo rows.&nbsp; Subclasses should provide implementation of operationMutation method. <br>
@@ -56,7 +58,8 @@
  *            The tuple type
  * @since 1.0.4
  */
-public abstract class AbstractAccumuloOutputOperator<T> extends AbstractAggregateTransactionableStoreOutputOperator<T, AccumuloWindowStore> {
+public abstract class AbstractAccumuloOutputOperator<T> extends AbstractAggregateTransactionableStoreOutputOperator<T, AccumuloWindowStore>
+{
   private static final transient Logger logger = LoggerFactory.getLogger(AbstractAccumuloOutputOperator.class);
   private final List<T> tuples;
   private transient ProcessingMode mode;
@@ -75,6 +78,7 @@
     tuples = Lists.newArrayList();
     store = new AccumuloWindowStore();
   }
+
   @Override
   public void processTuple(T tuple)
   {
@@ -82,7 +86,8 @@
   }
 
   @Override
-  public void storeAggregate() {
+  public void storeAggregate()
+  {
     try {
       for (T tuple : tuples) {
         Mutation mutation = operationMutation(tuple);
@@ -96,6 +101,7 @@
     }
     tuples.clear();
   }
+
   /**
    *
    * @param t
@@ -106,11 +112,11 @@
   @Override
   public void setup(OperatorContext context)
   {
-    mode=context.getValue(context.PROCESSING_MODE);
-    if(mode==ProcessingMode.EXACTLY_ONCE){
+    mode = context.getValue(context.PROCESSING_MODE);
+    if (mode == ProcessingMode.EXACTLY_ONCE) {
       throw new RuntimeException("This operator only supports atmost once and atleast once processing modes");
     }
-    if(mode==ProcessingMode.AT_MOST_ONCE){
+    if (mode == ProcessingMode.AT_MOST_ONCE) {
       tuples.clear();
     }
     super.setup(context);
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AccumuloStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AccumuloStore.java
index 52d273a..2eb4db0 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AccumuloStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AccumuloStore.java
@@ -16,10 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.accumulo;
+package org.apache.apex.malhar.contrib.accumulo;
 
 import java.io.IOException;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.BatchWriter;
@@ -30,11 +33,9 @@
 import org.apache.accumulo.core.client.TableNotFoundException;
 import org.apache.accumulo.core.client.ZooKeeperInstance;
 import org.apache.accumulo.core.client.security.tokens.PasswordToken;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.lib.db.Connectable;
 
 import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.lib.db.Connectable;
 
 /**
  * A {@link Connectable} for accumulo that implements Connectable interface.
@@ -45,7 +46,8 @@
  * @param <T>
  * @since 1.0.4
  */
-public class AccumuloStore implements Connectable {
+public class AccumuloStore implements Connectable
+{
   private static final transient Logger logger = LoggerFactory.getLogger(AccumuloStore.class);
   private String zookeeperHost;
   private String instanceName;
@@ -58,12 +60,13 @@
 
   private long memoryLimit;
   private int numThreads;
-  private static final long DEFAULT_MEMORY=2147483648l;
-  private static final int DEFAULT_THREADS=1;
+  private static final long DEFAULT_MEMORY = 2147483648L;
+  private static final int DEFAULT_THREADS = 1;
 
-  public AccumuloStore(){
-    memoryLimit=DEFAULT_MEMORY;
-    numThreads=DEFAULT_THREADS;
+  public AccumuloStore()
+  {
+    memoryLimit = DEFAULT_MEMORY;
+    numThreads = DEFAULT_THREADS;
   }
 
   /**
@@ -71,7 +74,8 @@
    *
    * @return Connector
    */
-  public Connector getConnector() {
+  public Connector getConnector()
+  {
     return connector;
   }
 
@@ -80,7 +84,8 @@
    *
    * @return TableName
    */
-  public String getTableName() {
+  public String getTableName()
+  {
     return tableName;
   }
 
@@ -89,7 +94,8 @@
    *
    * @param tableName
    */
-  public void setTableName(String tableName) {
+  public void setTableName(String tableName)
+  {
     this.tableName = tableName;
   }
 
@@ -98,7 +104,8 @@
    *
    * @return ZookeeperHost
    */
-  public String getZookeeperHost() {
+  public String getZookeeperHost()
+  {
     return zookeeperHost;
   }
 
@@ -107,7 +114,8 @@
    *
    * @param zookeeperHost
    */
-  public void setZookeeperHost(String zookeeperHost) {
+  public void setZookeeperHost(String zookeeperHost)
+  {
     this.zookeeperHost = zookeeperHost;
   }
 
@@ -116,7 +124,8 @@
    *
    * @return instanceName
    */
-  public String getInstanceName() {
+  public String getInstanceName()
+  {
     return instanceName;
   }
 
@@ -125,7 +134,8 @@
    *
    * @param instanceName
    */
-  public void setInstanceName(String instanceName) {
+  public void setInstanceName(String instanceName)
+  {
     this.instanceName = instanceName;
   }
 
@@ -134,7 +144,8 @@
    *
    * @param userName
    */
-  public void setUserName(String userName) {
+  public void setUserName(String userName)
+  {
     this.userName = userName;
   }
 
@@ -143,23 +154,28 @@
    *
    * @param password
    */
-  public void setPassword(String password) {
+  public void setPassword(String password)
+  {
     this.password = password;
   }
+
   /**
    * setter for memory limit
    *
    * @param memoryLimit
    */
-  public void setMemoryLimit(long memoryLimit) {
+  public void setMemoryLimit(long memoryLimit)
+  {
     this.memoryLimit = memoryLimit;
   }
+
   /**
    * setter for number of writer threads
    *
    * @param numThreads
    */
-  public void setNumThreads(int numThreads) {
+  public void setNumThreads(int numThreads)
+  {
     this.numThreads = numThreads;
   }
 
@@ -168,12 +184,14 @@
    *
    * @return BatchWriter
    */
-  public BatchWriter getBatchwriter() {
+  public BatchWriter getBatchwriter()
+  {
     return batchwriter;
   }
 
   @Override
-  public void connect() throws IOException {
+  public void connect() throws IOException
+  {
     Instance instance = null;
     instance = new ZooKeeperInstance(instanceName, zookeeperHost);
     try {
@@ -198,7 +216,8 @@
   }
 
   @Override
-  public void disconnect() throws IOException {
+  public void disconnect() throws IOException
+  {
     try {
       batchwriter.close();
     } catch (MutationsRejectedException e) {
@@ -208,7 +227,8 @@
   }
 
   @Override
-  public boolean isConnected() {
+  public boolean isConnected()
+  {
     // Not applicable for accumulo
     return false;
   }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AccumuloWindowStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AccumuloWindowStore.java
index 9bec031..412ae14 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AccumuloWindowStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/AccumuloWindowStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.accumulo;
+package org.apache.apex.malhar.contrib.accumulo;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
@@ -25,6 +25,9 @@
 import java.io.IOException;
 import java.util.Map.Entry;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.accumulo.core.client.MutationsRejectedException;
 import org.apache.accumulo.core.client.Scanner;
 import org.apache.accumulo.core.client.TableNotFoundException;
@@ -33,12 +36,10 @@
 import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.security.Authorizations;
+import org.apache.apex.malhar.lib.db.TransactionableStore;
 import org.apache.hadoop.io.Text;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.lib.db.TransactionableStore;
 
 /**
  * Provides transactional support by implementing TransactionableStore abstract methods.
@@ -53,7 +54,8 @@
  * @tags accumulo, key value
  * @since 1.0.4
  */
-public class AccumuloWindowStore extends AccumuloStore implements TransactionableStore {
+public class AccumuloWindowStore extends AccumuloStore implements TransactionableStore
+{
   private static final transient Logger logger = LoggerFactory.getLogger(AccumuloWindowStore.class);
   private static final String DEFAULT_ROW_NAME = "AccumuloOperator_row";
   private static final String DEFAULT_COLUMN_FAMILY_NAME = "AccumuloOutputOperator_cf";
@@ -67,7 +69,8 @@
   private transient String lastWindowColumnName;
   private transient byte[] lastWindowColumnBytes;
 
-  public AccumuloWindowStore() {
+  public AccumuloWindowStore()
+  {
     rowName = DEFAULT_ROW_NAME;
     columnFamilyName = DEFAULT_COLUMN_FAMILY_NAME;
     lastWindowColumnName = DEFAULT_LAST_WINDOW_PREFIX_COLUMN_NAME;
@@ -78,54 +81,64 @@
    * the values are stored as byte arrays.This method converts string to byte
    * arrays. uses util class in hbase library to do so.
    */
-  private void constructKeys() {
+  private void constructKeys()
+  {
     rowBytes = rowName.getBytes();
     columnFamilyBytes = columnFamilyName.getBytes();
   }
 
-  public String getRowName() {
+  public String getRowName()
+  {
     return rowName;
   }
 
-  public void setRowName(String rowName) {
+  public void setRowName(String rowName)
+  {
     this.rowName = rowName;
     constructKeys();
   }
 
-  public String getColumnFamilyName() {
+  public String getColumnFamilyName()
+  {
     return columnFamilyName;
   }
 
-  public void setColumnFamilyName(String columnFamilyName) {
+  public void setColumnFamilyName(String columnFamilyName)
+  {
     this.columnFamilyName = columnFamilyName;
     constructKeys();
   }
 
   @Override
-  public void beginTransaction() {
+  public void beginTransaction()
+  {
     // accumulo does not support transactions
   }
 
   @Override
-  public void commitTransaction() {
+  public void commitTransaction()
+  {
     // accumulo does not support transactions
 
   }
 
   @Override
-  public void rollbackTransaction() {
+  public void rollbackTransaction()
+  {
     // accumulo does not support transactions
 
   }
 
   @Override
-  public boolean isInTransaction() {
+  public boolean isInTransaction()
+  {
     // accumulo does not support transactions
     return false;
   }
 
   @Override
-  public long getCommittedWindowId(String appId, int operatorId) {
+  public long getCommittedWindowId(String appId, int operatorId)
+  {
     byte[] value = null;
     Authorizations auths = new Authorizations();
     Scanner scan = null;
@@ -150,7 +163,8 @@
   }
 
   @Override
-  public void storeCommittedWindowId(String appId, int operatorId,long windowId) {
+  public void storeCommittedWindowId(String appId, int operatorId,long windowId)
+  {
     byte[] WindowIdBytes = toBytes(windowId);
     String columnKey = appId + "_" + operatorId + "_" + lastWindowColumnName;
     lastWindowColumnBytes = columnKey.getBytes();
@@ -166,19 +180,19 @@
   }
 
   @Override
-  public void removeCommittedWindowId(String appId, int operatorId) {
+  public void removeCommittedWindowId(String appId, int operatorId)
+  {
     // accumulo does not support transactions
-
   }
 
   public static byte[] toBytes(long l)
   {
-    ByteArrayOutputStream baos=new ByteArrayOutputStream(Long.SIZE/8);
-    DataOutputStream dos=new DataOutputStream(baos);
-    byte[] result=null;
+    ByteArrayOutputStream baos = new ByteArrayOutputStream(Long.SIZE / 8);
+    DataOutputStream dos = new DataOutputStream(baos);
+    byte[] result = null;
     try {
       dos.writeLong(l);
-      result=baos.toByteArray();
+      result = baos.toByteArray();
       dos.close();
     } catch (IOException e) {
       logger.error("error converting to byte array");
@@ -187,11 +201,11 @@
     return result;
   }
 
-
-  public static long toLong(byte[] b){
-    ByteArrayInputStream baos=new ByteArrayInputStream(b);
-    DataInputStream dos=new DataInputStream(baos);
-    long result=0;
+  public static long toLong(byte[] b)
+  {
+    ByteArrayInputStream baos = new ByteArrayInputStream(b);
+    DataInputStream dos = new DataInputStream(baos);
+    long result = 0;
     try {
       result = dos.readLong();
       dos.close();
@@ -202,5 +216,4 @@
     return result;
   }
 
-
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/package-info.java
index cbac406..508c16e 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/accumulo/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.accumulo;
+package org.apache.apex.malhar.contrib.accumulo;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AbstractAerospikeGetOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AbstractAerospikeGetOperator.java
index 9f7469f..3cc0d69 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AbstractAerospikeGetOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AbstractAerospikeGetOperator.java
@@ -16,31 +16,34 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.aerospike;
+package org.apache.apex.malhar.contrib.aerospike;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.db.AbstractStoreInputOperator;
 
 import com.aerospike.client.Record;
 import com.aerospike.client.query.RecordSet;
 import com.aerospike.client.query.Statement;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.lib.db.AbstractStoreInputOperator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
- * Base input adapter, which reads data from persistence database through its API and writes into output port(s).&nsbsp;
- * Subclasses should provide the implementation of getting the tuples and querying to retrieve data.
+ * Base input adapter, which reads data from persistence database through its
+ * API and writes into output port(s). Subclasses should provide the
+ * implementation of getting the tuples and querying to retrieve data.
  * <p>
- * This is an abstract class. Sub-classes need to implement {@link #queryToRetrieveData()} and {@link #getTuple(Record)}.
- * </p>
+ * This is an abstract class. Sub-classes need to implement
+ * {@link #queryToRetrieveData()} and {@link #getTuple(Record)}.
+ *
  * @displayName Abstract Aerospike Get
  * @category Input
  * @tags get
  * @since 1.0.4
  */
-public abstract class AbstractAerospikeGetOperator<T> extends AbstractStoreInputOperator<T, AerospikeStore> {
-
+public abstract class AbstractAerospikeGetOperator<T> extends AbstractStoreInputOperator<T, AerospikeStore>
+{
   private static final Logger logger = LoggerFactory.getLogger(AbstractAerospikeGetOperator.class);
 
   /**
@@ -69,20 +72,19 @@
    * It then converts each row into tuple and emit that into output port.
    */
   @Override
-  public void emitTuples() {
-
+  public void emitTuples()
+  {
     Statement query = queryToRetrieveData();
     logger.debug(String.format("select statement: %s", query.toString()));
     RecordSet rs;
     try {
       rs = store.getClient().query(null, query);
-      while(rs.next()){
+      while (rs.next()) {
         Record rec = rs.getRecord();
         T tuple = getTuple(rec);
         outputPort.emit(tuple);
       }
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       store.disconnect();
       DTThrowable.rethrow(ex);
     }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AbstractAerospikeNonTransactionalPutOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AbstractAerospikeNonTransactionalPutOperator.java
index a629078..ca14a37 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AbstractAerospikeNonTransactionalPutOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AbstractAerospikeNonTransactionalPutOperator.java
@@ -16,32 +16,36 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.aerospike;
+package org.apache.apex.malhar.contrib.aerospike;
 
 import java.util.List;
 
+import org.apache.apex.malhar.lib.db.AbstractStoreOutputOperator;
+
 import com.aerospike.client.AerospikeException;
 import com.aerospike.client.Bin;
 import com.aerospike.client.Key;
 import com.google.common.collect.Lists;
 
-import com.datatorrent.lib.db.AbstractStoreOutputOperator;
-
 
 /**
- * <p>
- * Generic base output adaptor which writes tuples as they come without providing any transactional support.&nbsp; Subclasses should provide implementation for getting updated bins.
- * </p>
+ * Generic base output adaptor which writes tuples as they come without
+ * providing any transactional support. Subclasses should provide implementation
+ * for getting updated bins.
+ *
  * @displayName Abstract Aerospike Non Transactional Put
  * @category Output
  * @tags put, non transactional
  * @param <T> type of tuple
  * @since 1.0.4
  */
-public abstract class AbstractAerospikeNonTransactionalPutOperator<T> extends AbstractStoreOutputOperator<T,AerospikeStore> {
+public abstract class AbstractAerospikeNonTransactionalPutOperator<T>
+    extends AbstractStoreOutputOperator<T,AerospikeStore>
+{
+  private final transient List<Bin> bins;
 
-  private transient final List<Bin> bins;
-  public AbstractAerospikeNonTransactionalPutOperator() {
+  public AbstractAerospikeNonTransactionalPutOperator()
+  {
     super();
     bins = Lists.newArrayList();
   }
@@ -58,8 +62,8 @@
   protected abstract Key getUpdatedBins(T tuple, List<Bin> bins) throws AerospikeException;
 
   @Override
-  public void processTuple(T tuple) {
-
+  public void processTuple(T tuple)
+  {
     Key key;
     Bin[] binsArray;
     try {
@@ -68,11 +72,9 @@
       binsArray = bins.toArray(binsArray);
       store.getClient().put(null, key, binsArray);
       bins.clear();
-    }
-    catch (AerospikeException e) {
+    } catch (AerospikeException e) {
       throw new RuntimeException(e);
     }
-
   }
 
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AbstractAerospikeTransactionalPutOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AbstractAerospikeTransactionalPutOperator.java
index 6db8896..9b8ba59 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AbstractAerospikeTransactionalPutOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AbstractAerospikeTransactionalPutOperator.java
@@ -16,39 +16,42 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.aerospike;
+package org.apache.apex.malhar.contrib.aerospike;
 
 import java.util.Collection;
 import java.util.List;
 
+import org.apache.apex.malhar.lib.db.AbstractBatchTransactionableStoreOutputOperator;
+
 import com.aerospike.client.AerospikeException;
 import com.aerospike.client.Bin;
 import com.aerospike.client.Key;
 import com.google.common.collect.Lists;
 
-import com.datatorrent.lib.db.AbstractBatchTransactionableStoreOutputOperator;
-
 /**
+ * Generic base adaptor which creates a transaction at the start of window.
+ * Subclasses should provide implementation for getting updated bins.
  * <p>
- * Generic base adaptor which creates a transaction at the start of window.&nbsp; Subclasses should provide implementation for getting updated bins. <br/>
+ * Executes all the put updates and closes the transaction at the end of the
+ * window. The tuples in a window are stored in check-pointed collection which
+ * is cleared in the endWindow(). This is needed for the recovery. The operator
+ * writes a tuple at least once in the database, which is why only when all the
+ * updates are executed, the transaction is committed in the end window call.
  * </p>
- * <p>
- * Executes all the put updates and closes the transaction at the end of the window.
- * The tuples in a window are stored in check-pointed collection which is cleared in the endWindow().
- * This is needed for the recovery. The operator writes a tuple at least once in the database, which is why
- * only when all the updates are executed, the transaction is committed in the end window call.
- * </p>
+ *
  * @displayName Abstract Aerospike Transactional Put
  * @category Output
  * @tags put, transactional
  * @param <T>type of tuple
  * @since 1.0.4
  */
-public abstract class AbstractAerospikeTransactionalPutOperator<T> extends AbstractBatchTransactionableStoreOutputOperator<T, AerospikeTransactionalStore> {
+public abstract class AbstractAerospikeTransactionalPutOperator<T>
+    extends AbstractBatchTransactionableStoreOutputOperator<T, AerospikeTransactionalStore>
+{
+  private final transient List<Bin> bins;
 
-  private transient final List<Bin> bins;
-
-  public AbstractAerospikeTransactionalPutOperator() {
+  public AbstractAerospikeTransactionalPutOperator()
+  {
     super();
     bins = Lists.newArrayList();
   }
@@ -70,7 +73,7 @@
     Key key;
     Bin[] binsArray;
     try {
-      for(T tuple: tuples) {
+      for (T tuple: tuples) {
         key = getUpdatedBins(tuple,bins);
         binsArray = new Bin[bins.size()];
         binsArray = bins.toArray(binsArray);
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJONonTransactionalPutOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJONonTransactionalPutOperator.java
index f69e433..49580d0 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJONonTransactionalPutOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJONonTransactionalPutOperator.java
@@ -16,22 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.aerospike;
+package org.apache.apex.malhar.contrib.aerospike;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.validation.constraints.NotNull;
 
-import com.aerospike.client.Bin;
-import com.aerospike.client.Key;
-
-import org.apache.hadoop.classification.InterfaceStability.Evolving;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.hadoop.classification.InterfaceStability.Evolving;
+
+import com.aerospike.client.Bin;
+import com.aerospike.client.Key;
 
 /**
  * <p>
@@ -47,8 +47,8 @@
 @Evolving
 public class AerospikePOJONonTransactionalPutOperator extends AbstractAerospikeNonTransactionalPutOperator<Object>
 {
-  private static transient final Logger LOG
-    = LoggerFactory.getLogger(AerospikePOJONonTransactionalPutOperator.class);
+  private static final Logger LOG =
+      LoggerFactory.getLogger(AerospikePOJONonTransactionalPutOperator.class);
 
   // Two element list; first retrieves the record key and second the list of bins in this tuple
   @NotNull
@@ -91,7 +91,7 @@
     }
     Key key = keyGetter.get(tuple);
     List<Bin> binList = binsGetter.get(tuple);
-    if ( ! (null == binList || binList.isEmpty()) ) {
+    if (!(null == binList || binList.isEmpty())) {
       list.addAll(binList);
     }
     return key;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJOTransactionalPutOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJOTransactionalPutOperator.java
index f59b893..7add642 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJOTransactionalPutOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJOTransactionalPutOperator.java
@@ -16,27 +16,24 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.aerospike;
+package org.apache.apex.malhar.contrib.aerospike;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.hadoop.classification.InterfaceStability.Evolving;
+
 import com.aerospike.client.Bin;
 import com.aerospike.client.Key;
 
-import org.apache.hadoop.classification.InterfaceStability.Evolving;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
-
 /**
  * <p>
  * A generic implementation of
- * {@link com.datatorrent.contrib.aerospike.AbstractAerospikeTransactionalPutOperator} which can
+ * {@link org.apache.apex.malhar.contrib.aerospike.AbstractAerospikeTransactionalPutOperator} which can
  * take a POJO.
  * </p>
  * @displayName Aerospike Transactional Put Operator
@@ -45,12 +42,8 @@
  * @since 2.1.0
  */
 @Evolving
-public class AerospikePOJOTransactionalPutOperator
-  extends AbstractAerospikeTransactionalPutOperator<Object>
+public class AerospikePOJOTransactionalPutOperator extends AbstractAerospikeTransactionalPutOperator<Object>
 {
-  private static transient final Logger LOG
-    = LoggerFactory.getLogger(AerospikePOJOTransactionalPutOperator.class);
-
   // Two element list; first retrieves the record key and second the list of bins in this tuple
   @NotNull
   private ArrayList<String> expressions;
@@ -92,11 +85,10 @@
     }
     Key key = keyGetter.get(tuple);
     List<Bin> binList = binsGetter.get(tuple);
-    if ( ! (null == binList || binList.isEmpty()) ) {
+    if ( !(null == binList || binList.isEmpty()) ) {
       list.addAll(binList);
     }
     return key;
   }
 
-
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikeStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikeStore.java
index 10809e1..2ffda24 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikeStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikeStore.java
@@ -16,15 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.aerospike;
+package org.apache.apex.malhar.contrib.aerospike;
 
 import javax.validation.constraints.NotNull;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.db.Connectable;
+
 import com.aerospike.client.AerospikeClient;
 import com.aerospike.client.AerospikeException;
 import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.lib.db.Connectable;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * A {@link Connectable} that uses aerospike to connect to stores and implements Connectable interface.
@@ -34,8 +37,8 @@
  * @tags store
  * @since 1.0.4
  */
-public class AerospikeStore implements Connectable {
-
+public class AerospikeStore implements Connectable
+{
   protected static final Logger logger = LoggerFactory.getLogger(AerospikeStore.class);
   private String userName;
   private String password;
@@ -49,7 +52,8 @@
    *
    * @param userName user name.
    */
-  public void setUserName(String userName) {
+  public void setUserName(String userName)
+  {
     this.userName = userName;
   }
 
@@ -58,7 +62,8 @@
    *
    * @param password password
    */
-  public void setPassword(String password) {
+  public void setPassword(String password)
+  {
     this.password = password;
   }
 
@@ -68,7 +73,8 @@
    * @return The node
    */
   @NotNull
-  public String getNode() {
+  public String getNode()
+  {
     return node;
   }
 
@@ -77,7 +83,8 @@
    *
    * @param node node
    */
-  public void setNode(@NotNull String node) {
+  public void setNode(@NotNull String node)
+  {
     this.node = node;
   }
 
@@ -86,7 +93,8 @@
    *
    * @return The client
    */
-  public AerospikeClient getClient() {
+  public AerospikeClient getClient()
+  {
     return client;
   }
 
@@ -95,7 +103,8 @@
    *
    * @param port port
    */
-  public void setPort(int port) {
+  public void setPort(int port)
+  {
     this.port = port;
   }
 
@@ -103,15 +112,14 @@
    * Create connection with database.
    */
   @Override
-  public void connect() {
+  public void connect()
+  {
     try {
       client = new AerospikeClient(node, port);
       logger.debug("Aerospike connection Success");
-    }
-    catch (AerospikeException ex) {
+    } catch (AerospikeException ex) {
       throw new RuntimeException("closing database resource", ex);
-    }
-    catch (Throwable t) {
+    } catch (Throwable t) {
       DTThrowable.rethrow(t);
     }
   }
@@ -120,12 +128,14 @@
    * Close connection.
    */
   @Override
-  public void disconnect() {
+  public void disconnect()
+  {
     client.close();
   }
 
   @Override
-  public boolean isConnected() {
+  public boolean isConnected()
+  {
     return !client.isConnected();
   }
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikeTransactionalStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikeTransactionalStore.java
index 8128a17..8f898e6 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikeTransactionalStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/AerospikeTransactionalStore.java
@@ -16,10 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.aerospike;
+package org.apache.apex.malhar.contrib.aerospike;
 
 import javax.annotation.Nonnull;
 
+import org.apache.apex.malhar.lib.db.TransactionableStore;
+
 import com.aerospike.client.AerospikeException;
 import com.aerospike.client.Bin;
 import com.aerospike.client.Key;
@@ -28,7 +30,6 @@
 import com.aerospike.client.query.RecordSet;
 import com.aerospike.client.query.Statement;
 import com.aerospike.client.task.IndexTask;
-import com.datatorrent.lib.db.TransactionableStore;
 
 /**
  * <p>Provides transaction support to the operators by implementing TransactionableStore abstract methods. </p>
@@ -38,8 +39,8 @@
  * @tags store, transactional
  * @since 1.0.4
  */
-public class AerospikeTransactionalStore extends AerospikeStore implements TransactionableStore {
-
+public class AerospikeTransactionalStore extends AerospikeStore implements TransactionableStore
+{
   public static String DEFAULT_APP_ID_COL = "dt_app_id";
   public static String DEFAULT_OPERATOR_ID_COL = "dt_operator_id";
   public static String DEFAULT_WINDOW_COL = "dt_window";
@@ -59,8 +60,8 @@
   private transient boolean inTransaction;
   private transient Statement lastWindowFetchCommand;
 
-  public AerospikeTransactionalStore() {
-
+  public AerospikeTransactionalStore()
+  {
     super();
     metaSet = DEFAULT_META_SET;
     metaTableAppIdColumn = DEFAULT_APP_ID_COL;
@@ -75,8 +76,8 @@
    *
    * @param metaSet meta set name.
    */
-  public void setMetaSet(@Nonnull String metaSet) {
-
+  public void setMetaSet(@Nonnull String metaSet)
+  {
     this.metaSet = metaSet;
   }
 
@@ -86,8 +87,8 @@
    *
    * @param appIdColumn application id column name.
    */
-  public void setMetaTableAppIdColumn(@Nonnull String appIdColumn) {
-
+  public void setMetaTableAppIdColumn(@Nonnull String appIdColumn)
+  {
     this.metaTableAppIdColumn = appIdColumn;
   }
 
@@ -97,8 +98,8 @@
    *
    * @param operatorIdColumn operator id column name.
    */
-  public void setMetaTableOperatorIdColumn(@Nonnull String operatorIdColumn) {
-
+  public void setMetaTableOperatorIdColumn(@Nonnull String operatorIdColumn)
+  {
     this.metaTableOperatorIdColumn = operatorIdColumn;
   }
 
@@ -108,8 +109,8 @@
    *
    * @param windowColumn window column name.
    */
-  public void setMetaTableWindowColumn(@Nonnull String windowColumn) {
-
+  public void setMetaTableWindowColumn(@Nonnull String windowColumn)
+  {
     this.metaTableWindowColumn = windowColumn;
   }
 
@@ -118,14 +119,14 @@
    *
    * @param namespace namespace.
    */
-  public void setNamespace(@Nonnull String namespace) {
-
+  public void setNamespace(@Nonnull String namespace)
+  {
     this.namespace = namespace;
   }
 
   @Override
-  public void connect() {
-
+  public void connect()
+  {
     super.connect();
     createIndexes();
     try {
@@ -133,44 +134,43 @@
       lastWindowFetchCommand.setNamespace(namespace);
       lastWindowFetchCommand.setSetName(metaSet);
       lastWindowFetchCommand.setBinNames(metaTableWindowColumn);
-    }
-    catch (Exception e) {
+    } catch (Exception e) {
       throw new RuntimeException(e);
     }
   }
 
   @Override
-  public void disconnect() {
-
+  public void disconnect()
+  {
     super.disconnect();
   }
 
   @Override
-  public void beginTransaction() {
-
+  public void beginTransaction()
+  {
     inTransaction = true;
   }
 
   @Override
-  public void commitTransaction() {
-
+  public void commitTransaction()
+  {
     inTransaction = false;
   }
 
   @Override
-  public void rollbackTransaction() {
-
+  public void rollbackTransaction()
+  {
     inTransaction = false;
   }
 
   @Override
-  public boolean isInTransaction() {
-
+  public boolean isInTransaction()
+  {
     return inTransaction;
   }
 
-  private void createIndexes() {
-
+  private void createIndexes()
+  {
     IndexTask task;
     try {
       task = client.createIndex(null, namespace, metaSet,
@@ -186,26 +186,25 @@
   }
 
   @Override
-  public long getCommittedWindowId(String appId, int operatorId) {
-
+  public long getCommittedWindowId(String appId, int operatorId)
+  {
     try {
       lastWindowFetchCommand.setFilters(Filter.equal(metaTableOperatorIdColumn, operatorId));
       lastWindowFetchCommand.setFilters(Filter.equal(metaTableAppIdColumn, appId));
       long lastWindow = -1;
       RecordSet recordSet = client.query(null, lastWindowFetchCommand);
-      while(recordSet.next()) {
+      while (recordSet.next()) {
         lastWindow = Long.parseLong(recordSet.getRecord().getValue(metaTableWindowColumn).toString());
       }
       return lastWindow;
-    }
-    catch (AerospikeException ex) {
+    } catch (AerospikeException ex) {
       throw new RuntimeException(ex);
     }
   }
 
   @Override
-  public void storeCommittedWindowId(String appId, int operatorId, long windowId) {
-
+  public void storeCommittedWindowId(String appId, int operatorId, long windowId)
+  {
     try {
       String keyString = appId + String.valueOf(operatorId);
       Key key = new Key(namespace,metaSet,keyString.hashCode());
@@ -213,21 +212,19 @@
       Bin bin2 = new Bin(metaTableOperatorIdColumn,operatorId);
       Bin bin3 = new Bin(metaTableWindowColumn,windowId);
       client.put(null, key, bin1,bin2,bin3);
-    }
-    catch (AerospikeException e) {
+    } catch (AerospikeException e) {
       throw new RuntimeException(e);
     }
   }
 
   @Override
-  public void removeCommittedWindowId(String appId, int operatorId) {
-
+  public void removeCommittedWindowId(String appId, int operatorId)
+  {
     try {
       String keyString = appId + String.valueOf(operatorId);
       Key key = new Key(namespace,metaSet,keyString.hashCode());
       client.delete(null, key);
-    }
-    catch (AerospikeException e) {
+    } catch (AerospikeException e) {
       throw new RuntimeException(e);
     }
   }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/package-info.java
index 97e878c..8a37041 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/aerospike/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.aerospike;
+package org.apache.apex.malhar.contrib.aerospike;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/ApacheLogInputGenerator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/ApacheLogInputGenerator.java
index ecd57aa..7f44cc9 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/ApacheLogInputGenerator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/ApacheLogInputGenerator.java
@@ -16,18 +16,30 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.apachelog;
+package org.apache.apex.malhar.contrib.apachelog;
 
-import com.datatorrent.api.*;
-import com.datatorrent.api.Context.OperatorContext;
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
 import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+import java.util.StringTokenizer;
 import java.util.concurrent.ArrayBlockingQueue;
 import javax.validation.constraints.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.api.DefaultOutputPort;
+import com.datatorrent.api.InputOperator;
+import com.datatorrent.api.Operator;
+
 /**
  * An implementation of input operator and activation listener that simulates the apache logs.
  * <p>
@@ -38,7 +50,7 @@
  */
 public class ApacheLogInputGenerator implements InputOperator, Operator.ActivationListener<OperatorContext>
 {
-  private final static String delimiter = ";";
+  private static final String delimiter = ";";
 
   private transient Random random;
   private transient int ipAddressCount;
@@ -99,13 +111,12 @@
 
   private List<String> readLines(String file) throws IOException
   {
-    List<String> lines = new ArrayList<String>();
+    List<String> lines = new ArrayList<>();
     InputStream in;
     File f = new File(file);
     if (f.exists()) {
       in = new FileInputStream(f);
-    }
-    else {
+    } else {
       in = getClass().getResourceAsStream(file);
     }
     BufferedReader br = new BufferedReader(new InputStreamReader(in));
@@ -114,8 +125,7 @@
       while ((line = br.readLine()) != null) {
         lines.add(line);
       }
-    }
-    finally {
+    } finally {
       br.close();
     }
     return lines;
@@ -150,8 +160,7 @@
         bytes.add(Integer.parseInt(token.nextToken().trim()));
         status.add(Integer.parseInt(token.nextToken().trim()));
       }
-    }
-    catch (IOException e) {
+    } catch (IOException e) {
       throw new RuntimeException(e);
     }
 
@@ -214,8 +223,7 @@
           if (maxDelay > 0) {
             try {
               Thread.sleep(random.nextInt(maxDelay));
-            }
-            catch (InterruptedException e) {
+            } catch (InterruptedException e) {
               return;
             }
           }
@@ -232,8 +240,8 @@
     try {
       thread.interrupt();
       thread.join();
-    }
-    catch (InterruptedException ex) {
+    } catch (InterruptedException ex) {
+      // ignore
     }
   }
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLocalLog.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLocalLog.java
index 23b4a62..b8d29d4 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLocalLog.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLocalLog.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.apachelog;
+package org.apache.apex.malhar.contrib.apachelog;
+
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.io.fs.TailFsInputOperator;
+import org.apache.apex.malhar.lib.logs.ApacheLogParseMapOutputOperator;
+import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.io.fs.TailFsInputOperator;
-import com.datatorrent.lib.logs.ApacheLogParseMapOutputOperator;
-import org.apache.hadoop.conf.Configuration;
 
 /**
  * An implementation of Streaming Application that reads from a local apache log file on the fly and dumps the parsed data to output.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLogGenerator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLogGenerator.java
index d624e08..0eef6dc 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLogGenerator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLogGenerator.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.apachelog;
+package org.apache.apex.malhar.contrib.apachelog;
 
-import com.datatorrent.api.*;
-import com.datatorrent.api.DAG.Locality;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.logs.ApacheLogParseMapOutputOperator;
-import java.util.ArrayList;
-import java.util.List;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.logs.ApacheLogParseMapOutputOperator;
 import org.apache.hadoop.conf.Configuration;
 
+import com.datatorrent.api.DAG;
+import com.datatorrent.api.DAG.Locality;
+import com.datatorrent.api.StreamingApplication;
+
 /**
  * An implementation of Streaming Application that generates apache log file on the fly and dumps the parsed data to output.
  *
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/GeoIPExtractor.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/GeoIPExtractor.java
index bd226e3..a58c39e 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/GeoIPExtractor.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/GeoIPExtractor.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.apachelog;
+package org.apache.apex.malhar.contrib.apachelog;
 
+import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
-import java.io.IOException;
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.logs.InformationExtractor;
-import com.maxmind.geoip.Location;
-import com.maxmind.geoip.LookupService;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.lib.logs.InformationExtractor;
+
+import com.maxmind.geoip.Location;
+import com.maxmind.geoip.LookupService;
 
 /**
  * An implementation of InformationExtractor that extracts Geo information from an IP address using maxmind API .
@@ -67,8 +67,7 @@
   {
     try {
       reader = new LookupService(databasePath, LookupService.GEOIP_MEMORY_CACHE | LookupService.GEOIP_CHECK_CACHE);
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       throw new RuntimeException(ex);
     }
   }
@@ -90,8 +89,7 @@
         m.put("ipRegion", location.region);
         m.put("ipCity", location.city);
       }
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       LOG.error("Caught exception when looking up Geo IP for {}:", value, ex);
     }
     return m;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/TimestampExtractor.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/TimestampExtractor.java
index bb87f03..1b6b4b6 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/TimestampExtractor.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/TimestampExtractor.java
@@ -16,20 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.apachelog;
+package org.apache.apex.malhar.contrib.apachelog;
 
-import java.util.Map;
-
-import com.datatorrent.lib.logs.InformationExtractor;
 import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.Map;
 import javax.validation.constraints.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.logs.InformationExtractor;
+
 /**
  * An implementation of InformationExtractor that extracts the time stamp in milliseconds from epoch from an arbitrary date string.
  * <p>
@@ -69,8 +69,7 @@
     try {
       Date date = dateFormat.parse((String)value);
       m.put("timestamp", date.getTime());
-    }
-    catch (ParseException ex) {
+    } catch (ParseException ex) {
       LOG.error("Error parsing \"{}\" to timestamp using \"{}\":", value, dateFormatString, ex);
     }
     return m;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/UserAgentExtractor.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/UserAgentExtractor.java
index f73ff3d..799eb48 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/UserAgentExtractor.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/UserAgentExtractor.java
@@ -16,20 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.apachelog;
+package org.apache.apex.malhar.contrib.apachelog;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
-import com.datatorrent.lib.logs.InformationExtractor;
+import org.apache.apex.malhar.lib.logs.InformationExtractor;
+
 import com.google.common.cache.Cache;
 import com.google.common.cache.CacheBuilder;
 
-import java.util.concurrent.TimeUnit;
-
 import net.sf.uadetector.ReadableUserAgent;
-import net.sf.uadetector.service.UADetectorServiceFactory;
 import net.sf.uadetector.UserAgentStringParser;
+import net.sf.uadetector.service.UADetectorServiceFactory;
 
 /**
  * An implementation of Information Extractor that extracts the browser and the OS from a user-agent string.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/package-info.java
index d99c7b5..67b151b 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/package-info.java
@@ -20,4 +20,4 @@
  * Apache log application, operators, and utilities.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.apachelog;
+package org.apache.apex.malhar.contrib.apachelog;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/zmq/Application.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/zmq/Application.java
index 738a146..e44c97a 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/zmq/Application.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/apachelog/zmq/Application.java
@@ -16,21 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.apachelog.zmq;
+package org.apache.apex.malhar.contrib.apachelog.zmq;
 
 
+import org.apache.apex.malhar.contrib.zmq.SimpleSinglePortZeroMQPullStringInputOperator;
+import org.apache.apex.malhar.lib.algo.UniqueCounter;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.logs.ApacheLogParseOperator;
+import org.apache.apex.malhar.lib.math.Sum;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
-import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.contrib.zmq.SimpleSinglePortZeroMQPullStringInputOperator;
-import com.datatorrent.lib.algo.UniqueCounter;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.logs.ApacheLogParseOperator;
-import com.datatorrent.lib.math.Sum;
+import com.datatorrent.api.annotation.ApplicationAnnotation;
 
 /**
  * <p>An implementation of Streaming Application that populates the DAG. </p>
@@ -40,7 +40,7 @@
  * @tag: streaming
  * @since 0.3.2
  */
-@ApplicationAnnotation(name="ApacheLog")
+@ApplicationAnnotation(name = "ApacheLog")
 public class Application implements StreamingApplication
 {
   private Locality locality = null;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroFileInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroFileInputOperator.java
index f863d41..52200fe 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroFileInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroFileInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.avro;
+package org.apache.apex.malhar.contrib.avro;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -24,6 +24,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperator;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.avro.AvroRuntimeException;
 import org.apache.avro.file.DataFileStream;
@@ -37,7 +38,6 @@
 
 import com.datatorrent.api.AutoMetric;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.io.fs.AbstractFileInputOperator;
 
 /**
  * <p>
diff --git a/contrib/src/main/java/com/datatorrent/contrib/avro/AvroFileToPojoModule.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroFileToPojoModule.java
similarity index 98%
rename from contrib/src/main/java/com/datatorrent/contrib/avro/AvroFileToPojoModule.java
rename to contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroFileToPojoModule.java
index 8ad00df..4637b8f 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/avro/AvroFileToPojoModule.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroFileToPojoModule.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.avro;
+package org.apache.apex.malhar.contrib.avro;
 
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.avro.generic.GenericRecord;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroRecordHelper.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroRecordHelper.java
index 012e977..176f5eb 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroRecordHelper.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroRecordHelper.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.avro;
+package org.apache.apex.malhar.contrib.avro;
 
 import java.text.ParseException;
 import java.util.List;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroToPojo.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroToPojo.java
index 2acf98c..5539562 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroToPojo.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/AvroToPojo.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.avro;
+package org.apache.apex.malhar.contrib.avro;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -25,6 +25,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.avro.AvroRuntimeException;
 import org.apache.avro.generic.GenericRecord;
 import org.apache.commons.lang3.ClassUtils;
@@ -40,9 +43,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.FieldInfo.SupportType;
-import com.datatorrent.lib.util.PojoUtils;
 
 /**
  * <p>
@@ -87,7 +87,7 @@
   @AutoMetric
   @VisibleForTesting
   int fieldErrorCount = 0;
-  
+
   public final transient DefaultOutputPort<GenericRecord> errorPort = new DefaultOutputPort<GenericRecord>();
 
   /**
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/PojoToAvro.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/PojoToAvro.java
index 41c56e3..17a4ecc 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/PojoToAvro.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/avro/PojoToAvro.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.avro;
+package org.apache.apex.malhar.contrib.avro;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -25,6 +25,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
 import org.apache.avro.AvroRuntimeException;
 import org.apache.avro.Schema;
 import org.apache.avro.Schema.Field;
@@ -42,8 +44,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
 
 /**
  * <p>
@@ -63,7 +63,6 @@
 @InterfaceStability.Evolving
 public class PojoToAvro extends BaseOperator
 {
-
   private List<Field> columnNames;
 
   private Class<?> cls;
@@ -155,7 +154,7 @@
    * @return Getter
    */
   private Getter<?, ?> generateGettersForField(Class<?> cls, String inputFieldName)
-      throws NoSuchFieldException, SecurityException
+    throws NoSuchFieldException, SecurityException
   {
     java.lang.reflect.Field f = cls.getDeclaredField(inputFieldName);
     Class<?> c = ClassUtils.primitiveToWrapper(f.getType());
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/AbstractCassandraInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/AbstractCassandraInputOperator.java
index 7bd47fc..3153387 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/AbstractCassandraInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/AbstractCassandraInputOperator.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.db.AbstractStoreInputOperator;
 
 import com.datastax.driver.core.PagingState;
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
 import com.datastax.driver.core.SimpleStatement;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.datatorrent.lib.db.AbstractStoreInputOperator;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.netlet.util.DTThrowable;
 
@@ -43,8 +43,8 @@
  * @tags cassandra
  * @since 1.0.2
  */
-public abstract class AbstractCassandraInputOperator<T> extends AbstractStoreInputOperator<T, CassandraStore> {
-
+public abstract class AbstractCassandraInputOperator<T> extends AbstractStoreInputOperator<T, CassandraStore>
+{
   private static final Logger logger = LoggerFactory.getLogger(AbstractCassandraInputOperator.class);
   private PagingState nextPageState;
   private int fetchSize;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/AbstractCassandraTransactionableOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/AbstractCassandraTransactionableOutputOperator.java
index 9048383..f0f590d 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/AbstractCassandraTransactionableOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/AbstractCassandraTransactionableOutputOperator.java
@@ -16,12 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.util.Collection;
 
 import javax.annotation.Nonnull;
 
+import org.apache.apex.malhar.lib.db.AbstractBatchTransactionableStoreOutputOperator;
+
 import com.datastax.driver.core.BatchStatement;
 import com.datastax.driver.core.PreparedStatement;
 import com.datastax.driver.core.Statement;
@@ -29,7 +31,6 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.Operator.ActivationListener;
-import com.datatorrent.lib.db.AbstractBatchTransactionableStoreOutputOperator;
 
 /**
  * <p>
@@ -86,8 +87,7 @@
   public void processBatch(Collection<T> tuples)
   {
     BatchStatement batchCommand = store.getBatchCommand();
-    for(T tuple: tuples)
-    {
+    for (T tuple: tuples) {
       batchCommand.add(setStatementParameters(updateCommand, tuple));
     }
   }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperator.java
index f287385..cadf157 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -949,7 +949,7 @@
 
   /**
    * Implementing concrete Operator instances define the Connection Builder properties by implementing this method
-   * Please refer to {@link com.datatorrent.contrib.cassandra.ConnectionStateManager.ConnectionBuilder} for
+   * Please refer to {@link org.apache.apex.malhar.contrib.cassandra.ConnectionStateManager.ConnectionBuilder} for
    * an example implementation of the ConnectionStateManager instantiation.
    * Note that if this method is returning null, the connection properties are
    * fetched from a properties file loaded from the classpath.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPOJOInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPOJOInputOperator.java
index f43777f..cab83e8 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPOJOInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPOJOInputOperator.java
@@ -16,17 +16,30 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.math.BigDecimal;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
 
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
 
-import org.apache.hadoop.classification.InterfaceStability.Evolving;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Setter;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterBoolean;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterDouble;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterFloat;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterInt;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterLong;
+import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
 import com.datastax.driver.core.BoundStatement;
 import com.datastax.driver.core.ColumnDefinitions;
@@ -39,9 +52,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.*;
 
 /**
  * <p>
@@ -287,8 +297,7 @@
     try {
       // This code will be replaced after integration of creating POJOs on the fly utility.
       obj = pojoClass.newInstance();
-    }
-    catch (InstantiationException | IllegalAccessException ex) {
+    } catch (InstantiationException | IllegalAccessException ex) {
       throw new RuntimeException(ex);
     }
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPOJOOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPOJOOutputOperator.java
index a191bb0..5f7d52a 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPOJOOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPOJOOutputOperator.java
@@ -16,28 +16,44 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.lang.reflect.Field;
 import java.math.BigDecimal;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
 
-import org.apache.hadoop.classification.InterfaceStability.Evolving;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.Lists;
-import com.datastax.driver.core.*;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterBoolean;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterDouble;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterFloat;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterInt;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterLong;
+import org.apache.hadoop.classification.InterfaceStability.Evolving;
+
+import com.datastax.driver.core.BoundStatement;
+import com.datastax.driver.core.ColumnDefinitions;
+import com.datastax.driver.core.DataType;
+import com.datastax.driver.core.LocalDate;
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.Statement;
 import com.datastax.driver.core.exceptions.DriverException;
+import com.google.common.collect.Lists;
 import com.datatorrent.api.AutoMetric;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.*;
 
 /**
  * <p>
@@ -106,10 +122,11 @@
   @Override
   public void activate(Context.OperatorContext context)
   {
-    com.datastax.driver.core.ResultSet rs = store.getSession().execute("select * from " + store.keyspace + "." + tablename);
+    com.datastax.driver.core.ResultSet rs
+        = store.getSession().execute("select * from " + store.keyspace + "." + tablename);
     final ColumnDefinitions rsMetaData = rs.getColumnDefinitions();
 
-    if(fieldInfos == null) {
+    if (fieldInfos == null) {
       populateFieldInfosFromPojo(rsMetaData);
     }
 
@@ -228,13 +245,12 @@
       }
     }
     String statement
-            = "INSERT INTO " + store.keyspace + "."
-            + tablename
-            + " (" + queryfields.toString() + ") "
-            + "VALUES (" + values.toString() + ");";
+        = "INSERT INTO " + store.keyspace + "."
+        + tablename
+        + " (" + queryfields.toString() + ") "
+        + "VALUES (" + values.toString() + ");";
     LOG.debug("statement is {}", statement);
     return store.getSession().prepare(statement);
-
   }
 
   @Override
@@ -316,6 +332,7 @@
       errorRecords++;
     }
   }
+
   /**
    * A list of {@link FieldInfo}s where each item maps a column name to a pojo field name.
    */
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPojoUtils.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPojoUtils.java
index 8b435c9..179ac1a 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPojoUtils.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPojoUtils.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.math.BigDecimal;
 import java.util.Date;
@@ -25,11 +25,12 @@
 import java.util.Set;
 import java.util.UUID;
 
+import org.apache.apex.malhar.lib.util.PojoUtils;
+
 import com.datastax.driver.core.BoundStatement;
 import com.datastax.driver.core.DataType;
 import com.datastax.driver.core.LocalDate;
 import com.datastax.driver.core.TypeCodec;
-import com.datatorrent.lib.util.PojoUtils;
 
 /**
  * Used to manage simple data type based getters for given cassandra columns
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPreparedStatementGenerator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPreparedStatementGenerator.java
index 713179c..a797bab 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPreparedStatementGenerator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraPreparedStatementGenerator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 
 import java.util.EnumSet;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraStore.java
index 5d9178c..0c298aa 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraStore.java
@@ -16,19 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import javax.validation.constraints.NotNull;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.Connectable;
+
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.ProtocolVersion;
 import com.datastax.driver.core.Session;
 import com.datastax.driver.core.exceptions.DriverException;
 import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.lib.db.Connectable;
 
 /**
  * A {@link Connectable} that uses cassandra to connect to stores and implements Connectable interface.
@@ -67,7 +68,8 @@
    *
    * @param keyspace keyspace.
    */
-  public void setKeyspace(String keyspace) {
+  public void setKeyspace(String keyspace)
+  {
     this.keyspace = keyspace;
   }
 
@@ -106,7 +108,8 @@
   }
 
   @NotNull
-  public String getNode() {
+  public String getNode()
+  {
     return node;
   }
 
@@ -115,15 +118,18 @@
    *
    * @param node node
    */
-  public void setNode(@NotNull String node) {
+  public void setNode(@NotNull String node)
+  {
     this.node = node;
   }
 
-  public Cluster getCluster() {
+  public Cluster getCluster()
+  {
     return cluster;
   }
 
-  public Session getSession() {
+  public Session getSession()
+  {
     return session;
   }
 
@@ -167,20 +173,18 @@
   public void connect()
   {
     try {
-      if(cluster==null)
+      if (cluster == null) {
         buildCluster();
+      }
       session = cluster.connect();
       logger.debug("Cassandra connection Success");
-    }
-    catch (DriverException ex) {
+    } catch (DriverException ex) {
       throw new RuntimeException("closing database resource", ex);
-    }
-    catch (Throwable t) {
+    } catch (Throwable t) {
       DTThrowable.rethrow(t);
     }
   }
 
-
   /**
    * Close connection.
    */
@@ -190,11 +194,9 @@
     try {
       session.close();
       cluster.close();
-    }
-    catch (DriverException ex) {
+    } catch (DriverException ex) {
       throw new RuntimeException("closing database resource", ex);
-    }
-    catch (Throwable t) {
+    } catch (Throwable t) {
       DTThrowable.rethrow(t);
     }
   }
@@ -204,8 +206,7 @@
   {
     try {
       return !session.isClosed();
-    }
-    catch (DriverException ex) {
+    } catch (DriverException ex) {
       throw new RuntimeException("closing database resource", ex);
     }
   }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraTransactionalStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraTransactionalStore.java
index 4c5a71e..29b6ce9 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraTransactionalStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/CassandraTransactionalStore.java
@@ -16,14 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import javax.annotation.Nonnull;
 
-import com.datastax.driver.core.*;
-import com.datastax.driver.core.exceptions.DriverException;
+import org.apache.apex.malhar.lib.db.TransactionableStore;
 
-import com.datatorrent.lib.db.TransactionableStore;
+import com.datastax.driver.core.BatchStatement;
+import com.datastax.driver.core.BoundStatement;
+import com.datastax.driver.core.PreparedStatement;
+import com.datastax.driver.core.ResultSet;
+import com.datastax.driver.core.Statement;
+import com.datastax.driver.core.exceptions.DriverException;
 
 /**
  * <p>Provides transaction support to the operators by implementing TransactionableStore abstract methods. </p>
@@ -34,8 +38,8 @@
  * @tags cassandra, transactional
  * @since 1.0.2
  */
-public class CassandraTransactionalStore extends CassandraStore implements TransactionableStore {
-
+public class CassandraTransactionalStore extends CassandraStore implements TransactionableStore
+{
   public static String DEFAULT_APP_ID_COL = "dt_app_id";
   public static String DEFAULT_OPERATOR_ID_COL = "dt_operator_id";
   public static String DEFAULT_WINDOW_COL = "dt_window";
@@ -116,7 +120,8 @@
     this.metaTableWindowColumn = windowColumn;
   }
 
-  public Statement getLastWindowUpdateStatement() {
+  public Statement getLastWindowUpdateStatement()
+  {
     return lastWindowUpdateStatement;
   }
 
@@ -130,26 +135,24 @@
   {
     super.connect();
     try {
-      String command = "SELECT " + metaTableWindowColumn + " FROM " + keyspace +"."+ metaTable + " WHERE " + metaTableAppIdColumn +
+      String command = "SELECT " + metaTableWindowColumn + " FROM " + keyspace + "." + metaTable +
+          " WHERE " + metaTableAppIdColumn +
           " = ? AND " + metaTableOperatorIdColumn + " = ?";
       logger.debug(command);
       lastWindowFetchCommand = session.prepare(command);
 
-      command = "UPDATE " + keyspace +"."+ metaTable + " SET " + metaTableWindowColumn + " = ? where " + metaTableAppIdColumn + " = ? " +
+      command = "UPDATE " + keyspace + "." + metaTable + " SET " + metaTableWindowColumn + " = ? where " + metaTableAppIdColumn + " = ? " +
           " and " + metaTableOperatorIdColumn + " = ?";
       logger.debug(command);
       lastWindowUpdateCommand = session.prepare(command);
 
-      command = "DELETE FROM " + keyspace +"."+ metaTable + " where " + metaTableAppIdColumn + " = ? and " +
+      command = "DELETE FROM " + keyspace + "." + metaTable + " where " + metaTableAppIdColumn + " = ? and " +
           metaTableOperatorIdColumn + " = ?";
       logger.debug(command);
       lastWindowDeleteCommand = session.prepare(command);
-    }
-    catch (DriverException e) {
+    } catch (DriverException e) {
       throw new RuntimeException(e);
-    }
-    catch (Exception e)
-    {
+    } catch (Exception e) {
       throw new RuntimeException(e);
     }
   }
@@ -160,8 +163,7 @@
     if (lastWindowUpdateCommand != null) {
       try {
         lastWindowUpdateCommand.disableTracing();
-      }
-      catch (DriverException e) {
+      } catch (DriverException e) {
         throw new RuntimeException(e);
       }
     }
@@ -208,8 +210,7 @@
       }
       lastWindowFetchCommand.disableTracing();
       return lastWindow;
-    }
-    catch (DriverException ex) {
+    } catch (DriverException ex) {
       throw new RuntimeException(ex);
     }
   }
@@ -221,8 +222,7 @@
       BoundStatement boundStatement = new BoundStatement(lastWindowUpdateCommand);
       lastWindowUpdateStatement = boundStatement.bind(windowId,appId,operatorId);
       batchCommand.add(lastWindowUpdateStatement);
-    }
-    catch (DriverException e) {
+    } catch (DriverException e) {
       throw new RuntimeException(e);
     }
   }
@@ -235,8 +235,7 @@
       lastWindowDeleteStatement = boundStatement.bind(appId,operatorId);
       session.execute(lastWindowDeleteStatement);
       lastWindowDeleteCommand.disableTracing();
-    }
-    catch (DriverException e) {
+    } catch (DriverException e) {
       throw new RuntimeException(e);
     }
   }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/ConnectionStateManager.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/ConnectionStateManager.java
index f089137..0eccb22 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/ConnectionStateManager.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/ConnectionStateManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.io.Serializable;
 import java.net.InetAddress;
@@ -64,7 +64,7 @@
  * </p>
  * <p> A typical implementation of the ConnectionBuilder would like this:
  * <pre>
- *     
+ *
  *     public ConnectionStateManager.ConnectionBuilder withConnectionBuilder()
  *     {
  *       return ConnectionStateManager.withNewBuilder()
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/UpsertExecutionContext.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/UpsertExecutionContext.java
index 92be546..10ffb08 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/UpsertExecutionContext.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/UpsertExecutionContext.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import com.datastax.driver.core.ConsistencyLevel;
 
@@ -122,7 +122,7 @@
 
   /**
    * This decides if we want to override the default TTL if at all set in the
-   * {@link com.datatorrent.contrib.cassandra.ConnectionStateManager.ConnectionBuilder} that is used to execute a
+   * {@link org.apache.apex.malhar.contrib.cassandra.ConnectionStateManager.ConnectionBuilder} that is used to execute a
    * mutation. Note that TTLs are not mandatory for mutations.
    * Also it is supported to have TTLs only for the current execution context but not set a default at the
    * connection state manager level
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/package-info.java
index 1baae5e..93c5518 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/cassandra/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/AbstractCouchBaseInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/AbstractCouchBaseInputOperator.java
index 1cd4eb5..3c53a49 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/AbstractCouchBaseInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/AbstractCouchBaseInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
 import java.io.IOException;
 import java.util.Collection;
@@ -24,21 +24,20 @@
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.db.AbstractStoreInputOperator;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
+
 import com.couchbase.client.CouchbaseClient;
 import com.couchbase.client.vbucket.config.Config;
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.collect.Lists;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.datatorrent.lib.db.AbstractStoreInputOperator;
-
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultPartition;
 import com.datatorrent.api.Partitioner;
-
-import com.datatorrent.lib.util.KryoCloneUtils;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
@@ -94,8 +93,7 @@
       }
       try {
         clientPartition = store.connectServer(serverURIString);
-      }
-      catch (IOException ex) {
+      } catch (IOException ex) {
         DTThrowable.rethrow(ex);
       }
     }
@@ -116,16 +114,16 @@
     List<String> keys = getKeys();
     Object result = null;
     for (String key: keys) {
-        int master = conf.getMaster(conf.getVbucketByKey(key));
-        if (master == getServerIndex()) {
-          result = clientPartition.get(key);
-        }
+      int master = conf.getMaster(conf.getVbucketByKey(key));
+      if (master == getServerIndex()) {
+        result = clientPartition.get(key);
       }
+    }
 
-      if (result != null) {
-        T tuple = getTuple(result);
-        outputPort.emit(tuple);
-      }
+    if (result != null) {
+      T tuple = getTuple(result);
+      outputPort.emit(tuple);
+    }
   }
 
   public abstract T getTuple(Object object);
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/AbstractCouchBaseOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/AbstractCouchBaseOutputOperator.java
index ef3be01..8cc92f2 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/AbstractCouchBaseOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/AbstractCouchBaseOutputOperator.java
@@ -16,23 +16,24 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.TreeMap;
-import net.spy.memcached.internal.OperationCompletionListener;
-import net.spy.memcached.internal.OperationFuture;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.db.AbstractAggregateTransactionableStoreOutputOperator;
+import org.apache.apex.malhar.lib.db.AbstractAggregateTransactionableStoreOutputOperator;
 
 import com.datatorrent.api.Context.OperatorContext;
-
 import com.datatorrent.netlet.util.DTThrowable;
 
+import net.spy.memcached.internal.OperationCompletionListener;
+import net.spy.memcached.internal.OperationFuture;
+
+
 /**
  * AbstractCouchBaseOutputOperator which extends Transactionable Store Output Operator.
  * Classes extending from this operator should implement the abstract functionality of generateKey, getValue and insertOrUpdate.
@@ -108,10 +109,10 @@
     id++;
     String key = getKey(tuple);
     Object value = getValue(tuple);
-    if(!(value instanceof Boolean) && !(value instanceof Integer) && !(value instanceof String) && !(value instanceof Float) && !(value instanceof Double) && !(value instanceof Character) && !(value instanceof Long) && !(value instanceof Short) && !(value instanceof Byte)){
-    if (serializer != null) {
-      value = serializer.serialize(value);
-    }
+    if (!(value instanceof Boolean) && !(value instanceof Integer) && !(value instanceof String) && !(value instanceof Float) && !(value instanceof Double) && !(value instanceof Character) && !(value instanceof Long) && !(value instanceof Short) && !(value instanceof Byte)) {
+      if (serializer != null) {
+        value = serializer.serialize(value);
+      }
     }
     OperationFuture<Boolean> future = processKeyValue(key, value);
     synchronized (syncObj) {
@@ -135,7 +136,7 @@
   public void waitForQueueSize(int sizeOfQueue)
   {
     long startTms = System.currentTimeMillis();
-    long elapsedTime ;
+    long elapsedTime;
     while (numTuples > sizeOfQueue) {
       synchronized (syncObj) {
         if (numTuples > sizeOfQueue) {
@@ -143,12 +144,10 @@
             elapsedTime = System.currentTimeMillis() - startTms;
             if (elapsedTime >= store.timeout) {
               throw new RuntimeException("Timed out waiting for space in queue");
-            }
-            else {
+            } else {
               syncObj.wait(store.timeout - elapsedTime);
             }
-          }
-          catch (InterruptedException ex) {
+          } catch (InterruptedException ex) {
             DTThrowable.rethrow(ex);
           }
         }
@@ -167,7 +166,7 @@
     public void onComplete(OperationFuture<?> f) throws Exception
     {
       if (!((Boolean)f.get())) {
-        logger.error("Operation failed {}" , f);
+        logger.error("Operation failed {}", f);
         failure = true;
         return;
       }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/AbstractCouchBaseSetOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/AbstractCouchBaseSetOperator.java
index f33d804..0abe06f 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/AbstractCouchBaseSetOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/AbstractCouchBaseSetOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
 import net.spy.memcached.internal.OperationFuture;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseJSONSerializer.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseJSONSerializer.java
index 188d989..0f968bd 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseJSONSerializer.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseJSONSerializer.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
-import com.datatorrent.netlet.util.DTThrowable;
 import java.io.IOException;
 import org.codehaus.jackson.map.ObjectMapper;
+import com.datatorrent.netlet.util.DTThrowable;
 
 /**
  * <p>CouchBaseJSONSerializer</p>
@@ -43,8 +43,7 @@
     String value = null;
     try {
       value = mapper.writeValueAsString(o);
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       DTThrowable.rethrow(ex);
     }
     return value;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBasePOJOInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBasePOJOInputOperator.java
index 2378aec..91e3b17 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBasePOJOInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBasePOJOInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
 import java.io.IOException;
 import java.util.Iterator;
@@ -24,12 +24,16 @@
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
 
-import com.couchbase.client.protocol.views.*;
-
-import org.apache.hadoop.classification.InterfaceStability.Evolving;
 import org.codehaus.jackson.map.ObjectMapper;
+import org.apache.apex.malhar.lib.db.AbstractStoreInputOperator;
+import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
-import com.datatorrent.lib.db.AbstractStoreInputOperator;
+import com.couchbase.client.protocol.views.Query;
+import com.couchbase.client.protocol.views.Stale;
+import com.couchbase.client.protocol.views.View;
+import com.couchbase.client.protocol.views.ViewResponse;
+import com.couchbase.client.protocol.views.ViewRow;
+
 import com.datatorrent.api.Context.OperatorContext;
 
 /**
@@ -167,8 +171,7 @@
     super.setup(context);
     try {
       className = Class.forName(outputClass);
-    }
-    catch (ClassNotFoundException ex) {
+    } catch (ClassNotFoundException ex) {
       throw new RuntimeException(ex);
     }
     view = store.getInstance().getView(designDocumentName, viewName);
@@ -198,8 +201,7 @@
       Object outputObj = null;
       try {
         outputObj = objectMapper.readValue(document.toString(), className);
-      }
-      catch (IOException ex) {
+      } catch (IOException ex) {
         throw new RuntimeException(ex);
       }
       outputPort.emit(outputObj);
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseSerializer.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseSerializer.java
index f15758e..0769e82 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseSerializer.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseSerializer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
 /**
  *
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseStore.java
index 238047e..fb5ba1d 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
 import java.io.IOException;
 import java.net.URI;
@@ -28,6 +28,10 @@
 import javax.annotation.Nonnull;
 import javax.validation.constraints.Min;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.lib.db.Connectable;
+
 import com.couchbase.client.CouchbaseClient;
 import com.couchbase.client.CouchbaseConnectionFactoryBuilder;
 import com.couchbase.client.vbucket.ConfigurationProvider;
@@ -35,11 +39,6 @@
 import com.couchbase.client.vbucket.config.Bucket;
 import com.couchbase.client.vbucket.config.Config;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.datatorrent.lib.db.Connectable;
-
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
@@ -108,6 +107,7 @@
   {
     this.queueSize = queueSize;
   }
+
   protected Integer maxTuples = 1000;
   protected int blockTime = 1000;
   protected long timeout = 10000;
@@ -192,8 +192,7 @@
   {
     try {
       connect();
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       DTThrowable.rethrow(ex);
     }
     ConfigurationProvider configurationProvider = new ConfigurationProviderHTTP(baseURIs, userConfig, passwordConfig);
@@ -201,8 +200,7 @@
     Config conf = configBucket.getConfig();
     try {
       disconnect();
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       DTThrowable.rethrow(ex);
     }
     return conf;
@@ -216,8 +214,7 @@
     for (String url : tokens) {
       try {
         uri = new URI("http", url, "/pools", null, null);
-      }
-      catch (URISyntaxException ex) {
+      } catch (URISyntaxException ex) {
         DTThrowable.rethrow(ex);
       }
       baseURIs.add(uri);
@@ -228,9 +225,8 @@
       cfb.setOpQueueMaxBlockTime(blockTime); // wait up to 10 second when trying to enqueue an operation
       client = new CouchbaseClient(cfb.buildCouchbaseConnection(baseURIs, bucket, password));
       //client = new CouchbaseClient(baseURIs, "default", "");
-    }
-    catch (IOException e) {
-      logger.error("Error connecting to Couchbase:" , e);
+    } catch (IOException e) {
+      logger.error("Error connecting to Couchbase:", e);
       DTThrowable.rethrow(e);
     }
   }
@@ -241,15 +237,13 @@
     CouchbaseClient clientPartition = null;
     try {
       nodes.add(new URI("http",urlString,"/pools", null, null));
-    }
-    catch (URISyntaxException ex) {
+    } catch (URISyntaxException ex) {
       DTThrowable.rethrow(ex);
     }
     try {
       clientPartition = new CouchbaseClient(nodes, bucket, password);
-    }
-    catch (IOException e) {
-     logger.error("Error connecting to Couchbase:" , e);
+    } catch (IOException e) {
+      logger.error("Error connecting to Couchbase:", e);
       DTThrowable.rethrow(e);
     }
     return clientPartition;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseWindowStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseWindowStore.java
index 0c57ca6..2f0ce59 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseWindowStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseWindowStore.java
@@ -16,19 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 
-import com.couchbase.client.CouchbaseClient;
-import com.couchbase.client.CouchbaseConnectionFactoryBuilder;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.db.TransactionableStore;
+import org.apache.apex.malhar.lib.db.TransactionableStore;
+
+import com.couchbase.client.CouchbaseClient;
+import com.couchbase.client.CouchbaseConnectionFactoryBuilder;
 
 import com.datatorrent.netlet.util.DTThrowable;
 
@@ -92,9 +96,8 @@
       cfb.setOpTimeout(timeout);  // wait up to 10 seconds for an operation to succeed
       cfb.setOpQueueMaxBlockTime(blockTime); // wait up to 10 second when trying to enqueue an operation
       clientMeta = new CouchbaseClient(cfb.buildCouchbaseConnection(baseURIs, bucketMeta, passwordMeta));
-    }
-    catch (IOException e) {
-      logger.error("Error connecting to Couchbase: " , e);
+    } catch (IOException e) {
+      logger.error("Error connecting to Couchbase: ", e);
       DTThrowable.rethrow(e);
     }
   }
@@ -119,11 +122,9 @@
     String key = appId + "_" + operatorId + "_" + lastWindowValue;
     try {
       clientMeta.set(key, WindowIdBytes).get();
-    }
-    catch (InterruptedException ex) {
+    } catch (InterruptedException ex) {
       DTThrowable.rethrow(ex);
-    }
-    catch (ExecutionException ex) {
+    } catch (ExecutionException ex) {
       DTThrowable.rethrow(ex);
     }
 
@@ -163,8 +164,7 @@
     try {
       result = dos.readLong();
       dos.close();
-    }
-    catch (IOException e) {
+    } catch (IOException e) {
       DTThrowable.rethrow(e);
     }
     return result;
@@ -179,8 +179,7 @@
       dos.writeLong(l);
       result = baos.toByteArray();
       dos.close();
-    }
-    catch (IOException e) {
+    } catch (IOException e) {
       DTThrowable.rethrow(e);
     }
     return result;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchbasePOJOSetOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchbasePOJOSetOperator.java
index 5221b02..64ce9e2 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchbasePOJOSetOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/CouchbasePOJOSetOperator.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
 import java.util.ArrayList;
 
 import javax.validation.constraints.NotNull;
 
-import org.apache.hadoop.classification.InterfaceStability.Evolving;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
 /**
  * An implementation of Couchbase Output Operator which takes a POJO,serializes it into key,value
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/package-info.java
index 1a6d05b..7b7dc59 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchbase/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/AbstractCouchDBInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/AbstractCouchDBInputOperator.java
index 1935e5c..ad3e797 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/AbstractCouchDBInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/AbstractCouchDBInputOperator.java
@@ -16,20 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchdb;
+package org.apache.apex.malhar.contrib.couchdb;
 
 import java.io.IOException;
 import java.util.List;
 
 import javax.validation.constraints.Min;
 
-import com.google.common.base.Throwables;
-
 import org.ektorp.ViewQuery;
 import org.ektorp.ViewResult;
 
-import com.datatorrent.lib.db.AbstractStoreInputOperator;
+import org.apache.apex.malhar.lib.db.AbstractStoreInputOperator;
 
+import com.google.common.base.Throwables;
 import com.datatorrent.api.Context;
 
 
@@ -92,8 +91,7 @@
         T tuple = getTuple(row);
         outputPort.emit(tuple);
       }
-    }
-    catch (Throwable cause) {
+    } catch (Throwable cause) {
       Throwables.propagate(cause);
     }
     if (rows.size() > 0) {
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/AbstractCouchDBOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/AbstractCouchDBOutputOperator.java
index 5e6c24b..8080eda 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/AbstractCouchDBOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/AbstractCouchDBOutputOperator.java
@@ -16,10 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchdb;
+package org.apache.apex.malhar.contrib.couchdb;
 
-import com.datatorrent.lib.db.AbstractStoreOutputOperator;
-import java.util.Map;
+import org.apache.apex.malhar.lib.db.AbstractStoreOutputOperator;
 
 /**
  * Generic base output adaptor which saves tuples in the CouchDb.&nbsp; Subclasses should provide implementation for getting Document Id. <br/>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/AbstractMapBasedInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/AbstractMapBasedInputOperator.java
index 94c814f..e39a91c 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/AbstractMapBasedInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/AbstractMapBasedInputOperator.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchdb;
-
-import org.codehaus.jackson.map.ObjectMapper;
-import org.ektorp.ViewResult;
+package org.apache.apex.malhar.contrib.couchdb;
 
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.codehaus.jackson.map.ObjectMapper;
+import org.ektorp.ViewResult;
+
 /**
  * A base CouchDb input adaptor that emits a map. <br/>
  * <p>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/CouchDBPOJOInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/CouchDBPOJOInputOperator.java
index 8111727..6d5defa 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/CouchDBPOJOInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/CouchDBPOJOInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchdb;
+package org.apache.apex.malhar.contrib.couchdb;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -24,14 +24,18 @@
 
 import javax.validation.constraints.NotNull;
 
-import org.apache.hadoop.classification.InterfaceStability.Evolving;
 import org.codehaus.jackson.JsonNode;
 import org.codehaus.jackson.map.ObjectMapper;
 import org.ektorp.ViewQuery;
 import org.ektorp.ViewResult.Row;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Setter;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterBoolean;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterDouble;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterInt;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterLong;
+import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.*;
 import com.datatorrent.api.Context.OperatorContext;
 
 /**
@@ -184,8 +188,7 @@
     try {
       // This code will be replaced after integration of creating POJOs on the fly utility.
       objectClass = Class.forName(outputClass);
-    }
-    catch (ClassNotFoundException ex) {
+    } catch (ClassNotFoundException ex) {
       throw new RuntimeException(ex);
     }
 
@@ -197,18 +200,15 @@
       Class<?> type = null;
       try {
         type = objectClass.getDeclaredField(columns.get(i)).getType();
-      }
-      catch (NoSuchFieldException ex) {
+      } catch (NoSuchFieldException ex) {
         throw new RuntimeException(ex);
-      }
-      catch (SecurityException ex) {
+      } catch (SecurityException ex) {
         throw new RuntimeException(ex);
       }
       fieldType.add(type);
       if (type.isPrimitive()) {
         setterDoc.add(PojoUtils.constructSetter(objectClass, expressions.get(i), type));
-      }
-      else {
+      } else {
         setterDoc.add(PojoUtils.createSetter(objectClass, expressions.get(i), type));
       }
     }
@@ -222,11 +222,9 @@
     Object obj;
     try {
       obj = objectClass.newInstance();
-    }
-    catch (InstantiationException ex) {
+    } catch (InstantiationException ex) {
       throw new RuntimeException(ex);
-    }
-    catch (IllegalAccessException ex) {
+    } catch (IllegalAccessException ex) {
       throw new RuntimeException(ex);
     }
 
@@ -240,21 +238,16 @@
       if (type.isPrimitive()) {
         if (type == int.class) {
           ((SetterInt)setterDoc.get(i)).set(obj, val.get(columns.get(i)).getIntValue());
-        }
-        else if (type == boolean.class) {
+        } else if (type == boolean.class) {
           ((SetterBoolean)setterDoc.get(i)).set(obj, val.get(columns.get(i)).getBooleanValue());
-        }
-        else if (type == long.class) {
+        } else if (type == long.class) {
           ((SetterLong)setterDoc.get(i)).set(obj, val.get(columns.get(i)).getLongValue());
-        }
-        else if (type == double.class) {
+        } else if (type == double.class) {
           ((SetterDouble)setterDoc.get(i)).set(obj, val.get(columns.get(i)).getDoubleValue());
-        }
-        else {
+        } else {
           throw new RuntimeException("Type is not supported");
         }
-      }
-      else {
+      } else {
         ((Setter<Object, Object>)setterDoc.get(i)).set(obj, mapper.readValue(val.get(columns.get(i)), type));
       }
     }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/CouchDBPOJOOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/CouchDBPOJOOutputOperator.java
index f75473c..9d75272 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/CouchDBPOJOOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/CouchDBPOJOOutputOperator.java
@@ -16,15 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchdb;
+package org.apache.apex.malhar.contrib.couchdb;
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
-
 /**
  * Implementation of {@link AbstractCouchDBOutputOperator} that saves a POJO in the couch database. <br/>
  * <p>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/CouchDbStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/CouchDbStore.java
index 88c2eab..31e5423 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/CouchDbStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/CouchDbStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchdb;
+package org.apache.apex.malhar.contrib.couchdb;
 
 import java.io.IOException;
 import java.net.MalformedURLException;
@@ -32,7 +32,7 @@
 import org.ektorp.http.StdHttpClient;
 import org.ektorp.impl.StdCouchDbInstance;
 
-import com.datatorrent.lib.db.Connectable;
+import org.apache.apex.malhar.lib.db.Connectable;
 
 /**
  * Implements a CouchDb store. <br/>
@@ -141,8 +141,7 @@
   {
     if (docId != null && dbConnector.contains(docId)) {
       dbConnector.update(document);
-    }
-    else {
+    } else {
       //create a document & if docId is null then couch db will generate a random id.
       dbConnector.create(document);
     }
@@ -166,8 +165,7 @@
     if (dbUrl != null) {
       try {
         builder.url(dbUrl);
-      }
-      catch (MalformedURLException e) {
+      } catch (MalformedURLException e) {
         throw new IllegalArgumentException(e.getMessage());
       }
     }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/MapBasedCouchDbOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/MapBasedCouchDbOutputOperator.java
index f83f93c..6c8b813 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/MapBasedCouchDbOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/MapBasedCouchDbOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchdb;
+package org.apache.apex.malhar.contrib.couchdb;
 
 import java.util.Map;
 
@@ -34,7 +34,7 @@
   @Override
   public String getDocumentId(Map<Object, Object> tuple)
   {
-    return (String) tuple.get("_id");
+    return (String)tuple.get("_id");
   }
 
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/package-info.java
index be6ec34..13b7e17 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/couchdb/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.couchdb;
+package org.apache.apex.malhar.contrib.couchdb;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/AbstractElasticSearchInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/AbstractElasticSearchInputOperator.java
index 022530b..5d9e915 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/AbstractElasticSearchInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/AbstractElasticSearchInputOperator.java
@@ -16,14 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.elasticsearch;
+package org.apache.apex.malhar.contrib.elasticsearch;
 
 import org.elasticsearch.action.search.SearchRequestBuilder;
 import org.elasticsearch.action.search.SearchResponse;
 import org.elasticsearch.search.SearchHit;
 
+import org.apache.apex.malhar.lib.db.AbstractStoreInputOperator;
+
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.db.AbstractStoreInputOperator;
 
 /**
  * This is the base implementation for a non transactional input operator for ElasticSearch
@@ -53,7 +54,7 @@
   /**
    * Initializing transient fields such as ElasticSearchConnectable, SearchRequestBuilder
    *
-   * @see com.datatorrent.lib.db.AbstractStoreInputOperator#setup(com.datatorrent.api.Context.OperatorContext)
+   * @see org.apache.apex.malhar.lib.db.AbstractStoreInputOperator#setup(com.datatorrent.api.Context.OperatorContext)
    */
   @Override
   public void setup(OperatorContext t1)
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/AbstractElasticSearchOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/AbstractElasticSearchOutputOperator.java
index 0282ae8..34b4440 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/AbstractElasticSearchOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/AbstractElasticSearchOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.elasticsearch;
+package org.apache.apex.malhar.contrib.elasticsearch;
 
 import java.util.Queue;
 import java.util.concurrent.ArrayBlockingQueue;
@@ -27,9 +27,10 @@
 import org.elasticsearch.action.bulk.BulkResponse;
 import org.elasticsearch.action.index.IndexRequestBuilder;
 
+import org.apache.apex.malhar.lib.db.AbstractStoreOutputOperator;
+
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.lib.db.AbstractStoreOutputOperator;
 
 /**
  * This is the base implementation for a non-transactional batch output operator for ElasticSearch.
@@ -70,7 +71,7 @@
   /**
    * Initialize transient fields such as {@code tupleBatch}
    *
-   * @see com.datatorrent.lib.db.AbstractStoreOutputOperator#setup(com.datatorrent.api.Context.OperatorContext)
+   * @see org.apache.apex.malhar.lib.db.AbstractStoreOutputOperator#setup(com.datatorrent.api.Context.OperatorContext)
    */
   @Override
   public void setup(OperatorContext context)
@@ -83,7 +84,7 @@
    * Adds tuple to the queue.
    * Calls {@link #processBatch()} if queue is full
    *
-   * @see com.datatorrent.lib.db.AbstractStoreOutputOperator#processTuple(java.lang.Object)
+   * @see org.apache.apex.malhar.lib.db.AbstractStoreOutputOperator#processTuple(java.lang.Object)
    */
   public void processTuple(T tuple)
   {
@@ -128,7 +129,8 @@
    * @param tuple
    * @return
    */
-  protected IndexRequestBuilder getIndexRequestBuilder(T tuple){
+  protected IndexRequestBuilder getIndexRequestBuilder(T tuple)
+  {
     IndexRequestBuilder indexRequestBuilder = new IndexRequestBuilder(store.client, getIndexName(tuple));
     String id = getId(tuple);
     if (id != null) {
@@ -176,22 +178,22 @@
    * @param tuple
    * @return
    */
-    protected abstract String getType(T tuple);
+  protected abstract String getType(T tuple);
 
     /**
      * @return the batchSize
      */
-    public int getBatchSize()
-    {
-      return batchSize;
-    }
+  public int getBatchSize()
+  {
+    return batchSize;
+  }
 
     /**
      * @param batchSize the batchSize to set
      */
-    public void setBatchSize(int batchSize)
-    {
-      this.batchSize = batchSize;
-    }
+  public void setBatchSize(int batchSize)
+  {
+    this.batchSize = batchSize;
+  }
 
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchConnectable.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchConnectable.java
index 34eca95..c607393 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchConnectable.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchConnectable.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.elasticsearch;
+package org.apache.apex.malhar.contrib.elasticsearch;
 
 import java.io.IOException;
 
@@ -25,7 +25,7 @@
 import org.elasticsearch.client.transport.TransportClient;
 import org.elasticsearch.common.transport.InetSocketTransportAddress;
 
-import com.datatorrent.lib.db.Connectable;
+import org.apache.apex.malhar.lib.db.Connectable;
 
 /**
  * Elastic search base connector which has basic information for an operator <br>
@@ -91,7 +91,7 @@
   /*
    * (non-Javadoc)
    *
-   * @see com.datatorrent.lib.db.Connectable#connect()
+   * @see org.apache.apex.malhar.lib.db.Connectable#connect()
    */
   @Override
   public void connect() throws IOException
@@ -103,7 +103,7 @@
   /*
    * (non-Javadoc)
    *
-   * @see com.datatorrent.lib.db.Connectable#disconnect()
+   * @see org.apache.apex.malhar.lib.db.Connectable#disconnect()
    */
   @Override
   public void disconnect() throws IOException
@@ -116,7 +116,7 @@
   /*
    * (non-Javadoc)
    *
-   * @see com.datatorrent.lib.db.Connectable#isConnected()
+   * @see org.apache.apex.malhar.lib.db.Connectable#isConnected()
    */
   @Override
   public boolean isConnected()
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchMapInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchMapInputOperator.java
index dcbee9d..6774f10 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchMapInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchMapInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.elasticsearch;
+package org.apache.apex.malhar.contrib.elasticsearch;
 
 import java.util.Map;
 
@@ -50,7 +50,7 @@
   /**
    * {@link SearchRequestBuilder} properties which do not change for each window are set during operator initialization.
    *
-   * @see com.datatorrent.contrib.elasticsearch.AbstractElasticSearchInputOperator#setup(com.datatorrent.api.Context.OperatorContext)
+   * @see org.apache.apex.malhar.contrib.elasticsearch.AbstractElasticSearchInputOperator#setup(com.datatorrent.api.Context.OperatorContext)
    */
   @Override
   public void setup(OperatorContext t1)
@@ -63,14 +63,14 @@
    * (non-Javadoc)
    *
    * @see
-   * com.datatorrent.contrib.elasticsearch.AbstractElasticSearchInputOperator#convertToTuple(org.elasticsearch.search
+   * org.apache.apex.malhar.contrib.elasticsearch.AbstractElasticSearchInputOperator#convertToTuple(org.elasticsearch.search
    * .SearchHit)
    */
   @Override
   protected T convertToTuple(SearchHit hit)
   {
     Map<String, Object> tuple = hit.getSource();
-    return (T) tuple;
+    return (T)tuple;
   }
 
   /**
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchMapOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchMapOutputOperator.java
index 8616938..d85f0a3 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchMapOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchMapOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.elasticsearch;
+package org.apache.apex.malhar.contrib.elasticsearch;
 
 import java.util.Map;
 
@@ -50,7 +50,7 @@
    * (non-Javadoc)
    *
    * @see
-   * com.datatorrent.contrib.elasticsearch.AbstractElasticSearchOutputOperator#setSource(org.elasticsearch.action.index
+   * org.apache.apex.malhar.contrib.elasticsearch.AbstractElasticSearchOutputOperator#setSource(org.elasticsearch.action.index
    * .IndexRequestBuilder, java.lang.Object)
    */
   @Override
@@ -62,7 +62,7 @@
   /*
    * (non-Javadoc)
    *
-   * @see com.datatorrent.contrib.elasticsearch.AbstractElasticSearchOutputOperator#getId(java.lang.Object)
+   * @see org.apache.apex.malhar.contrib.elasticsearch.AbstractElasticSearchOutputOperator#getId(java.lang.Object)
    */
   @Override
   protected String getId(T tuple)
@@ -104,7 +104,7 @@
   /*
    * (non-Javadoc)
    *
-   * @see com.datatorrent.contrib.elasticsearch.AbstractElasticSearchOutputOperator#getIndexName(java.lang.Object)
+   * @see org.apache.apex.malhar.contrib.elasticsearch.AbstractElasticSearchOutputOperator#getIndexName(java.lang.Object)
    */
   @Override
   protected String getIndexName(T tuple)
@@ -122,7 +122,7 @@
   }
 
   /* (non-Javadoc)
-   * @see com.datatorrent.contrib.elasticsearch.AbstractElasticSearchOutputOperator#getType(java.lang.Object)
+   * @see org.apache.apex.malhar.contrib.elasticsearch.AbstractElasticSearchOutputOperator#getType(java.lang.Object)
    */
   @Override
   protected String getType(T tuple)
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchPercolatorOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchPercolatorOperator.java
index 9f7b66c..614fd59 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchPercolatorOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchPercolatorOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.elasticsearch;
+package org.apache.apex.malhar.contrib.elasticsearch;
 
 import java.io.IOException;
 
@@ -24,9 +24,9 @@
 
 import org.elasticsearch.action.percolate.PercolateResponse;
 
-import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
+import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
@@ -50,8 +50,8 @@
   protected transient ElasticSearchPercolatorStore store;
   public final transient DefaultOutputPort<PercolateResponse> outputPort = new DefaultOutputPort<PercolateResponse>();
 
-  public final transient DefaultInputPort<Object> inputPort = new DefaultInputPort<Object>() {
-
+  public final transient DefaultInputPort<Object> inputPort = new DefaultInputPort<Object>()
+  {
     /*
      * (non-Javadoc)
      *
@@ -61,7 +61,7 @@
     public void process(Object tuple)
     {
 
-      PercolateResponse response = store.percolate(new String[] { indexName }, documentType, tuple);
+      PercolateResponse response = store.percolate(new String[] {indexName}, documentType, tuple);
       outputPort.emit(response);
     }
   };
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchPercolatorStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchPercolatorStore.java
index c13c025..19639c7 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchPercolatorStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchPercolatorStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.elasticsearch;
+package org.apache.apex.malhar.contrib.elasticsearch;
 
 import java.io.IOException;
 
@@ -58,7 +58,8 @@
     }
   }
 
-  public PercolateResponse percolate(String[] indexNames, String documentType, Object tuple){
+  public PercolateResponse percolate(String[] indexNames, String documentType, Object tuple)
+  {
     XContentBuilder docBuilder;
     try {
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/package-info.java
index d89d53f..1c74c32 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/elasticsearch/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.elasticsearch;
+package org.apache.apex.malhar.contrib.elasticsearch;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/AbstractEnricher.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/AbstractEnricher.java
index c377b96..b7e8820 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/AbstractEnricher.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/AbstractEnricher.java
@@ -16,12 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.apex.malhar.lib.db.cache.CacheManager;
+import org.apache.apex.malhar.lib.db.cache.CacheStore;
+import org.apache.apex.malhar.lib.db.cache.CacheStore.ExpiryType;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
 import org.apache.hadoop.classification.InterfaceStability;
 
 import com.esotericsoftware.kryo.NotNull;
@@ -29,11 +34,6 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Operator;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.db.cache.CacheManager;
-import com.datatorrent.lib.db.cache.CacheStore;
-import com.datatorrent.lib.db.cache.CacheStore.ExpiryType;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.FieldInfo.SupportType;
 
 /**
  * Base class for Enrichment Operator.&nbsp; Subclasses should provide implementation to getKey and convert.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/BackendLoader.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/BackendLoader.java
index 845a756..62d11a0 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/BackendLoader.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/BackendLoader.java
@@ -16,15 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.util.List;
 
+import org.apache.apex.malhar.lib.db.cache.CacheManager;
+import org.apache.apex.malhar.lib.util.FieldInfo;
 import org.apache.hadoop.classification.InterfaceStability;
 
-import com.datatorrent.lib.db.cache.CacheManager;
-import com.datatorrent.lib.util.FieldInfo;
-
 /**
  * Interface for store to be used in enrichment
  *
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/DelimitedFSLoader.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/DelimitedFSLoader.java
index 3121cf1..aa4a8bd 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/DelimitedFSLoader.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/DelimitedFSLoader.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.io.IOException;
 import java.util.List;
@@ -30,14 +30,13 @@
 import org.supercsv.io.CsvMapReader;
 import org.supercsv.prefs.CsvPreference;
 
+import org.apache.apex.malhar.contrib.parser.CellProcessorBuilder;
+import org.apache.apex.malhar.contrib.parser.DelimitedSchema;
+import org.apache.apex.malhar.contrib.parser.DelimitedSchema.Field;
+import org.apache.apex.malhar.lib.util.ReusableStringReader;
 import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 
-import com.datatorrent.contrib.parser.CellProcessorBuilder;
-import com.datatorrent.contrib.parser.DelimitedSchema;
-import com.datatorrent.contrib.parser.DelimitedSchema.Field;
-import com.datatorrent.lib.util.ReusableStringReader;
-
 /**
  * This implementation of {@link FSLoader} is used to load data from delimited
  * file.User needs to provide a schema as a string specified in a json format as
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/FSLoader.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/FSLoader.java
index e04d6c4..cc23cb2 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/FSLoader.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/FSLoader.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -28,6 +28,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.cache.CacheManager;
+import org.apache.apex.malhar.lib.util.FieldInfo;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataInputStream;
@@ -38,8 +40,6 @@
 import com.google.common.collect.Maps;
 
 import com.datatorrent.api.Component;
-import com.datatorrent.lib.db.cache.CacheManager;
-import com.datatorrent.lib.util.FieldInfo;
 
 /**
  * This implementation of {@link BackendLoader} loads the data from a given file
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/FixedWidthFSLoader.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/FixedWidthFSLoader.java
index 2f54f66..e855c07 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/FixedWidthFSLoader.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/FixedWidthFSLoader.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -30,6 +30,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.contrib.parser.AbstractCsvParser.FIELD_TYPE;
+import org.apache.apex.malhar.contrib.parser.AbstractCsvParser.Field;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 
@@ -39,9 +41,6 @@
 import com.univocity.parsers.fixed.FixedWidthParser;
 import com.univocity.parsers.fixed.FixedWidthParserSettings;
 
-import com.datatorrent.contrib.parser.AbstractCsvParser.FIELD_TYPE;
-import com.datatorrent.contrib.parser.AbstractCsvParser.Field;
-
 /**
  * This implementation of {@link FSLoader} is used to load data from fixed width
  * file.User needs to set {@link FixedWidthFSLoader#fieldDescription} to specify
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/JDBCLoader.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/JDBCLoader.java
index ce02c08..0ed9e22 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/JDBCLoader.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/JDBCLoader.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -26,12 +26,12 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcStore;
+import org.apache.apex.malhar.lib.util.FieldInfo;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 
 import com.google.common.collect.Lists;
-import com.datatorrent.lib.db.jdbc.JdbcStore;
-import com.datatorrent.lib.util.FieldInfo;
 
 /**
  * <p>HBaseLoader extends from {@link JdbcStore} uses JDBC to connect and implements BackendLoaders interface.</p> <br/>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/JsonFSLoader.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/JsonFSLoader.java
index 183d07a..1347100 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/JsonFSLoader.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/JsonFSLoader.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.io.IOException;
 import java.util.Map;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/MapEnricher.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/MapEnricher.java
index 6e7b5f7..d3d8df4 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/MapEnricher.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/MapEnricher.java
@@ -16,21 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.FieldInfo;
 import org.apache.hadoop.classification.InterfaceStability;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.util.FieldInfo;
 
 /**
  * This class takes a HashMap tuple as input and extracts value of the lookupKey configured
- * for this operator. It perform a lookup using {@link com.datatorrent.lib.db.cache.CacheManager} to
+ * for this operator. It perform a lookup using {@link org.apache.apex.malhar.lib.db.cache.CacheManager} to
  * find a matching entry and adds the result to the original tuple.
  *
  * <p>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/NullValuesCacheManager.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/NullValuesCacheManager.java
index 6d42fec..74f3f97 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/NullValuesCacheManager.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/NullValuesCacheManager.java
@@ -16,12 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
+import org.apache.apex.malhar.lib.db.cache.CacheManager;
 import org.apache.hadoop.classification.InterfaceStability;
 
-import com.datatorrent.lib.db.cache.CacheManager;
-
 /**
  * Null Values Cache Manager. Using this NULL entries can be specified explicitly.
  *
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/POJOEnricher.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/POJOEnricher.java
index f22acdb..1f979ee 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/POJOEnricher.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/POJOEnricher.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -26,6 +26,9 @@
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 
@@ -35,13 +38,11 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.PojoUtils;
 
 
 /**
  * This class takes a POJO as input and extracts the value of the lookupKey configured
- * for this operator. It perform a lookup using {@link com.datatorrent.lib.db.cache.CacheManager} to
+ * for this operator. It perform a lookup using {@link org.apache.apex.malhar.lib.db.cache.CacheManager} to
  * find a matching entry and adds the result to the original tuple.
  *
  * <p>
@@ -212,7 +213,7 @@
 
   @SuppressWarnings({ "unchecked", "rawtypes" })
   private PojoUtils.Setter generateSettersForField(Class<?> klass, String outputFieldName)
-      throws NoSuchFieldException, SecurityException
+    throws NoSuchFieldException, SecurityException
   {
     Field f = klass.getDeclaredField(outputFieldName);
     Class c = ClassUtils.primitiveToWrapper(f.getType());
@@ -221,7 +222,7 @@
 
   @SuppressWarnings({ "unchecked", "rawtypes" })
   private PojoUtils.Getter generateGettersForField(Class<?> klass, String inputFieldName)
-      throws NoSuchFieldException, SecurityException
+    throws NoSuchFieldException, SecurityException
   {
     Field f = klass.getDeclaredField(inputFieldName);
     Class c = ClassUtils.primitiveToWrapper(f.getType());
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/ReadOnlyBackup.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/ReadOnlyBackup.java
index c6afbe1..0ae3ee7 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/ReadOnlyBackup.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/enrich/ReadOnlyBackup.java
@@ -16,15 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.FieldInfo;
 import org.apache.hadoop.classification.InterfaceStability;
 
-import com.datatorrent.lib.util.FieldInfo;
-
 /**
  * ReadOnly abstract implementation of BackendLoader.
  *
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/formatter/CsvFormatter.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/formatter/CsvFormatter.java
index 2bd0e67..3469039 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/formatter/CsvFormatter.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/formatter/CsvFormatter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.formatter;
+package org.apache.apex.malhar.contrib.formatter;
 
 import java.io.IOException;
 import java.io.StringWriter;
@@ -34,14 +34,15 @@
 import org.supercsv.io.ICsvBeanWriter;
 import org.supercsv.prefs.CsvPreference;
 
+import org.apache.apex.malhar.contrib.parser.DelimitedSchema;
+import org.apache.apex.malhar.contrib.parser.DelimitedSchema.Field;
+import org.apache.apex.malhar.contrib.parser.Schema.FieldType;
+import org.apache.apex.malhar.lib.formatter.Formatter;
+
 import com.google.common.annotations.VisibleForTesting;
 
 import com.datatorrent.api.AutoMetric;
 import com.datatorrent.api.Context;
-import com.datatorrent.contrib.parser.DelimitedSchema;
-import com.datatorrent.contrib.parser.DelimitedSchema.Field;
-import com.datatorrent.contrib.parser.Schema.FieldType;
-import com.datatorrent.lib.formatter.Formatter;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/AbstractGeodeInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/AbstractGeodeInputOperator.java
index 497e6e4..d56d471 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/AbstractGeodeInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/AbstractGeodeInputOperator.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.geode;
+package org.apache.apex.malhar.contrib.geode;
 
-import com.datatorrent.lib.db.AbstractKeyValueStoreInputOperator;
+import org.apache.apex.malhar.lib.db.AbstractKeyValueStoreInputOperator;
 
 /**
  * This is the base implementation used for geode input adapters.&nbsp; A
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/AbstractGeodeOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/AbstractGeodeOutputOperator.java
index dd0bad2..d3951fc 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/AbstractGeodeOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/AbstractGeodeOutputOperator.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.geode;
+package org.apache.apex.malhar.contrib.geode;
 
-import com.datatorrent.lib.db.AbstractStoreOutputOperator;
+import org.apache.apex.malhar.lib.db.AbstractStoreOutputOperator;
 
 /**
  * This is the base implementation of geode output operators.&nbsp; A concrete
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodeCheckpointStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodeCheckpointStore.java
index 2152b97..0c01373 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodeCheckpointStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodeCheckpointStore.java
@@ -16,9 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.geode;
+package org.apache.apex.malhar.contrib.geode;
 
-import com.datatorrent.lib.util.StorageAgentKeyValueStore;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.lib.util.StorageAgentKeyValueStore;
+
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
@@ -32,17 +44,6 @@
 import com.gemstone.gemfire.cache.query.QueryService;
 import com.gemstone.gemfire.cache.query.SelectResults;
 import com.google.common.collect.Maps;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
 
 /**
  * Geode Store implementation of {@link StorageAgentKeyValueStore} Uses {@link Kryo}
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodeKeyValueStorageAgent.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodeKeyValueStorageAgent.java
index 691c2c1..819d531 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodeKeyValueStorageAgent.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodeKeyValueStorageAgent.java
@@ -16,14 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.geode;
+package org.apache.apex.malhar.contrib.geode;
 
 import java.io.Serializable;
 
+import org.apache.apex.malhar.lib.util.AbstractKeyValueStorageAgent;
 import org.apache.hadoop.conf.Configuration;
 
-import com.datatorrent.lib.util.AbstractKeyValueStorageAgent;
-
 /**
  * Storage Agent implementation which uses {@link GeodeCheckpointStore} for operator
  * checkpointing
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodePOJOOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodePOJOOutputOperator.java
index c7d22c7..d2001e5 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodePOJOOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodePOJOOutputOperator.java
@@ -16,15 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.geode;
+package org.apache.apex.malhar.contrib.geode;
 
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.TableInfo;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
-import com.datatorrent.lib.util.TableInfo;
-
 /**
  *
  * @displayName Geode Output Operator
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodeStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodeStore.java
index d345661..803a83e 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodeStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/GeodeStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.geode;
+package org.apache.apex.malhar.contrib.geode;
 
 import java.io.IOException;
 import java.io.Serializable;
@@ -27,7 +27,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import org.apache.accumulo.core.client.impl.thrift.ThriftTest.Processor.throwsError;
+import org.apache.apex.malhar.lib.db.KeyValueStore;
 
 import com.gemstone.gemfire.cache.CacheClosedException;
 import com.gemstone.gemfire.cache.CacheWriterException;
@@ -43,8 +43,6 @@
 import com.gemstone.gemfire.cache.query.SelectResults;
 import com.gemstone.gemfire.cache.query.TypeMismatchException;
 
-import com.datatorrent.lib.db.KeyValueStore;
-
 /**
  * Provides the implementation of a Geode store.
  * Geode is a distributed in-memory database
@@ -145,7 +143,7 @@
     if (region == null) {
       region = clientCache.getRegion(regionName);
       if (region == null) {
-        region = clientCache.<Object, Object> createClientRegionFactory(ClientRegionShortcut.PROXY).create(regionName);
+        region = clientCache.<Object, Object>createClientRegionFactory(ClientRegionShortcut.PROXY).create(regionName);
       }
     }
 
@@ -164,7 +162,7 @@
     region = clientCache.getRegion(getRegionName());
 
     if (region == null) {
-      region = clientCache.<Object, Object> createClientRegionFactory(ClientRegionShortcut.PROXY).create(
+      region = clientCache.<Object, Object>createClientRegionFactory(ClientRegionShortcut.PROXY).create(
           getRegionName());
     }
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/RegionCreateFunction.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/RegionCreateFunction.java
index 9e948c4..d7aa9d5 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/RegionCreateFunction.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/geode/RegionCreateFunction.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.geode;
+package org.apache.apex.malhar.contrib.geode;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseAppendOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseAppendOutputOperator.java
index a2c1297..d83768d 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseAppendOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseAppendOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.IOException;
 
@@ -29,7 +29,7 @@
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
- * A base implementation of a StoreOutputOperator operator that stores tuples in HBase columns and offers 
+ * A base implementation of a StoreOutputOperator operator that stores tuples in HBase columns and offers
  * non-transactional append.&nbsp; Subclasses should provide implementation for appending operations. <br>
  * <p>
  * <br>
@@ -49,16 +49,19 @@
  *            The tuple type
  * @since 1.0.2
  */
-public abstract class AbstractHBaseAppendOutputOperator<T> extends AbstractHBaseOutputOperator<T> {
+public abstract class AbstractHBaseAppendOutputOperator<T> extends AbstractHBaseOutputOperator<T>
+{
   private static final transient Logger logger = LoggerFactory
       .getLogger(AbstractHBaseAppendOutputOperator.class);
 
-  public AbstractHBaseAppendOutputOperator() {
+  public AbstractHBaseAppendOutputOperator()
+  {
     store = new HBaseStore();
   }
 
   @Override
-  public void processTuple(T tuple, HTable table) {
+  public void processTuple(T tuple, HTable table)
+  {
     Append append = operationAppend(tuple);
     try {
       table.append(append);
diff --git a/contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseOutputOperator.java
similarity index 93%
rename from contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseOutputOperator.java
rename to contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseOutputOperator.java
index b9d3c49..f07f123 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseOutputOperator.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
+import org.apache.apex.malhar.lib.db.AbstractStoreOutputOperator;
 import org.apache.hadoop.hbase.client.HTable;
 
 import com.datatorrent.api.Operator;
-import com.datatorrent.lib.db.AbstractStoreOutputOperator;
 
 /**
- * A base implementation of a HBase output operator that stores tuples in HBase and offers 
+ * A base implementation of a HBase output operator that stores tuples in HBase and offers
  * non-transactional Insert.&nbsp; Subclasses should provide implementation for specific Hbase operations.
  *
  * @since 3.8.0
@@ -32,7 +32,7 @@
 public abstract class AbstractHBaseOutputOperator<T> extends AbstractStoreOutputOperator<T, HBaseStore> implements OutputAdapter.Driver<T>, Operator.CheckpointNotificationListener
 {
   private transient OutputAdapter<T> outputAdapter;
-  
+
   public AbstractHBaseOutputOperator()
   {
     outputAdapter = new OutputAdapter<T>(store, this);
@@ -43,13 +43,13 @@
   {
     outputAdapter.processTuple(tuple);
   }
-  
+
   @Override
   public abstract void processTuple(T tuple, HTable table);
 
   /**
    * Get the table name for tuple.
-   * 
+   *
    * Implementations can override this method to return the table name where the tuple should be written to.
    * Return null to write to default table
    * @param tuple The tuple
@@ -84,5 +84,5 @@
   {
 
   }
-  
+
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBasePutOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBasePutOutputOperator.java
index 2421936..cc5f8e4 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBasePutOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBasePutOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.InterruptedIOException;
 
@@ -48,7 +48,8 @@
  *            The tuple type
  * @since 1.0.2
  */
-public abstract class AbstractHBasePutOutputOperator<T> extends AbstractHBaseOutputOperator<T> {
+public abstract class AbstractHBasePutOutputOperator<T> extends AbstractHBaseOutputOperator<T>
+{
   private static final transient Logger logger = LoggerFactory.getLogger(AbstractHBasePutOutputOperator.class);
 
   public AbstractHBasePutOutputOperator()
@@ -56,7 +57,6 @@
     store = new HBaseStore();
   }
 
-  @Override
   public void processTuple(T tuple, HTable table)
   {
     Put put = operationPut(tuple);
@@ -72,5 +72,5 @@
   }
 
   public abstract Put operationPut(T t);
-  
+
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseWindowAppendOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseWindowAppendOutputOperator.java
index 2fa2146..1747cde 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseWindowAppendOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseWindowAppendOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.IOException;
 
@@ -30,7 +30,9 @@
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
- * A base implementation of an AggregateTransactionableStoreOutputOperator operator that stores tuples in HBase columns and provides batch append.&nbsp; Subclasses should provide implementation for appending operations. <br>
+ * A base implementation of an AggregateTransactionableStoreOutputOperator
+ * operator that stores tuples in HBase columns and provides batch append.&nbsp;
+ * Subclasses should provide implementation for appending operations. <br>
  * <p>
  * <br>
  * This class provides a HBase output operator that can be used to store tuples
@@ -45,17 +47,17 @@
  * guarantee each tuple is written only once to HBase in case the operator is
  * restarted from an earlier checkpoint. It only tries to minimize the number of
  * duplicates limiting it to the tuples that were processed in the window when
- * the operator shutdown.
- * It supports atleast once and atmost once processing modes.
- * Exactly once is not supported
+ * the operator shutdown. It supports atleast once and atmost once processing
+ * modes. Exactly once is not supported
+ *
  * @displayName Abstract HBase Window Append Output
  * @category Output
  * @tags hbase, append, transactionable, batch
- * @param <T>
- *            The tuple type
+ * @param <T> The tuple type
  * @since 1.0.2
  */
-public abstract class AbstractHBaseWindowAppendOutputOperator<T> extends AbstractHBaseWindowOutputOperator<T> {
+public abstract class AbstractHBaseWindowAppendOutputOperator<T> extends AbstractHBaseWindowOutputOperator<T>
+{
   private static final transient Logger logger = LoggerFactory.getLogger(AbstractHBaseWindowAppendOutputOperator.class);
   private transient ProcessingMode mode;
 
@@ -74,12 +76,14 @@
     this.mode = mode;
   }
 
-  public AbstractHBaseWindowAppendOutputOperator() {
+  public AbstractHBaseWindowAppendOutputOperator()
+  {
     store = new HBaseWindowStore();
   }
 
   @Override
-  public void processTuple(T tuple, HTable table) {
+  public void processTuple(T tuple, HTable table)
+  {
     try {
       Append append = operationAppend(tuple);
       table.append(append);
@@ -103,8 +107,8 @@
   @Override
   public void setup(OperatorContext context)
   {
-    mode=context.getValue(OperatorContext.PROCESSING_MODE);
-    if(mode==ProcessingMode.EXACTLY_ONCE){
+    mode = context.getValue(OperatorContext.PROCESSING_MODE);
+    if (mode == ProcessingMode.EXACTLY_ONCE) {
       throw new RuntimeException("This operator only supports atmost once and atleast once processing modes");
     }
     super.setup(context);
diff --git a/contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseWindowOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseWindowOutputOperator.java
similarity index 94%
rename from contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseWindowOutputOperator.java
rename to contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseWindowOutputOperator.java
index 665b463..fb21bf9 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/hbase/AbstractHBaseWindowOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseWindowOutputOperator.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.AbstractPassThruTransactionableStoreOutputOperator;
 import org.apache.hadoop.hbase.client.HTable;
 
 import com.datatorrent.api.Operator;
-import com.datatorrent.lib.db.AbstractPassThruTransactionableStoreOutputOperator;
 
 /**
  * A base implementation of an AggregateTransactionableStoreOutputOperator that stores tuples in HBase
@@ -38,7 +38,7 @@
    * Both at checkpoint window and end window, flush the tuples as application window may not align with
    * end window especially when it is more than one streaming window
    */
-  
+
   private static final Logger logger = LoggerFactory.getLogger(AbstractHBaseWindowOutputOperator.class);
 
   private transient OutputAdapter<T> outputAdapter;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseWindowPutOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseWindowPutOutputOperator.java
index 70fbeeb..e6c65fc 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseWindowPutOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/AbstractHBaseWindowPutOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.IOException;
 
@@ -30,7 +30,9 @@
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
- * A base implementation of an AggregateTransactionableStoreOutputOperator operator for storing tuples in HBase rows and provides a batch put.Subclasses should provide implementation for put operation. <br>
+ * A base implementation of an AggregateTransactionableStoreOutputOperator
+ * operator for storing tuples in HBase rows and provides a batch put.Subclasses
+ * should provide implementation for put operation. <br>
  * <p>
  * <br>
  * This class provides a HBase output operator that can be used to store tuples
@@ -45,20 +47,20 @@
  * guarantee each tuple is written only once to HBase in case the operator is
  * restarted from an earlier checkpoint. It only tries to minimize the number of
  * duplicates limiting it to the tuples that were processed in the window when
- * the operator shutdown.
- * It supports atleast once and atmost once processing modes.
- * Exactly once is not supported
+ * the operator shutdown. It supports atleast once and atmost once processing
+ * modes. Exactly once is not supported
+ *
  * @displayName Abstract HBase Window Put Output
  * @category Output
  * @tags hbase, put, transactionable, batch
- * @param <T>
- *            The tuple type
+ * @param <T> The tuple type
  * @since 1.0.2
  */
-public abstract class AbstractHBaseWindowPutOutputOperator<T> extends AbstractHBaseWindowOutputOperator<T> {
+public abstract class AbstractHBaseWindowPutOutputOperator<T> extends AbstractHBaseWindowOutputOperator<T>
+{
   private static final transient Logger logger = LoggerFactory.getLogger(AbstractHBaseWindowPutOutputOperator.class);
   private transient ProcessingMode mode;
-  
+
   @Deprecated
   public ProcessingMode getMode()
   {
@@ -71,12 +73,14 @@
     this.mode = mode;
   }
 
-  public AbstractHBaseWindowPutOutputOperator() {
+  public AbstractHBaseWindowPutOutputOperator()
+  {
     store = new HBaseWindowStore();
   }
 
   @Override
-  public void processTuple(T tuple, HTable table) {
+  public void processTuple(T tuple, HTable table)
+  {
     try {
       Put put = operationPut(tuple);
       table.put(put);
@@ -86,14 +90,13 @@
     }
   }
 
-
   public abstract Put operationPut(T t) throws IOException;
 
   @Override
   public void setup(OperatorContext context)
   {
-    mode=context.getValue(context.PROCESSING_MODE);
-    if(mode==ProcessingMode.EXACTLY_ONCE){
+    mode = context.getValue(context.PROCESSING_MODE);
+    if (mode == ProcessingMode.EXACTLY_ONCE) {
       throw new RuntimeException("This operator only supports atmost once and atleast once processing modes");
     }
     super.setup(context);
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseCsvMappingPutOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseCsvMappingPutOperator.java
index 7420569..468dd8c 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseCsvMappingPutOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseCsvMappingPutOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.IOException;
 import java.io.StringReader;
@@ -25,27 +25,31 @@
 import java.util.Map;
 import java.util.Map.Entry;
 
-import org.apache.hadoop.hbase.client.Put;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.supercsv.io.CsvListReader;
 import org.supercsv.io.ICsvListReader;
 import org.supercsv.prefs.CsvPreference;
+import org.apache.apex.malhar.lib.util.ReusableStringReader;
+import org.apache.hadoop.hbase.client.Put;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.lib.util.ReusableStringReader;
 
 /**
- * Takes a configuration string which tells us about the position of the row, or column.&nbsp; The incoming tuples are inserted accordingly.
+ * Takes a configuration string which tells us about the position of the row, or
+ * column.&nbsp; The incoming tuples are inserted accordingly.
  * <p>
+ *
  * @displayName HBase Csv Mapping Put
  * @category Output
  * @tags hbase, csv, put, String
  * @since 1.0.4
  */
-public class HBaseCsvMappingPutOperator extends AbstractHBaseWindowPutOutputOperator<String> {
-  private class ColDef {
+public class HBaseCsvMappingPutOperator extends AbstractHBaseWindowPutOutputOperator<String>
+{
+  private class ColDef
+  {
     String colFam;
     String colName;
   }
@@ -58,23 +62,26 @@
   private transient ArrayList<String> csvLineList = new ArrayList<String>();
   private String mappingString;
 
-  public void setMappingString(String mappingString) {
+  public void setMappingString(String mappingString)
+  {
     this.mappingString = mappingString;
   }
 
   @Override
-  public Put operationPut(String t) throws IOException {
+  public Put operationPut(String t) throws IOException
+  {
     return parseLine(t);
   }
 
-  public void parseMapping() {
+  public void parseMapping()
+  {
     ICsvListReader listReader = null;
     StringReader sr = null;
     ArrayList<String> csvList = new ArrayList<String>();
     try {
       sr = new StringReader(mappingString);
       listReader = new CsvListReader(sr,CsvPreference.STANDARD_PREFERENCE);
-      csvList = (ArrayList<String>) listReader.read();
+      csvList = (ArrayList<String>)listReader.read();
     } catch (IOException e) {
       logger.error("Cannot read the mapping string", e);
       DTThrowable.rethrow(e);
@@ -89,9 +96,9 @@
     }
     for (int index = 0; index < csvList.size(); index++) {
       String value = csvList.get(index);
-      if (value.equals("row"))
+      if (value.equals("row")) {
         rowIndex = index;
-      else {
+      } else {
         ColDef c = new ColDef();
         c.colFam = value.substring(0, value.indexOf('.'));
         c.colName = value.substring(value.indexOf('.') + 1);
@@ -100,11 +107,12 @@
     }
   }
 
-  public Put parseLine(String s) {
+  public Put parseLine(String s)
+  {
     Put put = null;
     try {
       lineSr.open(s);
-      csvLineList = (ArrayList<String>) lineListReader.read();
+      csvLineList = (ArrayList<String>)lineListReader.read();
     } catch (IOException e) {
       logger.error("Cannot read the property string", e);
       DTThrowable.rethrow(e);
@@ -120,15 +128,17 @@
   }
 
   @Override
-  public void setup(OperatorContext context) {
+  public void setup(OperatorContext context)
+  {
     super.setup(context);
     parseMapping();
     lineListReader = new CsvListReader(lineSr,
-        CsvPreference.STANDARD_PREFERENCE);
+    CsvPreference.STANDARD_PREFERENCE);
   }
 
   @Override
-  public void teardown() {
+  public void teardown()
+  {
     super.teardown();
     try {
       lineSr.close();
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseFieldInfo.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseFieldInfo.java
index 6a34a91..23fa2c5 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseFieldInfo.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseFieldInfo.java
@@ -16,96 +16,83 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
+import org.apache.apex.malhar.lib.util.FieldInfo;
 import org.apache.hadoop.hbase.util.Bytes;
 
-import com.datatorrent.lib.util.FieldInfo;
-
 /**
  * @since 3.1.0
  */
 
 public class HBaseFieldInfo extends FieldInfo
 {
-	private String familyName;
+  private String familyName;
 
-	public HBaseFieldInfo()
-	{
-	}
+  public HBaseFieldInfo()
+  {
+  }
 
-	public HBaseFieldInfo( String columnName, String columnExpression, SupportType type, String familyName )
-	{
-	  super( columnName, columnExpression, type );
-	  setFamilyName( familyName );
-	}
+  public HBaseFieldInfo( String columnName, String columnExpression, SupportType type, String familyName )
+  {
+    super( columnName, columnExpression, type );
+    setFamilyName( familyName );
+  }
 
-	public String getFamilyName()
-	{
-		return familyName;
-	}
+  public String getFamilyName()
+  {
+    return familyName;
+  }
 
-	public void setFamilyName(String familyName)
-	{
-		this.familyName = familyName;
-	}
+  public void setFamilyName(String familyName)
+  {
+    this.familyName = familyName;
+  }
 
-	public byte[] toBytes( Object value )
-	{
-		final SupportType type = getType();
-		switch( type )
-		{
-		case BOOLEAN:
-		  return Bytes.toBytes( (Boolean)value );
-
-		case SHORT:
-		  return Bytes.toBytes( (Short)value );
-
-		case INTEGER:
-		  return Bytes.toBytes( (Integer)value );
-
-		case LONG:
-		  return Bytes.toBytes( (Long)value );
-
-		case FLOAT:
-		  return Bytes.toBytes( (Float)value );
-
-		case DOUBLE:
-		  return Bytes.toBytes( (Double)value );
-
-		case STRING:
-		  return Bytes.toBytes( (String)value );
-		}
-		throw new IllegalArgumentException( "Unsupported type: " + type );
-	}
-
-	public Object toValue( byte[] bytes )
-	{
+  public byte[] toBytes( Object value )
+  {
     final SupportType type = getType();
-    switch( type )
-    {
-    case BOOLEAN:
-      return Bytes.toBoolean( bytes );
-
-    case SHORT:
-      return Bytes.toShort( bytes );
-
-    case INTEGER:
-      return Bytes.toInt( bytes );
-
-    case LONG:
-      return Bytes.toLong( bytes );
-
-    case FLOAT:
-      return Bytes.toFloat( bytes );
-
-    case DOUBLE:
-      return Bytes.toDouble( bytes );
-
-    case STRING:
-      return Bytes.toString( bytes );
+    switch (type) {
+      case BOOLEAN:
+        return Bytes.toBytes( (Boolean)value );
+      case SHORT:
+        return Bytes.toBytes( (Short)value );
+      case INTEGER:
+        return Bytes.toBytes( (Integer)value );
+      case LONG:
+        return Bytes.toBytes( (Long)value );
+      case FLOAT:
+        return Bytes.toBytes( (Float)value );
+      case DOUBLE:
+        return Bytes.toBytes( (Double)value );
+      case STRING:
+        return Bytes.toBytes( (String)value );
+      default:
+        throw new IllegalArgumentException("Unsupported type: " + type);
     }
-    throw new IllegalArgumentException( "Unsupported type: " + type );
+  }
+
+  public Object toValue( byte[] bytes )
+  {
+    final SupportType type = getType();
+    switch (type) {
+      case BOOLEAN:
+        return Bytes.toBoolean( bytes );
+      case SHORT:
+        return Bytes.toShort( bytes );
+      case INTEGER:
+        return Bytes.toInt( bytes );
+      case LONG:
+        return Bytes.toLong( bytes );
+      case FLOAT:
+        return Bytes.toFloat( bytes );
+      case DOUBLE:
+        return Bytes.toDouble( bytes );
+      case STRING:
+        return Bytes.toString( bytes );
+      default:
+        throw new IllegalArgumentException("Unsupported type: " + type);
+    }
   }
 
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseFieldValueGenerator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseFieldValueGenerator.java
index fea56a0..a49399e 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseFieldValueGenerator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseFieldValueGenerator.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.util.List;
 
-import com.datatorrent.lib.util.FieldValueGenerator;
-import com.datatorrent.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.FieldValueGenerator;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 
 /**
  * A {@link FieldValueGenerator} implementation for {@link HBaseFieldInfo}
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseGetOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseGetOperator.java
index 37270d5..12608c8 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseGetOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseGetOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.client.Get;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseInputOperator.java
index 6f11621..82e50b4 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseInputOperator.java
@@ -16,10 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
+
+import org.apache.apex.malhar.lib.db.AbstractStoreInputOperator;
 
 import com.datatorrent.api.InputOperator;
-import com.datatorrent.lib.db.AbstractStoreInputOperator;
 
 /**
  * A base implementation of hbase input operator which derives from HBaseOperatorBase. <br>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseNameValueCsvPutOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseNameValueCsvPutOperator.java
index d35281c..5fd97e1 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseNameValueCsvPutOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseNameValueCsvPutOperator.java
@@ -16,45 +16,48 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.lib.util.ReusableStringReader;
-import org.apache.hadoop.hbase.client.Put;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.supercsv.io.CsvListReader;
-import org.supercsv.io.ICsvListReader;
-import org.supercsv.prefs.CsvPreference;
-
-import javax.validation.constraints.NotNull;
 import java.io.IOException;
 import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
+import javax.validation.constraints.NotNull;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.supercsv.io.CsvListReader;
+import org.supercsv.io.ICsvListReader;
+import org.supercsv.prefs.CsvPreference;
+import org.apache.apex.malhar.lib.util.ReusableStringReader;
+import org.apache.hadoop.hbase.client.Put;
+
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.netlet.util.DTThrowable;
 
 /**
- * An implementation of HBase window put operator that inserts a string of key value pairs which are mapped to corresponding rows, columns.
+ * An implementation of HBase window put operator that inserts a string of key
+ * value pairs which are mapped to corresponding rows, columns.
  * <p>
  * Accepts a string of key value pairs containing the data to be inserted.These
  * are mapped to corresponding rows,column families and columns using a property
  * file and inserted into hbase Example: input string will be of the form
- * name="xyz", st="patrickhenry" ,ct="fremont", sa="california", the properties will contain
- * properties of form name=row, sa=address.street, ct=address.city, sa=address.state.
- * With the above mapping a row xyz is created. The value patrickhenry is inserted into
- * columnfamily address and column street of row xyz. Other values are inserted
- * similarly.
+ * name="xyz", st="patrickhenry" ,ct="fremont", sa="california", the properties
+ * will contain properties of form name=row, sa=address.street, ct=address.city,
+ * sa=address.state. With the above mapping a row xyz is created. The value
+ * patrickhenry is inserted into columnfamily address and column street of row
+ * xyz. Other values are inserted similarly.
  *
  * @displayName HBase Name Value Csv Put
  * @category Output
  * @tags csv, hbase, put
  * @since 1.0.2
  */
-public class HBaseNameValueCsvPutOperator extends AbstractHBaseWindowPutOutputOperator<String> {
-
-  private class ColDef {
+public class HBaseNameValueCsvPutOperator extends AbstractHBaseWindowPutOutputOperator<String>
+{
+  private class ColDef
+  {
     String colFam;
     String colName;
   }
@@ -66,26 +69,29 @@
   private transient Map<String, ColDef> colMap = new HashMap<String, ColDef>();
   private transient Map<String, String> linemap = new HashMap<String, String>();
   private transient ICsvListReader lineListReader = null;
-  private transient ReusableStringReader lineSr=new ReusableStringReader();
+  private transient ReusableStringReader lineSr = new ReusableStringReader();
   private transient ArrayList<String> csvLineList = new ArrayList<String>();
 
-  public void setMapping(String mapping) {
+  public void setMapping(String mapping)
+  {
     this.mapping = mapping;
   }
 
   @Override
-  public Put operationPut(String t) {
+  public Put operationPut(String t)
+  {
     return parseLine(t);
   }
 
-  public void parseMapping() {
+  public void parseMapping()
+  {
     ICsvListReader listReader = null;
-    StringReader sr=null;
+    StringReader sr = null;
     ArrayList<String> csvList = new ArrayList<String>();
     try {
-      sr=new StringReader(mapping);
+      sr = new StringReader(mapping);
       listReader = new CsvListReader(sr,CsvPreference.STANDARD_PREFERENCE);
-      csvList = (ArrayList<String>) listReader.read();
+      csvList = (ArrayList<String>)listReader.read();
     } catch (IOException e) {
       logger.error("Cannot read the mapping string", e);
       DTThrowable.rethrow(e);
@@ -110,11 +116,12 @@
     }
   }
 
-  public Put parseLine(String s) {
+  public Put parseLine(String s)
+  {
     Put put = null;
     try {
       lineSr.open(s);
-      csvLineList = (ArrayList<String>) lineListReader.read();
+      csvLineList = (ArrayList<String>)lineListReader.read();
     } catch (IOException e) {
       logger.error("Cannot read the property string", e);
       DTThrowable.rethrow(e);
@@ -144,14 +151,16 @@
   }
 
   @Override
-  public void setup(OperatorContext context) {
+  public void setup(OperatorContext context)
+  {
     super.setup(context);
     parseMapping();
     lineListReader = new CsvListReader(lineSr,CsvPreference.STANDARD_PREFERENCE);
   }
 
   @Override
-  public void teardown() {
+  public void teardown()
+  {
     super.teardown();
     try {
       lineSr.close();
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseOperatorBase.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseOperatorBase.java
index 8bed824..04a51b4 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseOperatorBase.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseOperatorBase.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.IOException;
 import org.apache.hadoop.conf.Configuration;
@@ -103,7 +103,8 @@
    * Get the configuration.
    * @return The configuration
    */
-  public Configuration getConfiguration() {
+  public Configuration getConfiguration()
+  {
     return configuration;
   }
 
@@ -113,7 +114,8 @@
    * should be called before using the configuration or table.
    * @throws IOException
    */
-  protected void setupConfiguration() throws IOException {
+  protected void setupConfiguration() throws IOException
+  {
     configuration = HBaseConfiguration.create();
     configuration.set("hbase.zookeeper.quorum", zookeeperQuorum);
     configuration.set("hbase.zookeeper.property.clientPort", "" + zookeeperClientPort);
@@ -127,7 +129,8 @@
    * @return The HBase table if configuration setup was successful, null otherwise
    * @throws IOException
    */
-  protected HTable getTable() throws IOException {
+  protected HTable getTable() throws IOException
+  {
     return table;
   }
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOInputOperator.java
index e459ec7..cb36dbf 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOInputOperator.java
@@ -16,12 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.util.List;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.util.FieldValueGenerator;
+import org.apache.apex.malhar.lib.util.FieldValueGenerator.ValueConverter;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Setter;
+import org.apache.apex.malhar.lib.util.TableInfo;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellUtil;
@@ -29,14 +35,8 @@
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.util.Bytes;
 
-import com.datatorrent.lib.util.FieldValueGenerator;
-import com.datatorrent.lib.util.FieldValueGenerator.ValueConverter;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Setter;
-import com.datatorrent.lib.util.TableInfo;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.api.Context.OperatorContext;
 
 /**
  * HBasePOJOInputOperator reads data from a HBase store, converts it to a POJO and puts it on the output port.
@@ -96,20 +96,20 @@
   {
     try {
       String readRow = Bytes.toString(result.getRow());
-      if( readRow.equals( getLastReadRow() )) {
+      if ( readRow.equals( getLastReadRow() )) {
         return null;
       }
 
       Object instance = pojoType.newInstance();
       rowSetter.set(instance, readRow);
 
-       List<Cell> cells = result.listCells();
-       for (Cell cell : cells) {
-         String columnName = Bytes.toString(CellUtil.cloneQualifier(cell));
-         String columnFamily = Bytes.toString(CellUtil.cloneFamily(cell));
+      List<Cell> cells = result.listCells();
+      for (Cell cell : cells) {
+        String columnName = Bytes.toString(CellUtil.cloneQualifier(cell));
+        String columnFamily = Bytes.toString(CellUtil.cloneFamily(cell));
         byte[] value = CellUtil.cloneValue(cell);
-         ((HBaseFieldValueGenerator)fieldValueGenerator).setColumnValue(instance, columnName, columnFamily, value,
-             valueConverter);
+        ((HBaseFieldValueGenerator)fieldValueGenerator).setColumnValue(instance, columnName, columnFamily, value,
+            valueConverter);
       }
 
       setLastReadRow(readRow);
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOPutOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOPutOperator.java
index 37c962b..d70f3c7 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOPutOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOPutOperator.java
@@ -16,20 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.util.List;
 
+import org.apache.apex.malhar.lib.util.FieldValueGenerator;
+import org.apache.apex.malhar.lib.util.FieldValueGenerator.FieldValueHandler;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.TableInfo;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 import org.apache.hadoop.hbase.client.Put;
 import org.apache.hadoop.hbase.util.Bytes;
 
-import com.datatorrent.lib.util.FieldValueGenerator;
-import com.datatorrent.lib.util.FieldValueGenerator.FieldValueHandler;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
-import com.datatorrent.lib.util.TableInfo;
-
 /**
  * @displayName HBase Output Operator
  * @category Output
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseScanOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseScanOperator.java
index b694e67..f525058 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseScanOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseScanOperator.java
@@ -16,36 +16,38 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.IOException;
 import java.util.Queue;
-import org.apache.hadoop.hbase.KeyValue;
-import org.apache.hadoop.hbase.client.Scan;
+
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-
-import com.datatorrent.api.AutoMetric;
-import com.datatorrent.api.Context;
-import com.datatorrent.api.Operator;
-import com.datatorrent.api.Context.OperatorContext;
-import com.google.common.collect.Queues;
-
-import org.apache.hadoop.hbase.client.HTable;
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.ResultScanner;
+import org.apache.hadoop.hbase.client.Scan;
+
+import com.google.common.collect.Queues;
+import com.datatorrent.api.AutoMetric;
+import com.datatorrent.api.Context;
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.api.Operator;
 
 /**
- * A base implementation of hbase input operator that retrieves tuples from HBase columns and provides scan operation. <br>
+ * A base implementation of hbase input operator that retrieves tuples from
+ * HBase columns and provides scan operation. <br>
  * <p>
  * <br>
- * This class provides a HBase input operator that can be used to retrieve tuples from rows in a
- * HBase table. The class should be extended by the end-operator developer. The extending class should
- * implement operationScan and getTuple methods. The operationScan method should provide a HBase Scan
- * metric object that specifies where to retrieve the tuple information from the table. The getTuple method
- * should map the contents of a Result from the Scan result to a tuple.<br>
+ * This class provides a HBase input operator that can be used to retrieve
+ * tuples from rows in a HBase table. The class should be extended by the
+ * end-operator developer. The extending class should implement operationScan
+ * and getTuple methods. The operationScan method should provide a HBase Scan
+ * metric object that specifies where to retrieve the tuple information from the
+ * table. The getTuple method should map the contents of a Result from the Scan
+ * result to a tuple.<br>
  *
  * <br>
+ *
  * @displayName HBase Scan
  * @category Output
  * @tags hbase, scan, input operator
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseStore.java
index 2b0ffa7..d46bc6f 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.IOException;
 import java.io.InterruptedIOException;
@@ -27,6 +27,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.Connectable;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.HBaseConfiguration;
@@ -41,7 +42,6 @@
 import com.google.common.cache.RemovalListener;
 import com.google.common.cache.RemovalNotification;
 
-import com.datatorrent.lib.db.Connectable;
 /**
  * A {@link Connectable} that uses HBase to connect to stores and implements Connectable interface.
  * <p>
@@ -50,15 +50,15 @@
  * @tags store, hbase
  * @since 1.0.2
  */
-public class HBaseStore implements Connectable {
-
+public class HBaseStore implements Connectable
+{
   public static final String USER_NAME_SPECIFIER = "%USER_NAME%";
 
   private static final Logger logger = LoggerFactory.getLogger(HBaseStore.class);
 
   private String zookeeperQuorum;
   private int zookeeperClientPort;
-  
+
   // Default table name if specified
   protected String tableName;
 
@@ -67,7 +67,7 @@
   // Default interval 30 min
   protected long reloginCheckInterval = 30 * 60 * 1000;
   protected transient Thread loginRenewer;
-  private volatile transient boolean doRelogin;
+  private transient volatile boolean doRelogin;
 
   protected transient HTable table;
   // Multi - table
@@ -76,13 +76,14 @@
 
   @Min(1)
   protected int maxOpenTables = Integer.MAX_VALUE;
-  
+
   /**
    * Get the zookeeper quorum location.
    *
    * @return The zookeeper quorum location
    */
-  public String getZookeeperQuorum() {
+  public String getZookeeperQuorum()
+  {
     return zookeeperQuorum;
   }
 
@@ -92,7 +93,8 @@
    * @param zookeeperQuorum
    *            The zookeeper quorum location
    */
-  public void setZookeeperQuorum(String zookeeperQuorum) {
+  public void setZookeeperQuorum(String zookeeperQuorum)
+  {
     this.zookeeperQuorum = zookeeperQuorum;
   }
 
@@ -101,7 +103,8 @@
    *
    * @return The zookeeper client port
    */
-  public int getZookeeperClientPort() {
+  public int getZookeeperClientPort()
+  {
     return zookeeperClientPort;
   }
 
@@ -111,7 +114,8 @@
    * @param zookeeperClientPort
    *            The zookeeper client port
    */
-  public void setZookeeperClientPort(int zookeeperClientPort) {
+  public void setZookeeperClientPort(int zookeeperClientPort)
+  {
     this.zookeeperClientPort = zookeeperClientPort;
   }
 
@@ -120,7 +124,8 @@
    *
    * @return The HBase table name
    */
-  public String getTableName() {
+  public String getTableName()
+  {
     return tableName;
   }
 
@@ -130,7 +135,8 @@
    * @param tableName
    *            The HBase table name
    */
-  public void setTableName(String tableName) {
+  public void setTableName(String tableName)
+  {
     this.tableName = tableName;
   }
 
@@ -199,8 +205,8 @@
 
   /**
    * Gets the allowedtableNames
-   * 
-   * @return  allowedTableNames 
+   *
+   * @return  allowedTableNames
    */
   public String[] getAllowedTableNames()
   {
@@ -211,14 +217,15 @@
   {
     this.allowedTableNames = allowedTableNames;
   }
-  
+
   /**
    * Get the HBase table .
    *
    * @return The HBase table
    * @omitFromUI
    */
-  public HTable getTable() {
+  public HTable getTable()
+  {
     return table;
   }
 
@@ -230,16 +237,18 @@
    * @return The HBase table
    * @omitFromUI
    */
-  public HTable getTable(String tableName) {
-    if ((tableName == null) || tableName.equals(this.tableName))
+  public HTable getTable(String tableName)
+  {
+    if ((tableName == null) || tableName.equals(this.tableName)) {
       return getTable();
+    }
     try {
       return tableCache.get(tableName);
     } catch (Exception e) {
       throw Throwables.propagate(e);
     }
   }
-  
+
   public void flushTables() throws InterruptedIOException, RetriesExhaustedWithDetailsException
   {
     if (table != null) {
@@ -249,7 +258,7 @@
       flushTable(entry.getValue());
     }
   }
-  
+
   protected void flushTable(HTable table) throws InterruptedIOException, RetriesExhaustedWithDetailsException
   {
     table.flushCommits();
@@ -260,7 +269,8 @@
    *
    * @return The configuration
    */
-  public Configuration getConfiguration() {
+  public Configuration getConfiguration()
+  {
     return configuration;
   }
 
@@ -270,14 +280,16 @@
    * @param configuration
    *            The configuration
    */
-  public void setConfiguration(Configuration configuration) {
+  public void setConfiguration(Configuration configuration)
+  {
     this.configuration = configuration;
   }
 
   protected transient Configuration configuration;
 
   @Override
-  public void connect() throws IOException {
+  public void connect() throws IOException
+  {
     if ((principal != null) && (keytabPath != null)) {
       String lprincipal = evaluateProperty(principal);
       String lkeytabPath = evaluateProperty(keytabPath);
@@ -317,12 +329,12 @@
     if (zookeeperClientPort != 0) {
       configuration.set("hbase.zookeeper.property.clientPort", "" + zookeeperClientPort);
     }
-    
+
     // Connect to default table if specified
     if (tableName != null) {
       table = connectTable(tableName);
     }
-    
+
     CacheLoader<String, HTable> cacheLoader = new CacheLoader<String, HTable>()
     {
       @Override
@@ -331,7 +343,7 @@
         return loadTable(key);
       }
     };
-    
+
     RemovalListener<String, HTable> removalListener = new RemovalListener<String, HTable>()
     {
       @Override
@@ -340,9 +352,9 @@
         unloadTable(notification.getValue());
       }
     };
-    
+
     int maxCacheSize = (tableName == null) ? maxOpenTables : (maxOpenTables - 1);
-    
+
     tableCache = CacheBuilder.<String, HTable>newBuilder().maximumSize(maxCacheSize).removalListener(removalListener).build(cacheLoader);
   }
 
@@ -362,7 +374,7 @@
       logger.warn("Could not close table", e);
     }
   }
-  
+
   protected HTable connectTable(String tableName) throws IOException
   {
     HTable table = new HTable(configuration, tableName);
@@ -373,13 +385,14 @@
   private String evaluateProperty(String property) throws IOException
   {
     if (property.contains(USER_NAME_SPECIFIER)) {
-     property = property.replaceAll(USER_NAME_SPECIFIER, UserGroupInformation.getLoginUser().getShortUserName());
+      property = property.replaceAll(USER_NAME_SPECIFIER, UserGroupInformation.getLoginUser().getShortUserName());
     }
     return property;
   }
 
   @Override
-  public void disconnect() throws IOException {
+  public void disconnect() throws IOException
+  {
     if (loginRenewer != null) {
       doRelogin = false;
       loginRenewer.interrupt();
@@ -392,7 +405,8 @@
   }
 
   @Override
-  public boolean isConnected() {
+  public boolean isConnected()
+  {
     // not applicable to hbase
     return false;
   }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseWindowStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseWindowStore.java
index 2c9f539..38d6195 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseWindowStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/HBaseWindowStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.IOException;
 import java.io.InterruptedIOException;
@@ -24,6 +24,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.TransactionableStore;
 import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HTableDescriptor;
 import org.apache.hadoop.hbase.KeyValue;
@@ -36,8 +37,8 @@
 
 import com.google.common.base.Throwables;
 
-import com.datatorrent.lib.db.TransactionableStore;
 import com.datatorrent.netlet.util.DTThrowable;
+
 /**
  * <p>Provides transaction support to the operators by implementing TransactionableStore abstract methods. </p>
  * <p>
@@ -49,7 +50,8 @@
  * @tags store, transactional
  * @since 1.0.2
  */
-public class HBaseWindowStore extends HBaseStore implements TransactionableStore {
+public class HBaseWindowStore extends HBaseStore implements TransactionableStore
+{
   private static final transient Logger logger = LoggerFactory.getLogger(HBaseWindowStore.class);
   private static final String DEFAULT_ROW_NAME = "HBaseOperator_row";
   private static final String DEFAULT_COLUMN_FAMILY_NAME = "HBaseOutputOperator_cf";
@@ -63,14 +65,16 @@
   private transient String lastWindowColumnName;
   private transient byte[] lastWindowColumnBytes;
 
-  public HBaseWindowStore() {
+  public HBaseWindowStore()
+  {
     rowName = DEFAULT_ROW_NAME;
     columnFamilyName = DEFAULT_COLUMN_FAMILY_NAME;
     lastWindowColumnName = DEFAULT_LAST_WINDOW_PREFIX_COLUMN_NAME;
     constructKeys();
   }
 
-  private void constructKeys() {
+  private void constructKeys()
+  {
     rowBytes = Bytes.toBytes(rowName);
     columnFamilyBytes = Bytes.toBytes(columnFamilyName);
   }
@@ -80,7 +84,8 @@
    *
    * @return The row name
    */
-  public String getRowName() {
+  public String getRowName()
+  {
     return rowName;
   }
 
@@ -90,7 +95,8 @@
    * @param rowName
    *            The row name
    */
-  public void setRowName(String rowName) {
+  public void setRowName(String rowName)
+  {
     this.rowName = rowName;
     constructKeys();
   }
@@ -100,7 +106,8 @@
    *
    * @return The column family name
    */
-  public String getColumnFamilyName() {
+  public String getColumnFamilyName()
+  {
     return columnFamilyName;
   }
 
@@ -110,13 +117,15 @@
    * @param columnFamilyName
    *            The column family name
    */
-  public void setColumnFamilyName(String columnFamilyName) {
+  public void setColumnFamilyName(String columnFamilyName)
+  {
     this.columnFamilyName = columnFamilyName;
     constructKeys();
   }
 
   @Override
-  public void connect() throws IOException {
+  public void connect() throws IOException
+  {
     super.connect();
     HTableDescriptor tdesc = table.getTableDescriptor();
     if (!tdesc.hasFamily(columnFamilyBytes)) {
@@ -133,13 +142,14 @@
   }
 
   @Override
-  public void beginTransaction() {
+  public void beginTransaction()
+  {
     // HBase does not support transactions so this method left empty
-
   }
 
   @Override
-  public void commitTransaction() {
+  public void commitTransaction()
+  {
     try {
       flushTables();
     } catch (InterruptedIOException | RetriesExhaustedWithDetailsException e) {
@@ -148,19 +158,21 @@
   }
 
   @Override
-  public void rollbackTransaction() {
+  public void rollbackTransaction()
+  {
     // HBase does not support transactions so this method left empty
-
   }
 
   @Override
-  public boolean isInTransaction() {
+  public boolean isInTransaction()
+  {
     // HBase does not support transactions so this method left empty
     return false;
   }
 
   @Override
-  public long getCommittedWindowId(String appId, int operatorId) {
+  public long getCommittedWindowId(String appId, int operatorId)
+  {
     byte[] value = null;
     try {
       String columnKey = appId + "_" + operatorId + "_" + lastWindowColumnName;
@@ -183,12 +195,14 @@
     if (value != null) {
       long longval = Bytes.toLong(value);
       return longval;
-    } else
+    } else {
       return -1;
+    }
   }
 
   @Override
-  public void storeCommittedWindowId(String appId, int operatorId,long windowId) {
+  public void storeCommittedWindowId(String appId, int operatorId,long windowId)
+  {
     byte[] WindowIdBytes = Bytes.toBytes(windowId);
     String columnKey = appId + "_" + operatorId + "_" + lastWindowColumnName;
     lastWindowColumnBytes = Bytes.toBytes(columnKey);
@@ -206,7 +220,8 @@
   }
 
   @Override
-  public void removeCommittedWindowId(String appId, int operatorId) {
+  public void removeCommittedWindowId(String appId, int operatorId)
+  {
     // Not applicable to hbase
   }
 
diff --git a/contrib/src/main/java/com/datatorrent/contrib/hbase/OutputAdapter.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/OutputAdapter.java
similarity index 97%
rename from contrib/src/main/java/com/datatorrent/contrib/hbase/OutputAdapter.java
rename to contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/OutputAdapter.java
index 31317bd..e503ebb 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/hbase/OutputAdapter.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/OutputAdapter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.InterruptedIOException;
 
@@ -75,7 +75,9 @@
   interface Driver<T>
   {
     void processTuple(T tuple, HTable table);
+
     String getTableName(T tuple);
+
     void errorTuple(T tuple);
   }
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/package-info.java
index 0ccd6c2..2df5c10 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/hbase/package-info.java
@@ -20,4 +20,4 @@
  * HBase operators and utilities.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/jython/PythonOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/jython/PythonOperator.java
index a6fb42f..997c890 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/jython/PythonOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/jython/PythonOperator.java
@@ -16,17 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.jython;
-
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.script.ScriptOperator;
-import org.python.core.*;
-import org.python.util.PythonInterpreter;
+package org.apache.apex.malhar.contrib.jython;
 
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 
+import org.python.core.PyCode;
+import org.python.core.PyIterator;
+import org.python.core.PyObject;
+import org.python.core.PyStringMap;
+import org.python.core.PyTuple;
+import org.python.util.PythonInterpreter;
+
+import org.apache.apex.malhar.lib.script.ScriptOperator;
+
+import com.datatorrent.api.Context.OperatorContext;
+
 /**
  * An operator that executes a python script and passes the input as bindings.
  * <p></p>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/jython/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/jython/package-info.java
index 08b3a3e..9fc7de7 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/jython/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/jython/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.jython;
+package org.apache.apex.malhar.contrib.jython;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractExactlyOnceKafkaOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractExactlyOnceKafkaOutputOperator.java
index b11c8ef..ec082d1 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractExactlyOnceKafkaOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractExactlyOnceKafkaOutputOperator.java
@@ -16,12 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
+import java.nio.ByteBuffer;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.Sets;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.common.util.Pair;
-import com.google.common.collect.Sets;
 import kafka.api.FetchRequest;
 import kafka.api.FetchRequestBuilder;
 import kafka.javaapi.FetchResponse;
@@ -32,13 +39,6 @@
 import kafka.message.MessageAndOffset;
 import kafka.producer.KeyedMessage;
 import kafka.producer.Partitioner;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.nio.ByteBuffer;
-import java.util.HashMap;
-import java.util.Map;
-
 
 /**
  * This is a base implementation of a Kafka output operator,
@@ -82,7 +82,6 @@
  */
 public abstract class AbstractExactlyOnceKafkaOutputOperator<T, K, V> extends AbstractKafkaOutputOperator<K, V>
 {
-
   private Map<Integer, Pair<byte[], byte[]>>  lastMsgs;
 
   private transient  Partitioner partitioner;
@@ -94,9 +93,9 @@
   {
     super.setup(context);
     try {
-      String className = (String) getConfigProperties().get(KafkaMetadataUtil.PRODUCER_PROP_PARTITIONER);
+      String className = (String)getConfigProperties().get(KafkaMetadataUtil.PRODUCER_PROP_PARTITIONER);
       if (className != null) {
-        partitioner = (Partitioner) Class.forName(className).newInstance();
+        partitioner = (Partitioner)Class.forName(className).newInstance();
       }
     } catch (Exception e) {
       throw new RuntimeException("Failed to initialize partitioner", e);
@@ -108,22 +107,22 @@
   /**
    * This input port receives tuples that will be written out to Kafka.
    */
-  public final transient DefaultInputPort<T> inputPort = new DefaultInputPort<T>() {
+  public final transient DefaultInputPort<T> inputPort = new DefaultInputPort<T>()
+  {
     @Override
     public void process(T tuple)
     {
       Pair<K, V> keyValue = tupleToKeyValue(tuple);
       int pid = 0;
 
-      if(partitioner!=null){
+      if (partitioner != null) {
         pid = partitioner.partition(keyValue.first, partitionNum);
       }
 
       Pair<byte[], byte[]> lastMsg = lastMsgs.get(pid);
-
-      if(lastMsg == null || compareToLastMsg(keyValue, lastMsg) > 0){
+      if (lastMsg == null || compareToLastMsg(keyValue, lastMsg) > 0) {
         getProducer().send(new KeyedMessage<K, V>(getTopic(), keyValue.first, keyValue.second));
-        sendCount ++;
+        sendCount++;
       } else {
         // ignore tuple because kafka has already had the tuple
         logger.debug("Ingore tuple " + tuple);
@@ -134,7 +133,6 @@
 
   private void initializeLastProcessingOffset()
   {
-
     // read last received kafka message
     TopicMetadata tm = KafkaMetadataUtil.getTopicMetadata(Sets.newHashSet((String)getConfigProperties().get(KafkaMetadataUtil.PRODUCER_PROP_BROKERLIST)), this.getTopic());
 
@@ -170,9 +168,7 @@
         key.get(keyBytes);
         lastMsgs.put(pm.partitionId(), new Pair<byte[], byte[]>(keyBytes, valueBytes));
       }
-
     }
-
   }
 
   /**
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractKafkaInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractKafkaInputOperator.java
index 1218f4a..9130923 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractKafkaInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractKafkaInputOperator.java
@@ -16,42 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
-
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DefaultPartition;
-import com.datatorrent.api.InputOperator;
-import com.datatorrent.api.Operator;
-import com.datatorrent.api.Operator.ActivationListener;
-import com.datatorrent.api.Partitioner;
-import com.datatorrent.api.Stats;
-import com.datatorrent.api.StatsListener;
-import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.util.KryoCloneUtils;
-import com.google.common.base.Joiner;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
-
-import kafka.api.FetchRequest;
-import kafka.api.FetchRequestBuilder;
-import kafka.cluster.Broker;
-import kafka.javaapi.FetchResponse;
-import kafka.javaapi.PartitionMetadata;
-import kafka.javaapi.consumer.SimpleConsumer;
-import kafka.message.Message;
-import kafka.message.MessageAndOffset;
-
-import org.apache.apex.malhar.lib.wal.WindowDataManager;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.tuple.MutablePair;
-import org.apache.commons.lang3.tuple.Pair;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.validation.Valid;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.io.IOException;
 import java.lang.reflect.Array;
@@ -65,7 +30,43 @@
 import java.util.Map;
 import java.util.Set;
 
-import static com.datatorrent.contrib.kafka.KafkaConsumer.KafkaMeterStatsUtil.getOffsetsForPartitions;
+import javax.validation.Valid;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
+import org.apache.apex.malhar.lib.wal.WindowDataManager;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.MutablePair;
+import org.apache.commons.lang3.tuple.Pair;
+
+import com.google.common.base.Joiner;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
+
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.api.DefaultPartition;
+import com.datatorrent.api.InputOperator;
+import com.datatorrent.api.Operator;
+import com.datatorrent.api.Operator.ActivationListener;
+import com.datatorrent.api.Partitioner;
+import com.datatorrent.api.Stats;
+import com.datatorrent.api.StatsListener;
+import com.datatorrent.api.annotation.OperatorAnnotation;
+import com.datatorrent.api.annotation.Stateless;
+
+import kafka.api.FetchRequest;
+import kafka.api.FetchRequestBuilder;
+import kafka.cluster.Broker;
+import kafka.javaapi.FetchResponse;
+import kafka.javaapi.PartitionMetadata;
+import kafka.javaapi.consumer.SimpleConsumer;
+import kafka.message.Message;
+import kafka.message.MessageAndOffset;
+
+import static org.apache.apex.malhar.contrib.kafka.KafkaConsumer.KafkaMeterStatsUtil.getOffsetsForPartitions;
 
 /**
  * This is a base implementation of a Kafka input operator, which consumes data from Kafka message bus.&nbsp;
@@ -226,7 +227,8 @@
    * processing of messages doesn't get stuck.
    * @return The maximum for the total size
      */
-  public long getMaxTotalMsgSizePerWindow() {
+  public long getMaxTotalMsgSizePerWindow()
+  {
     return maxTotalMsgSizePerWindow;
   }
 
@@ -236,7 +238,8 @@
    *
    * @param maxTotalMsgSizePerWindow The maximum for the total size
      */
-  public void setMaxTotalMsgSizePerWindow(long maxTotalMsgSizePerWindow) {
+  public void setMaxTotalMsgSizePerWindow(long maxTotalMsgSizePerWindow)
+  {
     this.maxTotalMsgSizePerWindow = maxTotalMsgSizePerWindow;
   }
 
@@ -256,7 +259,7 @@
     }
     this.context = context;
     operatorId = context.getId();
-    if(consumer instanceof HighlevelKafkaConsumer && !(windowDataManager instanceof WindowDataManager.NoopWindowDataManager)) {
+    if (consumer instanceof HighlevelKafkaConsumer && !(windowDataManager instanceof WindowDataManager.NoopWindowDataManager)) {
       throw new RuntimeException("Idempotency is not supported for High Level Kafka Consumer");
     }
     windowDataManager.setup(context);
@@ -289,7 +292,7 @@
       if (recoveredData != null) {
         Map<String, List<PartitionMetadata>> pms = KafkaMetadataUtil.getPartitionsForTopic(getConsumer().brokers, getConsumer().topic);
         if (pms != null) {
-          SimpleKafkaConsumer cons = (SimpleKafkaConsumer) getConsumer();
+          SimpleKafkaConsumer cons = (SimpleKafkaConsumer)getConsumer();
           // add all partition request in one Fretch request together
           FetchRequestBuilder frb = new FetchRequestBuilder().clientId(cons.getClientId());
           for (Map.Entry<KafkaPartition, MutablePair<Long, Integer>> rc : recoveredData.entrySet()) {
@@ -299,13 +302,14 @@
             Iterator<PartitionMetadata> pmIterator = pmsVal.iterator();
             PartitionMetadata pm = pmIterator.next();
             while (pm.partitionId() != kp.getPartitionId()) {
-              if (!pmIterator.hasNext())
+              if (!pmIterator.hasNext()) {
                 break;
+              }
               pm = pmIterator.next();
             }
-            if (pm.partitionId() != kp.getPartitionId())
+            if (pm.partitionId() != kp.getPartitionId()) {
               continue;
-
+            }
             Broker bk = pm.leader();
 
             frb.addFetch(consumer.topic, rc.getKey().getPartitionId(), rc.getValue().left, cons.getBufferSize());
@@ -319,13 +323,14 @@
               emitTuple(kafkaMessage);
               offsetStats.put(kp, msg.offset());
               count = count + 1;
-              if (count.equals(rc.getValue().right))
+              if (count.equals(rc.getValue().right)) {
                 break;
+              }
             }
           }
         }
       }
-      if(windowId == windowDataManager.getLargestCompletedWindow()) {
+      if (windowId == windowDataManager.getLargestCompletedWindow()) {
         // Start the consumer at the largest recovery window
         SimpleKafkaConsumer cons = (SimpleKafkaConsumer)getConsumer();
         // Set the offset positions to the consumer
@@ -337,8 +342,7 @@
         cons.resetOffset(currentOffsets);
         cons.start();
       }
-    }
-    catch (IOException e) {
+    } catch (IOException e) {
       throw new RuntimeException("replay", e);
     }
   }
@@ -354,8 +358,7 @@
     if (currentWindowId > windowDataManager.getLargestCompletedWindow()) {
       try {
         windowDataManager.save(currentWindowRecoveryState, currentWindowId);
-      }
-      catch (IOException e) {
+      } catch (IOException e) {
         throw new RuntimeException("saving recovery", e);
       }
     }
@@ -397,8 +400,7 @@
 
     try {
       windowDataManager.committed(windowId);
-    }
-    catch (IOException e) {
+    } catch (IOException e) {
       throw new RuntimeException("deleting state", e);
     }
   }
@@ -453,10 +455,10 @@
       emitTotalMsgSize += message.msg.size();
       offsetStats.put(message.kafkaPart, message.offSet);
       MutablePair<Long, Integer> offsetAndCount = currentWindowRecoveryState.get(message.kafkaPart);
-      if(offsetAndCount == null) {
+      if (offsetAndCount == null) {
         currentWindowRecoveryState.put(message.kafkaPart, new MutablePair<Long, Integer>(message.offSet, 1));
       } else {
-        offsetAndCount.setRight(offsetAndCount.right+1);
+        offsetAndCount.setRight(offsetAndCount.right + 1);
       }
     }
   }
@@ -507,7 +509,7 @@
 
     boolean isInitialParitition = true;
     // check if it's the initial partition
-    if(partitions.iterator().hasNext()) {
+    if (partitions.iterator().hasNext()) {
       isInitialParitition = partitions.iterator().next().getStats() == null;
     }
 
@@ -516,7 +518,7 @@
 
     // initialize the offset
     Map<KafkaPartition, Long> initOffset = null;
-    if(isInitialParitition && offsetManager !=null){
+    if (isInitialParitition && offsetManager != null) {
       initOffset = offsetManager.loadInitialOffsets();
       logger.info("Initial offsets: {} ", "{ " + Joiner.on(", ").useForNull("").withKeyValueSeparator(": ").join(initOffset) + " }");
     }
@@ -527,95 +529,92 @@
 
     switch (strategy) {
 
-    // For the 1 to 1 mapping The framework will create number of operator partitions based on kafka topic partitions
-    // Each operator partition will consume from only one kafka partition
-    case ONE_TO_ONE:
+      // For the 1 to 1 mapping The framework will create number of operator partitions based on kafka topic partitions
+      // Each operator partition will consume from only one kafka partition
+      case ONE_TO_ONE:
 
-      if (isInitialParitition) {
-        lastRepartitionTime = System.currentTimeMillis();
-        logger.info("[ONE_TO_ONE]: Initializing partition(s)");
-        // get partition metadata for topics.
-        // Whatever operator is using high-level or simple kafka consumer, the operator always create a temporary simple kafka consumer to get the metadata of the topic
-        // The initial value of brokerList of the KafkaConsumer is used to retrieve the topic metadata
-        Map<String, List<PartitionMetadata>> kafkaPartitions = KafkaMetadataUtil.getPartitionsForTopic(getConsumer().brokers, getConsumer().getTopic());
+        if (isInitialParitition) {
+          lastRepartitionTime = System.currentTimeMillis();
+          logger.info("[ONE_TO_ONE]: Initializing partition(s)");
+          // get partition metadata for topics.
+          // Whatever operator is using high-level or simple kafka consumer, the operator always create a temporary simple kafka consumer to get the metadata of the topic
+          // The initial value of brokerList of the KafkaConsumer is used to retrieve the topic metadata
+          Map<String, List<PartitionMetadata>> kafkaPartitions = KafkaMetadataUtil.getPartitionsForTopic(getConsumer().brokers, getConsumer().getTopic());
 
-        // initialize the number of operator partitions according to number of kafka partitions
+          // initialize the number of operator partitions according to number of kafka partitions
 
-        newPartitions = new LinkedList<Partitioner.Partition<AbstractKafkaInputOperator<K>>>();
-        for (Map.Entry<String, List<PartitionMetadata>> kp : kafkaPartitions.entrySet()) {
-          String clusterId = kp.getKey();
-          for (PartitionMetadata pm : kp.getValue()) {
-            logger.info("[ONE_TO_ONE]: Create operator partition for cluster {}, topic {}, kafka partition {} ", clusterId, getConsumer().topic, pm.partitionId());
-            newPartitions.add(createPartition(Sets.newHashSet(new KafkaPartition(clusterId, consumer.topic, pm.partitionId())), initOffset));
-          }
-        }
-        resultPartitions = newPartitions;
-        numPartitionsChanged = true;
-      }
-      else if (newWaitingPartition.size() != 0) {
-        // add partition for new kafka partition
-        for (KafkaPartition newPartition : newWaitingPartition) {
-          logger.info("[ONE_TO_ONE]: Add operator partition for cluster {}, topic {}, partition {}", newPartition.getClusterId(), getConsumer().topic, newPartition.getPartitionId());
-          partitions.add(createPartition(Sets.newHashSet(newPartition), null));
-        }
-        newWaitingPartition.clear();
-        resultPartitions = partitions;
-        numPartitionsChanged = true;
-      }
-      break;
-    // For the 1 to N mapping The initial partition number is defined by stream application
-    // Afterwards, the framework will dynamically adjust the partition and allocate consumers to as less operator partitions as it can
-    //  and guarantee the total intake rate for each operator partition is below some threshold
-    case ONE_TO_MANY:
-
-      if (getConsumer() instanceof HighlevelKafkaConsumer) {
-        throw new UnsupportedOperationException("[ONE_TO_MANY]: The high-level consumer is not supported for ONE_TO_MANY partition strategy.");
-      }
-
-      if (isInitialParitition || newWaitingPartition.size() != 0) {
-        lastRepartitionTime = System.currentTimeMillis();
-        logger.info("[ONE_TO_MANY]: Initializing partition(s)");
-        // get partition metadata for topics.
-        // Whatever operator is using high-level or simple kafka consumer, the operator always create a temporary simple kafka consumer to get the metadata of the topic
-        // The initial value of brokerList of the KafkaConsumer is used to retrieve the topic metadata
-        Map<String, List<PartitionMetadata>> kafkaPartitions = KafkaMetadataUtil.getPartitionsForTopic(getConsumer().brokers, getConsumer().getTopic());
-
-        int size = initialPartitionCount;
-        @SuppressWarnings("unchecked")
-        Set<KafkaPartition>[] kps = (Set<KafkaPartition>[]) Array.newInstance((new HashSet<KafkaPartition>()).getClass(), size);
-        int i = 0;
-        for (Map.Entry<String, List<PartitionMetadata>> en : kafkaPartitions.entrySet()) {
-          String clusterId = en.getKey();
-          for (PartitionMetadata pm : en.getValue()) {
-            if (kps[i % size] == null) {
-              kps[i % size] = new HashSet<KafkaPartition>();
+          newPartitions = new LinkedList<Partitioner.Partition<AbstractKafkaInputOperator<K>>>();
+          for (Map.Entry<String, List<PartitionMetadata>> kp : kafkaPartitions.entrySet()) {
+            String clusterId = kp.getKey();
+            for (PartitionMetadata pm : kp.getValue()) {
+              logger.info("[ONE_TO_ONE]: Create operator partition for cluster {}, topic {}, kafka partition {} ", clusterId, getConsumer().topic, pm.partitionId());
+              newPartitions.add(createPartition(Sets.newHashSet(new KafkaPartition(clusterId, consumer.topic, pm.partitionId())), initOffset));
             }
-            kps[i % size].add(new KafkaPartition(clusterId, consumer.topic, pm.partitionId()));
-            i++;
           }
+          resultPartitions = newPartitions;
+          numPartitionsChanged = true;
+        } else if (newWaitingPartition.size() != 0) {
+          // add partition for new kafka partition
+          for (KafkaPartition newPartition : newWaitingPartition) {
+            logger.info("[ONE_TO_ONE]: Add operator partition for cluster {}, topic {}, partition {}", newPartition.getClusterId(), getConsumer().topic, newPartition.getPartitionId());
+            partitions.add(createPartition(Sets.newHashSet(newPartition), null));
+          }
+          newWaitingPartition.clear();
+          resultPartitions = partitions;
+          numPartitionsChanged = true;
         }
-        size = i > size ? size : i;
-        newPartitions = new ArrayList<Partitioner.Partition<AbstractKafkaInputOperator<K>>>(size);
-        for (i = 0; i < size; i++) {
-          logger.info("[ONE_TO_MANY]: Create operator partition for kafka partition(s): {} ", StringUtils.join(kps[i], ", "));
-          newPartitions.add(createPartition(kps[i], initOffset));
-        }
-        // Add the existing partition Ids to the deleted operators
-        for (Partition<AbstractKafkaInputOperator<K>> op : partitions)
-        {
-          deletedOperators.add(op.getPartitionedInstance().operatorId);
+        break;
+      // For the 1 to N mapping The initial partition number is defined by stream application
+      // Afterwards, the framework will dynamically adjust the partition and allocate consumers to as less operator partitions as it can
+      //  and guarantee the total intake rate for each operator partition is below some threshold
+      case ONE_TO_MANY:
+
+        if (getConsumer() instanceof HighlevelKafkaConsumer) {
+          throw new UnsupportedOperationException("[ONE_TO_MANY]: The high-level consumer is not supported for ONE_TO_MANY partition strategy.");
         }
 
-        newWaitingPartition.clear();
-        resultPartitions = newPartitions;
-        numPartitionsChanged = true;
-      }
-      break;
+        if (isInitialParitition || newWaitingPartition.size() != 0) {
+          lastRepartitionTime = System.currentTimeMillis();
+          logger.info("[ONE_TO_MANY]: Initializing partition(s)");
+          // get partition metadata for topics.
+          // Whatever operator is using high-level or simple kafka consumer, the operator always create a temporary simple kafka consumer to get the metadata of the topic
+          // The initial value of brokerList of the KafkaConsumer is used to retrieve the topic metadata
+          Map<String, List<PartitionMetadata>> kafkaPartitions = KafkaMetadataUtil.getPartitionsForTopic(getConsumer().brokers, getConsumer().getTopic());
 
-    case ONE_TO_MANY_HEURISTIC:
-      throw new UnsupportedOperationException("[ONE_TO_MANY_HEURISTIC]: Not implemented yet");
-    default:
-      break;
+          int size = initialPartitionCount;
+          @SuppressWarnings("unchecked")
+          Set<KafkaPartition>[] kps = (Set<KafkaPartition>[])Array.newInstance((new HashSet<KafkaPartition>()).getClass(), size);
+          int i = 0;
+          for (Map.Entry<String, List<PartitionMetadata>> en : kafkaPartitions.entrySet()) {
+            String clusterId = en.getKey();
+            for (PartitionMetadata pm : en.getValue()) {
+              if (kps[i % size] == null) {
+                kps[i % size] = new HashSet<KafkaPartition>();
+              }
+              kps[i % size].add(new KafkaPartition(clusterId, consumer.topic, pm.partitionId()));
+              i++;
+            }
+          }
+          size = i > size ? size : i;
+          newPartitions = new ArrayList<Partitioner.Partition<AbstractKafkaInputOperator<K>>>(size);
+          for (i = 0; i < size; i++) {
+            logger.info("[ONE_TO_MANY]: Create operator partition for kafka partition(s): {} ", StringUtils.join(kps[i], ", "));
+            newPartitions.add(createPartition(kps[i], initOffset));
+          }
+          // Add the existing partition Ids to the deleted operators
+          for (Partition<AbstractKafkaInputOperator<K>> op : partitions) {
+            deletedOperators.add(op.getPartitionedInstance().operatorId);
+          }
+          newWaitingPartition.clear();
+          resultPartitions = newPartitions;
+          numPartitionsChanged = true;
+        }
+        break;
+
+      case ONE_TO_MANY_HEURISTIC:
+        throw new UnsupportedOperationException("[ONE_TO_MANY_HEURISTIC]: Not implemented yet");
+      default:
+        break;
     }
 
     if (numPartitionsChanged) {
@@ -689,7 +688,7 @@
     List<KafkaConsumer.KafkaMeterStats> kmsList = new LinkedList<KafkaConsumer.KafkaMeterStats>();
     for (Stats.OperatorStats os : stats.getLastWindowedStats()) {
       if (os != null && os.counters instanceof KafkaConsumer.KafkaMeterStats) {
-        kmsList.add((KafkaConsumer.KafkaMeterStats) os.counters);
+        kmsList.add((KafkaConsumer.KafkaMeterStats)os.counters);
       }
     }
     return kmsList;
@@ -719,12 +718,12 @@
       return false;
     }
 
-    if(repartitionInterval < 0){
+    if (repartitionInterval < 0) {
       // if repartition is disabled
       return false;
     }
 
-    if(t - lastRepartitionTime < repartitionInterval) {
+    if (t - lastRepartitionTime < repartitionInterval) {
       // return false if it's still within repartitionInterval since last (re)partition
       return false;
     }
@@ -747,18 +746,18 @@
         }
 
         Map<String, List<PartitionMetadata>> partitionsMeta = KafkaMetadataUtil.getPartitionsForTopic(consumer.brokers, consumer.getTopic());
-        if(partitionsMeta == null){
+        if (partitionsMeta == null) {
           //broker(s) has temporary issue to get metadata
           return false;
         }
         for (Map.Entry<String, List<PartitionMetadata>> en : partitionsMeta.entrySet()) {
-          if(en.getValue() == null){
+          if (en.getValue() == null) {
             //broker(s) has temporary issue to get metadata
             continue;
           }
           for (PartitionMetadata pm : en.getValue()) {
             KafkaPartition pa = new KafkaPartition(en.getKey(), consumer.topic, pm.partitionId());
-            if(!existingIds.contains(pa)){
+            if (!existingIds.contains(pa)) {
               newWaitingPartition.add(pa);
             }
           }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractKafkaOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractKafkaOutputOperator.java
index f0835c4..624c955 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractKafkaOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractKafkaOutputOperator.java
@@ -16,18 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
+
+import java.util.Properties;
+import javax.validation.constraints.NotNull;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.commons.lang3.StringUtils;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.Operator;
 import kafka.javaapi.producer.Producer;
 import kafka.producer.ProducerConfig;
-import org.apache.commons.lang3.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import javax.validation.constraints.NotNull;
-import java.util.Properties;
 
 /**
  * This is the base implementation of a Kafka output operator, which writes data to the Kafka message bus.
@@ -86,7 +87,8 @@
    * setup producer configuration.
    * @return ProducerConfig
    */
-  protected ProducerConfig createKafkaProducerConfig(){
+  protected ProducerConfig createKafkaProducerConfig()
+  {
     Properties prop = new Properties();
     for (String propString : producerProperties.split(",")) {
       if (!propString.contains("=")) {
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractKafkaSinglePortInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractKafkaSinglePortInputOperator.java
index 96dd599..f656807 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractKafkaSinglePortInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/AbstractKafkaSinglePortInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import com.datatorrent.api.DefaultOutputPort;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/HighlevelKafkaConsumer.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/HighlevelKafkaConsumer.java
index 85cee56..5531285 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/HighlevelKafkaConsumer.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/HighlevelKafkaConsumer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.util.HashMap;
 import java.util.List;
@@ -30,8 +30,6 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Joiner;
-
 import kafka.consumer.ConsumerConfig;
 import kafka.consumer.ConsumerIterator;
 import kafka.consumer.KafkaStream;
@@ -158,8 +156,8 @@
       Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = standardConsumer.get(e.getKey()).createMessageStreams(topicCountMap);
 
       for (final KafkaStream<byte[], byte[]> stream : consumerMap.get(topic)) {
-        consumerThreadExecutor.submit(new Runnable() {
-
+        consumerThreadExecutor.submit(new Runnable()
+        {
           KafkaPartition kp = new KafkaPartition(e.getKey(), topic, -1);
 
           public void run()
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaConsumer.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaConsumer.java
index a67ff48..f59f2c8 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaConsumer.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaConsumer.java
@@ -16,21 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
-import com.datatorrent.api.Context;
-import com.esotericsoftware.kryo.serializers.FieldSerializer.Bind;
-import com.esotericsoftware.kryo.serializers.JavaSerializer;
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Maps;
-import com.google.common.collect.SetMultimap;
-import kafka.message.Message;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang3.StringUtils;
-
-import javax.validation.constraints.NotNull;
-import javax.validation.constraints.Pattern;
-import javax.validation.constraints.Pattern.Flag;
 import java.io.Closeable;
 import java.io.Serializable;
 import java.util.Collection;
@@ -44,6 +31,19 @@
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Pattern.Flag;
+
+import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
+import com.esotericsoftware.kryo.serializers.FieldSerializer.Bind;
+import com.esotericsoftware.kryo.serializers.JavaSerializer;
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Maps;
+import com.google.common.collect.SetMultimap;
+import com.datatorrent.api.Context;
+import kafka.message.Message;
 
 /**
  * Base Kafka Consumer class used by kafka input operator
@@ -52,9 +52,9 @@
  */
 public abstract class KafkaConsumer implements Closeable
 {
-  protected final static String HIGHLEVEL_CONSUMER_ID_SUFFIX = "_stream_";
+  protected static final String HIGHLEVEL_CONSUMER_ID_SUFFIX = "_stream_";
 
-  protected final static String SIMPLE_CONSUMER_ID_SUFFIX = "_partition_";
+  protected static final String SIMPLE_CONSUMER_ID_SUFFIX = "_partition_";
   private String zookeeper;
 
   public KafkaConsumer()
@@ -111,7 +111,7 @@
    * This setting is case_insensitive
    * By default it always consume from the beginning of the queue
    */
-  @Pattern(flags={Flag.CASE_INSENSITIVE}, regexp = "earliest|latest")
+  @Pattern(flags = {Flag.CASE_INSENSITIVE}, regexp = "earliest|latest")
   protected String initialOffset = "latest";
 
 
@@ -122,17 +122,18 @@
   /**
    * This method is called in setup method of the operator
    */
-  public void create(){
+  public void create()
+  {
     initBrokers();
     holdingBuffer = new ArrayBlockingQueue<KafkaMessage>(cacheSize);
   }
 
   public void initBrokers()
   {
-    if(brokers!=null){
-      return ;
+    if (brokers != null) {
+      return;
     }
-    if(zookeeperMap !=null){
+    if (zookeeperMap != null) {
       brokers = HashMultimap.create();
       for (String clusterId: zookeeperMap.keySet()) {
         try {
@@ -158,12 +159,13 @@
   /**
    * The method is called in the deactivate method of the operator
    */
-  public void stop() {
+  public void stop()
+  {
     isAlive = false;
     statsSnapShot.stop();
     holdingBuffer.clear();
     IOUtils.closeQuietly(this);
-  };
+  }
 
   /**
    * This method is called in teardown method of the operator
@@ -227,7 +229,8 @@
   }
 
 
-  final protected void putMessage(KafkaPartition partition, Message msg, long offset) throws InterruptedException{
+  protected final void putMessage(KafkaPartition partition, Message msg, long offset) throws InterruptedException
+  {
     // block from receiving more message
     holdingBuffer.put(new KafkaMessage(partition, msg, offset));
     statsSnapShot.mark(partition, msg.payloadSize());
@@ -300,7 +303,8 @@
       totalBytesPerSec = _1minAvg[1];
     }
 
-    public void updateOffsets(Map<KafkaPartition, Long> offsets){
+    public void updateOffsets(Map<KafkaPartition, Long> offsets)
+    {
       for (Entry<KafkaPartition, Long> os : offsets.entrySet()) {
         PartitionStats ps = putPartitionStatsIfNotPresent(os.getKey());
         ps.offset = os.getValue();
@@ -325,7 +329,8 @@
       ps.brokerId = brokerId;
     }
 
-    private synchronized PartitionStats putPartitionStatsIfNotPresent(KafkaPartition kp){
+    private synchronized PartitionStats putPartitionStatsIfNotPresent(KafkaPartition kp)
+    {
       PartitionStats ps = partitionStats.get(kp);
 
       if (ps == null) {
@@ -347,6 +352,7 @@
       this.msg = msg;
       this.offSet = offset;
     }
+
     public KafkaPartition getKafkaPart()
     {
       return kafkaPart;
@@ -363,8 +369,8 @@
     }
   }
 
-  public static class KafkaMeterStatsUtil {
-
+  public static class KafkaMeterStatsUtil
+  {
     public static Map<KafkaPartition, Long> getOffsetsForPartitions(List<KafkaMeterStats> kafkaMeterStats)
     {
       Map<KafkaPartition, Long> result = Maps.newHashMap();
@@ -387,11 +393,8 @@
 
   }
 
-  public static class KafkaMeterStatsAggregator implements Context.CountersAggregator, Serializable{
-
-    /**
-     *
-     */
+  public static class KafkaMeterStatsAggregator implements Context.CountersAggregator, Serializable
+  {
     private static final long serialVersionUID = 729987800215151678L;
 
     @Override
@@ -399,7 +402,7 @@
     {
       KafkaMeterStats kms = new KafkaMeterStats();
       for (Object o : countersList) {
-        if (o instanceof KafkaMeterStats){
+        if (o instanceof KafkaMeterStats) {
           KafkaMeterStats subKMS = (KafkaMeterStats)o;
           kms.partitionStats.putAll(subKMS.partitionStats);
           kms.totalBytesPerSec += subKMS.totalBytesPerSec;
@@ -411,12 +414,8 @@
 
   }
 
-  public static class PartitionStats implements Serializable {
-
-
-    /**
-     *
-     */
+  public static class PartitionStats implements Serializable
+  {
     private static final long serialVersionUID = -6572690643487689766L;
 
     public int brokerId = -1;
@@ -431,13 +430,11 @@
 
   }
 
-
-
   /**
    * A snapshot of consuming rate within 1 min
    */
-  static class SnapShot {
-
+  static class SnapShot
+  {
     // msgs/s and bytes/s for each partition
 
     /**
@@ -485,35 +482,41 @@
     }
 
 
-    public void start(){
-      if(service==null){
+    public void start()
+    {
+      if (service == null) {
         service = Executors.newScheduledThreadPool(1);
       }
-      service.scheduleAtFixedRate(new Runnable() {
+      service.scheduleAtFixedRate(new Runnable()
+      {
         @Override
         public void run()
         {
           moveNext();
-          if(last<60)last++;
+          if (last < 60) {
+            last++;
+          }
         }
       }, 1, 1, TimeUnit.SECONDS);
 
     }
 
-    public void stop(){
-      if(service!=null){
+    public void stop()
+    {
+      if (service != null) {
         service.shutdown();
       }
     }
 
-    public synchronized void mark(KafkaPartition partition, long bytes){
+    public synchronized void mark(KafkaPartition partition, long bytes)
+    {
       msgSec[cursor]++;
       msgSec[60]++;
       bytesSec[cursor] += bytes;
       bytesSec[60] += bytes;
       long[] msgv = _1_min_msg_sum_par.get(partition);
       long[] bytev = _1_min_byte_sum_par.get(partition);
-      if(msgv == null){
+      if (msgv == null) {
         msgv = new long[61];
         bytev = new long[61];
         _1_min_msg_sum_par.put(partition, msgv);
@@ -525,12 +528,13 @@
       bytev[60] += bytes;
     }
 
-    public synchronized void setupStats(KafkaMeterStats stat){
-      long[] _1minAvg = {msgSec[60]/last, bytesSec[60]/last};
+    public synchronized void setupStats(KafkaMeterStats stat)
+    {
+      long[] _1minAvg = {msgSec[60] / last, bytesSec[60] / last};
       for (Entry<KafkaPartition, long[]> item : _1_min_msg_sum_par.entrySet()) {
-        long[] msgv =item.getValue();
+        long[] msgv = item.getValue();
         long[] bytev = _1_min_byte_sum_par.get(item.getKey());
-        long[] _1minAvgPar = {msgv[60]/last, bytev[60]/last};
+        long[] _1minAvgPar = {msgv[60] / last, bytev[60] / last};
         stat.set_1minMovingAvgPerPartition(item.getKey(), _1minAvgPar);
       }
       stat.set_1minMovingAvg(_1minAvg);
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaJsonEncoder.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaJsonEncoder.java
index 65373bc..eaea250 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaJsonEncoder.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaJsonEncoder.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import org.codehaus.jackson.map.ObjectMapper;
 import org.slf4j.Logger;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaMetadataUtil.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaMetadataUtil.java
index b9d4b1b..9f761cd 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaMetadataUtil.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaMetadataUtil.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -28,12 +28,9 @@
 import java.util.Set;
 
 import org.I0Itec.zkclient.ZkClient;
-import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import scala.collection.JavaConversions;
-
 import com.google.common.collect.Maps;
 import com.google.common.collect.Maps.EntryTransformer;
 import com.google.common.collect.SetMultimap;
@@ -50,6 +47,8 @@
 import kafka.utils.ZKStringSerializer$;
 import kafka.utils.ZkUtils;
 
+import scala.collection.JavaConversions;
+
 /**
  * A util class used to retrieve all the metadatas for partitions/topics
  * Every method in the class creates a temporary simple kafka consumer and
@@ -69,7 +68,7 @@
   // A temporary client used to retrieve the metadata of topic/partition etc
   private static final String mdClientId = "Kafka_Metadata_Lookup_Client";
 
-  private static final int timeout=10000;
+  private static final int timeout = 10000;
 
   //buffer size for MD lookup client is 128k should be enough for most cases
   private static final int bufferSize = 128 * 1024;
@@ -97,12 +96,14 @@
    */
   public static Map<String, List<PartitionMetadata>> getPartitionsForTopic(SetMultimap<String, String> brokers, final String topic)
   {
-    return Maps.transformEntries(brokers.asMap(), new EntryTransformer<String, Collection<String>, List<PartitionMetadata>>(){
+    return Maps.transformEntries(brokers.asMap(), new EntryTransformer<String, Collection<String>, List<PartitionMetadata>>()
+    {
       @Override
       public List<PartitionMetadata> transformEntry(String key, Collection<String> bs)
       {
         return getPartitionsForTopic(new HashSet<String>(bs), topic);
-      }});
+      }
+    });
   }
 
   /**
@@ -110,8 +111,8 @@
    * @param zkHost
    * @return
    */
-  public static Set<String> getBrokers(Set<String> zkHost){
-
+  public static Set<String> getBrokers(Set<String> zkHost)
+  {
     ZkClient zkclient = new ZkClient(zkHost.iterator().next(), 30000, 30000, ZKStringSerializer$.MODULE$);
     Set<String> brokerHosts = new HashSet<String>();
     for (Broker b : JavaConversions.asJavaIterable(ZkUtils.getAllBrokersInCluster(zkclient))) {
@@ -121,7 +122,6 @@
     return brokerHosts;
   }
 
-
   /**
    * @param brokerList
    * @param topic
@@ -188,7 +188,6 @@
     }
   }
 
-
   /**
    * @param consumer
    * @param topic
@@ -216,5 +215,4 @@
     return offsets[0];
   }
 
-
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaPartition.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaPartition.java
index 9954eb3..050f0ca 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaPartition.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaPartition.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.io.Serializable;
 
@@ -25,7 +25,7 @@
  */
 public class KafkaPartition implements Serializable
 {
-  protected static final String DEFAULT_CLUSTERID = "com.datatorrent.contrib.kafka.defaultcluster";
+  protected static final String DEFAULT_CLUSTERID = "org.apache.apex.malhar.contrib.kafka.defaultcluster";
 
   @SuppressWarnings("unused")
   private KafkaPartition()
@@ -101,25 +101,33 @@
   @Override
   public boolean equals(Object obj)
   {
-    if (this == obj)
+    if (this == obj) {
       return true;
-    if (obj == null)
+    }
+    if (obj == null) {
       return false;
-    if (getClass() != obj.getClass())
+    }
+    if (getClass() != obj.getClass()) {
       return false;
-    KafkaPartition other = (KafkaPartition) obj;
+    }
+    KafkaPartition other = (KafkaPartition)obj;
     if (clusterId == null) {
-      if (other.clusterId != null)
+      if (other.clusterId != null) {
         return false;
-    } else if (!clusterId.equals(other.clusterId))
+      }
+    } else if (!clusterId.equals(other.clusterId)) {
       return false;
-    if (partitionId != other.partitionId)
+    }
+    if (partitionId != other.partitionId) {
       return false;
+    }
     if (topic == null) {
-      if (other.topic != null)
+      if (other.topic != null) {
         return false;
-    } else if (!topic.equals(other.topic))
+      }
+    } else if (!topic.equals(other.topic)) {
       return false;
+    }
     return true;
   }
 
@@ -129,6 +137,4 @@
     return "KafkaPartition [clusterId=" + clusterId + ", partitionId=" + partitionId + ", topic=" + topic + "]";
   }
 
-
-
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaSinglePortByteArrayInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaSinglePortByteArrayInputOperator.java
index 3bb249b..b1e5b83 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaSinglePortByteArrayInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaSinglePortByteArrayInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.nio.ByteBuffer;
 import kafka.message.Message;
@@ -24,28 +24,26 @@
   /**
    * @since 2.1.0
    */
-  public class KafkaSinglePortByteArrayInputOperator extends AbstractKafkaSinglePortInputOperator<byte[]>
-  {
-
+public class KafkaSinglePortByteArrayInputOperator extends AbstractKafkaSinglePortInputOperator<byte[]>
+{
     /**
      * Implement abstract method of AbstractKafkaSinglePortInputOperator
      *
      * @param message
      * @return byte Array
      */
-    @Override
-    public byte[] getTuple(Message message)
-    {
-      byte[] bytes = null;
-      try {
-        ByteBuffer buffer = message.payload();
-        bytes = new byte[buffer.remaining()];
-        buffer.get(bytes);
-      }
-      catch (Exception ex) {
-        return bytes;
-      }
+  @Override
+  public byte[] getTuple(Message message)
+  {
+    byte[] bytes = null;
+    try {
+      ByteBuffer buffer = message.payload();
+      bytes = new byte[buffer.remaining()];
+      buffer.get(bytes);
+    } catch (Exception ex) {
       return bytes;
     }
-
+    return bytes;
   }
+
+}
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaSinglePortOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaSinglePortOutputOperator.java
index cc1f2d4..5035698 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaSinglePortOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaSinglePortOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import com.datatorrent.api.DefaultInputPort;
 import kafka.producer.KeyedMessage;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaSinglePortStringInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaSinglePortStringInputOperator.java
index 9728dc9..4bbbafa 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaSinglePortStringInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/KafkaSinglePortStringInputOperator.java
@@ -16,11 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
-
-import kafka.message.Message;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.nio.ByteBuffer;
+import kafka.message.Message;
 
 /**
  * Kafka input adapter operator with a single output port, which consumes String data from the Kafka message bus.
@@ -48,8 +47,7 @@
       buffer.get(bytes);
       data = new String(bytes);
       //logger.debug("Consuming {}", data);
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       return data;
     }
     return data;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/OffsetManager.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/OffsetManager.java
index 0dee11e..602e905 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/OffsetManager.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/OffsetManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.util.Map;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/POJOKafkaOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/POJOKafkaOutputOperator.java
index 52c253c..b3be716 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/POJOKafkaOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/POJOKafkaOutputOperator.java
@@ -16,16 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.lang.reflect.Field;
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
+
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.commons.lang3.ClassUtils;
 import com.datatorrent.api.AutoMetric;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultInputPort;
-import com.datatorrent.lib.util.PojoUtils;
 
 import kafka.producer.KeyedMessage;
 import kafka.producer.ProducerConfig;
@@ -78,7 +79,8 @@
   protected transient PojoUtils.Getter keyMethod;
   protected transient Class<?> pojoClass;
 
-  public final transient DefaultInputPort<Object> inputPort = new DefaultInputPort<Object>() {
+  public final transient DefaultInputPort<Object> inputPort = new DefaultInputPort<Object>()
+  {
     @Override
     public void setup(Context.PortContext context)
     {
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/SimpleKafkaConsumer.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/SimpleKafkaConsumer.java
index 4db1d69..c0e059a 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/SimpleKafkaConsumer.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/SimpleKafkaConsumer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.util.Collections;
 import java.util.HashMap;
@@ -37,10 +37,11 @@
 
 import javax.validation.constraints.NotNull;
 
-import org.apache.commons.collections.*;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.commons.collections.CollectionUtils;
+
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.SetMultimap;
 import com.google.common.util.concurrent.ThreadFactoryBuilder;
@@ -138,59 +139,58 @@
         // stop consuming only when the consumer container is stopped or the metadata can not be refreshed
         while (consumer.isAlive && (consumer.metadataRefreshRetryLimit == -1 || consumer.retryCounter.get() < consumer.metadataRefreshRetryLimit)) {
 
-            if (kpS == null || kpS.isEmpty()) {
-              return;
-            }
+          if (kpS == null || kpS.isEmpty()) {
+            return;
+          }
 
-            FetchRequestBuilder frb = new FetchRequestBuilder().clientId(clientName);
-            // add all partition request in one Fretch request together
-            for (KafkaPartition kpForConsumer : kpS) {
-              frb.addFetch(consumer.topic, kpForConsumer.getPartitionId(), consumer.offsetTrack.get(kpForConsumer), consumer.bufferSize);
-            }
+          FetchRequestBuilder frb = new FetchRequestBuilder().clientId(clientName);
+          // add all partition request in one Fretch request together
+          for (KafkaPartition kpForConsumer : kpS) {
+            frb.addFetch(consumer.topic, kpForConsumer.getPartitionId(), consumer.offsetTrack.get(kpForConsumer), consumer.bufferSize);
+          }
 
-            FetchRequest req = frb.build();
-            if (ksc == null) {
-              if (consumer.metadataRefreshInterval > 0) {
-                Thread.sleep(consumer.metadataRefreshInterval + 1000);
-              } else {
-                Thread.sleep(100);
-              }
+          FetchRequest req = frb.build();
+          if (ksc == null) {
+            if (consumer.metadataRefreshInterval > 0) {
+              Thread.sleep(consumer.metadataRefreshInterval + 1000);
+            } else {
+              Thread.sleep(100);
             }
-            FetchResponse fetchResponse = ksc.fetch(req);
-            for (Iterator<KafkaPartition> iterator = kpS.iterator(); iterator.hasNext();) {
-              KafkaPartition kafkaPartition = iterator.next();
-              short errorCode = fetchResponse.errorCode(consumer.topic, kafkaPartition.getPartitionId());
-              if (fetchResponse.hasError() && errorCode != ErrorMapping.NoError()) {
-                // Kick off partition(s) which has error when fetch from this broker temporarily
-                // Monitor will find out which broker it goes in monitor thread
-                logger.warn("Error when consuming topic {} from broker {} with error {} ", kafkaPartition, broker,
+          }
+          FetchResponse fetchResponse = ksc.fetch(req);
+          for (Iterator<KafkaPartition> iterator = kpS.iterator(); iterator.hasNext();) {
+            KafkaPartition kafkaPartition = iterator.next();
+            short errorCode = fetchResponse.errorCode(consumer.topic, kafkaPartition.getPartitionId());
+            if (fetchResponse.hasError() && errorCode != ErrorMapping.NoError()) {
+              // Kick off partition(s) which has error when fetch from this broker temporarily
+              // Monitor will find out which broker it goes in monitor thread
+              logger.warn("Error when consuming topic {} from broker {} with error {} ", kafkaPartition, broker,
                   ErrorMapping.exceptionFor(errorCode));
-                if (errorCode == ErrorMapping.OffsetOutOfRangeCode()) {
-                  long seekTo = consumer.initialOffset.toLowerCase().equals("earliest") ? OffsetRequest.EarliestTime()
+              if (errorCode == ErrorMapping.OffsetOutOfRangeCode()) {
+                long seekTo = consumer.initialOffset.toLowerCase().equals("earliest") ? OffsetRequest.EarliestTime()
                     : OffsetRequest.LatestTime();
-                  seekTo = KafkaMetadataUtil.getLastOffset(ksc, consumer.topic, kafkaPartition.getPartitionId(), seekTo, clientName);
-                  logger.warn("Offset out of range error, reset offset to {}", seekTo);
-                  consumer.offsetTrack.put(kafkaPartition, seekTo);
-                  continue;
-                }
-                iterator.remove();
-                consumer.partitionToBroker.remove(kafkaPartition);
-                consumer.stats.updatePartitionStats(kafkaPartition, -1, "");
+                seekTo = KafkaMetadataUtil.getLastOffset(ksc, consumer.topic, kafkaPartition.getPartitionId(), seekTo, clientName);
+                logger.warn("Offset out of range error, reset offset to {}", seekTo);
+                consumer.offsetTrack.put(kafkaPartition, seekTo);
                 continue;
               }
-              // If the fetchResponse either has no error or the no error for $kafkaPartition get the data
-              long offset = -1l;
-              for (MessageAndOffset msg : fetchResponse.messageSet(consumer.topic, kafkaPartition.getPartitionId())) {
-                offset = msg.nextOffset();
-                consumer.putMessage(kafkaPartition, msg.message(), msg.offset());
-              }
-              if (offset != -1) {
-                consumer.offsetTrack.put(kafkaPartition, offset);
-              }
-
+              iterator.remove();
+              consumer.partitionToBroker.remove(kafkaPartition);
+              consumer.stats.updatePartitionStats(kafkaPartition, -1, "");
+              continue;
             }
+            // If the fetchResponse either has no error or the no error for $kafkaPartition get the data
+            long offset = -1L;
+            for (MessageAndOffset msg : fetchResponse.messageSet(consumer.topic, kafkaPartition.getPartitionId())) {
+              offset = msg.nextOffset();
+              consumer.putMessage(kafkaPartition, msg.message(), msg.offset());
+            }
+            if (offset != -1) {
+              consumer.offsetTrack.put(kafkaPartition, offset);
+            }
+          }
         }
-      } catch (Exception e){
+      } catch (Exception e) {
         logger.error("The consumer encounters an unrecoverable exception. Close the connection to broker {} \n Caused by {}", broker, e);
       } finally {
         if (ksc != null) {
@@ -304,7 +304,7 @@
   private Set<KafkaPartition> kps = new HashSet<KafkaPartition>();
 
   // This map maintains mapping between kafka partition and it's leader broker in realtime monitored by a thread
-  private transient final ConcurrentHashMap<KafkaPartition, Broker> partitionToBroker = new ConcurrentHashMap<KafkaPartition, Broker>();
+  private final transient ConcurrentHashMap<KafkaPartition, Broker> partitionToBroker = new ConcurrentHashMap<KafkaPartition, Broker>();
 
   /**
    * Track offset for each partition, so operator could start from the last serialized state Use ConcurrentHashMap to
@@ -326,7 +326,7 @@
     // thread to consume the kafka data
     kafkaConsumerExecutor = Executors.newCachedThreadPool(new ThreadFactoryBuilder().setNameFormat("kafka-consumer-" + topic + "-%d").build());
 
-    if(metadataRefreshInterval <= 0 || CollectionUtils.isEmpty(kps)) {
+    if (metadataRefreshInterval <= 0 || CollectionUtils.isEmpty(kps)) {
       return;
     }
 
@@ -334,7 +334,7 @@
     metadataRefreshExecutor = Executors.newScheduledThreadPool(1, new ThreadFactoryBuilder().setNameFormat("kafka-consumer-monitor-" + topic + "-%d").setDaemon(true).build());
 
     // start one monitor thread to monitor the leader broker change and trigger some action
-    metadataRefreshExecutor.scheduleAtFixedRate(new MetaDataMonitorTask(this) , 0, metadataRefreshInterval, TimeUnit.MILLISECONDS);
+    metadataRefreshExecutor.scheduleAtFixedRate(new MetaDataMonitorTask(this), 0, metadataRefreshInterval, TimeUnit.MILLISECONDS);
   }
 
   @Override
@@ -462,17 +462,20 @@
    * and restart failed consumer threads for the partitions.
    * Monitoring is disabled after metadataRefreshRetryLimit number of failure.
    */
-  private class MetaDataMonitorTask implements Runnable {
-
+  private class MetaDataMonitorTask implements Runnable
+  {
     private final SimpleKafkaConsumer ref;
 
-    private transient final SetMultimap<Broker, KafkaPartition> deltaPositive = HashMultimap.create();
+    private final transient SetMultimap<Broker, KafkaPartition> deltaPositive = HashMultimap.create();
 
-    private MetaDataMonitorTask(SimpleKafkaConsumer ref) {
+    private MetaDataMonitorTask(SimpleKafkaConsumer ref)
+    {
       this.ref = ref;
     }
 
-    @Override public void run() {
+    @Override
+    public void run()
+    {
       try {
         monitorMetadata();
         monitorException.set(null);
@@ -499,8 +502,9 @@
         }
 
         for (Entry<String, List<PartitionMetadata>> pmLEntry : pms.entrySet()) {
-          if (pmLEntry.getValue() == null)
+          if (pmLEntry.getValue() == null) {
             continue;
+          }
           for (PartitionMetadata pm : pmLEntry.getValue()) {
             KafkaPartition kp = new KafkaPartition(pmLEntry.getKey(), topic, pm.partitionId());
             if (!kps.contains(kp)) {
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/package-info.java
index 0fd936e..baafb13 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kafka/package-info.java
@@ -19,4 +19,4 @@
 /**
  * Kafka operators and utilities.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/AbstractKinesisInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/AbstractKinesisInputOperator.java
index 8df3277..05ba455 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/AbstractKinesisInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/AbstractKinesisInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import java.io.IOException;
 import java.lang.reflect.Array;
@@ -36,6 +36,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.tuple.MutablePair;
@@ -56,7 +57,6 @@
 import com.datatorrent.api.StatsListener;
 import com.datatorrent.api.annotation.Stateless;
 import com.datatorrent.common.util.Pair;
-import com.datatorrent.lib.util.KryoCloneUtils;
 
 /**
  * Base implementation of Kinesis Input Operator. Fetches records from kinesis and emits them as tuples.<br/>
@@ -75,7 +75,7 @@
  * @since 2.0.0
  */
 @SuppressWarnings("rawtypes")
-public abstract class AbstractKinesisInputOperator <T> implements InputOperator, ActivationListener<OperatorContext>, Partitioner<AbstractKinesisInputOperator>, StatsListener,Operator.CheckpointNotificationListener
+public abstract class AbstractKinesisInputOperator<T> implements InputOperator, ActivationListener<OperatorContext>, Partitioner<AbstractKinesisInputOperator>, StatsListener, Operator.CheckpointNotificationListener
 {
   private static final Logger logger = LoggerFactory.getLogger(AbstractKinesisInputOperator.class);
 
@@ -141,6 +141,7 @@
     windowDataManager = new WindowDataManager.NoopWindowDataManager();
     currentWindowRecoveryState = new HashMap<String, MutablePair<String, Integer>>();
   }
+
   /**
    * Derived class has to implement this method, so that it knows what type of message it is going to send to Malhar.
    * It converts a ByteBuffer message into a Tuple. A Tuple can be of any type (derived from Java Object) that
@@ -170,11 +171,11 @@
   {
     boolean isInitialParitition = partitions.iterator().next().getStats() == null;
     // Set the credentials to get the list of shards
-    if(isInitialParitition) {
+    if (isInitialParitition) {
       try {
         KinesisUtil.getInstance().createKinesisClient(accessKey, secretKey, endPoint);
       } catch (Exception e) {
-         throw new RuntimeException("[definePartitions]: Unable to load credentials. ", e);
+        throw new RuntimeException("[definePartitions]: Unable to load credentials. ", e);
       }
     }
     List<Shard> shards = KinesisUtil.getInstance().getShardList(getStreamName());
@@ -185,89 +186,90 @@
 
     // initialize the shard positions
     Map<String, String> initShardPos = null;
-    if(isInitialParitition && shardManager !=null){
+    if (isInitialParitition && shardManager != null) {
       initShardPos = shardManager.loadInitialShardPositions();
     }
 
     switch (strategy) {
     // For the 1 to 1 mapping The framework will create number of operator partitions based on kinesis shards
     // Each operator partition will consume from only one kinesis shard
-    case ONE_TO_ONE:
-      if (isInitialParitition) {
-        lastRepartitionTime = System.currentTimeMillis();
-        logger.info("[ONE_TO_ONE]: Initializing partition(s)");
-        // initialize the number of operator partitions according to number of shards
-        newPartitions = new ArrayList<Partition<AbstractKinesisInputOperator>>(shards.size());
-        for (int i = 0; i < shards.size(); i++) {
-          logger.info("[ONE_TO_ONE]: Create operator partition for kinesis partition: " + shards.get(i).getShardId() + ", StreamName: " + this.getConsumer().streamName);
-          newPartitions.add(createPartition(Sets.newHashSet(shards.get(i).getShardId()), initShardPos));
+      case ONE_TO_ONE:
+        if (isInitialParitition) {
+          lastRepartitionTime = System.currentTimeMillis();
+          logger.info("[ONE_TO_ONE]: Initializing partition(s)");
+          // initialize the number of operator partitions according to number of shards
+          newPartitions = new ArrayList<Partition<AbstractKinesisInputOperator>>(shards.size());
+          for (int i = 0; i < shards.size(); i++) {
+            logger.info("[ONE_TO_ONE]: Create operator partition for kinesis partition: " + shards.get(i).getShardId() + ", StreamName: " + this.getConsumer().streamName);
+            newPartitions.add(createPartition(Sets.newHashSet(shards.get(i).getShardId()), initShardPos));
+          }
+        } else if (newWaitingPartition.size() != 0) {
+          // Remove the partitions for the closed shards
+          removePartitionsForClosedShards(partitions, deletedOperators);
+          // add partition for new kinesis shard
+          for (String pid : newWaitingPartition) {
+            logger.info("[ONE_TO_ONE]: Add operator partition for kinesis partition " + pid);
+            partitions.add(createPartition(Sets.newHashSet(pid), null));
+          }
+          newWaitingPartition.clear();
+          List<WindowDataManager> managers = windowDataManager.partition(partitions.size(), deletedOperators);
+          int i = 0;
+          for (Partition<AbstractKinesisInputOperator> partition : partitions) {
+            partition.getPartitionedInstance().setWindowDataManager(managers.get(i));
+            i++;
+          }
+          return partitions;
         }
-      } else if (newWaitingPartition.size() != 0) {
-        // Remove the partitions for the closed shards
-        removePartitionsForClosedShards(partitions, deletedOperators);
-        // add partition for new kinesis shard
-        for (String pid : newWaitingPartition) {
-          logger.info("[ONE_TO_ONE]: Add operator partition for kinesis partition " + pid);
-          partitions.add(createPartition(Sets.newHashSet(pid), null));
-        }
-        newWaitingPartition.clear();
-        List<WindowDataManager> managers = windowDataManager.partition(partitions.size(), deletedOperators);
-        int i = 0;
-        for (Partition<AbstractKinesisInputOperator> partition : partitions) {
-          partition.getPartitionedInstance().setWindowDataManager(managers.get(i));
-          i++;
-        }
-        return partitions;
-      }
-      break;
+        break;
     // For the N to 1 mapping The initial partition number is defined by stream application
     // Afterwards, the framework will dynamically adjust the partition
-    case MANY_TO_ONE:
+      case MANY_TO_ONE:
       /* This case was handled into two ways.
          1. Dynamic Partition: Number of DT partitions is depends on the number of open shards.
          2. Static Partition: Number of DT partitions is fixed, whether the number of shards are increased/decreased.
       */
-      int size = initialPartitionCount;
-      if (newWaitingPartition.size() != 0) {
-        // Get the list of open shards
-        shards = getOpenShards(partitions);
-        if (shardsPerPartition > 1)
-          size = (int)Math.ceil(shards.size() / (shardsPerPartition * 1.0));
-        initShardPos = shardManager.loadInitialShardPositions();
-      }
-      @SuppressWarnings("unchecked")
-      Set<String>[] pIds = (Set<String>[]) Array.newInstance((new HashSet<String>()).getClass(), size);
-
-      newPartitions = new ArrayList<Partition<AbstractKinesisInputOperator>>(size);
-      for (int i = 0; i < shards.size(); i++) {
-        Shard pm = shards.get(i);
-        if (pIds[i % size] == null) {
-          pIds[i % size] = new HashSet<String>();
+        int size = initialPartitionCount;
+        if (newWaitingPartition.size() != 0) {
+          // Get the list of open shards
+          shards = getOpenShards(partitions);
+          if (shardsPerPartition > 1) {
+            size = (int)Math.ceil(shards.size() / (shardsPerPartition * 1.0));
+          }
+          initShardPos = shardManager.loadInitialShardPositions();
         }
-        pIds[i % size].add(pm.getShardId());
-      }
-      if (isInitialParitition) {
-        lastRepartitionTime = System.currentTimeMillis();
-        logger.info("[MANY_TO_ONE]: Initializing partition(s)");
-      } else {
-        logger.info("[MANY_TO_ONE]: Add operator partition for kinesis partition(s): " + StringUtils.join(newWaitingPartition, ", ") + ", StreamName: " + this.getConsumer().streamName);
-        newWaitingPartition.clear();
-      }
-      // Add the existing partition Ids to the deleted operators
-      for (Partition<AbstractKinesisInputOperator> op : partitions) {
-        deletedOperators.add(op.getPartitionedInstance().operatorId);
-      }
+        @SuppressWarnings("unchecked")
+        Set<String>[] pIds = (Set<String>[])Array.newInstance((new HashSet<String>()).getClass(), size);
 
-      for (int i = 0; i < pIds.length; i++) {
-        logger.info("[MANY_TO_ONE]: Create operator partition for kinesis partition(s): " + StringUtils.join(pIds[i], ", ") + ", StreamName: " + this.getConsumer().streamName);
-
-        if (pIds[i] != null) {
-          newPartitions.add(createPartition(pIds[i], initShardPos));
+        newPartitions = new ArrayList<Partition<AbstractKinesisInputOperator>>(size);
+        for (int i = 0; i < shards.size(); i++) {
+          Shard pm = shards.get(i);
+          if (pIds[i % size] == null) {
+            pIds[i % size] = new HashSet<String>();
+          }
+          pIds[i % size].add(pm.getShardId());
         }
-      }
-      break;
-    default:
-      break;
+        if (isInitialParitition) {
+          lastRepartitionTime = System.currentTimeMillis();
+          logger.info("[MANY_TO_ONE]: Initializing partition(s)");
+        } else {
+          logger.info("[MANY_TO_ONE]: Add operator partition for kinesis partition(s): " + StringUtils.join(newWaitingPartition, ", ") + ", StreamName: " + this.getConsumer().streamName);
+          newWaitingPartition.clear();
+        }
+        // Add the existing partition Ids to the deleted operators
+        for (Partition<AbstractKinesisInputOperator> op : partitions) {
+          deletedOperators.add(op.getPartitionedInstance().operatorId);
+        }
+
+        for (int i = 0; i < pIds.length; i++) {
+          logger.info("[MANY_TO_ONE]: Create operator partition for kinesis partition(s): " + StringUtils.join(pIds[i], ", ") + ", StreamName: " + this.getConsumer().streamName);
+
+          if (pIds[i] != null) {
+            newPartitions.add(createPartition(pIds[i], initShardPos));
+          }
+        }
+        break;
+      default:
+        break;
     }
     int i = 0;
     List<WindowDataManager> managers = windowDataManager.partition(partitions.size(), deletedOperators);
@@ -300,7 +302,7 @@
     List<KinesisConsumer.KinesisShardStats> kmsList = new LinkedList<KinesisConsumer.KinesisShardStats>();
     for (Stats.OperatorStats os : stats.getLastWindowedStats()) {
       if (os != null && os.counters instanceof KinesisConsumer.KinesisShardStats) {
-        kmsList.add((KinesisConsumer.KinesisShardStats) os.counters);
+        kmsList.add((KinesisConsumer.KinesisShardStats)os.counters);
       }
     }
     return kmsList;
@@ -317,12 +319,12 @@
     }
     logger.debug("Use ShardManager to update the Shard Positions");
     updateShardPositions(kstats);
-    if(repartitionInterval < 0){
+    if (repartitionInterval < 0) {
       // if repartition is disabled
       return false;
     }
 
-    if(t - lastRepartitionTime < repartitionInterval) {
+    if (t - lastRepartitionTime < repartitionInterval) {
       // return false if it's still within repartitionInterval since last (re)partition
       return false;
     }
@@ -356,19 +358,15 @@
   private void removePartitionsForClosedShards(Collection<Partition<AbstractKinesisInputOperator>> partitions, Set<Integer> deletedOperators)
   {
     List<Partition<AbstractKinesisInputOperator>> closedPartitions = new ArrayList<Partition<AbstractKinesisInputOperator>>();
-    for(Partition<AbstractKinesisInputOperator> op : partitions)
-    {
-      if(op.getPartitionedInstance().getConsumer().getClosedShards().size() ==
-          op.getPartitionedInstance().getConsumer().getNumOfShards())
-      {
+    for (Partition<AbstractKinesisInputOperator> op : partitions) {
+      if (op.getPartitionedInstance().getConsumer().getClosedShards().size() ==
+          op.getPartitionedInstance().getConsumer().getNumOfShards()) {
         closedPartitions.add(op);
         deletedOperators.add(op.getPartitionedInstance().operatorId);
       }
     }
-    if(closedPartitions.size() != 0)
-    {
-      for(Partition<AbstractKinesisInputOperator> op : closedPartitions)
-      {
+    if (closedPartitions.size() != 0) {
+      for (Partition<AbstractKinesisInputOperator> op : closedPartitions) {
         partitions.remove(op);
       }
     }
@@ -378,22 +376,21 @@
   private List<Shard> getOpenShards(Collection<Partition<AbstractKinesisInputOperator>> partitions)
   {
     List<Shard> closedShards = new ArrayList<Shard>();
-    for(Partition<AbstractKinesisInputOperator> op : partitions)
-    {
+    for (Partition<AbstractKinesisInputOperator> op : partitions) {
       closedShards.addAll(op.getPartitionedInstance().getConsumer().getClosedShards());
     }
     List<Shard> shards = KinesisUtil.getInstance().getShardList(getStreamName());
     List<Shard> openShards = new ArrayList<Shard>();
     for (Shard shard :shards) {
-      if(!closedShards.contains(shard)) {
+      if (!closedShards.contains(shard)) {
         openShards.add(shard);
       }
     }
     return openShards;
   }
+
   // Create a new partition with the shardIds and initial shard positions
-  private
-  Partition<AbstractKinesisInputOperator> createPartition(Set<String> shardIds, Map<String, String> initShardPos)
+  private Partition<AbstractKinesisInputOperator> createPartition(Set<String> shardIds, Map<String, String> initShardPos)
   {
     Partition<AbstractKinesisInputOperator> p = new DefaultPartition<AbstractKinesisInputOperator>(KryoCloneUtils.cloneObject(this));
     p.getPartitionedInstance().getConsumer().setShardIds(shardIds);
@@ -416,8 +413,7 @@
     this.context = context;
     try {
       KinesisUtil.getInstance().createKinesisClient(accessKey, secretKey, endPoint);
-    } catch(Exception e)
-    {
+    } catch (Exception e) {
       throw new RuntimeException(e);
     }
     consumer.create();
@@ -468,8 +464,7 @@
             emitTuple(new Pair<String, Record>(rc.getKey(), record));
             shardPosition.put(rc.getKey(), record.getSequenceNumber());
           }
-        } catch(Exception e)
-        {
+        } catch (Exception e) {
           throw new RuntimeException(e);
         }
       }
@@ -485,11 +480,11 @@
         getConsumer().resetShardPositions(statsData);
         consumer.start();
       }
-    }
-    catch (IOException e) {
+    } catch (IOException e) {
       throw new RuntimeException("replay", e);
     }
   }
+
   /**
    * Implement Operator Interface.
    */
@@ -500,8 +495,7 @@
       context.setCounters(getConsumer().getConsumerStats(shardPosition));
       try {
         windowDataManager.save(currentWindowRecoveryState, currentWindowId);
-      }
-      catch (IOException e) {
+      } catch (IOException e) {
         throw new RuntimeException("saving recovery", e);
       }
     }
@@ -517,7 +511,7 @@
   {
     // If it is a replay state, don't start the consumer
     if (context.getValue(OperatorContext.ACTIVATION_WINDOW_ID) != Stateless.WINDOW_ID &&
-      context.getValue(OperatorContext.ACTIVATION_WINDOW_ID) < windowDataManager.getLargestCompletedWindow()) {
+        context.getValue(OperatorContext.ACTIVATION_WINDOW_ID) < windowDataManager.getLargestCompletedWindow()) {
       return;
     }
     consumer.start();
@@ -528,8 +522,7 @@
   {
     try {
       windowDataManager.committed(windowId);
-    }
-    catch (IOException e) {
+    } catch (IOException e) {
       throw new RuntimeException("deleting state", e);
     }
   }
@@ -563,8 +556,9 @@
       return;
     }
     int count = consumer.getQueueSize();
-    if(maxTuplesPerWindow > 0)
+    if (maxTuplesPerWindow > 0) {
       count = Math.min(count, maxTuplesPerWindow - emitCount);
+    }
     for (int i = 0; i < count; i++) {
       Pair<String, Record> data = consumer.pollRecord();
       String shardId = data.getFirst();
@@ -574,7 +568,7 @@
       if (shardOffsetAndCount == null) {
         currentWindowRecoveryState.put(shardId, new MutablePair<String, Integer>(recordId, 1));
       } else {
-        shardOffsetAndCount.setRight(shardOffsetAndCount.right+1);
+        shardOffsetAndCount.setRight(shardOffsetAndCount.right + 1);
       }
       shardPosition.put(shardId, recordId);
     }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/AbstractKinesisOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/AbstractKinesisOutputOperator.java
index d6f9d36..6563fc4 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/AbstractKinesisOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/AbstractKinesisOutputOperator.java
@@ -16,9 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
+
+import java.nio.ByteBuffer;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.NotNull;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.amazonaws.AmazonClientException;
+
 import com.amazonaws.services.kinesis.AmazonKinesisClient;
 import com.amazonaws.services.kinesis.model.PutRecordRequest;
 import com.amazonaws.services.kinesis.model.PutRecordsRequest;
@@ -28,16 +40,6 @@
 import com.datatorrent.api.Operator;
 import com.datatorrent.common.util.Pair;
 
-import javax.validation.constraints.Max;
-import javax.validation.constraints.Min;
-import javax.validation.constraints.NotNull;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.List;
 /**
  * Base implementation of Kinesis Output Operator. Convert tuples to records and emits to Kinesis.<br/>
  *
@@ -92,7 +94,8 @@
   }
 
   @Override
-  public void endWindow() {
+  public void endWindow()
+  {
   }
 
   /**
@@ -138,13 +141,11 @@
   {
     try {
       KinesisUtil.getInstance().createKinesisClient(accessKey, secretKey, endPoint);
-    } catch(Exception e)
-    {
+    } catch (Exception e) {
       throw new RuntimeException("Unable to load Credentials", e);
     }
     this.setClient(KinesisUtil.getInstance().getClient());
-    if(isBatchProcessing)
-    {
+    if (isBatchProcessing) {
       putRecordsRequestEntryList.clear();
     }
   }
@@ -166,24 +167,19 @@
   {
     // Send out single data
     try {
-      if(isBatchProcessing)
-      {
-        if(putRecordsRequestEntryList.size() == batchSize)
-        {
+      if (isBatchProcessing) {
+        if (putRecordsRequestEntryList.size() == batchSize) {
           flushRecords();
           logger.debug( "flushed {} records.", batchSize );
         }
         addRecord(tuple);
-
       } else {
         Pair<String, V> keyValue = tupleToKeyValue(tuple);
         PutRecordRequest requestRecord = new PutRecordRequest();
         requestRecord.setStreamName(streamName);
         requestRecord.setPartitionKey(keyValue.first);
         requestRecord.setData(ByteBuffer.wrap(getRecord(keyValue.second)));
-
         client.putRecord(requestRecord);
-
       }
       sendCount++;
     } catch (AmazonClientException e) {
@@ -219,6 +215,7 @@
       throw new RuntimeException(e);
     }
   }
+
   public void setClient(AmazonKinesisClient _client)
   {
     client = _client;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisByteArrayInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisByteArrayInputOperator.java
index ed05a54..1213b02 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisByteArrayInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisByteArrayInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import java.nio.ByteBuffer;
 
@@ -44,8 +44,7 @@
       byte[] bytes = new byte[bb.remaining()];
       bb.get(bytes);
       return bytes;
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       throw new RuntimeException(ex);
     }
   }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisByteArrayOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisByteArrayOutputOperator.java
index 3da2eb7..7c6e54a 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisByteArrayOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisByteArrayOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import com.datatorrent.common.util.Pair;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisConsumer.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisConsumer.java
index 0bab4d3..f7e4936 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisConsumer.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisConsumer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import java.io.Closeable;
 import java.io.Serializable;
@@ -34,16 +34,16 @@
 import javax.validation.constraints.Pattern;
 import javax.validation.constraints.Pattern.Flag;
 
-import com.amazonaws.services.kinesis.model.Record;
-import com.amazonaws.services.kinesis.model.Shard;
-import com.amazonaws.services.kinesis.model.ShardIteratorType;
-import com.google.common.collect.Maps;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import org.apache.commons.io.IOUtils;
 
+import com.amazonaws.services.kinesis.model.Record;
+import com.amazonaws.services.kinesis.model.Shard;
+import com.amazonaws.services.kinesis.model.ShardIteratorType;
+import com.google.common.collect.Maps;
+
 import com.datatorrent.common.util.Pair;
 
 /**
@@ -76,7 +76,7 @@
    * Latest means the current record to consume from the shard
    * By default it always consume from the beginning of the shard
    */
-  @Pattern(flags={Flag.CASE_INSENSITIVE}, regexp = "earliest|latest")
+  @Pattern(flags = {Flag.CASE_INSENSITIVE}, regexp = "earliest|latest")
   protected String initialOffset = "latest";
 
   protected transient ExecutorService consumerThreadExecutor = null;
@@ -104,15 +104,17 @@
     this(streamName);
     shardIds = newShardIds;
   }
+
   /**
    * This method is called in setup method of the operator
    */
-  public void create(){
+  public void create()
+  {
     holdingBuffer = new ArrayBlockingQueue<Pair<String, Record>>(bufferSize);
     boolean defaultSelect = (shardIds == null) || (shardIds.size() == 0);
     final List<Shard> pms = KinesisUtil.getInstance().getShardList(streamName);
     for (final Shard shId: pms) {
-      if((shardIds.contains(shId.getShardId()) || defaultSelect) && !closedShards.contains(shId)) {
+      if ((shardIds.contains(shId.getShardId()) || defaultSelect) && !closedShards.contains(shId)) {
         simpleConsumerThreads.add(shId);
       }
     }
@@ -123,7 +125,7 @@
    */
   public ShardIteratorType getIteratorType(String shardId)
   {
-    if(shardPosition.containsKey(shardId)) {
+    if (shardPosition.containsKey(shardId)) {
       return ShardIteratorType.AFTER_SEQUENCE_NUMBER;
     }
     return initialOffset.equalsIgnoreCase("earliest") ? ShardIteratorType.TRIM_HORIZON : ShardIteratorType.LATEST;
@@ -132,15 +134,18 @@
   /**
    * This method is called in the activate method of the operator
    */
-  public void start(){
+  public void start()
+  {
     isAlive = true;
     int realNumStream =  simpleConsumerThreads.size();
-    if(realNumStream == 0)
+    if (realNumStream == 0) {
       return;
+    }
 
     consumerThreadExecutor = Executors.newFixedThreadPool(realNumStream);
     for (final Shard shd : simpleConsumerThreads) {
-      consumerThreadExecutor.submit(new Runnable() {
+      consumerThreadExecutor.submit(new Runnable()
+      {
         @Override
         public void run()
         {
@@ -164,13 +169,12 @@
               } else {
                 String seqNo = "";
                 for (Record rc : records) {
-                    seqNo = rc.getSequenceNumber();
-                    putRecord(shd.getShardId(), rc);
+                  seqNo = rc.getSequenceNumber();
+                  putRecord(shd.getShardId(), rc);
                 }
                 shardPosition.put(shard.getShardId(), seqNo);
               }
-            } catch(Exception e)
-            {
+            } catch (Exception e) {
               throw new RuntimeException(e);
             }
           }
@@ -183,7 +187,7 @@
   @Override
   public void close()
   {
-    if(consumerThreadExecutor!=null) {
+    if (consumerThreadExecutor != null) {
       consumerThreadExecutor.shutdown();
     }
     simpleConsumerThreads.clear();
@@ -192,15 +196,16 @@
   /**
    * The method is called in the deactivate method of the operator
    */
-  public void stop() {
+  public void stop()
+  {
     isAlive = false;
     holdingBuffer.clear();
     IOUtils.closeQuietly(this);
   }
 
-  public void resetShardPositions(Map<String, String> shardPositions){
-
-    if(shardPositions == null){
+  public void resetShardPositions(Map<String, String> shardPositions)
+  {
+    if (shardPositions == null) {
       return;
     }
     shardPosition.clear();
@@ -233,6 +238,7 @@
     stats.updateShardStats(shardStats);
     return stats;
   }
+
   /**
    * This method is called in teardown method of the operator
    */
@@ -281,9 +287,10 @@
     return initialOffset;
   }
 
-  final protected void putRecord(String shardId, Record msg) throws InterruptedException{
+  protected final void putRecord(String shardId, Record msg) throws InterruptedException
+  {
     holdingBuffer.put(new Pair<String, Record>(shardId, msg));
-  };
+  }
 
   public Integer getRecordsLimit()
   {
@@ -322,15 +329,18 @@
     public KinesisShardStats()
     {
     }
+
     //important API for update
-    public void updateShardStats(Map<String, String> shardStats){
+    public void updateShardStats(Map<String, String> shardStats)
+    {
       for (Entry<String, String> ss : shardStats.entrySet()) {
         partitionStats.put(ss.getKey(), ss.getValue());
       }
     }
   }
 
-  public static class KinesisShardStatsUtil {
+  public static class KinesisShardStatsUtil
+  {
     public static Map<String, String> getShardStatsForPartitions(List<KinesisShardStats> kinesisshardStats)
     {
       Map<String, String> result = Maps.newHashMap();
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisStringInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisStringInputOperator.java
index 0a067bf..958cc5c 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisStringInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisStringInputOperator.java
@@ -16,11 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
-
-import com.amazonaws.services.kinesis.model.Record;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import java.nio.ByteBuffer;
+import com.amazonaws.services.kinesis.model.Record;
 
 /**
  * Kinesis input adapter which consumes string data from Kinesis
@@ -41,8 +40,7 @@
       byte[] bytes = new byte[bb.remaining() ];
       bb.get(bytes);
       return new String(bytes);
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       throw new RuntimeException(ex);
     }
   }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisStringOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisStringOutputOperator.java
index ab6c6f8..5e8dd8d 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisStringOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisStringOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import com.datatorrent.common.util.Pair;
 
@@ -33,6 +33,7 @@
   {
     return tuple.getBytes();
   }
+
   @Override
   protected Pair<String, String> tupleToKeyValue(String tuple)
   {
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisUtil.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisUtil.java
index 65bd75d..d4ba51c 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisUtil.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/KinesisUtil.java
@@ -16,14 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
 
+import java.util.List;
 import com.amazonaws.AmazonClientException;
 import com.amazonaws.auth.BasicAWSCredentials;
 import com.amazonaws.services.kinesis.AmazonKinesisClient;
-import com.amazonaws.services.kinesis.model.*;
-
-import java.util.List;
+import com.amazonaws.services.kinesis.model.DescribeStreamRequest;
+import com.amazonaws.services.kinesis.model.DescribeStreamResult;
+import com.amazonaws.services.kinesis.model.GetRecordsRequest;
+import com.amazonaws.services.kinesis.model.GetRecordsResult;
+import com.amazonaws.services.kinesis.model.GetShardIteratorRequest;
+import com.amazonaws.services.kinesis.model.GetShardIteratorResult;
+import com.amazonaws.services.kinesis.model.Record;
+import com.amazonaws.services.kinesis.model.Shard;
+import com.amazonaws.services.kinesis.model.ShardIteratorType;
 
 /**
  * A util class for Amazon Kinesis. Contains the wrappers for creating client, get the shard list and records from shard.
@@ -41,10 +48,9 @@
   {
   }
 
- public static KinesisUtil getInstance()
+  public static KinesisUtil getInstance()
   {
-    if(instance == null)
-    {
+    if (instance == null) {
       instance = new KinesisUtil();
     }
     return instance;
@@ -58,15 +64,13 @@
    */
   public void createKinesisClient(String accessKey, String secretKey, String endPoint) throws Exception
   {
-    if(client == null) {
+    if (client == null) {
       try {
         client = new AmazonKinesisClient(new BasicAWSCredentials(accessKey, secretKey));
-        if(endPoint != null)
-        {
+        if (endPoint != null) {
           client.setEndpoint(endPoint);
         }
-      } catch(Exception e)
-      {
+      } catch (Exception e) {
         throw new AmazonClientException("Unable to load credentials", e);
       }
     }
@@ -79,7 +83,7 @@
    */
   public List<Shard> getShardList(String streamName)
   {
-    assert client != null:"Illegal client";
+    assert client != null : "Illegal client";
     DescribeStreamRequest describeRequest = new DescribeStreamRequest();
     describeRequest.setStreamName(streamName);
 
@@ -98,9 +102,9 @@
    * @throws AmazonClientException
    */
   public List<Record> getRecords(String streamName, Integer recordsLimit, String shId, ShardIteratorType iteratorType, String seqNo)
-      throws AmazonClientException
+    throws AmazonClientException
   {
-    assert client != null:"Illegal client";
+    assert client != null : "Illegal client";
     try {
       // Create the GetShardIteratorRequest instance and sets streamName, shardId and iteratorType to it
       GetShardIteratorRequest iteratorRequest = new GetShardIteratorRequest();
@@ -110,9 +114,9 @@
 
       // If the iteratorType is AFTER_SEQUENCE_NUMBER, set the sequence No to the iteratorRequest
       if (ShardIteratorType.AFTER_SEQUENCE_NUMBER.equals(iteratorType) ||
-          ShardIteratorType.AT_SEQUENCE_NUMBER.equals(iteratorType))
+          ShardIteratorType.AT_SEQUENCE_NUMBER.equals(iteratorType)) {
         iteratorRequest.setStartingSequenceNumber(seqNo);
-
+      }
       // Get the Response from the getShardIterator service method & get the shardIterator from that response
       GetShardIteratorResult iteratorResponse = client.getShardIterator(iteratorRequest);
       // getShardIterator() specifies the position in the shard
@@ -126,8 +130,7 @@
       // Get the Response from the getRecords service method and get the data records from that response.
       GetRecordsResult getResponse = client.getRecords(getRequest);
       return getResponse.getRecords();
-    } catch(AmazonClientException e)
-    {
+    } catch (AmazonClientException e) {
       throw new RuntimeException(e);
     }
   }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/ShardManager.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/ShardManager.java
index 94ce28d..cb71a50 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/ShardManager.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/ShardManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/package-info.java
index 72a273c..62d820f 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/kinesis/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/AbstractMemcacheInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/AbstractMemcacheInputOperator.java
index 77377ac..f27c3ca 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/AbstractMemcacheInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/AbstractMemcacheInputOperator.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memcache;
+package org.apache.apex.malhar.contrib.memcache;
 
-import com.datatorrent.lib.db.AbstractKeyValueStoreInputOperator;
+import org.apache.apex.malhar.lib.db.AbstractKeyValueStoreInputOperator;
 
 /**
  * This is the base implementation used for memcached input adapters.&nbsp;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/AbstractMemcacheOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/AbstractMemcacheOutputOperator.java
index eadd340..4f4dbe8 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/AbstractMemcacheOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/AbstractMemcacheOutputOperator.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memcache;
+package org.apache.apex.malhar.contrib.memcache;
 
-import com.datatorrent.lib.db.AbstractStoreOutputOperator;
+import org.apache.apex.malhar.lib.db.AbstractStoreOutputOperator;
 
 /**
  * This is the base implementation of memcached output operators.&nbsp;
@@ -31,8 +31,7 @@
  * @param <T> The tuple type.
  * @since 0.9.3
  */
-public abstract class AbstractMemcacheOutputOperator<T>
-        extends AbstractStoreOutputOperator<T, MemcacheStore>
+public abstract class AbstractMemcacheOutputOperator<T> extends AbstractStoreOutputOperator<T, MemcacheStore>
 {
   public AbstractMemcacheOutputOperator()
   {
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/MemcachePOJOOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/MemcachePOJOOutputOperator.java
index fdee9d0..45fc118 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/MemcachePOJOOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/MemcachePOJOOutputOperator.java
@@ -16,18 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memcache;
+package org.apache.apex.malhar.contrib.memcache;
 
 import java.util.List;
 
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldValueGenerator;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.TableInfo;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.FieldValueGenerator;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
-import com.datatorrent.lib.util.TableInfo;
-
 /**
  *
  * @displayName Memcache Output Operator
@@ -36,7 +35,7 @@
  * @since 3.0.0
  */
 @Evolving
-public class MemcachePOJOOutputOperator extends AbstractMemcacheOutputOperator< Object >
+public class MemcachePOJOOutputOperator extends AbstractMemcacheOutputOperator<Object>
 {
   private static final long serialVersionUID = 5290158463990158290L;
   private TableInfo<FieldInfo> tableInfo;
@@ -53,8 +52,7 @@
 
     final List<FieldInfo> fieldsInfo = tableInfo.getFieldsInfo();
     Object value = tuple;
-    if( fieldsInfo != null )
-    {
+    if ( fieldsInfo != null ) {
       if (fieldValueGenerator == null) {
         fieldValueGenerator = FieldValueGenerator.getFieldValueGenerator(tuple.getClass(), fieldsInfo);
       }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/MemcacheStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/MemcacheStore.java
index 1465f03..760c512 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/MemcacheStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/MemcacheStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memcache;
+package org.apache.apex.malhar.contrib.memcache;
 
 import java.io.IOException;
 import java.net.InetSocketAddress;
@@ -25,11 +25,11 @@
 import java.util.Map;
 import java.util.concurrent.Future;
 
-import net.spy.memcached.MemcachedClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.lib.db.KeyValueStore;
 
-import com.datatorrent.lib.db.KeyValueStore;
+import net.spy.memcached.MemcachedClient;
 
 /**
  * Provides the implementation of a Memcache store.
@@ -91,8 +91,7 @@
   {
     if (serverAddresses.isEmpty()) {
       memcacheClient = new MemcachedClient(new InetSocketAddress("localhost", 11211));
-    }
-    else {
+    } else {
       memcacheClient = new MemcachedClient(serverAddresses);
     }
   }
@@ -140,14 +139,12 @@
     return results;
   }
 
-  @SuppressWarnings("unchecked")
   @Override
   public void put(Object key, Object value)
   {
     try {
       memcacheClient.set(key.toString(), keyExpiryTime, value).get();
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       throw new RuntimeException(ex);
     }
   }
@@ -162,8 +159,7 @@
     for (Future<?> future : futures) {
       try {
         future.get();
-      }
-      catch (Exception ex) {
+      } catch (Exception ex) {
         throw new RuntimeException(ex);
       }
     }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/package-info.java
index d1776dd..8132ea3 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache/package-info.java
@@ -20,4 +20,4 @@
  * Memcache operators and utilities.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.memcache;
+package org.apache.apex.malhar.contrib.memcache;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/AbstractMemcacheInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/AbstractMemcacheInputOperator.java
index 116368f..3887e09 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/AbstractMemcacheInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/AbstractMemcacheInputOperator.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memcache_whalin;
+package org.apache.apex.malhar.contrib.memcache_whalin;
 
-import com.datatorrent.lib.db.AbstractKeyValueStoreInputOperator;
+import org.apache.apex.malhar.lib.db.AbstractKeyValueStoreInputOperator;
 
 /**
  * This is the base implementation used for memcached input adapters.&nbsp;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/AbstractMemcacheOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/AbstractMemcacheOutputOperator.java
index 010571d..9859f5a 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/AbstractMemcacheOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/AbstractMemcacheOutputOperator.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memcache_whalin;
+package org.apache.apex.malhar.contrib.memcache_whalin;
 
-import com.datatorrent.lib.db.AbstractStoreOutputOperator;
+import org.apache.apex.malhar.lib.db.AbstractStoreOutputOperator;
 
 /**
  * This is the base implementation of memcached output operators.&nbsp;
@@ -31,8 +31,7 @@
  * @param <T> The tuple type.
  * @since 0.9.3
  */
-public abstract class AbstractMemcacheOutputOperator<T>
-        extends AbstractStoreOutputOperator<T, MemcacheStore>
+public abstract class AbstractMemcacheOutputOperator<T> extends AbstractStoreOutputOperator<T, MemcacheStore>
 {
   public AbstractMemcacheOutputOperator()
   {
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/MemcacheStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/MemcacheStore.java
index 90d75bd..175e1c3 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/MemcacheStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/MemcacheStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memcache_whalin;
+package org.apache.apex.malhar.contrib.memcache_whalin;
 
 import java.io.IOException;
 import java.net.InetSocketAddress;
@@ -27,11 +27,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.KeyValueStore;
+
 import com.whalin.MemCached.MemCachedClient;
 import com.whalin.MemCached.SockIOPool;
 
-import com.datatorrent.lib.db.KeyValueStore;
-
 /**
  * Provides the implementation of a Memcache store.
  *
@@ -81,8 +81,7 @@
     pool = SockIOPool.getInstance();
     if (serverAddresses.isEmpty()) {
       pool.setServers(new String[]{"localhost:11211"});
-    }
-    else {
+    } else {
       pool.setServers(serverAddresses.toArray(new String[] {}));
     }
     pool.initialize();
@@ -121,7 +120,6 @@
    * @param keys
    * @return All values for the given keys.
    */
-  @SuppressWarnings("unchecked")
   @Override
   public List<Object> getAll(List<Object> keys)
   {
@@ -132,14 +130,12 @@
     return results;
   }
 
-  @SuppressWarnings("unchecked")
   @Override
   public void put(Object key, Object value)
   {
     try {
       memcacheClient.set(key.toString(), value, keyExpiryTime);
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       throw new RuntimeException(ex);
     }
   }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/package-info.java
index e5442d6..cc87b21 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memcache_whalin/package-info.java
@@ -20,4 +20,4 @@
  * Memcache operators and utilities using whalin library.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.memcache_whalin;
+package org.apache.apex.malhar.contrib.memcache_whalin;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlInputOperator.java
index 05ce019..d1465b8 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlInputOperator.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memsql;
+package org.apache.apex.malhar.contrib.memsql;
 
-import com.datatorrent.lib.db.jdbc.AbstractJdbcInputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.AbstractJdbcInputOperator;
 
 /**
  * This is an input operator that reads from a memsql database.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlOutputOperator.java
index f6391ab..6ddbaf8 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlOutputOperator.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memsql;
+package org.apache.apex.malhar.contrib.memsql;
 
-import com.datatorrent.lib.db.jdbc.AbstractJdbcNonTransactionableBatchOutputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.AbstractJdbcNonTransactionableBatchOutputOperator;
 
 /**
  * This is an output operator that connects to a memsql database.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/MemsqlPOJOInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/MemsqlPOJOInputOperator.java
index 2f75575..6d07228 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/MemsqlPOJOInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/MemsqlPOJOInputOperator.java
@@ -16,20 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memsql;
-
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Setter;
-import com.datatorrent.lib.util.PojoUtils.SetterBoolean;
-import com.datatorrent.lib.util.PojoUtils.SetterDouble;
-import com.datatorrent.lib.util.PojoUtils.SetterFloat;
-import com.datatorrent.lib.util.PojoUtils.SetterInt;
-import com.datatorrent.lib.util.PojoUtils.SetterLong;
-import com.datatorrent.lib.util.PojoUtils.SetterShort;
+package org.apache.apex.malhar.contrib.memsql;
 
 import java.math.BigDecimal;
-import java.sql.*;
+import java.sql.Date;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Time;
+import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -38,9 +33,18 @@
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
 
-import org.apache.hadoop.classification.InterfaceStability.Evolving;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Setter;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterBoolean;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterDouble;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterFloat;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterInt;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterLong;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterShort;
+import org.apache.hadoop.classification.InterfaceStability.Evolving;
+import com.datatorrent.api.Context.OperatorContext;
 
 /**
  * <p>
@@ -262,8 +266,7 @@
         String javaType;
         if (memsqlType.contains("(")) {
           javaType = memsqlType.substring(0, memsqlType.indexOf('(')).toUpperCase();
-        }
-        else {
+        } else {
           javaType = memsqlType.toUpperCase();
         }
 
@@ -286,16 +289,14 @@
       }
 
       statement.close();
-    }
-    catch (SQLException ex) {
+    } catch (SQLException ex) {
       throw new RuntimeException(ex);
     }
 
     try {
       // This code will be replaced after integration of creating POJOs on the fly utility.
       objectClass = Class.forName(outputClass);
-    }
-    catch (ClassNotFoundException ex) {
+    } catch (ClassNotFoundException ex) {
       throw new RuntimeException(ex);
     }
 
@@ -324,11 +325,9 @@
     try {
       // This code will be replaced after integration of creating POJOs on the fly utility.
       obj = objectClass.newInstance();
-    }
-    catch (InstantiationException ex) {
+    } catch (InstantiationException ex) {
       throw new RuntimeException(ex);
-    }
-    catch (IllegalAccessException ex) {
+    } catch (IllegalAccessException ex) {
       throw new RuntimeException(ex);
     }
     final int size = columns.size();
@@ -339,35 +338,25 @@
         Class<?> classType = columnNameToClassMapping.get(columnName);
         if (classType == String.class) {
           ((Setter<Object, String>)setters.get(i)).set(obj, result.getString(columnName));
-        }
-        else if (classType == int.class) {
+        } else if (classType == int.class) {
           ((SetterInt)setters.get(i)).set(obj, result.getInt(columnName));
-        }
-        else if (classType == Boolean.class) {
+        } else if (classType == Boolean.class) {
           ((SetterBoolean)setters.get(i)).set(obj, result.getBoolean(columnName));
-        }
-        else if (classType == Short.class) {
+        } else if (classType == Short.class) {
           ((SetterShort)setters.get(i)).set(obj, result.getShort(columnName));
-        }
-        else if (classType == Long.class) {
+        } else if (classType == Long.class) {
           ((SetterLong)setters.get(i)).set(obj, result.getLong(columnName));
-        }
-        else if (classType == Float.class) {
+        } else if (classType == Float.class) {
           ((SetterFloat)setters.get(i)).set(obj, result.getFloat(columnName));
-        }
-        else if (classType == Double.class) {
+        } else if (classType == Double.class) {
           ((SetterDouble)setters.get(i)).set(obj, result.getDouble(columnName));
-        }
-        else if (classType == BigDecimal.class) {
+        } else if (classType == BigDecimal.class) {
           ((Setter<Object, BigDecimal>)setters.get(i)).set(obj, result.getBigDecimal(columnName));
-        }
-        else if (classType == Date.class) {
+        } else if (classType == Date.class) {
           ((Setter<Object, Date>)setters.get(i)).set(obj, result.getDate(columnName));
-        }
-        else if (classType == Timestamp.class) {
+        } else if (classType == Timestamp.class) {
           ((Setter<Object, Timestamp>)setters.get(i)).set(obj, result.getTimestamp(columnName));
-        }
-        else {
+        } else {
           throw new RuntimeException("unsupported data type ");
         }
       }
@@ -375,28 +364,20 @@
       if (result.isLast()) {
         logger.debug("last row is {}", lastRowKey);
         if (primaryKeyColumnType == int.class) {
-
           lastRowKey = result.getInt(primaryKeyColumn);
-        }
-        else if (primaryKeyColumnType == Long.class) {
-
+        } else if (primaryKeyColumnType == Long.class) {
           lastRowKey = result.getLong(primaryKeyColumn);
-        }
-        else if (primaryKeyColumnType == Float.class) {
+        } else if (primaryKeyColumnType == Float.class) {
           lastRowKey = result.getFloat(primaryKeyColumn);
-        }
-        else if (primaryKeyColumnType == Double.class) {
+        } else if (primaryKeyColumnType == Double.class) {
           lastRowKey = result.getDouble(primaryKeyColumn);
-        }
-        else if (primaryKeyColumnType == Short.class) {
+        } else if (primaryKeyColumnType == Short.class) {
           lastRowKey = result.getShort(primaryKeyColumn);
-        }
-        else {
+        } else {
           throw new RuntimeException("unsupported data type ");
         }
       }
-    }
-    catch (SQLException ex) {
+    } catch (SQLException ex) {
       throw new RuntimeException(ex);
     }
     return obj;
@@ -413,8 +394,7 @@
     String parameterizedQuery;
     if (query.contains("%s")) {
       parameterizedQuery = query.replace("%s", startRow + "");
-    }
-    else {
+    } else {
       parameterizedQuery = query;
     }
     return parameterizedQuery;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/MemsqlPOJOOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/MemsqlPOJOOutputOperator.java
index b933b3b..8859051 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/MemsqlPOJOOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/MemsqlPOJOOutputOperator.java
@@ -16,27 +16,32 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memsql;
+package org.apache.apex.malhar.contrib.memsql;
 
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.GetterBoolean;
-import com.datatorrent.lib.util.PojoUtils.GetterChar;
-import com.datatorrent.lib.util.PojoUtils.GetterDouble;
-import com.datatorrent.lib.util.PojoUtils.GetterFloat;
-import com.datatorrent.lib.util.PojoUtils.GetterInt;
-import com.datatorrent.lib.util.PojoUtils.GetterLong;
-import com.datatorrent.lib.util.PojoUtils.Getter;
-import com.datatorrent.lib.util.PojoUtils.GetterShort;
-
-import java.sql.*;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Types;
 import java.util.ArrayList;
 
 import javax.validation.constraints.NotNull;
 
-import org.apache.hadoop.classification.InterfaceStability.Evolving;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterBoolean;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterChar;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterDouble;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterFloat;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterInt;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterLong;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterShort;
+import org.apache.hadoop.classification.InterfaceStability.Evolving;
+import com.datatorrent.api.Context.OperatorContext;
 
 /**
  * A generic implementation of AbstractMemsqlOutputOperator which can take in a POJO.
@@ -146,7 +151,6 @@
     try {
       Statement st = conn.createStatement();
       ResultSet rs = st.executeQuery("select * from " + tablename);
-
       ResultSetMetaData rsMetaData = rs.getMetaData();
 
       int numberOfColumns;
@@ -161,8 +165,7 @@
         columnDataTypes.add(type);
         LOG.debug("sql column type is " + type);
       }
-    }
-    catch (SQLException ex) {
+    } catch (SQLException ex) {
       throw new RuntimeException(ex);
     }
 
@@ -252,29 +255,29 @@
       switch (type) {
         case (Types.CHAR):
           // TODO: verify that memsql driver handles char as int
-          statement.setInt(i+1, ((GetterChar<Object>) getters.get(i)).get(tuple));
+          statement.setInt(i + 1, ((GetterChar<Object>)getters.get(i)).get(tuple));
           break;
         case (Types.VARCHAR):
-          statement.setString(i+1, ((Getter<Object, String>) getters.get(i)).get(tuple));
+          statement.setString(i + 1, ((Getter<Object, String>)getters.get(i)).get(tuple));
           break;
         case (Types.BOOLEAN):
         case (Types.TINYINT):
-          statement.setBoolean(i+1, ((GetterBoolean<Object>) getters.get(i)).get(tuple));
+          statement.setBoolean(i + 1, ((GetterBoolean<Object>)getters.get(i)).get(tuple));
           break;
         case (Types.SMALLINT):
-          statement.setShort(i+1, ((GetterShort<Object>) getters.get(i)).get(tuple));
+          statement.setShort(i + 1, ((GetterShort<Object>)getters.get(i)).get(tuple));
           break;
         case (Types.INTEGER):
-          statement.setInt(i+1, ((GetterInt<Object>) getters.get(i)).get(tuple));
+          statement.setInt(i + 1, ((GetterInt<Object>)getters.get(i)).get(tuple));
           break;
         case (Types.BIGINT):
-          statement.setLong (i+1, ((GetterLong<Object>) getters.get(i)).get(tuple));
+          statement.setLong(i + 1, ((GetterLong<Object>)getters.get(i)).get(tuple));
           break;
         case (Types.FLOAT):
-          statement.setFloat(i+1, ((GetterFloat<Object>) getters.get(i)).get(tuple));
+          statement.setFloat(i + 1, ((GetterFloat<Object>)getters.get(i)).get(tuple));
           break;
         case (Types.DOUBLE):
-          statement.setDouble(i+1, ((GetterDouble<Object>) getters.get(i)).get(tuple));
+          statement.setDouble(i + 1, ((GetterDouble<Object>)getters.get(i)).get(tuple));
           break;
         default:
           /*
@@ -284,12 +287,12 @@
             Types.ARRAY
             Types.OTHER
            */
-          statement.setObject(i+1, ((Getter<Object, Object>)getters.get(i)).get(tuple));
+          statement.setObject(i + 1, ((Getter<Object, Object>)getters.get(i)).get(tuple));
           break;
       }
     }
   }
 
-  private static transient final Logger LOG = LoggerFactory.getLogger(MemsqlPOJOOutputOperator.class);
+  private static final Logger LOG = LoggerFactory.getLogger(MemsqlPOJOOutputOperator.class);
 
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/MemsqlStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/MemsqlStore.java
index 2fdef93..e0d93bb 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/MemsqlStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/MemsqlStore.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memsql;
+package org.apache.apex.malhar.contrib.memsql;
 
-import com.datatorrent.lib.db.jdbc.JdbcNonTransactionalStore;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcNonTransactionalStore;
 
 /**
  * A connection store for memsql which has the default connection driver set
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/package-info.java
index a23b118..59f1aa4 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/memsql/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.memsql;
+package org.apache.apex.malhar.contrib.memsql;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/AbstractStreamPatternMatcher.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/AbstractStreamPatternMatcher.java
index 38b176c..81bfc26 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/AbstractStreamPatternMatcher.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/AbstractStreamPatternMatcher.java
@@ -31,7 +31,7 @@
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-@Deprecated
+
 /**
  * <p>
  * This operator searches for a given pattern in the input stream.<br>
@@ -56,7 +56,7 @@
  * @since 2.0.0
  * @deprecated
  */
-
+@Deprecated
 @OperatorAnnotation(partitionable = false)
 public abstract class AbstractStreamPatternMatcher<T> extends BaseOperator
 {
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/AllAfterMatchMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/AllAfterMatchMap.java
index 44118d5..16429e1 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/AllAfterMatchMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/AllAfterMatchMap.java
@@ -21,12 +21,12 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseMatchOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.BaseMatchOperator;
-
 /**
  * This operator takes Maps, whose values are numbers, as input tuples.&nbsp;
  * It then performs a numeric comparison on the values corresponding to one of the keys in the input tuple maps.&nbsp;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/DistinctMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/DistinctMap.java
index 426c2e5..6dca102 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/DistinctMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/DistinctMap.java
@@ -21,13 +21,13 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseKeyValueOperator;
+import org.apache.apex.malhar.lib.util.UnifierHashMap;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.BaseKeyValueOperator;
-import com.datatorrent.lib.util.UnifierHashMap;
-
 /**
  * This operator computes and emits distinct key,val pairs (i.e drops duplicates).
  * <p>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeyVals.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeyVals.java
index 9925d69..32d5039 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeyVals.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeyVals.java
@@ -23,13 +23,13 @@
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.util.BaseKeyOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.Stateless;
 
-import com.datatorrent.lib.util.BaseKeyOperator;
-
 /**
  * This operator filters the incoming stream of tuples using a set of specified key value pairs.&nbsp;
  * Tuples that match the filter are emitted by the operator.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysHashMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysHashMap.java
index cfee74c..0c5b753 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysHashMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysHashMap.java
@@ -23,13 +23,13 @@
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.util.BaseKeyOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.Stateless;
 
-import com.datatorrent.lib.util.BaseKeyOperator;
-
 
 /**
  * This operator filters the incoming stream of key value pairs based on the keys specified by property "keys".
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysMap.java
index 43386f0..328d7d0 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysMap.java
@@ -23,14 +23,14 @@
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.util.BaseKeyOperator;
+import org.apache.apex.malhar.lib.util.UnifierHashMap;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.Stateless;
 
-import com.datatorrent.lib.util.BaseKeyOperator;
-import com.datatorrent.lib.util.UnifierHashMap;
-
 /**
  * This operator filters the incoming stream of key value pairs based on the keys specified by property "keys"..
  * <p>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FirstMatchMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FirstMatchMap.java
index 7649706..6ea2d91 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FirstMatchMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FirstMatchMap.java
@@ -21,12 +21,12 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseMatchOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.BaseMatchOperator;
-
 /**
  * This operator filters the incoming stream of key value pairs by obtaining the values corresponding to a specified key,
  * and comparing those values to a specified number.&nbsp;The first key value pair, in each window, to satisfy the comparison is emitted.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FirstN.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FirstN.java
index f067fbb..0638fbf 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FirstN.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FirstN.java
@@ -21,13 +21,12 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.AbstractBaseNOperatorMap;
 import org.apache.commons.lang.mutable.MutableInt;
 
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.AbstractBaseNOperatorMap;
-
 /**
  * This operator filters the incoming stream of key value pairs by emitting the first N key value pairs with a specified key in each window.
  * <p>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FirstTillMatch.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FirstTillMatch.java
index c32a0f2..f7081f0 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FirstTillMatch.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/FirstTillMatch.java
@@ -20,12 +20,12 @@
 
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.BaseMatchOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.BaseMatchOperator;
-
 /**
  * This operator filters the incoming stream of key value pairs by obtaining the values corresponding to a specified key,
  * and comparing those values to a specified number.&nbsp;For each window, all key value pairs are emitted by the operator until a value satisfying the comparison is encountered.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/InsertSortDesc.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/InsertSortDesc.java
index 4af9091..53ee21d 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/InsertSortDesc.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/InsertSortDesc.java
@@ -22,13 +22,14 @@
 import java.util.HashMap;
 import java.util.PriorityQueue;
 
+import org.apache.apex.malhar.lib.util.AbstractBaseSortOperator;
+import org.apache.apex.malhar.lib.util.ReversibleComparator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.AbstractBaseSortOperator;
-import com.datatorrent.lib.util.ReversibleComparator;
 
 /**
  * This operator takes the values it receives each window and outputs them in ascending order at the end of each window.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndex.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndex.java
index 7964ed7..3ba81d6 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndex.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndex.java
@@ -22,13 +22,13 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseKeyValueOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator.Unifier;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.BaseKeyValueOperator;
-
 /**
  * This operator takes a stream of key value pairs each window,
  * and outputs a set of inverted key value pairs at the end of each window.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndexArray.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndexArray.java
index 26b77ac..556a62d 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndexArray.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndexArray.java
@@ -22,12 +22,12 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseKeyValueOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.BaseKeyValueOperator;
-
 /**
  * This operator takes a stream of key value pairs each window,
  * and outputs a set of inverted key value pairs at the end of each window.&nbsp;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/LastMatchMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/LastMatchMap.java
index 188c9b1..d4abdb9 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/LastMatchMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/LastMatchMap.java
@@ -21,12 +21,12 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseMatchOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.BaseMatchOperator;
-
 /**
  * This operator filters the incoming stream of key value pairs by obtaining the values corresponding to a specified key,
  * and comparing those values to a specified value.&nbsp;The last key value pair, in each window, to satisfy the comparison is emitted.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyMap.java
index af5229c..3c0f79c 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyMap.java
@@ -22,15 +22,15 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.AbstractBaseFrequentKey;
+import org.apache.apex.malhar.lib.util.UnifierArrayHashMapFrequent;
+import org.apache.apex.malhar.lib.util.UnifierHashMapFrequent;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
 
-import com.datatorrent.lib.util.AbstractBaseFrequentKey;
-import com.datatorrent.lib.util.UnifierArrayHashMapFrequent;
-import com.datatorrent.lib.util.UnifierHashMapFrequent;
-
 /**
  * This operator filters the incoming stream of key value pairs by finding the key or keys (if there is a tie) that occur the fewest number of times within each window.&nbsp;
  * A list of the corresponding key value pairs are then output to the port named "list" and one of the corresponding key value pairs is output to the port "least", at the end of each window.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyValueMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyValueMap.java
index 78eb6d9..c3c61c8 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyValueMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyValueMap.java
@@ -20,9 +20,9 @@
 
 import java.util.HashMap;
 
-import com.datatorrent.api.DefaultOutputPort;
+import org.apache.apex.malhar.lib.util.AbstractBaseFrequentKeyValueMap;
 
-import com.datatorrent.lib.util.AbstractBaseFrequentKeyValueMap;
+import com.datatorrent.api.DefaultOutputPort;
 
 /**
  * This operator filters the incoming stream of key value pairs by finding the value or values (if there is a tie),
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyMap.java
index f1ab968..cdf0d81 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyMap.java
@@ -22,14 +22,14 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.AbstractBaseFrequentKey;
+import org.apache.apex.malhar.lib.util.UnifierArrayHashMapFrequent;
+import org.apache.apex.malhar.lib.util.UnifierHashMapFrequent;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.AbstractBaseFrequentKey;
-import com.datatorrent.lib.util.UnifierArrayHashMapFrequent;
-import com.datatorrent.lib.util.UnifierHashMapFrequent;
-
 /**
  * This operator filters the incoming stream of key value pairs by finding the key or keys (if there is a tie)
  * that occur the largest number of times within each window.&nbsp;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyValueMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyValueMap.java
index 4fb6472..0545ac5 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyValueMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyValueMap.java
@@ -20,11 +20,11 @@
 
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.AbstractBaseFrequentKeyValueMap;
+
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.AbstractBaseFrequentKeyValueMap;
-
 /**
  * This operator filters the incoming stream of key value pairs by finding the value or values (if there is a tie),
  * for each key, that occur the largest number of times within each window.&nbsp;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/Sampler.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/Sampler.java
index 7caf523..fb3a6cb 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/Sampler.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/Sampler.java
@@ -23,13 +23,13 @@
 import javax.validation.constraints.Max;
 import javax.validation.constraints.Min;
 
+import org.apache.apex.malhar.lib.util.BaseKeyOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.Stateless;
 
-import com.datatorrent.lib.util.BaseKeyOperator;
-
 /**
  * This operator takes a stream of tuples as input, and emits each tuple with a specified probability.
  * <p>
diff --git a/samples/src/main/java/com/datatorrent/samples/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/package-info.java
similarity index 82%
rename from samples/src/main/java/com/datatorrent/samples/package-info.java
rename to contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/package-info.java
index d1f36fd..55d7f54 100644
--- a/samples/src/main/java/com/datatorrent/samples/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/algo/package-info.java
@@ -16,10 +16,5 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/**
- * <b>com.datatorrent.lib.samplecode</b> is a collection of libraries that have examples of various operators<p>
- * <br>
- * <br>
- */
-
-package com.datatorrent.samples;
+@org.apache.hadoop.classification.InterfaceStability.Evolving
+package org.apache.apex.malhar.contrib.misc.algo;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/Change.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/Change.java
index 51d90ab..01d433b 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/Change.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/Change.java
@@ -18,10 +18,11 @@
  */
 package org.apache.apex.malhar.contrib.misc.math;
 
+import org.apache.apex.malhar.lib.util.BaseNumberValueOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.BaseNumberValueOperator;
 
 /**
  * Operator compares data values arriving on input port with base value input operator.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlert.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlert.java
index c554ead..d4fba9c 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlert.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlert.java
@@ -20,10 +20,11 @@
 
 import javax.validation.constraints.Min;
 
+import org.apache.apex.malhar.lib.util.BaseNumberValueOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.util.BaseNumberValueOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Compares consecutive input data values, emits &lt;value,percent change value&gt; pair on alert output port, if percent change exceeds certain thresh hold value.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertKeyVal.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertKeyVal.java
index 8d75ab4..61678fc 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertKeyVal.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertKeyVal.java
@@ -22,12 +22,12 @@
 
 import javax.validation.constraints.Min;
 
+import org.apache.apex.malhar.lib.util.BaseNumberKeyValueOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.commons.lang.mutable.MutableDouble;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.util.BaseNumberKeyValueOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Operator compares consecutive values arriving at input port mapped by keys, emits &lt;key,percent change&gt; pair on output alert port if percent change exceeds percentage threshold set in operator.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertMap.java
index e8add80..a062cb3 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertMap.java
@@ -23,11 +23,11 @@
 
 import javax.validation.constraints.Min;
 
+import org.apache.apex.malhar.lib.util.BaseNumberKeyValueOperator;
 import org.apache.commons.lang.mutable.MutableDouble;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.util.BaseNumberKeyValueOperator;
 
 /**
  * Operator stores  &lt;key,value&gt; pair in hash map across the windows for comparison and emits hash map of &lt;key,percent change in value for each key&gt; if percent change
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeKeyVal.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeKeyVal.java
index 0600e6a..ac64a3b 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeKeyVal.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ChangeKeyVal.java
@@ -20,15 +20,14 @@
 
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.BaseNumberKeyValueOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.commons.lang.mutable.MutableDouble;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
 
-import com.datatorrent.lib.util.BaseNumberKeyValueOperator;
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * Operator compares &lt;key,value&gt; pairs arriving at data and base input ports and stores &lt;key,value&gt; pairs arriving at base port in hash map across the windows.
  * <p/>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/CompareExceptMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/CompareExceptMap.java
index bfa3c0a..7a2f325 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/CompareExceptMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/CompareExceptMap.java
@@ -21,11 +21,12 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.algo.MatchMap;
+import org.apache.apex.malhar.lib.util.UnifierHashMap;
+
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.algo.MatchMap;
-import com.datatorrent.lib.util.UnifierHashMap;
 
 /**
  * Operator compares based on the property "key", "value", and "compare".
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/CompareMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/CompareMap.java
index e263d3f..41ab9da 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/CompareMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/CompareMap.java
@@ -20,9 +20,10 @@
 
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.algo.MatchMap;
+
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.algo.MatchMap;
 
 /**
  * This operator compares tuples subclassed from Number based on the property "key", "value", and "cmp", and matching tuples are emitted.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/CountKeyVal.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/CountKeyVal.java
index a229796..93a102b 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/CountKeyVal.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/CountKeyVal.java
@@ -21,15 +21,15 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseKeyValueOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.UnifierCountOccurKey;
 import org.apache.commons.lang.mutable.MutableInt;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.StreamCodec;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.BaseKeyValueOperator;
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.UnifierCountOccurKey;
 
 /**
  * This Operator aggregates occurrence of keys in &lt;key,value&gt; pair at input port.&lt;Key,Occurrence count&gt; pair is emitted for each input on output port.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ExceptMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ExceptMap.java
index 2dcb583..a4d11ed 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ExceptMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/ExceptMap.java
@@ -21,10 +21,11 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.algo.MatchMap;
+import org.apache.apex.malhar.lib.util.UnifierHashMap;
+
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.algo.MatchMap;
-import com.datatorrent.lib.util.UnifierHashMap;
 
 /**
  * This operator does comparison on tuple sub-classed from Number based on the property "key", "value", and "cmp", and not matched tuples are emitted.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/Quotient.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/Quotient.java
index 8909acd..9ba739c 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/Quotient.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/Quotient.java
@@ -18,10 +18,11 @@
  */
 package org.apache.apex.malhar.contrib.misc.math;
 
+import org.apache.apex.malhar.lib.util.BaseNumberValueOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.lib.util.BaseNumberValueOperator;
 
 /**
  * This operator adds all the values on "numerator" and "denominator" and emits quotient at end of window.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/QuotientMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/QuotientMap.java
index b37bbd5..af19d64 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/QuotientMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/QuotientMap.java
@@ -23,12 +23,12 @@
 
 import javax.validation.constraints.Min;
 
+import org.apache.apex.malhar.lib.util.BaseNumberKeyValueOperator;
 import org.apache.commons.lang.mutable.MutableDouble;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.lib.util.BaseNumberKeyValueOperator;
 
 /**
  * Add all the values for each key on "numerator" and "denominator" and emits quotient at end of window for all keys in the denominator.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/SumCountMap.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/SumCountMap.java
index b2493a1..2b7c245 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/SumCountMap.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/SumCountMap.java
@@ -21,15 +21,15 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseNumberKeyValueOperator;
+import org.apache.apex.malhar.lib.util.UnifierHashMapInteger;
+import org.apache.apex.malhar.lib.util.UnifierHashMapSumKeys;
 import org.apache.commons.lang.mutable.MutableDouble;
 import org.apache.commons.lang.mutable.MutableInt;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.BaseNumberKeyValueOperator;
-import com.datatorrent.lib.util.UnifierHashMapInteger;
-import com.datatorrent.lib.util.UnifierHashMapSumKeys;
 
 /**
  * Emits the sum and count of values for each key at the end of window.
diff --git a/samples/src/main/java/com/datatorrent/samples/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/package-info.java
similarity index 82%
copy from samples/src/main/java/com/datatorrent/samples/package-info.java
copy to contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/package-info.java
index d1f36fd..53edcd1 100644
--- a/samples/src/main/java/com/datatorrent/samples/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/math/package-info.java
@@ -16,10 +16,5 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-/**
- * <b>com.datatorrent.lib.samplecode</b> is a collection of libraries that have examples of various operators<p>
- * <br>
- * <br>
- */
-
-package com.datatorrent.samples;
+@org.apache.hadoop.classification.InterfaceStability.Evolving
+package org.apache.apex.malhar.contrib.misc.math;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/DeleteOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/DeleteOperator.java
index 7faf96d..3b95ef6 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/DeleteOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/DeleteOperator.java
@@ -20,10 +20,11 @@
 
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.streamquery.condition.Condition;
 
 /**
  * An implementation of BaseOperator that provides sql delete query semantic on live data stream. <br>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/GroupByHavingOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/GroupByHavingOperator.java
index 9b2eeda..515b4f9 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/GroupByHavingOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/GroupByHavingOperator.java
@@ -26,16 +26,17 @@
 
 import org.apache.apex.malhar.contrib.misc.streamquery.condition.HavingCondition;
 import org.apache.apex.malhar.contrib.misc.streamquery.function.FunctionIndex;
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.streamquery.condition.Condition;
-@Deprecated
+
 /**
  * @since 3.6.0
  */
+@Deprecated
 public class GroupByHavingOperator extends BaseOperator
 {
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/InnerJoinOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/InnerJoinOperator.java
index d3e11c3..a3b3c91 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/InnerJoinOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/InnerJoinOperator.java
@@ -22,13 +22,14 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.index.Index;
+
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.lib.streamquery.condition.Condition;
-import com.datatorrent.lib.streamquery.index.Index;
 
 /**
  * An implementation of Operator that reads table row data from two table data input ports. <br>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/SelectOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/SelectOperator.java
index 08799cb..34a157a 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/SelectOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/SelectOperator.java
@@ -22,11 +22,12 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.index.Index;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.streamquery.condition.Condition;
-import com.datatorrent.lib.streamquery.index.Index;
 
 /**
  * An implementation of that provides sql select query semantics on live data stream. <br>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/UpdateOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/UpdateOperator.java
index 52ddac6..1548894 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/UpdateOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/UpdateOperator.java
@@ -21,10 +21,11 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.streamquery.condition.Condition;
 
 /**
  *  An implementation of BaseOperator that provides sql update query semantic on live data stream. <br>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/BetweenCondition.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/BetweenCondition.java
index 155470c..e25000b 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/BetweenCondition.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/BetweenCondition.java
@@ -22,7 +22,7 @@
 
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
 
 /**
  *  A derivation of Condition that validates row by checking if the given column name value lies between given left,right range. <br>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/CompoundCondition.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/CompoundCondition.java
index d606991..99235e3 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/CompoundCondition.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/CompoundCondition.java
@@ -22,7 +22,7 @@
 
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
 
 /**
  * A derivation of Condition index that implements logical AND/OR select expression. <br>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/EqualValueCondition.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/EqualValueCondition.java
index a54960d..0042c81 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/EqualValueCondition.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/EqualValueCondition.java
@@ -21,7 +21,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import com.datatorrent.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
 
 /**
  * An implementation of condition on column equality.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/InCondition.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/InCondition.java
index d19bb99..e2b14f1 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/InCondition.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/InCondition.java
@@ -24,7 +24,7 @@
 
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
 
 /**
  * An implementation of condition class to check if a column value is in a given set of values.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/LikeCondition.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/LikeCondition.java
index a8789fa..6502d6a 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/LikeCondition.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/condition/LikeCondition.java
@@ -24,7 +24,7 @@
 
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
 
 /**
  * An implementation of condition class to filter rows for which given column name value matches given regular expression. <br>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/BinaryExpression.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/BinaryExpression.java
index 4de58c1..16e2321 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/BinaryExpression.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/BinaryExpression.java
@@ -20,7 +20,7 @@
 
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.streamquery.index.Index;
+import org.apache.apex.malhar.lib.streamquery.index.Index;
 
 /**
  * Abstract class to filter row by binary expression index.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/MidIndex.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/MidIndex.java
index c165d89..e4e7d68 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/MidIndex.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/MidIndex.java
@@ -22,7 +22,7 @@
 
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
 
 /**
  * <p>An implementation of Column Index that implements filter method based on mid index. </p>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/NegateExpression.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/NegateExpression.java
index 0a6f64d..9a647e7 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/NegateExpression.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/NegateExpression.java
@@ -48,7 +48,7 @@
   }
 
   /* (non-Javadoc)
-   * @see com.datatorrent.lib.streamquery.index.Index#filter(java.util.Map, java.util.Map)
+   * @see org.apache.apex.malhar.lib.streamquery.index.Index#filter(java.util.Map, java.util.Map)
    */
   @Override
   public void filter(Map<String, Object> row, Map<String, Object> collect)
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/RoundDoubleIndex.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/RoundDoubleIndex.java
index 495063f..7a2c96a 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/RoundDoubleIndex.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/RoundDoubleIndex.java
@@ -22,7 +22,7 @@
 
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
 
 /**
  * <p>An implementation of column index that implements filter method using Round Double Index. </p>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/StringCaseIndex.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/StringCaseIndex.java
index 31c9468..1b00523 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/StringCaseIndex.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/StringCaseIndex.java
@@ -22,7 +22,7 @@
 
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
 
 /**
  * <p>An implementation of Column Index that implements filter method using case of a string index. </p>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/StringLenIndex.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/StringLenIndex.java
index f764c9e..92e3501 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/StringLenIndex.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/StringLenIndex.java
@@ -22,7 +22,7 @@
 
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
 
 /**
  * <p>An implementation of Column Index that implements filter method using length of a string Index. </p>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/SumExpression.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/SumExpression.java
index 91d4ec7..a03f09f 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/SumExpression.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/SumExpression.java
@@ -51,7 +51,7 @@
   }
 
   /* sum column values.
-   * @see com.datatorrent.lib.streamquery.index.Index#filter(java.util.Map, java.util.Map)
+   * @see org.apache.apex.malhar.lib.streamquery.index.Index#filter(java.util.Map, java.util.Map)
    */
   @Override
   public void filter(Map<String, Object> row, Map<String, Object> collect)
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/UnaryExpression.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/UnaryExpression.java
index 04d5fc6..97714b3 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/UnaryExpression.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/misc/streamquery/index/UnaryExpression.java
@@ -20,7 +20,7 @@
 
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.streamquery.index.Index;
+import org.apache.apex.malhar.lib.streamquery.index.Index;
 
 /**
  * A base implementation of an index that filters row by unary expression.&nbsp; Subclasses should provide the
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBArrayListOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBArrayListOutputOperator.java
index a783159..ae95ad0 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBArrayListOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBArrayListOutputOperator.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mongodb;
+package org.apache.apex.malhar.contrib.mongodb;
 
-import com.mongodb.BasicDBObject;
 import java.util.ArrayList;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import com.mongodb.BasicDBObject;
 
 /**
  * This is a MongoDB Output Operator, which uses HashMaps to map tuples to appropriate tables and columns in MongoDB,
@@ -94,8 +94,7 @@
       if ((doc = tableToDocument.get(table)) == null) {
         doc = new BasicDBObject();
         doc.put(columnList.get(i), tuple.get(i));
-      }
-      else {
+      } else {
         doc.put(columnList.get(i), tuple.get(i));
       }
       tableToDocument.put(table, doc);
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBConnectable.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBConnectable.java
index 2cd2037..30a8803 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBConnectable.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBConnectable.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mongodb;
+package org.apache.apex.malhar.contrib.mongodb;
 
 import java.net.UnknownHostException;
 
 import javax.validation.constraints.NotNull;
 
-import com.mongodb.*;
+import org.apache.apex.malhar.lib.db.Connectable;
 
-import com.datatorrent.lib.db.Connectable;
+import com.mongodb.DB;
+import com.mongodb.MongoClient;
 
 /**
  * MongoDB base operator, which has basic information for an i/o operator.<p><br>
@@ -111,8 +112,7 @@
       if (userName != null && passWord != null) {
         db.authenticate(userName, passWord.toCharArray());
       }
-    }
-    catch (UnknownHostException ex) {
+    } catch (UnknownHostException ex) {
       throw new RuntimeException("creating mongodb client", ex);
     }
   }
@@ -128,8 +128,7 @@
   {
     try {
       mongoClient.getConnector().getDBPortPool(mongoClient.getAddress()).get().ensureOpen();
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       return false;
     }
     return true;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBHashMapOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBHashMapOutputOperator.java
index 9196801..57eedb4 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBHashMapOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBHashMapOutputOperator.java
@@ -16,10 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mongodb;
+package org.apache.apex.malhar.contrib.mongodb;
+
+import java.util.HashMap;
+import java.util.Map;
 
 import com.mongodb.BasicDBObject;
-import java.util.*;
 
 /**
  * This is a MongoDB Output Operator, which uses Lists to map tuples to appropriate tables and columns in MongoDB,
@@ -91,8 +93,7 @@
       if ((doc = tableToDocument.get(table)) == null) {
         doc = new BasicDBObject();
         doc.put(column, entry.getValue());
-      }
-      else {
+      } else {
         doc.put(column, entry.getValue());
       }
       tableToDocument.put(table, doc);
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBInputOperator.java
index 8f5496a..1008f6d 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBInputOperator.java
@@ -16,20 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mongodb;
+package org.apache.apex.malhar.contrib.mongodb;
 
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.api.InputOperator;
-import com.datatorrent.api.Operator.ActivationListener;
+import java.net.UnknownHostException;
+
+import org.slf4j.LoggerFactory;
 
 import com.mongodb.DBCursor;
 import com.mongodb.DBObject;
 import com.mongodb.MongoClient;
 
-import java.net.UnknownHostException;
-
-import org.slf4j.LoggerFactory;
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.api.DefaultOutputPort;
+import com.datatorrent.api.InputOperator;
+import com.datatorrent.api.Operator.ActivationListener;
 
 /**
  * This is the base implementation of a MongoDB input operator.&nbsp;
@@ -69,7 +69,7 @@
   /**
    * This is the output port which emits tuples read from MongoDB.
    */
-  final public transient DefaultOutputPort<T> outputPort = new DefaultOutputPort<T>();
+  public final transient DefaultOutputPort<T> outputPort = new DefaultOutputPort<T>();
 
   /**
    * Any concrete class derived from this has to implement this method
@@ -100,8 +100,7 @@
       if (userName != null && passWord != null) {
         db.authenticate(userName, passWord.toCharArray());
       }
-    }
-    catch (UnknownHostException ex) {
+    } catch (UnknownHostException ex) {
       logger.debug(ex.toString());
     }
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBOutputOperator.java
index 3e79fc1..506b359 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBOutputOperator.java
@@ -16,12 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mongodb;
+package org.apache.apex.malhar.contrib.mongodb;
 
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DefaultInputPort;
-import com.datatorrent.api.Operator;
-import com.mongodb.*;
 import java.net.UnknownHostException;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
@@ -37,6 +33,16 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.mongodb.BasicDBObject;
+import com.mongodb.DBCollection;
+import com.mongodb.DBCursor;
+import com.mongodb.DBObject;
+import com.mongodb.MongoClient;
+
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.api.DefaultInputPort;
+import com.datatorrent.api.Operator;
+
 /**
  * This is the base implementation for a non transactional output operator for MongoDB.&nbsp;
  * Subclasses should implement the column mapping for writing tuples out to MongoDB.
@@ -124,8 +130,7 @@
 
       try {
         processTuple(tuple);
-      }
-      catch (Exception ex) {
+      } catch (Exception ex) {
         throw new RuntimeException("Exception during process tuple", ex);
       }
     }
@@ -145,8 +150,7 @@
     if (cursor.hasNext()) {
       Object obj = cursor.next().get(windowIdColumnName);
       lastWindowId = (Long)obj;
-    }
-    else {
+    } else {
       BasicDBObject doc = new BasicDBObject();
       doc.put(windowIdColumnName, (long)0);
 //      doc.put(applicationIdName, 0);
@@ -154,7 +158,7 @@
       maxWindowCollection.save(doc);
     }
 
-    logger.debug("last windowid: {}" , lastWindowId);
+    logger.debug("last windowid: {}", lastWindowId);
   }
 
   /**
@@ -172,8 +176,7 @@
     tupleId = 1;
     if (windowId < lastWindowId) {
       ignoreWindow = true;
-    }
-    else if (windowId == lastWindowId) {
+    } else if (windowId == lastWindowId) {
       ignoreWindow = false;
       BasicDBObject query = new BasicDBObject();
 //      query.put(windowIdColumnName, windowId);
@@ -184,14 +187,11 @@
       StringBuilder high = new StringBuilder();
       if (queryFunction == 1) {
         queryFunction1(bb, high, low);
-      }
-      else if (queryFunction == 2) {
+      } else if (queryFunction == 2) {
         queryFunction2(bb, high, low);
-      }
-      else if (queryFunction == 3) {
+      } else if (queryFunction == 3) {
         queryFunction3(bb, high, low);
-      }
-      else {
+      } else {
         throw new RuntimeException("unknown queryFunction type:" + queryFunction);
       }
 
@@ -200,8 +200,7 @@
       for (String table : tableList) {
         db.getCollection(table).remove(query);
       }
-    }
-    else {
+    } else {
       ignoreWindow = false;
     }
   }
@@ -249,13 +248,12 @@
         tableToDocumentList.put(table, new ArrayList<DBObject>());
         tableToDocument.put(table, new BasicDBObject());
       }
-    }
-    catch (UnknownHostException ex) {
+    } catch (UnknownHostException ex) {
       logger.debug(ex.toString());
     }
   }
 
-  abstract public void setColumnMapping(String[] mapping);
+  public abstract void setColumnMapping(String[] mapping);
 
   @Override
   public void teardown()
@@ -271,14 +269,11 @@
     bb.order(ByteOrder.BIG_ENDIAN);
     if (queryFunction == 1) {
       insertFunction1(bb);
-    }
-    else if (queryFunction == 2) {
+    } else if (queryFunction == 2) {
       insertFunction2(bb);
-    }
-    else if (queryFunction == 3) {
+    } else if (queryFunction == 3) {
       insertFunction3(bb);
-    }
-    else {
+    } else {
       throw new RuntimeException("unknown insertFunction type:" + queryFunction);
     }
 //    String str = Hex.encodeHexString(bb.array());
@@ -304,8 +299,7 @@
 
         db.getCollection(table).insert(docList);
         tableToDocumentList.put(table, new ArrayList<DBObject>());
-      }
-      else {
+      } else {
         tableToDocumentList.put(table, docList);
       }
     }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBPOJOOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBPOJOOutputOperator.java
index 242793b..5b4d73d 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBPOJOOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/MongoDBPOJOOutputOperator.java
@@ -16,11 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mongodb;
-
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
-import com.mongodb.BasicDBObject;
+package org.apache.apex.malhar.contrib.mongodb;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -28,8 +24,12 @@
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
+import com.mongodb.BasicDBObject;
+
 /**
  * Implementation of {@link MongoDBOutputOperator} that saves a POJO in the mongodb database. <br/>
  * <p>
@@ -114,8 +114,7 @@
     nestedKeys = new HashMap<String, String[]>();
   }
 
-  static
-  {
+  static {
     mapPrimitives.put("boolean", boolean.class);
     mapPrimitives.put("char", char.class);
     mapPrimitives.put("short", short.class);
@@ -131,12 +130,10 @@
     for (String fieldType: fieldTypes) {
       if (mapPrimitives.containsKey(fieldType)) {
         classTypes.add(mapPrimitives.get(fieldType));
-      }
-      else {
+      } else {
         try {
           classTypes.add(Class.forName(fieldType));
-        }
-        catch (ClassNotFoundException ex) {
+        } catch (ClassNotFoundException ex) {
           throw new RuntimeException(ex);
         }
       }
@@ -149,7 +146,7 @@
         nestedKeys.put(key, key.split("[.]"));
       }
       String table = tablenames.get(i);
-      if(!tableList.contains(table)){
+      if (!tableList.contains(table)) {
         tableList.add(table);
       }
     }
@@ -182,12 +179,10 @@
         }
         if (doc.containsField(subKeys[0])) {
           doc.append(subKeys[0], nestedDoc);
-        }
-        else {
+        } else {
           doc.put(subKeys[0], nestedDoc);
         }
-      }
-      else {
+      } else {
         if ((doc = tableToDocument.get(table)) == null) {
           doc = new BasicDBObject();
         }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/package-info.java
index d148f1e..07c8e26 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/mongodb/package-info.java
@@ -20,4 +20,4 @@
  * MongoDB operators and utilities.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.mongodb;
+package org.apache.apex.malhar.contrib.mongodb;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractMqttInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractMqttInputOperator.java
index 081f60c..2964b18 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractMqttInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractMqttInputOperator.java
@@ -16,17 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mqtt;
+package org.apache.apex.malhar.contrib.mqtt;
 
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.InputOperator;
-import com.datatorrent.api.Operator.ActivationListener;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.ArrayBlockingQueue;
-import org.fusesource.mqtt.client.*;
+
+import org.fusesource.mqtt.client.BlockingConnection;
+import org.fusesource.mqtt.client.MQTT;
+import org.fusesource.mqtt.client.Message;
+import org.fusesource.mqtt.client.QoS;
+import org.fusesource.mqtt.client.Topic;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.api.InputOperator;
+import com.datatorrent.api.Operator.ActivationListener;
 
 /**
  * This is the base implementation for and MQTT input operator.&nbsp;
@@ -196,8 +201,7 @@
             try {
               Message msg = connection.receive();
               holdingBuffer.add(msg);
-            }
-            catch (Exception ex) {
+            } catch (Exception ex) {
               LOG.error("Trouble receiving", ex);
             }
           }
@@ -205,8 +209,7 @@
 
       });
       thread.start();
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       LOG.error("Caught exception during activation: ", ex);
       throw new RuntimeException(ex);
     }
@@ -219,15 +222,12 @@
     try {
       thread.interrupt();
       thread.join();
-    }
-    catch (InterruptedException ex) {
+    } catch (InterruptedException ex) {
       LOG.error("interrupted");
-    }
-    finally {
+    } finally {
       try {
         connection.disconnect();
-      }
-      catch (Exception ex) {
+      } catch (Exception ex) {
         LOG.error("Caught exception during disconnect", ex);
       }
     }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractMqttOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractMqttOutputOperator.java
index bfdf79c..c1b6948 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractMqttOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractMqttOutputOperator.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mqtt;
+package org.apache.apex.malhar.contrib.mqtt;
 
-import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.api.Context.OperatorContext;
 import javax.validation.constraints.NotNull;
 import org.fusesource.mqtt.client.BlockingConnection;
 import org.fusesource.mqtt.client.MQTT;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.common.util.BaseOperator;
 
 /**
  * This is the base implementation of an MQTT output operator.&nbsp;
@@ -69,8 +69,7 @@
       }
       connection = client.blockingConnection();
       connection.connect();
-    }
-    catch (Throwable t) {
+    } catch (Throwable t) {
       throw new RuntimeException(t);
     }
   }
@@ -80,8 +79,8 @@
   {
     try {
       connection.disconnect();
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
+      //ignore
     }
   }
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractSinglePortMqttInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractSinglePortMqttInputOperator.java
index 473201b..2bd756f 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractSinglePortMqttInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractSinglePortMqttInputOperator.java
@@ -16,10 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mqtt;
+package org.apache.apex.malhar.contrib.mqtt;
 
-import com.datatorrent.api.DefaultOutputPort;
 import org.fusesource.mqtt.client.Message;
+import com.datatorrent.api.DefaultOutputPort;
 
 /**
  * This is the base implementation for a single port MQTT input operator.&nbsp;
@@ -50,7 +50,7 @@
   /**
    * This output port emits tuples, which were extracted from MQTT messages.
    */
-  final public transient DefaultOutputPort<T> outputPort = new DefaultOutputPort<T>();
+  public final transient DefaultOutputPort<T> outputPort = new DefaultOutputPort<T>();
 
   /**
    * Any concrete class derived from AbstractSinglePortMqttInputOperator has to implement this method
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractSinglePortMqttOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractSinglePortMqttOutputOperator.java
index 76d7955..fe63196 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractSinglePortMqttOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/AbstractSinglePortMqttOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mqtt;
+package org.apache.apex.malhar.contrib.mqtt;
 
 import com.datatorrent.api.DefaultInputPort;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/MqttClientConfig.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/MqttClientConfig.java
index e8f52df..e3ae2bf 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/MqttClientConfig.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/MqttClientConfig.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mqtt;
+package org.apache.apex.malhar.contrib.mqtt;
 
 import org.fusesource.mqtt.client.QoS;
 
@@ -40,7 +40,7 @@
   private int connectionTimeout = 500;
   private int connectAttemptsMax = 1;
   private String host = "localhost";
-  private int port= 1883;
+  private int port = 1883;
 
   /**
    * Gets the MQTT client ID
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/package-info.java
index 0c94e16..e875aaf 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/mqtt/package-info.java
@@ -20,4 +20,4 @@
  * MQTT operators and utilities.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.mqtt;
+package org.apache.apex.malhar.contrib.mqtt;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/AbstractNiFiInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/AbstractNiFiInputOperator.java
index b040d87..28938e4 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/AbstractNiFiInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/AbstractNiFiInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi;
+package org.apache.apex.malhar.contrib.nifi;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -152,7 +152,8 @@
       do {
         tuples.add(createTuple(dataPacket));
         dataPacket = transaction.receive();
-      } while (dataPacket != null);
+      }
+      while (dataPacket != null);
 
       // confirm all of the expected data was received by comparing check-sums, does not complete the transaction
       transaction.confirm();
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/AbstractNiFiOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/AbstractNiFiOutputOperator.java
index 53cf302..a879a9d 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/AbstractNiFiOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/AbstractNiFiOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi;
+package org.apache.apex.malhar.contrib.nifi;
 
 import java.io.IOException;
 import java.util.List;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/AbstractNiFiSinglePortInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/AbstractNiFiSinglePortInputOperator.java
index c246de0..758b963 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/AbstractNiFiSinglePortInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/AbstractNiFiSinglePortInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi;
+package org.apache.apex.malhar.contrib.nifi;
 
 import java.util.List;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiDataPacket.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiDataPacket.java
index 6ebe9d1..83c73ac 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiDataPacket.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiDataPacket.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi;
+package org.apache.apex.malhar.contrib.nifi;
 
 import java.util.Map;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiDataPacketBuilder.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiDataPacketBuilder.java
index 2ea3cd6..5aa562b 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiDataPacketBuilder.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiDataPacketBuilder.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi;
+package org.apache.apex.malhar.contrib.nifi;
 
 import java.io.Serializable;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortInputOperator.java
index 63c76f4..f133a93 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi;
+package org.apache.apex.malhar.contrib.nifi;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortOutputOperator.java
index 5c5b08c..409e667 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi;
+package org.apache.apex.malhar.contrib.nifi;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/StandardNiFiDataPacket.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/StandardNiFiDataPacket.java
index 60cfbe3..85aad60 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/StandardNiFiDataPacket.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/nifi/StandardNiFiDataPacket.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi;
+package org.apache.apex.malhar.contrib.nifi;
 
 import java.io.Serializable;
 import java.util.Map;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parquet/AbstractParquetFileReader.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parquet/AbstractParquetFileReader.java
index 14ab918..2160303 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parquet/AbstractParquetFileReader.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parquet/AbstractParquetFileReader.java
@@ -16,11 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parquet;
+package org.apache.apex.malhar.contrib.parquet;
 
 import java.io.IOException;
 import java.io.InputStream;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperator;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.fs.Path;
 import org.apache.parquet.example.data.Group;
@@ -30,7 +31,6 @@
 import org.apache.parquet.schema.MessageTypeParser;
 
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.io.fs.AbstractFileInputOperator;
 
 /**
  * Base implementation of ParquetFileReader. Reads Parquet files from input
@@ -48,7 +48,7 @@
   protected transient MessageType schema;
   /**
    * Parquet Schema as a string. E.g: message
-   * com.datatorrent.contrib.parquet.eventsEventRecord {required INT32
+   * org.apache.apex.malhar.contrib.parquet.eventsEventRecord {required INT32
    * event_id;required BINARY org_id (UTF8);required INT64 long_id;optional
    * BOOLEAN css_file_loaded;optional FLOAT float_val;optional DOUBLE
    * double_val;}
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parquet/ParquetFilePOJOReader.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parquet/ParquetFilePOJOReader.java
index 36c5b55..e489dae 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parquet/ParquetFilePOJOReader.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parquet/ParquetFilePOJOReader.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parquet;
+package org.apache.apex.malhar.contrib.parquet;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -24,6 +24,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.parquet.example.data.Group;
@@ -34,8 +36,6 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.FieldInfo.SupportType;
-import com.datatorrent.lib.util.PojoUtils;
 
 /**
  * <p>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/AbstractCsvParser.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/AbstractCsvParser.java
index b611c5d..cf4f746 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/AbstractCsvParser.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/AbstractCsvParser.java
@@ -16,29 +16,37 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
 import java.util.ArrayList;
 
 import javax.validation.constraints.NotNull;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.supercsv.cellprocessor.Optional;
+import org.supercsv.cellprocessor.ParseChar;
+import org.supercsv.cellprocessor.ParseDate;
+import org.supercsv.cellprocessor.ParseDouble;
+import org.supercsv.cellprocessor.ParseInt;
+import org.supercsv.cellprocessor.ParseLong;
+import org.supercsv.cellprocessor.ift.CellProcessor;
+import org.supercsv.io.ICsvReader;
 import org.supercsv.prefs.CsvPreference;
 
-import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DefaultInputPort;
-import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.lib.util.ReusableStringReader;
-import java.io.*;
+import org.apache.apex.malhar.lib.util.ReusableStringReader;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
-import org.supercsv.cellprocessor.*;
-import org.supercsv.cellprocessor.ift.CellProcessor;
-import org.supercsv.io.*;
+
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.api.DefaultInputPort;
+import com.datatorrent.api.DefaultOutputPort;
+import com.datatorrent.common.util.BaseOperator;
+import com.datatorrent.netlet.util.DTThrowable;
 
 /**
  *  This is a base implementation of Delimited data parser which can be extended to output
@@ -78,7 +86,7 @@
   public enum FIELD_TYPE
   {
     BOOLEAN, DOUBLE, INTEGER, FLOAT, LONG, SHORT, CHARACTER, STRING, DATE
-  };
+  }
 
   @NotNull
   private transient ReusableStringReader csvStringReader = new ReusableStringReader();
@@ -128,8 +136,7 @@
           logger.debug("data in loop is {}", data.toString());
           output.emit(data);
         }
-      }
-      catch (IOException ex) {
+      } catch (IOException ex) {
         throw new RuntimeException(ex);
       }
 
@@ -157,12 +164,10 @@
             field.setType(temp[1]);
             getFields().add(field);
           }
-        }
-        else {
+        } else {
           logger.debug("File containing fields and their data types does not exist.Please specify the fields and data type through properties of this operator.");
         }
-      }
-      catch (IOException ex) {
+      } catch (IOException ex) {
         DTThrowable.rethrow(ex);
       }
 
@@ -185,29 +190,21 @@
       properties[i] = getFields().get(i).name;
       if (type == FIELD_TYPE.DOUBLE) {
         processors[i] = new Optional(new ParseDouble());
-      }
-      else if (type == FIELD_TYPE.INTEGER) {
+      } else if (type == FIELD_TYPE.INTEGER) {
         processors[i] = new Optional(new ParseInt());
-      }
-      else if (type == FIELD_TYPE.FLOAT) {
+      } else if (type == FIELD_TYPE.FLOAT) {
         processors[i] = new Optional(new ParseDouble());
-      }
-      else if (type == FIELD_TYPE.LONG) {
+      } else if (type == FIELD_TYPE.LONG) {
         processors[i] = new Optional(new ParseLong());
-      }
-      else if (type == FIELD_TYPE.SHORT) {
+      } else if (type == FIELD_TYPE.SHORT) {
         processors[i] = new Optional(new ParseInt());
-      }
-      else if (type == FIELD_TYPE.STRING) {
+      } else if (type == FIELD_TYPE.STRING) {
         processors[i] = new Optional();
-      }
-      else if (type == FIELD_TYPE.CHARACTER) {
+      } else if (type == FIELD_TYPE.CHARACTER) {
         processors[i] = new Optional(new ParseChar());
-      }
-      else if (type == FIELD_TYPE.BOOLEAN) {
+      } else if (type == FIELD_TYPE.BOOLEAN) {
         processors[i] = new Optional(new ParseChar());
-      }
-      else if (type == FIELD_TYPE.DATE) {
+      } else if (type == FIELD_TYPE.DATE) {
         processors[i] = new Optional(new ParseDate("dd/MM/yyyy"));
       }
     }
@@ -219,8 +216,7 @@
   {
     try {
       csvReader.close();
-    }
-    catch (IOException e) {
+    } catch (IOException e) {
       DTThrowable.rethrow(e);
     }
   }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/CellProcessorBuilder.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/CellProcessorBuilder.java
index 292031e..4b1c491 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/CellProcessorBuilder.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/CellProcessorBuilder.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
 import java.util.Map;
 
@@ -38,10 +38,9 @@
 import org.supercsv.cellprocessor.ift.LongCellProcessor;
 import org.supercsv.util.CsvContext;
 
+import org.apache.apex.malhar.contrib.parser.Schema.FieldType;
 import org.apache.commons.lang3.StringUtils;
 
-import com.datatorrent.contrib.parser.Schema.FieldType;
-
 /**
  * Helper class with methods to generate CellProcessor objects. Cell processors
  * are an integral part of reading and writing with Super CSV - they automate
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/CommonLogParser.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/CommonLogParser.java
index 7490166..16ca6d5 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/CommonLogParser.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/CommonLogParser.java
@@ -48,30 +48,30 @@
 {
   private static final Logger logger = LoggerFactory.getLogger(CommonLogParser.class);
 
-  private String schema="{\n" +
-    "  \"fields\": [{\n" +
-    "    \"field\": \"host\",\n" +
-    "    \"regex\": \"^([0-9.]+)\"\n" +
-    "  }, {\n" +
-    "    \"field\": \"rfc931\",\n" +
-    "    \"regex\": \"(\\\\S+)\"\n" +
-    "  }, {\n" +
-    "    \"field\": \"username\",\n" +
-    "    \"regex\": \"(\\\\S+)\"\n" +
-    "  }, {\n" +
-    "    \"field\": \"datetime\",\n" +
-    "    \"regex\": \"\\\\[(.*?)\\\\]\"\n" +
-    "  },{\n" +
-    "    \"field\": \"request\",\n" +
-    "    \"regex\": \"\\\"((?:[^\\\"]|\\\")+)\\\"\"\n" +
-    "  },{\n" +
-    "    \"field\": \"statusCode\",\n" +
-    "    \"regex\": \"(\\\\d{3})\"\n" +
-    "  },{\n" +
-    "    \"field\": \"bytes\",\n" +
-    "    \"regex\": \"(\\\\d+|-)\"\n" +
-    "  }]\n" +
-    "}";
+  private String schema = "{\n" +
+      "  \"fields\": [{\n" +
+      "    \"field\": \"host\",\n" +
+      "    \"regex\": \"^([0-9.]+)\"\n" +
+      "  }, {\n" +
+      "    \"field\": \"rfc931\",\n" +
+      "    \"regex\": \"(\\\\S+)\"\n" +
+      "  }, {\n" +
+      "    \"field\": \"username\",\n" +
+      "    \"regex\": \"(\\\\S+)\"\n" +
+      "  }, {\n" +
+      "    \"field\": \"datetime\",\n" +
+      "    \"regex\": \"\\\\[(.*?)\\\\]\"\n" +
+      "  },{\n" +
+      "    \"field\": \"request\",\n" +
+      "    \"regex\": \"\\\"((?:[^\\\"]|\\\")+)\\\"\"\n" +
+      "  },{\n" +
+      "    \"field\": \"statusCode\",\n" +
+      "    \"regex\": \"(\\\\d{3})\"\n" +
+      "  },{\n" +
+      "    \"field\": \"bytes\",\n" +
+      "    \"regex\": \"(\\\\d+|-)\"\n" +
+      "  }]\n" +
+      "}";
 
 
   @Override
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/CsvParser.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/CsvParser.java
index ea406e9..a7da203 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/CsvParser.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/CsvParser.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
 import java.io.IOException;
 import java.util.List;
@@ -32,6 +32,10 @@
 import org.supercsv.io.CsvMapReader;
 import org.supercsv.prefs.CsvPreference;
 
+import org.apache.apex.malhar.contrib.parser.DelimitedSchema.Field;
+import org.apache.apex.malhar.lib.parser.Parser;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.ReusableStringReader;
 import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 
@@ -40,10 +44,6 @@
 import com.datatorrent.api.AutoMetric;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.contrib.parser.DelimitedSchema.Field;
-import com.datatorrent.lib.parser.Parser;
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.ReusableStringReader;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/DelimitedSchema.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/DelimitedSchema.java
index 1285b33..745ad2f 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/DelimitedSchema.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/DelimitedSchema.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
 import java.io.IOException;
 import java.util.Collections;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/FixedWidthParser.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/FixedWidthParser.java
index 716d3f6..90545ff 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/FixedWidthParser.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/FixedWidthParser.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
 import java.lang.reflect.Field;
 import java.text.DateFormat;
@@ -32,6 +32,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.parser.Parser;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang3.ClassUtils;
 
@@ -44,9 +47,6 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
-import com.datatorrent.lib.parser.Parser;
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.PojoUtils;
 
 /**
  * Operator that parses a fixed width record against a specified schema <br>
@@ -144,7 +144,7 @@
         err.emit(new KeyValPair<>(incomingString, "Record length mis-match/shorter tuple"));
       }
       logger.error("Tuple could not be parsed. Reason Record length mis-match/shorter tuple. " +
-        "Expected length " + recordLength + " Actual length " + incomingString.length());
+          "Expected length " + recordLength + " Actual length " + incomingString.length());
       errorTupleCount++;
       return;
     }
@@ -153,7 +153,7 @@
         err.emit(new KeyValPair<>(incomingString, "Record length mis-match/longer tuple"));
       }
       logger.error("Tuple could not be parsed. Reason Record length mis-match/longer tuple. " +
-        "Expected length " + recordLength + " Actual length " + incomingString.length());
+          "Expected length " + recordLength + " Actual length " + incomingString.length());
       errorTupleCount++;
       return;
     }
@@ -272,7 +272,7 @@
     try {
       Field f = clazz.getDeclaredField(fieldName);
       FixedWidthParser.TypeInfo t = new FixedWidthParser.TypeInfo(f.getName(),
-        ClassUtils.primitiveToWrapper(f.getType()));
+          ClassUtils.primitiveToWrapper(f.getType()));
       t.setter = PojoUtils.createSetter(clazz, t.name, t.type);
       setters.add(t);
     } catch (NoSuchFieldException e) {
@@ -304,7 +304,7 @@
         FixedWidthSchema.Field currentField = fields.get(i);
         FixedWidthParser.TypeInfo typeInfo = setters.get(i);
         validateAndSetCurrentField(currentField,
-          values[i], typeInfo, pojoObject, toEmit);
+            values[i], typeInfo, pojoObject, toEmit);
       }
     } catch (StringIndexOutOfBoundsException e) {
       throw new RuntimeException("Record length and tuple length mismatch ", e);
@@ -325,7 +325,7 @@
    * @param toEmit the map to be emitted
    */
   private void validateAndSetCurrentField(FixedWidthSchema.Field currentField,
-    String value, FixedWidthParser.TypeInfo typeInfo, Object pojoObject, HashMap toEmit)
+      String value, FixedWidthParser.TypeInfo typeInfo, Object pojoObject, HashMap toEmit)
   {
     try {
       String fieldName = currentField.getName();
@@ -381,7 +381,7 @@
       throw new RuntimeException("Error parsing" + value + " to Integer type", e);
     } catch (ParseException e) {
       throw new RuntimeException("Error parsing" + value, e);
-    }catch (Exception e) {
+    } catch (Exception e) {
       throw new RuntimeException("Error setting " + value + " in the given class" + typeInfo.toString(), e);
     }
   }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/FixedWidthSchema.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/FixedWidthSchema.java
index bd26f06..b691ab2 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/FixedWidthSchema.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/FixedWidthSchema.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
 import java.io.IOException;
 import java.util.Collections;
@@ -67,11 +67,11 @@
   /**
    * Default Alignment
    */
-  public static final String DEFAULT_ALIGNMENT= "left";
+  public static final String DEFAULT_ALIGNMENT = "left";
   /**
    * JSON key string for Field Alignment
    */
-  public static final String FIELD_ALIGNMENT ="alignment";
+  public static final String FIELD_ALIGNMENT = "alignment";
 
   public static final Logger logger = LoggerFactory.getLogger(FixedWidthSchema.class);
   /**
@@ -160,13 +160,13 @@
     for (int i = 0; i < fieldArray.length(); i++) {
       JSONObject obj = fieldArray.getJSONObject(i);
       Field field = new Field(obj.getString(NAME),
-        obj.getString(TYPE).toUpperCase(), obj.getInt(FIELD_LENGTH));
-      if(obj.has(FIELD_PADDING_CHARACTER)) {
+          obj.getString(TYPE).toUpperCase(), obj.getInt(FIELD_LENGTH));
+      if (obj.has(FIELD_PADDING_CHARACTER)) {
         field.setPadding(obj.getString(FIELD_PADDING_CHARACTER).charAt(0));
       } else {
         field.setPadding(globalPadding);
       }
-      if(obj.has(FIELD_ALIGNMENT)) {
+      if (obj.has(FIELD_ALIGNMENT)) {
         field.setAlignment(obj.getString(FIELD_ALIGNMENT));
       } else {
         field.setAlignment(globalAlignment);
@@ -255,8 +255,8 @@
       this.dateFormat = DEFAULT_DATE_FORMAT;
       this.trueValue = DEFAULT_TRUE_VALUE;
       this.falseValue = DEFAULT_FALSE_VALUE;
-      this.padding=' ';
-      this.alignment=DEFAULT_ALIGNMENT;
+      this.padding = ' ';
+      this.alignment = DEFAULT_ALIGNMENT;
     }
 
     /**
@@ -335,6 +335,7 @@
     {
       this.falseValue = falseValue;
     }
+
     /**
      * Get the field padding
      * @return padding gets the padding for the individual field.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/JsonParser.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/JsonParser.java
index 1b81e6f..7b74d77 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/JsonParser.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/JsonParser.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
 import java.io.IOException;
 import java.util.Iterator;
@@ -26,6 +26,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.parser.Parser;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.hadoop.classification.InterfaceStability;
 
 import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -42,8 +44,6 @@
 import com.datatorrent.api.AutoMetric;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.parser.Parser;
-import com.datatorrent.lib.util.KeyValPair;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/LogParser.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/LogParser.java
index c9e06ba..9ba4ca6 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/LogParser.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/LogParser.java
@@ -23,6 +23,9 @@
 import org.codehaus.jettison.json.JSONException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.parser.Parser;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.commons.lang3.CharEncoding;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.classification.InterfaceStability;
@@ -30,8 +33,6 @@
 import com.datatorrent.api.AutoMetric;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.parser.Parser;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Operator that parses a log string tuple against the
@@ -203,7 +204,8 @@
    * Get log schema details (field, regex etc)
    * @return logSchemaDetails
    */
-  public LogSchemaDetails getLogSchemaDetails() {
+  public LogSchemaDetails getLogSchemaDetails()
+  {
     return logSchemaDetails;
   }
 
@@ -211,7 +213,8 @@
    * Set log schema details like (fields and regex)
    * @param logSchemaDetails
    */
-  public void setLogSchemaDetails(LogSchemaDetails logSchemaDetails) {
+  public void setLogSchemaDetails(LogSchemaDetails logSchemaDetails)
+  {
     this.logSchemaDetails = logSchemaDetails;
   }
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/LogSchemaDetails.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/LogSchemaDetails.java
index 1bf2ec4..7cb9148 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/LogSchemaDetails.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/LogSchemaDetails.java
@@ -18,16 +18,16 @@
  */
 package org.apache.apex.malhar.contrib.parser;
 
-import org.codehaus.jettison.json.JSONArray;
-import org.codehaus.jettison.json.JSONException;
-import org.codehaus.jettison.json.JSONObject;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import java.io.IOException;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
+import org.codehaus.jettison.json.JSONArray;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * <p>
@@ -87,7 +87,7 @@
     JSONObject jsonObject = new JSONObject(json);
     JSONArray fieldArray = jsonObject.getJSONArray("fields");
 
-    for(int i = 0; i < fieldArray.length(); i++) {
+    for (int i = 0; i < fieldArray.length(); i++) {
       JSONObject obj = fieldArray.getJSONObject(i);
       Field field = new Field(obj.getString("field"), obj.getString("regex"));
       this.fields.add(field);
@@ -101,7 +101,7 @@
   public void createPattern()
   {
     StringBuffer pattern = new StringBuffer();
-    for(Field field: this.getFields()) {
+    for (Field field: this.getFields()) {
       pattern.append(field.getRegex()).append(" ");
     }
     logger.info("Created pattern for parsing the log {}", pattern.toString().trim());
@@ -123,7 +123,7 @@
       if (m.find()) {
         int i = 1;
         logObject  = new JSONObject();
-        for(String field: this.getFieldNames()) {
+        for (String field: this.getFieldNames()) {
           if (i > count) {
             break;
           }
@@ -228,7 +228,7 @@
     @Override
     public String toString()
     {
-      return "Fields [name=" + name + ", regex=" + regex +"]";
+      return "Fields [name=" + name + ", regex=" + regex + "]";
     }
   }
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/RegexParser.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/RegexParser.java
index a68c928..2fe5010 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/RegexParser.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/RegexParser.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
@@ -29,6 +29,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.parser.Parser;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.beanutils.ConversionException;
 import org.apache.commons.beanutils.ConvertUtils;
@@ -40,8 +42,6 @@
 import com.google.common.annotations.VisibleForTesting;
 
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.parser.Parser;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Operator parses tuple based on regex pattern and populates POJO matching the user defined schema <br>
@@ -117,13 +117,13 @@
         Object object = ctor.newInstance();
 
         if (matcher.find()) {
-          for (int i = 0; i <= matcher.groupCount()-1; i++) {
+          for (int i = 0; i <= matcher.groupCount() - 1; i++) {
             if (delimitedParserSchema.getFields().get(i).getType() == DelimitedSchema.FieldType.DATE) {
               DateTimeConverter dtConverter = new DateConverter();
               dtConverter.setPattern((String)delimitedParserSchema.getFields().get(i).getConstraints().get(DelimitedSchema.DATE_FORMAT));
               ConvertUtils.register(dtConverter, Date.class);
             }
-            BeanUtils.setProperty(object, delimitedParserSchema.getFields().get(i).getName(), matcher.group(i+1));
+            BeanUtils.setProperty(object, delimitedParserSchema.getFields().get(i).getName(), matcher.group(i + 1));
           }
           patternMatched = true;
         }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/Schema.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/Schema.java
index 727db7f..2f0b3e1 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/Schema.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/Schema.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
 import java.util.Collections;
 import java.util.LinkedList;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/StreamingJsonParser.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/StreamingJsonParser.java
index 1f8dc5c..0792612 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/StreamingJsonParser.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/StreamingJsonParser.java
@@ -31,6 +31,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.parser.Parser;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 
@@ -40,11 +45,6 @@
 import com.datatorrent.api.Context.PortContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.parser.Parser;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.FieldInfo.SupportType;
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.PojoUtils;
 
 /**
  * Operator that parses a JSON string tuple and emits a POJO on the output port
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/package-info.java
index cb54b65..22c2cd4 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/r/REngineConnectable.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/r/REngineConnectable.java
index 3de0055..63622cf 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/r/REngineConnectable.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/r/REngineConnectable.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 import java.io.IOException;
 
@@ -25,7 +25,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.db.Connectable;
+import org.apache.apex.malhar.lib.db.Connectable;
 
 import com.datatorrent.netlet.util.DTThrowable;
 
@@ -44,7 +44,7 @@
   // Parameters to R while creating workspace. Default as
   // --vanilla => Combine --no-save, --no-restore, --no-site-file, --no-init-file and --no-environ
   // Read man page of R for details.
-  String[] args = { "--vanilla" };
+  String[] args = {"--vanilla"};
 
   // No callbacks used, can use REngineStdOutput
   // (http://www.rforge.net/org/doc/org/rosuda/REngine/REngineStdOutput.html)
@@ -58,7 +58,7 @@
   /*
    * (non-Javadoc)
    *
-   * @see com.datatorrent.lib.db.Connectable#connect()
+   * @see org.apache.apex.malhar.lib.db.Connectable#connect()
    */
   @Override
   public void connect() throws IOException
@@ -83,7 +83,7 @@
   /*
    * (non-Javadoc)
    *
-   * @see com.datatorrent.lib.db.Connectable#disconnect()
+   * @see org.apache.apex.malhar.lib.db.Connectable#disconnect()
    */
   @Override
   public void disconnect() throws IOException
@@ -96,7 +96,7 @@
   /*
    * (non-Javadoc)
    *
-   * @see com.datatorrent.lib.db.Connectable#isConnected()
+   * @see org.apache.apex.malhar.lib.db.Connectable#isConnected()
    */
   @Override
   public boolean isConnected()
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RMax.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RMax.java
index 1a965d3..ecdec86 100755
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RMax.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RMax.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -26,7 +26,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.util.BaseNumberValueOperator;
+import org.apache.apex.malhar.lib.util.BaseNumberValueOperator;
 
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultInputPort;
@@ -61,7 +61,8 @@
   private static Logger log = LoggerFactory.getLogger(RMax.class);
   REngineConnectable connectable;
 
-  public final transient DefaultInputPort<Number> data = new DefaultInputPort<Number>() {
+  public final transient DefaultInputPort<Number> data = new DefaultInputPort<Number>()
+  {
     /**
      * Adds the tuple to the numList
      */
@@ -82,7 +83,8 @@
     numList.add(tuple);
   }
 
-  public final transient DefaultOutputPort<Number> max = new DefaultOutputPort<Number>() {
+  public final transient DefaultOutputPort<Number> max = new DefaultOutputPort<Number>()
+  {
     @Override
     public Unifier<Number> getUnifier()
     {
@@ -132,9 +134,9 @@
   @Override
   public void endWindow()
   {
-
-    if (numList.size() == 0)
+    if (numList.size() == 0) {
       return;
+    }
 
     double[] values = new double[numList.size()];
     for (int i = 0; i < numList.size(); i++) {
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RMin.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RMin.java
index 784c8a3..a072cf4 100755
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RMin.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RMin.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -26,7 +26,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.util.BaseNumberValueOperator;
+import org.apache.apex.malhar.lib.util.BaseNumberValueOperator;
 
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultInputPort;
@@ -61,7 +61,8 @@
 
   private static Logger log = LoggerFactory.getLogger(RMin.class);
 
-  public final transient DefaultInputPort<Number> data = new DefaultInputPort<Number>() {
+  public final transient DefaultInputPort<Number> data = new DefaultInputPort<Number>()
+  {
     /**
      * Each tuple is compared to the min and a new min (if so) is stored.
      */
@@ -82,7 +83,8 @@
     numList.add(tuple);
   }
 
-  public final transient DefaultOutputPort<Number> min = new DefaultOutputPort<Number>() {
+  public final transient DefaultOutputPort<Number> min = new DefaultOutputPort<Number>()
+  {
     @Override
     public Unifier<Number> getUnifier()
     {
@@ -129,9 +131,9 @@
   @Override
   public void endWindow()
   {
-
-    if (numList.size() == 0)
+    if (numList.size() == 0) {
       return;
+    }
 
     double[] values = new double[numList.size()];
     for (int i = 0; i < numList.size(); i++) {
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RScript.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RScript.java
index e171336..764a80c 100755
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RScript.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RScript.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -25,11 +25,15 @@
 
 import javax.validation.constraints.NotNull;
 
-import org.rosuda.REngine.*;
+import org.rosuda.REngine.REXP;
+import org.rosuda.REngine.REXPDouble;
+import org.rosuda.REngine.REXPInteger;
+import org.rosuda.REngine.REXPLogical;
+import org.rosuda.REngine.REXPString;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.script.ScriptOperator;
+import org.apache.apex.malhar.lib.script.ScriptOperator;
 
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultOutputPort;
@@ -89,7 +93,8 @@
   @SuppressWarnings("unused")
   private static final long serialVersionUID = 201401161205L;
 
-  public enum REXP_TYPE {
+  public enum REXP_TYPE
+  {
     REXP_INT(1), REXP_DOUBLE(2), REXP_STR(3), REXP_BOOL(6), REXP_ARRAY_INT(32), REXP_ARRAY_DOUBLE(33), REXP_ARRAY_STR(34), REXP_ARRAY_BOOL(36);
 
     private int value;
@@ -264,7 +269,7 @@
     try {
       connectable = new REngineConnectable();
       connectable.connect();
-      REXP result = connectable.getRengine().parseAndEval(super.script);
+      connectable.getRengine().parseAndEval(super.script);
     } catch (Exception e) {
       log.error("Exception: ", e);
       DTThrowable.rethrow(e);
@@ -329,40 +334,40 @@
         Object value = entry.getValue();
 
         switch (argTypeMap.get(key)) {
-        case REXP_INT:
-          int[] iArr = new int[1];
-          iArr[0] = (Integer) value;
-          connectable.getRengine().assign(key, new REXPInteger(iArr));
-          break;
-        case REXP_DOUBLE:
-          double[] dArr = new double[1];
-          dArr[0] = (Double) value;
-          connectable.getRengine().assign(key, new REXPDouble(dArr));
-          break;
-        case REXP_STR:
-          String[] sArr = new String[1];
-          sArr[0] = (String) value;
-          connectable.getRengine().assign(key, new REXPString(sArr));
-          break;
-        case REXP_BOOL:
-          Boolean[] bArr = new Boolean[1];
-          bArr[0] = (Boolean) value;
-          connectable.getRengine().assign(key, new REXPLogical(bArr[0]));
-          break;
-        case REXP_ARRAY_INT:
-          connectable.getRengine().assign(key, new REXPInteger((int[]) value));
-          break;
-        case REXP_ARRAY_DOUBLE:
-          connectable.getRengine().assign(key, new REXPDouble((double[]) value));
-          break;
-        case REXP_ARRAY_STR:
-          connectable.getRengine().assign(key, new REXPString((String[]) value));
-          break;
-        case REXP_ARRAY_BOOL:
-          connectable.getRengine().assign(key, new REXPLogical((boolean[]) value));
-          break;
-        default:
-          throw new IllegalArgumentException("Unsupported data type ... ");
+          case REXP_INT:
+            int[] iArr = new int[1];
+            iArr[0] = (Integer)value;
+            connectable.getRengine().assign(key, new REXPInteger(iArr));
+            break;
+          case REXP_DOUBLE:
+            double[] dArr = new double[1];
+            dArr[0] = (Double)value;
+            connectable.getRengine().assign(key, new REXPDouble(dArr));
+            break;
+          case REXP_STR:
+            String[] sArr = new String[1];
+            sArr[0] = (String)value;
+            connectable.getRengine().assign(key, new REXPString(sArr));
+            break;
+          case REXP_BOOL:
+            Boolean[] bArr = new Boolean[1];
+            bArr[0] = (Boolean)value;
+            connectable.getRengine().assign(key, new REXPLogical(bArr[0]));
+            break;
+          case REXP_ARRAY_INT:
+            connectable.getRengine().assign(key, new REXPInteger((int[])value));
+            break;
+          case REXP_ARRAY_DOUBLE:
+            connectable.getRengine().assign(key, new REXPDouble((double[])value));
+            break;
+          case REXP_ARRAY_STR:
+            connectable.getRengine().assign(key, new REXPString((String[])value));
+            break;
+          case REXP_ARRAY_BOOL:
+            connectable.getRengine().assign(key, new REXPLogical((boolean[])value));
+            break;
+          default:
+            throw new IllegalArgumentException("Unsupported data type ... ");
         }
       }
 
@@ -416,12 +421,12 @@
         if (len > 1) {
           Boolean[] bAList = new Boolean[len];
           for (int i = 0; i < len; i++) {
-            bAList[i] = ((REXPLogical) retVal).isTRUE()[i];
+            bAList[i] = ((REXPLogical)retVal).isTRUE()[i];
           }
 
           boolArrayOutput.emit(bAList);
         } else {
-          bData = (((REXPLogical) retVal).isTRUE());
+          bData = (((REXPLogical)retVal).isTRUE());
           boolOutput.emit(bData[0]);
         }
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RStandardDeviation.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RStandardDeviation.java
index 1bab109..c79e30d 100755
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RStandardDeviation.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/r/RStandardDeviation.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -26,12 +26,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
+import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
@@ -65,7 +65,8 @@
   /**
    * Input data port.
    */
-  public final transient DefaultInputPort<Number> data = new DefaultInputPort<Number>() {
+  public final transient DefaultInputPort<Number> data = new DefaultInputPort<Number>()
+  {
     /**
      * Computes sum and count with each tuple
      */
@@ -123,10 +124,9 @@
   @Override
   public void endWindow()
   {
-
-    if (values.size() == 0)
+    if (values.size() == 0) {
       return;
-
+    }
     double[] vector = new double[values.size()];
     for (int i = 0; i < values.size(); i++) {
       vector[i] = values.get(i).doubleValue();
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/r/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/r/package-info.java
index 4c0730c..8869d49 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/r/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/r/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractRabbitMQInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractRabbitMQInputOperator.java
index 672122c..1458241 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractRabbitMQInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractRabbitMQInputOperator.java
@@ -16,13 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.rabbitmq;
-
-import com.datatorrent.api.*;
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.netlet.util.DTThrowable;
-import com.rabbitmq.client.*;
+package org.apache.apex.malhar.contrib.rabbitmq;
 
 import java.io.IOException;
 import java.util.HashMap;
@@ -37,8 +31,22 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 
+import com.rabbitmq.client.AMQP;
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.Connection;
+import com.rabbitmq.client.ConnectionFactory;
+import com.rabbitmq.client.DefaultConsumer;
+import com.rabbitmq.client.Envelope;
+import com.rabbitmq.client.ShutdownSignalException;
+
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.api.InputOperator;
+import com.datatorrent.api.Operator;
+import com.datatorrent.netlet.util.DTThrowable;
+
 /**
  * This is the base implementation of a RabbitMQ input operator.&nbsp;
  * Subclasses should implement the methods which convert RabbitMQ messages to tuples.
@@ -93,7 +101,7 @@
 //  QueueingConsumer consumer = null;
 
   private static final int DEFAULT_BLAST_SIZE = 1000;
-  private static final int DEFAULT_BUFFER_SIZE = 1024*1024;
+  private static final int DEFAULT_BUFFER_SIZE = 1024 * 1024;
   private int tuple_blast = DEFAULT_BLAST_SIZE;
   protected int bufferSize = DEFAULT_BUFFER_SIZE;
 
@@ -105,8 +113,8 @@
   protected transient ArrayBlockingQueue<KeyValPair<Long,byte[]>> holdingBuffer;
   private WindowDataManager windowDataManager;
   protected final transient Map<Long, byte[]> currentWindowRecoveryState;
-  private transient final Set<Long> pendingAck;
-  private transient final Set<Long> recoveredTags;
+  private final transient Set<Long> pendingAck;
+  private final transient Set<Long> recoveredTags;
   private transient long currentWindowId;
   private transient int operatorContextId;
 
@@ -123,7 +131,7 @@
  * define a consumer which can asynchronously receive data,
  * and added to holdingBuffer
  */
- public class TracingConsumer extends DefaultConsumer
+  public class TracingConsumer extends DefaultConsumer
   {
     public TracingConsumer(Channel ch)
     {
@@ -155,9 +163,8 @@
     public void handleDelivery(String consumer_Tag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException
     {
       long tag = envelope.getDeliveryTag();
-      if(envelope.isRedeliver() && (recoveredTags.contains(tag) || pendingAck.contains(tag)))
-      {
-        if(recoveredTags.contains(tag)) {
+      if (envelope.isRedeliver() && (recoveredTags.contains(tag) || pendingAck.contains(tag))) {
+        if (recoveredTags.contains(tag)) {
           pendingAck.add(tag);
         }
         return;
@@ -196,7 +203,8 @@
   }
 
   @SuppressWarnings("unchecked")
-  private void replay(long windowId) {
+  private void replay(long windowId)
+  {
     Map<Long, byte[]> recoveredData;
     try {
       recoveredData = (Map<Long, byte[]>)this.windowDataManager.retrieve(windowId);
@@ -263,7 +271,7 @@
     try {
       connFactory = new ConnectionFactory();
       connFactory.setHost(host);
-      if (port != 0){
+      if (port != 0) {
         connFactory.setPort(port);
       }
 
@@ -272,7 +280,7 @@
 
       channel.exchangeDeclare(exchange, exchangeType);
       boolean resetQueueName = false;
-      if (queueName == null){
+      if (queueName == null) {
         // unique queuename is generated
         // used in case of fanout exchange
         queueName = channel.queueDeclare().getQueue();
@@ -289,12 +297,10 @@
 //      channel.basicConsume(queueName, true, consumer);
       tracingConsumer = new TracingConsumer(channel);
       cTag = channel.basicConsume(queueName, false, tracingConsumer);
-      if(resetQueueName)
-      {
+      if (resetQueueName) {
         queueName = null;
       }
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       throw new RuntimeException("Connection Failure", ex);
     }
   }
@@ -305,8 +311,7 @@
     try {
       channel.close();
       connection.close();
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       logger.debug(ex.toString());
     }
   }
@@ -326,8 +331,7 @@
   {
     try {
       windowDataManager.committed(windowId);
-    }
-    catch (IOException e) {
+    } catch (IOException e) {
       throw new RuntimeException("committing", e);
     }
   }
@@ -397,14 +401,14 @@
     this.routingKey = routingKey;
   }
 
-  public WindowDataManager getWindowDataManager() {
+  public WindowDataManager getWindowDataManager()
+  {
     return windowDataManager;
   }
 
-  public void setWindowDataManager(WindowDataManager windowDataManager) {
+  public void setWindowDataManager(WindowDataManager windowDataManager)
+  {
     this.windowDataManager = windowDataManager;
   }
 
-
-
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractRabbitMQOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractRabbitMQOutputOperator.java
index 2bbb903..e20975f 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractRabbitMQOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractRabbitMQOutputOperator.java
@@ -16,15 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.rabbitmq;
-
-import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.api.Context.OperatorContext;
-import com.rabbitmq.client.Channel;
-import com.rabbitmq.client.Connection;
-import com.rabbitmq.client.ConnectionFactory;
-import com.rabbitmq.client.QueueingConsumer;
+package org.apache.apex.malhar.contrib.rabbitmq;
 
 import java.io.IOException;
 
@@ -33,6 +25,15 @@
 
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.Connection;
+import com.rabbitmq.client.ConnectionFactory;
+import com.rabbitmq.client.QueueingConsumer;
+
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.common.util.BaseOperator;
+import com.datatorrent.netlet.util.DTThrowable;
+
 /**
  * This is the base implementation of a RabbitMQ output operator.&nbsp;
  * A concrete operator should be created from this skeleton implementation.
@@ -73,7 +74,7 @@
   transient Connection connection = null;
   transient Channel channel = null;
   transient String exchange = "testEx";
-  transient String queueName="testQ";
+  transient String queueName = "testQ";
 
   private WindowDataManager windowDataManager;
   private transient long currentWindowId;
@@ -98,8 +99,7 @@
 
       this.windowDataManager.setup(context);
 
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       logger.debug(ex.toString());
       DTThrowable.rethrow(ex);
     }
@@ -113,9 +113,7 @@
     if (windowId <= largestRecoveryWindowId) {
       // Do not resend already sent tuples
       skipProcessingTuple = true;
-    }
-    else
-    {
+    } else {
       skipProcessingTuple = false;
     }
   }
@@ -126,8 +124,7 @@
   @Override
   public void endWindow()
   {
-    if(currentWindowId < largestRecoveryWindowId)
-    {
+    if (currentWindowId < largestRecoveryWindowId) {
       // ignore
       return;
     }
@@ -138,14 +135,16 @@
     }
   }
 
-
-  public void setQueueName(String queueName) {
+  public void setQueueName(String queueName)
+  {
     this.queueName = queueName;
   }
 
-  public void setExchange(String exchange) {
+  public void setExchange(String exchange)
+  {
     this.exchange = exchange;
   }
+
   @Override
   public void teardown()
   {
@@ -153,17 +152,18 @@
       channel.close();
       connection.close();
       this.windowDataManager.teardown();
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       logger.debug(ex.toString());
     }
   }
 
-  public WindowDataManager getWindowDataManager() {
+  public WindowDataManager getWindowDataManager()
+  {
     return windowDataManager;
   }
 
-  public void setWindowDataManager(WindowDataManager windowDataManager) {
+  public void setWindowDataManager(WindowDataManager windowDataManager)
+  {
     this.windowDataManager = windowDataManager;
   }
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractSinglePortRabbitMQInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractSinglePortRabbitMQInputOperator.java
index 8bb800d..557ff8f 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractSinglePortRabbitMQInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractSinglePortRabbitMQInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.rabbitmq;
+package org.apache.apex.malhar.contrib.rabbitmq;
 
 import com.datatorrent.api.DefaultOutputPort;
 
@@ -57,7 +57,7 @@
   /**
    * This is the output port on which tuples extracted from RabbitMQ messages are emitted.
    */
-  final public transient DefaultOutputPort<T> outputPort = new DefaultOutputPort<T>();
+  public final transient DefaultOutputPort<T> outputPort = new DefaultOutputPort<T>();
 
   /**
    * Any concrete class derived from AbstractSinglePortRabbitMQInputOperator has to implement this method
@@ -67,10 +67,11 @@
    *
    * @param message
    */
-    public abstract T getTuple(byte[] message);
+  public abstract T getTuple(byte[] message);
 
-    @Override
-    public void emitTuple(byte[] message) {
-      outputPort.emit(getTuple(message));
-    }
+  @Override
+  public void emitTuple(byte[] message)
+  {
+    outputPort.emit(getTuple(message));
+  }
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractSinglePortRabbitMQOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractSinglePortRabbitMQOutputOperator.java
index b485291..8291b53 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractSinglePortRabbitMQOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/AbstractSinglePortRabbitMQOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.rabbitmq;
+package org.apache.apex.malhar.contrib.rabbitmq;
 
 import com.datatorrent.api.DefaultInputPort;
 
@@ -63,8 +63,7 @@
     @Override
     public void process(T tuple)
     {
-      if(!skipProcessingTuple)
-      {
+      if (!skipProcessingTuple) {
         processTuple(tuple); // This is an abstract call
       }
     }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQInputOperator.java
index 3efa098..5ef43b3 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.rabbitmq;
+package org.apache.apex.malhar.contrib.rabbitmq;
 
 /**
  * Input adapter operator which consumes byte array data from the RabbitMQ and outputs byte array.
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQOutputOperator.java
index 1ddd9d4..d6d0dba 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.rabbitmq;
+package org.apache.apex.malhar.contrib.rabbitmq;
 
 import java.io.IOException;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/package-info.java
index 7ed2a6f..f2b3cd2 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/rabbitmq/package-info.java
@@ -20,4 +20,4 @@
  * RabbitMQ operators and utilities.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.rabbitmq;
+package org.apache.apex.malhar.contrib.rabbitmq;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/AbstractRedisAggregateOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/AbstractRedisAggregateOutputOperator.java
index 7851ddc..a1ee792 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/AbstractRedisAggregateOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/AbstractRedisAggregateOutputOperator.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
-import com.datatorrent.lib.db.AbstractAggregateTransactionableKeyValueStoreOutputOperator;
+import org.apache.apex.malhar.lib.db.AbstractAggregateTransactionableKeyValueStoreOutputOperator;
 
 /**
  * This is the base implementation of a Redis aggregate output operator.
@@ -31,7 +31,7 @@
  * @since 0.9.3
  */
 public abstract class AbstractRedisAggregateOutputOperator<T>
-        extends AbstractAggregateTransactionableKeyValueStoreOutputOperator<T, RedisStore>
+    extends AbstractAggregateTransactionableKeyValueStoreOutputOperator<T, RedisStore>
 {
   public AbstractRedisAggregateOutputOperator()
   {
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/AbstractRedisInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/AbstractRedisInputOperator.java
index 092a3c6..788e3dc 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/AbstractRedisInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/AbstractRedisInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
 import java.io.IOException;
 import java.io.Serializable;
@@ -25,17 +25,17 @@
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.db.AbstractKeyValueStoreInputOperator;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.api.Operator.CheckpointNotificationListener;
+import com.datatorrent.netlet.util.DTThrowable;
+
 import redis.clients.jedis.ScanParams;
 import redis.clients.jedis.ScanResult;
 
-import com.datatorrent.api.Operator.CheckpointNotificationListener;
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.lib.db.AbstractKeyValueStoreInputOperator;
-
 /**
  * This is the base implementation of a Redis input operator.
  *
@@ -76,7 +76,8 @@
    */
   public static class RecoveryState implements Serializable
   {
-    public Integer scanOffsetAtBeginWindow, numberOfScanCallsInWindow;
+    public Integer scanOffsetAtBeginWindow;
+    public Integer numberOfScanCallsInWindow;
   }
 
   public AbstractRedisInputOperator()
@@ -107,11 +108,11 @@
       if (!skipOffsetRecovery) {
         // Begin offset for this window is recovery offset stored for the last
         // window
-        RecoveryState recoveryStateForLastWindow = (RecoveryState) getWindowDataManager().retrieve(windowId - 1);
+        RecoveryState recoveryStateForLastWindow = (RecoveryState)getWindowDataManager().retrieve(windowId - 1);
         recoveryState.scanOffsetAtBeginWindow = recoveryStateForLastWindow.scanOffsetAtBeginWindow;
       }
       skipOffsetRecovery = false;
-      RecoveryState recoveryStateForCurrentWindow = (RecoveryState) getWindowDataManager().retrieve(windowId);
+      RecoveryState recoveryStateForCurrentWindow = (RecoveryState)getWindowDataManager().retrieve(windowId);
       recoveryState.numberOfScanCallsInWindow = recoveryStateForCurrentWindow.numberOfScanCallsInWindow;
       if (recoveryState.scanOffsetAtBeginWindow != null) {
         scanOffset = recoveryState.scanOffsetAtBeginWindow;
@@ -222,7 +223,7 @@
     processTuples();
   }
 
-  abstract public void processTuples();
+  public abstract void processTuples();
 
   @Override
   public void beforeCheckpoint(long windowId)
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/LettuceStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/LettuceStore.java
index 467a52c..1a6c447 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/LettuceStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/LettuceStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
 import java.io.IOException;
 import java.util.List;
@@ -25,12 +25,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.TransactionableKeyValueStore;
+
 import com.google.common.collect.Maps;
 import com.lambdaworks.redis.RedisClient;
 import com.lambdaworks.redis.RedisConnection;
 
-import com.datatorrent.lib.db.TransactionableKeyValueStore;
-
 /**
  * Provides the implementation of a Redis store using Lettuce java client. <br/>
  *
@@ -197,7 +197,7 @@
     if (isInTransaction()) {
       throw new RuntimeException("Cannot call get when in redis transaction");
     }
-    return (List<Object>) (List<?>) connection.mget(keys.toArray(new String[]{}));
+    return (List<Object>)(List<?>)connection.mget(keys.toArray(new String[]{}));
   }
 
   @SuppressWarnings({"unchecked", "rawtypes"})
@@ -205,9 +205,8 @@
   public void put(Object key, Object value)
   {
     if (value instanceof Map) {
-      connection.hmset(key.toString(), (Map) value);
-    }
-    else {
+      connection.hmset(key.toString(), (Map)value);
+    } else {
       connection.set(key.toString(), value.toString());
     }
     if (keyExpiryTime != -1) {
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/NumberSummation.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/NumberSummation.java
index ee8d865..95f10c2 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/NumberSummation.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/NumberSummation.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -42,17 +42,13 @@
   {
     if (o == null) {
       return null;
-    }
-    else if (o instanceof MutableDouble || o instanceof MutableLong) {
+    } else if (o instanceof MutableDouble || o instanceof MutableLong) {
       return (Number)o;
-    }
-    else if (o instanceof Double || o instanceof Float) {
+    } else if (o instanceof Double || o instanceof Float) {
       return new MutableDouble((Number)o);
-    }
-    else if (o instanceof Number) {
+    } else if (o instanceof Number) {
       return new MutableLong((Number)o);
-    }
-    else {
+    } else {
       return new MutableDouble(o.toString());
     }
   }
@@ -69,17 +65,14 @@
           Object hvalue = entry1.getValue();
           if (hvalue instanceof Number) {
             operator.getStore().hincrByFloat(key.toString(), field, ((Number)hvalue).doubleValue());
-          }
-          else {
+          } else {
             operator.getStore().hincrByFloat(key.toString(), field, Double.parseDouble(hvalue.toString()));
           }
         }
-      }
-      else {
+      } else {
         if (value instanceof Number) {
           operator.getStore().incrByFloat(key.toString(), ((Number)value).doubleValue());
-        }
-        else {
+        } else {
           operator.getStore().incrByFloat(key.toString(), Double.parseDouble(value.toString()));
         }
       }
@@ -106,31 +99,24 @@
         Number oldVal = (Number)map.get(field);
         if (oldVal == null) {
           map.put(field, convertToNumber(entry1.getValue()));
-        }
-        else if (oldVal instanceof MutableDouble) {
+        } else if (oldVal instanceof MutableDouble) {
           ((MutableDouble)oldVal).add(convertToNumber(entry1.getValue()));
-        }
-        else if (oldVal instanceof MutableLong) {
+        } else if (oldVal instanceof MutableLong) {
           ((MutableLong)oldVal).add(convertToNumber(entry1.getValue()));
-        }
-        else {
+        } else {
           throw new RuntimeException("Values of unexpected type in data map value field type. Expecting MutableLong or MutableDouble");
         }
       }
-    }
-    else {
+    } else {
       Number oldVal = convertToNumber(dataMap.get(key));
       if (oldVal == null) {
         dataMap.put(key, convertToNumber(value));
-      }
-      else {
+      } else {
         if (oldVal instanceof MutableDouble) {
           ((MutableDouble)oldVal).add(convertToNumber(value));
-        }
-        else if (oldVal instanceof MutableLong) {
+        } else if (oldVal instanceof MutableLong) {
           ((MutableLong)oldVal).add(convertToNumber(value));
-        }
-        else {
+        } else {
           // should not get here
           throw new RuntimeException("Values of unexpected type in data map value type. Expecting MutableLong or MutableDouble");
         }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisKeyValPairOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisKeyValPairOutputOperator.java
index b7c5ecb..22f18b9 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisKeyValPairOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisKeyValPairOutputOperator.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
-import com.datatorrent.lib.util.KeyValPair;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 /**
  * This is a Redis output operator, which takes key value pairs and writes them out to Redis.
  * <p>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisKeyValueInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisKeyValueInputOperator.java
index ae8ef5c..7048243 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisKeyValueInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisKeyValueInputOperator.java
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
  * This is the an implementation of a Redis input operator for fetching
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisMapAsValueInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisMapAsValueInputOperator.java
index 156252b..9085f6b 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisMapAsValueInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisMapAsValueInputOperator.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
 import java.util.Map;
 
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
  * This is the an implementation of a Redis input operator It takes in keys to
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisMapOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisMapOutputOperator.java
index d8e5cb1..751faed 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisMapOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisMapOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisNumberSummationKeyValPairOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisNumberSummationKeyValPairOutputOperator.java
index 9e348f1..5dab257 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisNumberSummationKeyValPairOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisNumberSummationKeyValPairOutputOperator.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
-import com.datatorrent.lib.util.KeyValPair;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 /**
  * This class provides an output adapter that takes a key value pair.&nbsp;
  * If the values in the key value pairs are maps, the operator will increment the values in the key value pair in redis.&nbsp;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisNumberSummationMapOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisNumberSummationMapOutputOperator.java
index 29ed559..161d077 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisNumberSummationMapOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisNumberSummationMapOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisPOJOInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisPOJOInputOperator.java
index 3596391..487197b 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisPOJOInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisPOJOInputOperator.java
@@ -16,26 +16,26 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Setter;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterBoolean;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterDouble;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterFloat;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterInt;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterLong;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterShort;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.FieldInfo.SupportType;
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Setter;
-import com.datatorrent.lib.util.PojoUtils.SetterBoolean;
-import com.datatorrent.lib.util.PojoUtils.SetterDouble;
-import com.datatorrent.lib.util.PojoUtils.SetterFloat;
-import com.datatorrent.lib.util.PojoUtils.SetterInt;
-import com.datatorrent.lib.util.PojoUtils.SetterLong;
-import com.datatorrent.lib.util.PojoUtils.SetterShort;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
@@ -81,25 +81,25 @@
           String value = tuple.get(columnName);
           switch (type) {
             case STRING:
-              ((Setter<Object, String>) setters.get(i)).set(mappedObject, value);
+              ((Setter<Object, String>)setters.get(i)).set(mappedObject, value);
               break;
             case BOOLEAN:
-              ((SetterBoolean) setters.get(i)).set(mappedObject, Boolean.parseBoolean(value));
+              ((SetterBoolean)setters.get(i)).set(mappedObject, Boolean.parseBoolean(value));
               break;
             case SHORT:
-              ((SetterShort) setters.get(i)).set(mappedObject, Short.parseShort(value));
+              ((SetterShort)setters.get(i)).set(mappedObject, Short.parseShort(value));
               break;
             case INTEGER:
-              ((SetterInt) setters.get(i)).set(mappedObject, Integer.parseInt(value));
+              ((SetterInt)setters.get(i)).set(mappedObject, Integer.parseInt(value));
               break;
             case LONG:
-              ((SetterLong) setters.get(i)).set(mappedObject, Long.parseLong(value));
+              ((SetterLong)setters.get(i)).set(mappedObject, Long.parseLong(value));
               break;
             case FLOAT:
-              ((SetterFloat) setters.get(i)).set(mappedObject, Float.parseFloat(value));
+              ((SetterFloat)setters.get(i)).set(mappedObject, Float.parseFloat(value));
               break;
             case DOUBLE:
-              ((SetterDouble) setters.get(i)).set(mappedObject, Double.parseDouble(value));
+              ((SetterDouble)setters.get(i)).set(mappedObject, Double.parseDouble(value));
               break;
             default:
               break;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisPOJOOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisPOJOOutputOperator.java
index 2ef65d0..d97d58c 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisPOJOOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisPOJOOutputOperator.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
 
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.FieldInfo.SupportType;
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
 
 /**
  * This is a Redis output operator, which takes a Key and corresponding Plain
@@ -80,7 +80,7 @@
       final String columnName = dataColumns.get(i).getColumnName();
 
       if (i < getters.size()) {
-        Getter<Object, Object> obj = (Getter<Object, Object>) (getters.get(i));
+        Getter<Object, Object> obj = (Getter<Object, Object>)(getters.get(i));
 
         Object value = obj.get(tuple);
         mappedObject.put(columnName, value.toString());
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisStore.java
index b540779..bde085f 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/RedisStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -25,13 +25,14 @@
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.db.TransactionableKeyValueStore;
+
 import redis.clients.jedis.Jedis;
 import redis.clients.jedis.ScanParams;
 import redis.clients.jedis.ScanResult;
 import redis.clients.jedis.Transaction;
 
-import com.datatorrent.lib.db.TransactionableKeyValueStore;
-
 /**
  * Provides the implementation of a Redis store.
  *
@@ -220,7 +221,7 @@
     if (isInTransaction()) {
       throw new RuntimeException("Cannot call get when in redis transaction");
     }
-    return (List<Object>) (List<?>) jedis.mget(keys.toArray(new String[]{}));
+    return (List<Object>)(List<?>)jedis.mget(keys.toArray(new String[]{}));
   }
 
   @SuppressWarnings({"unchecked", "rawtypes"})
@@ -229,20 +230,17 @@
   {
     if (isInTransaction()) {
       if (value instanceof Map) {
-        transaction.hmset(key.toString(), (Map) value);
-      }
-      else {
+        transaction.hmset(key.toString(), (Map)value);
+      } else {
         transaction.set(key.toString(), value.toString());
       }
       if (keyExpiryTime != -1) {
         transaction.expire(key.toString(), keyExpiryTime);
       }
-    }
-    else {
+    } else {
       if (value instanceof Map) {
-        jedis.hmset(key.toString(), (Map) value);
-      }
-      else {
+        jedis.hmset(key.toString(), (Map)value);
+      } else {
         jedis.set(key.toString(), value.toString());
       }
       if (keyExpiryTime != -1) {
@@ -263,8 +261,7 @@
     }
     if (isInTransaction()) {
       transaction.mset(params.toArray(new String[]{}));
-    }
-    else {
+    } else {
       jedis.mset(params.toArray(new String[]{}));
     }
   }
@@ -274,8 +271,7 @@
   {
     if (isInTransaction()) {
       transaction.del(key.toString());
-    }
-    else {
+    } else {
       jedis.del(key.toString());
     }
   }
@@ -299,8 +295,7 @@
       if (keyExpiryTime != -1) {
         transaction.expire(key, keyExpiryTime);
       }
-    }
-    else {
+    } else {
       jedis.hincrByFloat(key, field, doubleValue);
       if (keyExpiryTime != -1) {
         jedis.expire(key, keyExpiryTime);
@@ -321,8 +316,7 @@
       if (keyExpiryTime != -1) {
         transaction.expire(key, keyExpiryTime);
       }
-    }
-    else {
+    } else {
       jedis.incrByFloat(key, doubleValue);
       if (keyExpiryTime != -1) {
         jedis.expire(key, keyExpiryTime);
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/package-info.java
index d2f7a91..5c7649b 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/redis/package-info.java
@@ -20,4 +20,4 @@
  * Redis operators and utilities.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/RomeFeedEntry.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/RomeFeedEntry.java
index db7784a..4fb4bb6 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/RomeFeedEntry.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/RomeFeedEntry.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.romesyndication;
+package org.apache.apex.malhar.contrib.romesyndication;
 
 import java.io.Serializable;
 
+import org.apache.apex.malhar.lib.codec.KryoJdkContainer;
+
 import com.esotericsoftware.kryo.DefaultSerializer;
 import com.esotericsoftware.kryo.serializers.JavaSerializer;
 import com.sun.syndication.feed.synd.SyndEntry;
 
-import com.datatorrent.lib.codec.KryoJdkContainer;
-
 /**
  * RomeFeedEntry that wraps a Rome syndication entry.<p><br>
  *
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/RomeStreamProvider.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/RomeStreamProvider.java
index 8e40cd5..b798295 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/RomeStreamProvider.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/RomeStreamProvider.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.romesyndication;
+package org.apache.apex.malhar.contrib.romesyndication;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/RomeSyndicationOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/RomeSyndicationOperator.java
index 2f5f1c0..905e2d6 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/RomeSyndicationOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/RomeSyndicationOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.romesyndication;
+package org.apache.apex.malhar.contrib.romesyndication;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -25,16 +25,16 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.io.SimpleSinglePortInputOperator;
+
 import com.sun.syndication.feed.synd.SyndEntry;
 import com.sun.syndication.feed.synd.SyndEntryImpl;
 import com.sun.syndication.feed.synd.SyndFeed;
 import com.sun.syndication.io.SyndFeedInput;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.datatorrent.lib.io.SimpleSinglePortInputOperator;
-
 /**
  * Input operator for getting syndication feeds processed using Rome.
  * <p>
@@ -151,8 +151,7 @@
     InputStream is;
     if (streamProvider != null) {
       is = streamProvider.getInputStream();
-    }
-    else {
+    } else {
       URL url = new URL(location);
       is = url.openStream();
     }
@@ -181,32 +180,27 @@
             if (!oldEntries) {
               if (!feedItems.contains(romeFeedEntry)) {
                 outputPort.emit(romeFeedEntry);
-              }
-              else if (orderedUpdate) {
+              } else if (orderedUpdate) {
                 oldEntries = true;
               }
             }
             nfeedItems.add(romeFeedEntry);
           }
           feedItems = nfeedItems;
-        }
-        catch (Exception e) {
+        } catch (Exception e) {
           logger.error(e.getMessage());
-        }
-        finally {
+        } finally {
           if (isr != null) {
             try {
               isr.close();
-            }
-            catch (Exception ce) {
+            } catch (Exception ce) {
               logger.error(ce.getMessage());
             }
           }
         }
         Thread.sleep(interval);
       }
-    }
-    catch (InterruptedException ie) {
+    } catch (InterruptedException ie) {
       logger.error("Interrupted: " + ie.getMessage());
     }
   }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/package-info.java
index 858c5cd..69f4cd2 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/romesyndication/package-info.java
@@ -20,4 +20,4 @@
  * Rome operators and utilities.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.romesyndication;
+package org.apache.apex.malhar.contrib.romesyndication;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/ruby/RubyOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/ruby/RubyOperator.java
index bfb9e83..f31dc12 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/ruby/RubyOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/ruby/RubyOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.ruby;
+package org.apache.apex.malhar.contrib.ruby;
 
 import java.util.Map;
 
@@ -24,8 +24,9 @@
 import org.jruby.embed.ScriptingContainer;
 import org.jruby.javasupport.JavaEmbedUtils.EvalUnit;
 
+import org.apache.apex.malhar.lib.script.ScriptOperator;
+
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.script.ScriptOperator;
 
 /**
  * An implementation of ScriptOperator that executes ruby script on tuples
@@ -41,12 +42,12 @@
  * @since 1.0.4
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-public class RubyOperator extends ScriptOperator {
-
+public class RubyOperator extends ScriptOperator
+{
   public enum Type
   {
     EVAL, INVOKE
-  };
+  }
 
   protected Type type = Type.EVAL;
   protected transient Object evalResult;
@@ -54,21 +55,21 @@
   private transient EvalUnit unit;
 
 
-  public void setEval(String script) {
-
+  public void setEval(String script)
+  {
     this.type = Type.EVAL;
     this.script = script;
   }
 
-  public void setInvoke(String functionName) {
-
+  public void setInvoke(String functionName)
+  {
     this.type = Type.INVOKE;
     this.script = functionName;
   }
 
   @Override
-  public void setup(OperatorContext context) {
-
+  public void setup(OperatorContext context)
+  {
     sc = new ScriptingContainer(LocalVariableBehavior.PERSISTENT);
     for (String s : setupScripts) {
       EvalUnit unit = sc.parse(s);
@@ -80,16 +81,15 @@
   }
 
   @Override
-  public void process(Map<String, Object> tuple) {
-
+  public void process(Map<String, Object> tuple)
+  {
     try {
-      if(type == Type.EVAL) {
+      if (type == Type.EVAL) {
         for (Map.Entry<String, Object> entry : tuple.entrySet()) {
           sc.put(entry.getKey(), entry.getValue());
         }
         evalResult = unit.run();
-      }
-      else {
+      } else {
         Object[] args = new Object[tuple.size()];
         int index = 0;
         for (Map.Entry<String, Object> entry : tuple.entrySet()) {
@@ -104,33 +104,35 @@
         outBindings.emit(getBindings());
       }
       sc.clear();
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       throw new RuntimeException(ex);
     }
   }
 
   @Override
-  public void endWindow() {
-
+  public void endWindow()
+  {
     if (!isPassThru) {
-      if(result.isConnected())
+      if (result.isConnected()) {
         result.emit(evalResult);
-      if(outBindings.isConnected())
+      }
+      if (outBindings.isConnected()) {
         outBindings.emit(getBindings());
+      }
     }
   }
 
   @SuppressWarnings("unchecked")
   @Override
-  public Map<String, Object> getBindings() {
-
-    if(sc == null)
+  public Map<String, Object> getBindings()
+  {
+    if (sc == null) {
       return null;
-    if(sc.getVarMap() != null) {
-      return sc.getVarMap().getMap();
     }
-    else
+    if (sc.getVarMap() != null) {
+      return sc.getVarMap().getMap();
+    } else {
       return null;
+    }
   }
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/AbstractSolrInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/AbstractSolrInputOperator.java
index f7e26ca..4ca3ae8 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/AbstractSolrInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/AbstractSolrInputOperator.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.solr;
+package org.apache.apex.malhar.contrib.solr;
 
 import java.io.IOException;
 
 import javax.validation.constraints.NotNull;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.lib.db.AbstractStoreInputOperator;
 import org.apache.solr.client.solrj.SolrServer;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.response.QueryResponse;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.SolrDocumentList;
 import org.apache.solr.common.params.SolrParams;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.db.AbstractStoreInputOperator;
 
 /**
  * This is a base implementation of a Solr input operator, which consumes data from solr search operations.&nbsp;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/AbstractSolrOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/AbstractSolrOutputOperator.java
index 805238c..ca6c35a 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/AbstractSolrOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/AbstractSolrOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.solr;
+package org.apache.apex.malhar.contrib.solr;
 
 import java.io.IOException;
 import java.util.Queue;
@@ -24,17 +24,17 @@
 
 import javax.validation.constraints.NotNull;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.lib.db.AbstractStoreOutputOperator;
+import org.apache.apex.malhar.lib.db.Connectable;
 import org.apache.solr.client.solrj.SolrServer;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.response.UpdateResponse;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrInputDocument;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.db.AbstractStoreOutputOperator;
-import com.datatorrent.lib.db.Connectable;
 
 /**
  * This is a base implementation of a Solr output operator, which adds data to Solr Server.&nbsp; Subclasses should
@@ -80,7 +80,7 @@
     if (solrDocument != null) {
       docBuffer.add(solrDocument);
     }
-  };
+  }
 
   /**
    * Converts the object into Solr document format
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/CloudSolrServerConnector.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/CloudSolrServerConnector.java
index 9d596b5..35b6420 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/CloudSolrServerConnector.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/CloudSolrServerConnector.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.solr;
+package org.apache.apex.malhar.contrib.solr;
 
 import java.io.IOException;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/ConcurrentUpdateSolrServerConnector.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/ConcurrentUpdateSolrServerConnector.java
index d9237c2..2af83e3 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/ConcurrentUpdateSolrServerConnector.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/ConcurrentUpdateSolrServerConnector.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.solr;
+package org.apache.apex.malhar.contrib.solr;
 
 import java.io.IOException;
 import java.util.concurrent.ExecutorService;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/HttpSolrServerConnector.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/HttpSolrServerConnector.java
index 59afbc4..78b3448 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/HttpSolrServerConnector.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/HttpSolrServerConnector.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.solr;
+package org.apache.apex.malhar.contrib.solr;
 
 import javax.validation.constraints.NotNull;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/LBHttpSolrServerConnector.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/LBHttpSolrServerConnector.java
index 5b133c5..0db5d25 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/LBHttpSolrServerConnector.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/LBHttpSolrServerConnector.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.solr;
+package org.apache.apex.malhar.contrib.solr;
 
 import java.io.IOException;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/SolrInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/SolrInputOperator.java
index 0f33d75..9c21f7a 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/SolrInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/SolrInputOperator.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.solr;
+package org.apache.apex.malhar.contrib.solr;
 
 import java.util.Map;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.solr.common.SolrDocument;
 import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.servlet.SolrRequestParsers;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 /**
  * Default Implementation of AbstractSolrInputOperator. Reads query from properties file <br>
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/SolrOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/SolrOutputOperator.java
index 28bef1f..a935fb5 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/SolrOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/SolrOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.solr;
+package org.apache.apex.malhar.contrib.solr;
 
 import java.util.Iterator;
 import java.util.Map;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/SolrServerConnector.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/SolrServerConnector.java
index 7e42dd0..ba159ea 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/SolrServerConnector.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/SolrServerConnector.java
@@ -16,15 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.solr;
+package org.apache.apex.malhar.contrib.solr;
 
 import java.io.Closeable;
 import java.io.IOException;
 
+import org.apache.apex.malhar.lib.db.Connectable;
 import org.apache.solr.client.solrj.SolrServer;
 
-import com.datatorrent.lib.db.Connectable;
-
 /**
  * SolrServerConnector
  *
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/package-info.java
index 5ebbbf7..669da23 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/solr/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.solr;
+package org.apache.apex.malhar.contrib.solr;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/AbstractSplunkInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/AbstractSplunkInputOperator.java
index e9ebd71..8cd9767 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/AbstractSplunkInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/AbstractSplunkInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.splunk;
+package org.apache.apex.malhar.contrib.splunk;
 
 import java.io.InputStream;
 
@@ -25,15 +25,14 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.AbstractStoreInputOperator;
+
 import com.splunk.Event;
 import com.splunk.JobExportArgs;
 import com.splunk.MultiResultsReaderXml;
 import com.splunk.SearchResults;
 
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DefaultOutputPort;
-
-import com.datatorrent.lib.db.AbstractStoreInputOperator;
 
 /**
  * This is the base implementation of a Splunk input adapter.&nbsp;
@@ -47,8 +46,8 @@
  *
  * @since 1.0.4
  */
-public abstract class AbstractSplunkInputOperator<T> extends AbstractStoreInputOperator<T, SplunkStore> {
-
+public abstract class AbstractSplunkInputOperator<T> extends AbstractStoreInputOperator<T, SplunkStore>
+{
   private static final Logger logger = LoggerFactory.getLogger(AbstractSplunkInputOperator.class);
   @NotNull
   protected String earliestTime;
@@ -57,11 +56,13 @@
   protected transient InputStream exportSearch;
   protected transient MultiResultsReaderXml multiResultsReader;
 
-  public void setEarliestTime(@NotNull String earliestTime) {
+  public void setEarliestTime(@NotNull String earliestTime)
+  {
     this.earliestTime = earliestTime;
   }
 
-  public void setLatestTime(@NotNull String latestTime) {
+  public void setLatestTime(@NotNull String latestTime)
+  {
     this.latestTime = latestTime;
   }
 
@@ -104,11 +105,10 @@
     try {
       exportSearch = store.getService().export(queryToRetrieveData(), exportArgs);
       multiResultsReader = new MultiResultsReaderXml(exportSearch);
-      for (SearchResults searchResults : multiResultsReader)
-      {
+      for (SearchResults searchResults : multiResultsReader) {
         for (Event event : searchResults) {
-          for (String key: event.keySet()){
-            if(key.contains("raw")){
+          for (String key: event.keySet()) {
+            if (key.contains("raw")) {
               T tuple = getTuple(event.get(key));
               outputPort.emit(tuple);
             }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkInputFromForwarder.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkInputFromForwarder.java
index 8a5fa5d..a54d70b 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkInputFromForwarder.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkInputFromForwarder.java
@@ -16,11 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.splunk;
-
-import kafka.javaapi.producer.Producer;
-import kafka.producer.KeyedMessage;
-import kafka.producer.ProducerConfig;
+package org.apache.apex.malhar.contrib.splunk;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -29,6 +25,10 @@
 import java.net.Socket;
 import java.util.Properties;
 
+import kafka.javaapi.producer.Producer;
+import kafka.producer.KeyedMessage;
+import kafka.producer.ProducerConfig;
+
 /**
  *
  * An abstract class which receives input from a splunk forwarder and writes the lines to kafka.
@@ -37,8 +37,8 @@
  * @param <T> the type of data to be stored into kafka
  * @since 1.0.4
  */
-public abstract class SplunkInputFromForwarder<T> {
-
+public abstract class SplunkInputFromForwarder<T>
+{
   private final int DEFAULT_PORT = 6789;
   private int port;
   protected Producer<String, T> producer;
@@ -47,62 +47,74 @@
   protected ServerSocket serverSocket;
   protected Socket connectionSocket;
 
-  public SplunkInputFromForwarder() {
+  public SplunkInputFromForwarder()
+  {
     port = DEFAULT_PORT;
   }
 
-  public int getPort() {
+  public int getPort()
+  {
     return port;
   }
 
-  public void setPort(int port) {
+  public void setPort(int port)
+  {
     this.port = port;
   }
 
-  public String getTopic() {
+  public String getTopic()
+  {
     return topic;
   }
 
-  public void setTopic(String topic) {
+  public void setTopic(String topic)
+  {
     this.topic = topic;
   }
 
-  public Properties getConfigProperties() {
+  public Properties getConfigProperties()
+  {
     return configProperties;
   }
 
-  public void setConfigProperties(Properties configProperties) {
+  public void setConfigProperties(Properties configProperties)
+  {
     this.configProperties = configProperties;
   }
 
   public abstract T getMessage(String line);
 
-  public void writeToKafka(String line) {
-    T message=null;
-    if(line!=null)
+  public void writeToKafka(String line)
+  {
+    T message = null;
+    if (line != null) {
       message = getMessage(line);
-    if(message!=null) {
+    }
+    if (message != null) {
       producer.send(new KeyedMessage<String, T>(getTopic(), message));
     }
   }
 
-  public void startServer() throws IOException {
+  public void startServer() throws IOException
+  {
     ProducerConfig producerConfig = new ProducerConfig(configProperties);
     producer = new Producer<String, T>(producerConfig);
     serverSocket = new ServerSocket(port);
   }
 
-  public void process() throws IOException {
+  public void process() throws IOException
+  {
     connectionSocket = serverSocket.accept();
     String line;
     BufferedReader reader = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
-    while(true) {
+    while (true) {
       line = reader.readLine();
       writeToKafka(line);
     }
   }
 
-  public void stopServer() throws IOException {
+  public void stopServer() throws IOException
+  {
     serverSocket.close();
     connectionSocket.close();
     producer.close();
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkInputOperator.java
index 1e4415f..f511d42 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.splunk;
+package org.apache.apex.malhar.contrib.splunk;
 
 import javax.validation.constraints.NotNull;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkStore.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkStore.java
index 3abdb1b..74730b6 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkStore.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkStore.java
@@ -16,22 +16,24 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.splunk;
-
-import com.splunk.*;
+package org.apache.apex.malhar.contrib.splunk;
 
 import javax.validation.constraints.NotNull;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
-import com.datatorrent.lib.db.Connectable;
+
+import org.apache.apex.malhar.lib.db.Connectable;
+
+import com.splunk.Service;
+import com.splunk.ServiceArgs;
 
 /**
  * A {@link Connectable} that uses splunk to connect to stores.
  *
  * @since 1.0.4
  */
-public class SplunkStore implements Connectable{
-
+public class SplunkStore implements Connectable
+{
   protected static final Logger logger = LoggerFactory.getLogger(SplunkStore.class);
   private String userName;
   private String password;
@@ -67,7 +69,8 @@
    *
    * @param host host
    */
-  public void setHost(@NotNull String host) {
+  public void setHost(@NotNull String host)
+  {
     this.host = host;
   }
 
@@ -76,11 +79,13 @@
    *
    * @param port port
    */
-  public void setPort(@NotNull int port) {
+  public void setPort(@NotNull int port)
+  {
     this.port = port;
   }
 
-  public Service getService() {
+  public Service getService()
+  {
     return service;
   }
 
@@ -90,7 +95,7 @@
   @Override
   public void connect()
   {
-    try{
+    try {
       ServiceArgs loginArgs = new ServiceArgs();
       loginArgs.setUsername(userName);
       loginArgs.setPassword(password);
@@ -98,8 +103,7 @@
       loginArgs.setPort(port);
 
       service = Service.connect(loginArgs);
-    }
-    catch(Exception e){
+    } catch (Exception e) {
       throw new RuntimeException("closing connection", e);
     }
   }
@@ -110,10 +114,9 @@
   @Override
   public void disconnect()
   {
-    try{
+    try {
       service.logout();
-    }
-    catch(Exception e){
+    } catch (Exception e) {
       throw new RuntimeException("closing connection", e);
     }
 
@@ -122,9 +125,10 @@
   @Override
   public boolean isConnected()
   {
-    if(service.getToken() == null)
+    if (service.getToken() == null) {
       return false;
-    else
+    } else {
       return true;
+    }
   }
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkTcpOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkTcpOutputOperator.java
index f7e98b6..dccde08 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkTcpOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/SplunkTcpOutputOperator.java
@@ -16,17 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.splunk;
-
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.Operator;
-import com.datatorrent.lib.db.AbstractStoreOutputOperator;
-import com.splunk.TcpInput;
+package org.apache.apex.malhar.contrib.splunk;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
 import java.net.Socket;
 
+import org.apache.apex.malhar.lib.db.AbstractStoreOutputOperator;
+
+import com.splunk.TcpInput;
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.api.Operator;
+
 /**
  * The output operator for Splunk, which writes to a TCP port on which splunk server is configured.
  * <p></p>
@@ -35,27 +36,28 @@
  * @tags splunk
  * @since 1.0.4
  */
-public class SplunkTcpOutputOperator<T> extends AbstractStoreOutputOperator<T, SplunkStore> implements Operator.CheckpointNotificationListener {
-
+public class SplunkTcpOutputOperator<T> extends AbstractStoreOutputOperator<T, SplunkStore> implements Operator.CheckpointNotificationListener
+{
   private String tcpPort;
   private transient Socket socket;
   private transient TcpInput tcpInput;
   private transient DataOutputStream stream;
 
-  public String getTcpPort() {
-
+  public String getTcpPort()
+  {
     return tcpPort;
   }
-  public void setTcpPort(String tcpPort) {
 
+  public void setTcpPort(String tcpPort)
+  {
     this.tcpPort = tcpPort;
   }
 
   @Override
-  public void setup(OperatorContext context) {
-
+  public void setup(OperatorContext context)
+  {
     super.setup(context);
-    tcpInput = (TcpInput) store.getService().getInputs().get(tcpPort);
+    tcpInput = (TcpInput)store.getService().getInputs().get(tcpPort);
     try {
       socket = tcpInput.attach();
       stream = new DataOutputStream(socket.getOutputStream());
@@ -65,8 +67,8 @@
   }
 
   @Override
-  public void processTuple(T tuple) {
-
+  public void processTuple(T tuple)
+  {
     try {
       stream.writeBytes(tuple.toString());
 
@@ -96,8 +98,8 @@
   }
 
   @Override
-  public void teardown() {
-
+  public void teardown()
+  {
     super.teardown();
     try {
       stream.close();
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/package-info.java
index 610ee3b..ee2bfec 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/splunk/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.splunk;
+package org.apache.apex.malhar.contrib.splunk;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/sqlite/SqliteStreamOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/sqlite/SqliteStreamOperator.java
index 2cb33e4..77edefc 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/sqlite/SqliteStreamOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/sqlite/SqliteStreamOperator.java
@@ -16,20 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.sqlite;
+package org.apache.apex.malhar.contrib.sqlite;
 
-import com.almworks.sqlite4java.SQLiteConnection;
-import com.almworks.sqlite4java.SQLiteException;
-import com.almworks.sqlite4java.SQLiteStatement;
-import org.apache.apex.malhar.contrib.misc.streamquery.AbstractSqlStreamOperator;
-import org.apache.apex.malhar.contrib.misc.streamquery.AbstractSqlStreamOperator.InputSchema.ColumnInfo;
-import com.datatorrent.api.Context.OperatorContext;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.contrib.misc.streamquery.AbstractSqlStreamOperator;
+import org.apache.apex.malhar.contrib.misc.streamquery.AbstractSqlStreamOperator.InputSchema.ColumnInfo;
+import com.almworks.sqlite4java.SQLiteConnection;
+import com.almworks.sqlite4java.SQLiteException;
+import com.almworks.sqlite4java.SQLiteStatement;
+import com.datatorrent.api.Context.OperatorContext;
 
 /**
  * This is an SQLite input operator.
@@ -105,8 +105,7 @@
       beginStatement = db.prepare("BEGIN");
       commitStatement = db.prepare("COMMIT");
       execStatement = db.prepare(statement);
-    }
-    catch (SQLiteException ex) {
+    } catch (SQLiteException ex) {
       throw new RuntimeException(ex);
     }
   }
@@ -117,8 +116,7 @@
     try {
       beginStatement.step();
       beginStatement.reset();
-    }
-    catch (SQLiteException ex) {
+    } catch (SQLiteException ex) {
       throw new RuntimeException(ex);
     }
   }
@@ -133,15 +131,13 @@
       for (Map.Entry<String, Object> entry : tuple.entrySet()) {
         ColumnInfo t = inputSchema.columnInfoMap.get(entry.getKey());
         if (t != null && t.bindIndex != 0) {
-          //System.out.println("Binding: "+entry.getValue().toString()+" to "+t.bindIndex);
           insertStatement.bind(t.bindIndex, entry.getValue().toString());
         }
       }
 
       insertStatement.step();
       insertStatement.reset();
-    }
-    catch (SQLiteException ex) {
+    } catch (SQLiteException ex) {
       throw new RuntimeException(ex);
     }
   }
@@ -171,8 +167,7 @@
         st.step();
         st.reset();
       }
-    }
-    catch (SQLiteException ex) {
+    } catch (SQLiteException ex) {
       throw new RuntimeException(ex);
     }
     bindings = null;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/sqlite/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/sqlite/package-info.java
index 766ed70..f7eea51 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/sqlite/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/sqlite/package-info.java
@@ -20,4 +20,4 @@
  * SQLite operators and utilities.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.sqlite;
+package org.apache.apex.malhar.contrib.sqlite;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/twitter/TwitterSampleInput.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/twitter/TwitterSampleInput.java
index a93fbb1..bd41589 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/twitter/TwitterSampleInput.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/twitter/TwitterSampleInput.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.twitter;
+package org.apache.apex.malhar.contrib.twitter;
 
 import java.util.concurrent.ArrayBlockingQueue;
 
@@ -26,14 +26,21 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import twitter4j.*;
-import twitter4j.conf.ConfigurationBuilder;
-
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.api.Operator.ActivationListener;
 
+import twitter4j.HashtagEntity;
+import twitter4j.StallWarning;
+import twitter4j.Status;
+import twitter4j.StatusDeletionNotice;
+import twitter4j.StatusListener;
+import twitter4j.TwitterStream;
+import twitter4j.TwitterStreamFactory;
+import twitter4j.URLEntity;
+import twitter4j.conf.ConfigurationBuilder;
+
 /**
  * This is an input operator for Twitter.
  * <p>
@@ -141,8 +148,7 @@
         statuses.put(status);
         count++;
       }
-    }
-    catch (InterruptedException ex) {
+    } catch (InterruptedException ex) {
       logger.debug("Streaming interrupted; Passing the inerruption to the operator", ex);
       operatorThread.interrupt();
     }
@@ -174,7 +180,8 @@
     // do nothing
   }
 
-  @Override public void onStallWarning(StallWarning stallWarning)
+  @Override
+  public void onStallWarning(StallWarning stallWarning)
   {
     // do nothing
   }
@@ -188,12 +195,11 @@
     if (reConnect) {
       try {
         Thread.sleep(1000);
-      }
-      catch (Exception e) {
+      } catch (Exception e) {
+         // ignore
       }
       setUpTwitterConnection();
-    }
-    else {
+    } else {
       operatorThread.interrupt();
     }
   }
@@ -204,11 +210,11 @@
   protected ConfigurationBuilder setupConfigurationBuilder()
   {
     ConfigurationBuilder cb = new ConfigurationBuilder();
-    cb.setDebugEnabled(debug).
-            setOAuthConsumerKey(consumerKey).
-            setOAuthConsumerSecret(consumerSecret).
-            setOAuthAccessToken(accessToken).
-            setOAuthAccessTokenSecret(accessTokenSecret);
+    cb.setDebugEnabled(debug)
+        .setOAuthConsumerKey(consumerKey)
+        .setOAuthConsumerSecret(consumerSecret)
+        .setOAuthAccessToken(accessToken)
+        .setOAuthAccessTokenSecret(accessTokenSecret);
     return cb;
   }
 
@@ -402,7 +408,7 @@
     if (getClass() != obj.getClass()) {
       return false;
     }
-    final TwitterSampleInput other = (TwitterSampleInput) obj;
+    final TwitterSampleInput other = (TwitterSampleInput)obj;
     if (this.debug != other.debug) {
       return false;
     }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractBaseZeroMQInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractBaseZeroMQInputOperator.java
index fcd6b05..9ebec97 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractBaseZeroMQInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractBaseZeroMQInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
 
 
 import java.util.concurrent.ArrayBlockingQueue;
@@ -25,10 +25,10 @@
 import org.slf4j.LoggerFactory;
 import org.zeromq.ZMQ;
 
-import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.api.Operator.ActivationListener;
+import com.datatorrent.common.util.BaseOperator;
 
 /**
  * This is the base implementation of a ZeroMQ input operator.&nbsp;
@@ -70,15 +70,15 @@
 {
   @SuppressWarnings("unused")
   private static final Logger logger = LoggerFactory.getLogger(AbstractBaseZeroMQInputOperator.class);
-  transient protected ZMQ.Context context;
-  transient protected ZMQ.Socket subscriber;
-  transient protected ZMQ.Socket syncclient;
+  protected transient ZMQ.Context context;
+  protected transient ZMQ.Socket subscriber;
+  protected transient ZMQ.Socket syncclient;
   private String url;
   private String syncUrl;
-  private String filter="";
+  private String filter = "";
 
   private static final int DEFAULT_BLAST_SIZE = 1000;
-  private static final int DEFAULT_BUFFER_SIZE = 1024*1024;
+  private static final int DEFAULT_BUFFER_SIZE = 1024 * 1024;
   private int tuple_blast = DEFAULT_BLAST_SIZE;
   private int bufferSize = DEFAULT_BUFFER_SIZE;
   private volatile boolean running = false;
@@ -104,9 +104,12 @@
   {
     this.tuple_blast = i;
   }
-  public void setBufferSize(int size) {
+
+  public void setBufferSize(int size)
+  {
     this.bufferSize = size;
   }
+
   @Override
   public void setup(OperatorContext ctx)
   {
@@ -132,8 +135,8 @@
  * and add into holdingBuffer
  * @param ctx
  */
-@Override
-public void activate(OperatorContext ctx)
+  @Override
+  public void activate(OperatorContext ctx)
   {
     new Thread()
     {
@@ -147,8 +150,7 @@
             if (message != null) {
               holdingBuffer.add(message);
             }
-          }
-          catch (Exception e) {
+          } catch (Exception e) {
 //        logger.debug(e.toString());
             break;
           }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractBaseZeroMQOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractBaseZeroMQOutputOperator.java
index fdf38da..834752b 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractBaseZeroMQOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractBaseZeroMQOutputOperator.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.zeromq.ZMQ;
 
-import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.common.util.BaseOperator;
 
 /**
  * This is the base implementation of a ZeroMQ output adapter.&nbsp;
@@ -61,9 +61,9 @@
 public abstract class AbstractBaseZeroMQOutputOperator extends BaseOperator
 {
   private static final Logger logger = LoggerFactory.getLogger(AbstractBaseZeroMQInputOperator.class);
-  transient protected ZMQ.Context context;
-  transient protected ZMQ.Socket publisher;
-  transient protected ZMQ.Socket syncservice;
+  protected transient ZMQ.Context context;
+  protected transient ZMQ.Socket publisher;
+  protected transient ZMQ.Socket syncservice;
   protected int SUBSCRIBERS_EXPECTED = 1;
   private String url;
   private String syncUrl;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractSinglePortZeroMQInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractSinglePortZeroMQInputOperator.java
index aeaa575..6527114 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractSinglePortZeroMQInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractSinglePortZeroMQInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
 
 import com.datatorrent.api.DefaultOutputPort;
 
@@ -56,7 +56,7 @@
   /**
    * This is the ouput port on which tuples extracted from ZeroMQ are emitted.
    */
-  final public transient DefaultOutputPort<T> outputPort = new DefaultOutputPort<T>();
+  public final transient DefaultOutputPort<T> outputPort = new DefaultOutputPort<T>();
 
   /**
    * Any concrete class derived from AbstractSinglePortZeroMQInputOperator has to implement this method
@@ -66,10 +66,11 @@
    *
    * @param message
    */
-    public abstract T getTuple(byte[] message);
+  public abstract T getTuple(byte[] message);
 
-    @Override
-    public void emitTuple(byte[] message) {
-      outputPort.emit(getTuple(message));
-    }
+  @Override
+  public void emitTuple(byte[] message)
+  {
+    outputPort.emit(getTuple(message));
+  }
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractSinglePortZeroMQOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractSinglePortZeroMQOutputOperator.java
index 49c2629..894b497 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractSinglePortZeroMQOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/AbstractSinglePortZeroMQOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
 
 import com.datatorrent.api.DefaultInputPort;
 
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/SimpleSinglePortZeroMQPullInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/SimpleSinglePortZeroMQPullInputOperator.java
index 79fbe62..e308a4b 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/SimpleSinglePortZeroMQPullInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/SimpleSinglePortZeroMQPullInputOperator.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
 
 import org.zeromq.ZMQ;
 
+import org.apache.apex.malhar.lib.io.SimpleSinglePortInputOperator;
+
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.io.SimpleSinglePortInputOperator;
 
 /**
  * This is the base implementation of a simple single port ZeroMQ input operator.&nbsp;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/SimpleSinglePortZeroMQPullStringInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/SimpleSinglePortZeroMQPullStringInputOperator.java
index beffe56..55c6d50 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/SimpleSinglePortZeroMQPullStringInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/SimpleSinglePortZeroMQPullStringInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
 
 /**
  * This is a simple single port ZeroMQ input operator.&nbsp;
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/ZeroMQInputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/ZeroMQInputOperator.java
index 05d5e52..a784ba5 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/ZeroMQInputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/ZeroMQInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
 
 /**
  * Input adapter operator with a single output port, which consumes byte array data from the ZeroMQ and outputs byte array.
@@ -31,7 +31,8 @@
 public class ZeroMQInputOperator extends AbstractSinglePortZeroMQInputOperator<byte[]>
 {
   @Override
-  public byte[] getTuple(byte[] message) {
+  public byte[] getTuple(byte[] message)
+  {
     return message;
   }
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/ZeroMQOutputOperator.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/ZeroMQOutputOperator.java
index bd53e0a..4c020d4 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/ZeroMQOutputOperator.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/ZeroMQOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
 
 /**
  * Output adapter operator with a single input port which consumes byte array and emits the same to the ZeroMQ port.
@@ -29,10 +29,11 @@
  * @since 3.0.0
  */
 
-public class ZeroMQOutputOperator extends AbstractSinglePortZeroMQOutputOperator<byte[]>{
-
-	@Override
-	public void processTuple(byte[] tuple) {
-		publisher.send(tuple, 0);
-	}
+public class ZeroMQOutputOperator extends AbstractSinglePortZeroMQOutputOperator<byte[]>
+{
+  @Override
+  public void processTuple(byte[] tuple)
+  {
+    publisher.send(tuple, 0);
+  }
 }
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/package-info.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/package-info.java
index 50a710c..ba4a758 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/package-info.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/zmq/package-info.java
@@ -20,4 +20,4 @@
  * ZeroMQ operators and utilities.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloInputOperatorTest.java
index cb84c9e..3afd8be 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloInputOperatorTest.java
@@ -16,11 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.accumulo;
+package org.apache.apex.malhar.contrib.accumulo;
 
 import java.util.List;
 import java.util.Map.Entry;
 
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.accumulo.core.client.Connector;
 import org.apache.accumulo.core.client.Scanner;
 import org.apache.accumulo.core.client.TableNotFoundException;
@@ -28,21 +33,19 @@
 import org.apache.accumulo.core.data.Range;
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.security.Authorizations;
-import org.junit.Assert;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 
 import com.datatorrent.netlet.util.DTThrowable;
 
-public class AccumuloInputOperatorTest {
+public class AccumuloInputOperatorTest
+{
   private static final Logger logger = LoggerFactory.getLogger(AccumuloInputOperatorTest.class);
 
   @Test
-  public void testScan() {
+  public void testScan()
+  {
     try {
       AccumuloTestHelper.getConnector();
       AccumuloTestHelper.deleteTable();
@@ -86,11 +89,12 @@
     }
   }
 
-  public static class TestAccumuloInputOperator extends
-  AbstractAccumuloInputOperator<AccumuloTuple> {
+  public static class TestAccumuloInputOperator extends AbstractAccumuloInputOperator<AccumuloTuple>
+  {
 
     @Override
-    public AccumuloTuple getTuple(Entry<Key, Value> entry) {
+    public AccumuloTuple getTuple(Entry<Key, Value> entry)
+    {
       AccumuloTuple tuple = new AccumuloTuple();
       tuple.setRow(entry.getKey().getRow().toString());
       tuple.setColFamily(entry.getKey().getColumnFamily().toString());
@@ -100,7 +104,8 @@
     }
 
     @Override
-    public Scanner getScanner(Connector conn) {
+    public Scanner getScanner(Connector conn)
+    {
       Authorizations auths = new Authorizations();
       Scanner scan = null;
       try {
@@ -116,4 +121,4 @@
     }
 
   }
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloOutputOperatorTest.java
index 0ffa472..92cdea4 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloOutputOperatorTest.java
@@ -16,23 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.accumulo;
+package org.apache.apex.malhar.contrib.accumulo;
 
-
-import org.apache.accumulo.core.data.Mutation;
 import org.junit.Assert;
 import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import org.apache.accumulo.core.data.Mutation;
 
-public class AccumuloOutputOperatorTest {
-  private static final Logger logger = LoggerFactory
-      .getLogger(AccumuloOutputOperatorTest.class);
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
+public class AccumuloOutputOperatorTest
+{
   @Test
-  public void testPut() throws Exception {
+  public void testPut() throws Exception
+  {
 
     AccumuloTestHelper.getConnector();
     AccumuloTestHelper.clearTable();
@@ -46,8 +43,11 @@
 
     atleastOper.setup(mockOperatorContext(0));
     atleastOper.beginWindow(0);
-    AccumuloTuple a=new AccumuloTuple();
-    a.setRow("john");a.setColFamily("colfam0");a.setColName("street");a.setColValue("patrick");
+    AccumuloTuple a = new AccumuloTuple();
+    a.setRow("john");
+    a.setColFamily("colfam0");
+    a.setColName("street");
+    a.setColValue("patrick");
     atleastOper.input.process(a);
     atleastOper.endWindow();
     AccumuloTuple tuple;
@@ -62,10 +62,12 @@
     Assert.assertEquals("Tuple column value", tuple.getColValue(), "patrick");
 
   }
-  public static class TestAccumuloOutputOperator extends AbstractAccumuloOutputOperator<AccumuloTuple> {
 
+  public static class TestAccumuloOutputOperator extends AbstractAccumuloOutputOperator<AccumuloTuple>
+  {
     @Override
-    public Mutation operationMutation(AccumuloTuple t) {
+    public Mutation operationMutation(AccumuloTuple t)
+    {
       Mutation mutation = new Mutation(t.getRow().getBytes());
       mutation.put(t.getColFamily().getBytes(),t.getColName().getBytes(),t.getColValue().getBytes());
       return mutation;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloRowTupleGenerator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloRowTupleGenerator.java
index 5068108..cc7b992 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloRowTupleGenerator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloRowTupleGenerator.java
@@ -16,40 +16,43 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.accumulo;
+package org.apache.apex.malhar.contrib.accumulo;
 
-import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
+import com.datatorrent.common.util.BaseOperator;
 
 /**
  *
  */
-public class AccumuloRowTupleGenerator extends BaseOperator implements
-InputOperator {
+public class AccumuloRowTupleGenerator extends BaseOperator implements InputOperator
+{
 
   int rowCount;
 
   public final transient DefaultOutputPort<AccumuloTuple> outputPort = new DefaultOutputPort<AccumuloTuple>();
 
   @Override
-  public void emitTuples() {
+  public void emitTuples()
+  {
     AccumuloTuple tuple = new AccumuloTuple();
     tuple.setRow("row" + rowCount);
     tuple.setColFamily("colfam0");
     tuple.setColName("col" + "-" + 0);
     tuple.setColValue("val" + "-" + rowCount + "-" + 0);
     ++rowCount;
-    if(rowCount==99999)
-      rowCount=0;
+    if (rowCount == 99999) {
+      rowCount = 0;
+    }
     outputPort.emit(tuple);
   }
 
   @Override
-  public void setup(OperatorContext context) {
+  public void setup(OperatorContext context)
+  {
     super.setup(context);
     rowCount = 0;
   }
 
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloTestHelper.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloTestHelper.java
index 6ab6c50..4b1d705 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloTestHelper.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloTestHelper.java
@@ -16,12 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.accumulo;
+package org.apache.apex.malhar.contrib.accumulo;
 
 import java.io.IOException;
 import java.util.List;
 import java.util.Map.Entry;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import org.apache.accumulo.core.client.AccumuloException;
 import org.apache.accumulo.core.client.AccumuloSecurityException;
 import org.apache.accumulo.core.client.BatchWriter;
@@ -39,18 +42,18 @@
 import org.apache.accumulo.core.data.Value;
 import org.apache.accumulo.core.security.Authorizations;
 import org.apache.hadoop.io.Text;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.datatorrent.netlet.util.DTThrowable;
 
 
-public class AccumuloTestHelper {
+public class AccumuloTestHelper
+{
   static Connector con;
   public static final byte[] colfam0_bytes = "colfam0".getBytes();
   public static final byte[] col0_bytes = "col-0".getBytes();
   private static final Logger logger = LoggerFactory.getLogger(AccumuloTestHelper.class);
-  public static void createTable() {
+  public static void createTable()
+  {
     TableOperations tableoper = con.tableOperations();
     if (!tableoper.exists("tab1")) {
       try {
@@ -63,7 +66,8 @@
     }
   }
 
-  public static void clearTable() {
+  public static void clearTable()
+  {
     TableOperations tableoper = con.tableOperations();
     if (!tableoper.exists("tab1")) {
       try {
@@ -87,7 +91,8 @@
     }
   }
 
-  public static void populateAccumulo() throws IOException {
+  public static void populateAccumulo() throws IOException
+  {
     BatchWriterConfig config = new BatchWriterConfig();
     BatchWriter batchwriter = null;
     try {
@@ -98,11 +103,11 @@
     }
     try {
       for (int i = 0; i < 500; ++i) {
-        String rowstr="row" + i;
+        String rowstr = "row" + i;
         Mutation mutation = new Mutation(rowstr.getBytes());
         for (int j = 0; j < 500; ++j) {
-          String colstr="col" + "-" + j;
-          String valstr="val" + "-" + i + "-" + j;
+          String colstr = "col" + "-" + j;
+          String valstr = "val" + "-" + i + "-" + j;
           mutation.put(colfam0_bytes,colstr.getBytes(),
               System.currentTimeMillis(),
               valstr.getBytes());
@@ -117,7 +122,8 @@
   }
 
   public static AccumuloTuple findTuple(List<AccumuloTuple> tuples,
-      String row, String colFamily, String colName) {
+      String row, String colFamily, String colName)
+  {
     AccumuloTuple mtuple = null;
     for (AccumuloTuple tuple : tuples) {
       if (tuple.getRow().equals(row)
@@ -130,7 +136,8 @@
     return mtuple;
   }
 
-  public static void deleteTable() {
+  public static void deleteTable()
+  {
     TableOperations tableoper = con.tableOperations();
     if (tableoper.exists("tab1")) {
 
@@ -150,7 +157,8 @@
     }
   }
 
-  public static void getConnector() {
+  public static void getConnector()
+  {
     Instance instance = new ZooKeeperInstance("instance", "127.0.0.1");
     try {
       con = instance.getConnector("root", "pass");
@@ -165,7 +173,8 @@
   }
 
   public static AccumuloTuple getAccumuloTuple(String row, String colFam,
-      String colName) {
+      String colName)
+  {
     Authorizations auths = new Authorizations();
 
     Scanner scan = null;
@@ -189,4 +198,4 @@
     }
     return null;
   }
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloTuple.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloTuple.java
index 023a105..8759f00 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloTuple.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloTuple.java
@@ -16,46 +16,55 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.accumulo;
+package org.apache.apex.malhar.contrib.accumulo;
 
 import java.io.Serializable;
 
-public class AccumuloTuple implements Serializable {
+public class AccumuloTuple implements Serializable
+{
   private String row;
   private String colFamily;
   private String colName;
   private String colValue;
 
-  public String getRow() {
+  public String getRow()
+  {
     return row;
   }
 
-  public void setRow(String row) {
+  public void setRow(String row)
+  {
     this.row = row;
   }
 
-  public String getColFamily() {
+  public String getColFamily()
+  {
     return colFamily;
   }
 
-  public void setColFamily(String colFamily) {
+  public void setColFamily(String colFamily)
+  {
     this.colFamily = colFamily;
   }
 
-  public String getColName() {
+  public String getColName()
+  {
     return colName;
   }
 
-  public void setColName(String colName) {
+  public void setColName(String colName)
+  {
     this.colName = colName;
   }
 
-  public String getColValue() {
+  public String getColValue()
+  {
     return colValue;
   }
 
-  public void setColValue(String colValue) {
+  public void setColValue(String colValue)
+  {
     this.colValue = colValue;
   }
 
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloTupleCollector.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloTupleCollector.java
index 00abed6..4b0f84e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloTupleCollector.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/accumulo/AccumuloTupleCollector.java
@@ -16,26 +16,30 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.accumulo;
+package org.apache.apex.malhar.contrib.accumulo;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.DefaultInputPort;
+import com.datatorrent.common.util.BaseOperator;
 
-public class AccumuloTupleCollector extends BaseOperator {
+public class AccumuloTupleCollector extends BaseOperator
+{
 
   public static List<AccumuloTuple> tuples;
 
-  public AccumuloTupleCollector() {
+  public AccumuloTupleCollector()
+  {
     tuples = new ArrayList<AccumuloTuple>();
   }
 
-  public final transient DefaultInputPort<AccumuloTuple> inputPort = new DefaultInputPort<AccumuloTuple>() {
-    public void process(AccumuloTuple tuple) {
+  public final transient DefaultInputPort<AccumuloTuple> inputPort = new DefaultInputPort<AccumuloTuple>()
+  {
+    public void process(AccumuloTuple tuple)
+    {
       tuples.add(tuple);
     }
   };
 
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikeOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikeOperatorTest.java
index fba82cd..27dd5ed 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikeOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikeOperatorTest.java
@@ -16,7 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.aerospike;
+package org.apache.apex.malhar.contrib.aerospike;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 import com.aerospike.client.AerospikeClient;
 import com.aerospike.client.AerospikeException;
@@ -24,54 +32,51 @@
 import com.aerospike.client.Key;
 import com.aerospike.client.Record;
 import com.aerospike.client.query.Statement;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import org.junit.Assert;
-import org.junit.Test;
-
-import java.util.ArrayList;
-import java.util.List;
 
 import com.datatorrent.api.Context.OperatorContext;
 
-import static com.datatorrent.contrib.aerospike.AerospikeTestUtils.NAMESPACE;
-import static com.datatorrent.contrib.aerospike.AerospikeTestUtils.NODE;
-import static com.datatorrent.contrib.aerospike.AerospikeTestUtils.NUM_TUPLES;
-import static com.datatorrent.contrib.aerospike.AerospikeTestUtils.PORT;
-import static com.datatorrent.contrib.aerospike.AerospikeTestUtils.SET_NAME;
-
-import static com.datatorrent.contrib.aerospike.AerospikeTestUtils.cleanTable;
-import static com.datatorrent.contrib.aerospike.AerospikeTestUtils.cleanMetaTable;
-import static com.datatorrent.contrib.aerospike.AerospikeTestUtils.getNumOfEventsInStore;
-import static com.datatorrent.contrib.aerospike.AerospikeTestUtils.getOperatorContext;
-import static com.datatorrent.contrib.aerospike.AerospikeTestUtils.getTransactionalStore;
-import static com.datatorrent.contrib.aerospike.AerospikeTestUtils.getStore;
+import static org.apache.apex.malhar.contrib.aerospike.AerospikeTestUtils.NAMESPACE;
+import static org.apache.apex.malhar.contrib.aerospike.AerospikeTestUtils.NODE;
+import static org.apache.apex.malhar.contrib.aerospike.AerospikeTestUtils.NUM_TUPLES;
+import static org.apache.apex.malhar.contrib.aerospike.AerospikeTestUtils.PORT;
+import static org.apache.apex.malhar.contrib.aerospike.AerospikeTestUtils.SET_NAME;
+import static org.apache.apex.malhar.contrib.aerospike.AerospikeTestUtils.cleanMetaTable;
+import static org.apache.apex.malhar.contrib.aerospike.AerospikeTestUtils.cleanTable;
+import static org.apache.apex.malhar.contrib.aerospike.AerospikeTestUtils.getNumOfEventsInStore;
+import static org.apache.apex.malhar.contrib.aerospike.AerospikeTestUtils.getOperatorContext;
+import static org.apache.apex.malhar.contrib.aerospike.AerospikeTestUtils.getStore;
+import static org.apache.apex.malhar.contrib.aerospike.AerospikeTestUtils.getTransactionalStore;
 
 /**
  * Tests for {@link AbstractAerosipkeTransactionalPutOperator} and {@link AbstractAerospikeGetOperator}
  */
-public class AerospikeOperatorTest {
+public class AerospikeOperatorTest
+{
 
   private static String APP_ID = "AerospikeOperatorTest";
 
-  private static class TestEvent {
-
+  private static class TestEvent
+  {
     int id;
 
-    TestEvent(int id) {
+    TestEvent(int id)
+    {
       this.id = id;
     }
   }
 
-  private static class TestOutputOperator extends AbstractAerospikeTransactionalPutOperator<TestEvent> {
+  private static class TestOutputOperator extends AbstractAerospikeTransactionalPutOperator<TestEvent>
+  {
 
-    TestOutputOperator() {
+    TestOutputOperator()
+    {
       cleanTable();
       cleanMetaTable();
     }
 
     @Override
-    protected Key getUpdatedBins(TestEvent tuple, List<Bin> bins)
-        throws AerospikeException {
+    protected Key getUpdatedBins(TestEvent tuple, List<Bin> bins) throws AerospikeException
+    {
 
       Key key = new Key(NAMESPACE,SET_NAME,String.valueOf(tuple.id));
       bins.add(new Bin("ID",tuple.id));
@@ -79,20 +84,23 @@
     }
   }
 
-  private static class TestInputOperator extends AbstractAerospikeGetOperator<TestEvent> {
-
-    TestInputOperator() {
+  private static class TestInputOperator extends AbstractAerospikeGetOperator<TestEvent>
+  {
+    TestInputOperator()
+    {
       cleanTable();
     }
 
     @Override
-    public TestEvent getTuple(Record record) {
+    public TestEvent getTuple(Record record)
+    {
 
       return new TestEvent(record.getInt("ID"));
     }
 
     @Override
-    public Statement queryToRetrieveData() {
+    public Statement queryToRetrieveData()
+    {
 
       Statement stmnt = new Statement();
       stmnt.setNamespace(NAMESPACE);
@@ -101,7 +109,8 @@
       return stmnt;
     }
 
-    public void insertEventsInTable(int numEvents) {
+    public void insertEventsInTable(int numEvents)
+    {
 
       AerospikeClient client = null;
       try {
@@ -113,20 +122,20 @@
           bin = new Bin("ID",i);
           client.put(null, key, bin);
         }
-      }
-      catch (AerospikeException e) {
+      } catch (AerospikeException e) {
         throw e;
-      }
-      finally {
-        if (null != client) client.close();
+      } finally {
+        if (null != client) {
+          client.close();
+        }
       }
     }
 
   }
 
   @Test
-  public void TestAerospikeOutputOperator() {
-
+  public void TestAerospikeOutputOperator()
+  {
     AerospikeTransactionalStore transactionalStore = getTransactionalStore();
     OperatorContext context = getOperatorContext(APP_ID);
     TestOutputOperator outputOperator = new TestOutputOperator();
@@ -149,8 +158,8 @@
   }
 
   @Test
-  public void TestAerospikeInputOperator() {
-
+  public void TestAerospikeInputOperator()
+  {
     AerospikeStore store = getStore();
     OperatorContext context = getOperatorContext(APP_ID);
     TestInputOperator inputOperator = new TestInputOperator();
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJONonTransactionalPutOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJONonTransactionalPutOperatorTest.java
index 2ba9bb7..77be7ce 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJONonTransactionalPutOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJONonTransactionalPutOperatorTest.java
@@ -16,17 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.aerospike;
+package org.apache.apex.malhar.contrib.aerospike;
 
 import java.util.List;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.contrib.aerospike.AerospikeTestUtils.*;
-
-import static com.datatorrent.contrib.aerospike.AerospikeTestUtils.*;
-
+import org.apache.apex.malhar.contrib.aerospike.AerospikeTestUtils.TestPOJO;
 
 /**
  * Tests {@link AerospikePOJONonTransactionalPutOperator}
@@ -37,16 +34,16 @@
   private static final String APP_ID = "AerospikeNonTransactionalPutOperatorTest";
 
   @Test
-  public void TestAerospikeNonTransactionalPutOperator() {
-
-    cleanTable();
+  public void TestAerospikeNonTransactionalPutOperator()
+  {
+    AerospikeTestUtils.cleanTable();
 
     AerospikePOJONonTransactionalPutOperator outputOperator = new AerospikePOJONonTransactionalPutOperator();
-    outputOperator.setStore(getStore());
-    outputOperator.setExpressions(getExpressions());
-    outputOperator.setup(getOperatorContext(APP_ID));
+    outputOperator.setStore(AerospikeTestUtils.getStore());
+    outputOperator.setExpressions(AerospikeTestUtils.getExpressions());
+    outputOperator.setup(AerospikeTestUtils.getOperatorContext(APP_ID));
 
-    List<TestPOJO> events = getEvents();
+    List<TestPOJO> events = AerospikeTestUtils.getEvents();
 
     outputOperator.beginWindow(0);
     for (TestPOJO event : events) {
@@ -55,7 +52,7 @@
     outputOperator.endWindow();
 
     // check records
-    Assert.assertTrue("key and value check", checkEvents());
+    Assert.assertTrue("key and value check", AerospikeTestUtils.checkEvents());
   }
 
 }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJOTransactionalPutOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJOTransactionalPutOperatorTest.java
index fb034ff..9aea2c4 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJOTransactionalPutOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikePOJOTransactionalPutOperatorTest.java
@@ -16,16 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.aerospike;
+package org.apache.apex.malhar.contrib.aerospike;
 
 import java.util.List;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.contrib.aerospike.AerospikeTestUtils.*;
-
-import static com.datatorrent.contrib.aerospike.AerospikeTestUtils.*;
+import org.apache.apex.malhar.contrib.aerospike.AerospikeTestUtils.TestPOJO;
 
 /**
  * Tests {@link AerospikePOJOTransactionalPutOperator}
@@ -36,16 +34,17 @@
   private static final String APP_ID = "AerospikeTransactionalPutOperatorTest";
 
   @Test
-  public void TestAerospikeTransactionalPutOperator() {
-
-    cleanTable(); cleanMetaTable();
+  public void TestAerospikeTransactionalPutOperator()
+  {
+    AerospikeTestUtils.cleanTable();
+    AerospikeTestUtils.cleanMetaTable();
 
     AerospikePOJOTransactionalPutOperator outputOperator = new AerospikePOJOTransactionalPutOperator();
-    outputOperator.setStore(getTransactionalStore());
-    outputOperator.setExpressions(getExpressions());
-    outputOperator.setup(getOperatorContext(APP_ID));
+    outputOperator.setStore(AerospikeTestUtils.getTransactionalStore());
+    outputOperator.setExpressions(AerospikeTestUtils.getExpressions());
+    outputOperator.setup(AerospikeTestUtils.getOperatorContext(APP_ID));
 
-    List<TestPOJO> events = getEvents();
+    List<TestPOJO> events = AerospikeTestUtils.getEvents();
 
     outputOperator.beginWindow(0);
     for (TestPOJO event : events) {
@@ -54,7 +53,7 @@
     outputOperator.endWindow();
 
     // check records
-    Assert.assertTrue("key and value check", checkEvents());
+    Assert.assertTrue("key and value check", AerospikeTestUtils.checkEvents());
   }
 
 }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikeTestUtils.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikeTestUtils.java
index 9498562..6dda3ff 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikeTestUtils.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/aerospike/AerospikeTestUtils.java
@@ -16,7 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.aerospike;
+package org.apache.apex.malhar.contrib.aerospike;
+
+import java.util.ArrayList;
+import java.util.List;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -30,17 +33,16 @@
 import com.aerospike.client.query.Statement;
 import com.datatorrent.api.Attribute.AttributeMap;
 import com.datatorrent.api.Context.OperatorContext;
+
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
 import com.datatorrent.api.DAG;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
-
 /**
  * Utility class encapsulating code used by several tests
  */
-public class AerospikeTestUtils {
+public class AerospikeTestUtils
+{
   private static final Logger LOG = LoggerFactory.getLogger(AerospikeTestUtils.class);
 
   public static final String NODE = "127.0.0.1";
@@ -53,7 +55,8 @@
   public static final int NUM_TUPLES = 10;
 
   // removes all records from set SET_NAME in namespace NAMESPACE
-  static void cleanTable() {
+  static void cleanTable()
+  {
     AerospikeClient client = null;
     try {
       client = new AerospikeClient(NODE, PORT);
@@ -63,23 +66,24 @@
       stmnt.setSetName(SET_NAME);
 
       RecordSet rs = client.query(null, stmnt);
-      while(rs.next()){
+      while (rs.next()) {
         client.delete(null, rs.getKey());
       }
-    }
-    catch (AerospikeException e) {
+    } catch (AerospikeException e) {
       LOG.error("cleanTable failed: {}", e);
       throw e;
-    }
-    finally {
-      if (null != client) client.close();
+    } finally {
+      if (null != client) {
+        client.close();
+      }
     }
   }
 
   // removes all records from set AerospikeTransactionalStore.DEFAULT_META_SET (used to store
   // committed window ids) in namespace NAMESPACE
   //
-  static void cleanMetaTable() {
+  static void cleanMetaTable()
+  {
     AerospikeClient client = null;
     try {
       client = new AerospikeClient(NODE, PORT);
@@ -89,21 +93,22 @@
       stmnt.setSetName(AerospikeTransactionalStore.DEFAULT_META_SET);
 
       RecordSet rs = client.query(null, stmnt);
-      while(rs.next()){
+      while (rs.next()) {
         client.delete(null, rs.getKey());
       }
-    }
-    catch (AerospikeException e) {
+    } catch (AerospikeException e) {
       LOG.error("cleanMetaTable failed: {}", e);
       throw e;
-    }
-    finally {
-      if (null != client) client.close();
+    } finally {
+      if (null != client) {
+        client.close();
+      }
     }
   }
 
   // returns the number of records in set SET_NAME in namespace NAMESPACE
-  static long getNumOfEventsInStore() {
+  static long getNumOfEventsInStore()
+  {
     AerospikeClient client = null;
     try {
       long count = 0;
@@ -113,17 +118,17 @@
       stmnt.setSetName(SET_NAME);
 
       RecordSet rs = client.query(null, stmnt);
-      while(rs.next()){
+      while (rs.next()) {
         count++;
       }
       return count;
-    }
-    catch (AerospikeException e) {
+    } catch (AerospikeException e) {
       LOG.error("getNumOfEventsInStore failed: {}", e);
       throw e;
-    }
-    finally {
-      if (null != client) client.close();
+    } finally {
+      if (null != client) {
+        client.close();
+      }
     }
   }
 
@@ -174,49 +179,57 @@
     long count = 0;
     AerospikeClient client = null;
     try {
-        client = new AerospikeClient(NODE, PORT);
-        Statement stmnt = new Statement();
-        stmnt.setNamespace(NAMESPACE);
-        stmnt.setSetName(SET_NAME);
+      client = new AerospikeClient(NODE, PORT);
+      Statement stmnt = new Statement();
+      stmnt.setNamespace(NAMESPACE);
+      stmnt.setSetName(SET_NAME);
 
-        RecordSet rs = client.query(null, stmnt);
-        while ( rs.next() ) {
-          Record record = rs.getRecord();
-          Key key = rs.getKey();
-          if (! TestPOJO.check(key, record)) return false;
-          count++;
+      RecordSet rs = client.query(null, stmnt);
+      while ( rs.next() ) {
+        Record record = rs.getRecord();
+        Key key = rs.getKey();
+        if (!TestPOJO.check(key, record)) {
+          return false;
         }
-    }
-    catch (AerospikeException e) {
+        count++;
+      }
+    } catch (AerospikeException e) {
       throw new RuntimeException("Error fetching records: ", e);
-    }
-    finally {
-      if (null != client) client.close();
+    } finally {
+      if (null != client) {
+        client.close();
+      }
     }
 
     return NUM_TUPLES == count;
   }
 
   // needs to be public for PojoUtils to work
-  public static class TestPOJO {
-    public static final String ID = "ID", VAL = "VALUE";
-    final int id, value;
+  public static class TestPOJO
+  {
+    public static final String ID = "ID";
+    public static final String VAL = "VALUE";
+    final int id;
+    final int value;
 
-    TestPOJO(int i) {
-      id = i; value = id * id;
+    TestPOJO(int i)
+    {
+      id = i;
+      value = id * id;
     }
 
-    public Key getKey() {
+    public Key getKey()
+    {
       try {
         Key key = new Key(NAMESPACE, SET_NAME, String.valueOf(id));
         return key;
-      }
-      catch (AerospikeException e) {
+      } catch (AerospikeException e) {
         throw new RuntimeException("getKey failed: ", e);
       }
     }
 
-    public List<Bin> getBins() {
+    public List<Bin> getBins()
+    {
       List<Bin> list = new ArrayList<Bin>();
       list.add(new Bin(ID, id));
       list.add(new Bin(VAL, value));
@@ -224,8 +237,10 @@
     }
 
     // check record key and values
-    public static boolean check(Key key, Record record) {
-      final int binId = record.getInt(ID), binVal = record.getInt(VAL);
+    public static boolean check(Key key, Record record)
+    {
+      final int binId = record.getInt(ID);
+      final int binVal = record.getInt(VAL);
       final Key rKey = new Key(NAMESPACE, SET_NAME, String.valueOf(binId));
       LOG.debug("Checking id = {}", binId);
       return binVal == binId * binId && rKey.equals(key);
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/ApacheLogInputGeneratorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/ApacheLogInputGeneratorTest.java
index 154437e..fa3eb05 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/ApacheLogInputGeneratorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/ApacheLogInputGeneratorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.apachelog;
+package org.apache.apex.malhar.contrib.apachelog;
 
 
 import org.junit.Assert;
@@ -24,10 +24,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
- * Functional tests for {@link com.datatorrent.contrib.apachelog.ApacheLogInputGenerator}.
+ * Functional tests for {@link org.apache.apex.malhar.contrib.apachelog.ApacheLogInputGenerator}.
  */
 public class ApacheLogInputGeneratorTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLocalLogTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLocalLogTest.java
index b0f7751..7946259 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLocalLogTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLocalLogTest.java
@@ -16,20 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.apachelog;
+package org.apache.apex.malhar.contrib.apachelog;
+
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.LocalMode;
-import org.apache.hadoop.conf.Configuration;
-import org.junit.Test;
 
 /**
  *
  */
 public class ApplicationLocalLogTest
 {
-  public ApplicationLocalLogTest()
-  {
-  }
+  private static final Logger LOG = LoggerFactory.getLogger(ApplicationLocalLogTest.class);
 
   @Test
   public void testSomeMethod() throws Exception
@@ -42,7 +44,7 @@
     long start = System.currentTimeMillis();
     lc.run();
     long end = System.currentTimeMillis();
-    long time = end -start;
-    System.out.println("Test used "+time+" ms");
+    long time = end - start;
+    LOG.info("Test used " + time + " ms");
   }
 }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLogGeneratorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLogGeneratorTest.java
index 4f7a20b..a045b77 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLogGeneratorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/ApplicationLogGeneratorTest.java
@@ -16,20 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.apachelog;
+package org.apache.apex.malhar.contrib.apachelog;
+
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.LocalMode;
-import org.apache.hadoop.conf.Configuration;
-import org.junit.Test;
 
 /**
  *
  */
 public class ApplicationLogGeneratorTest
 {
-  public ApplicationLogGeneratorTest()
-  {
-  }
+  private static final Logger LOG = LoggerFactory.getLogger(ApplicationLogGeneratorTest.class);
 
   @Test
   public void testSomeMethod() throws Exception
@@ -42,7 +44,7 @@
     long start = System.currentTimeMillis();
     lc.run();
     long end = System.currentTimeMillis();
-    long time = end -start;
-    System.out.println("Test used "+time+" ms");
+    long time = end - start;
+    LOG.info("Test used " + time + " ms");
   }
 }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/zmq/ApplicationTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/zmq/ApplicationTest.java
index 4c3d2a0..dc2e521 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/zmq/ApplicationTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/apachelog/zmq/ApplicationTest.java
@@ -16,17 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.apachelog.zmq;
+package org.apache.apex.malhar.contrib.apachelog.zmq;
+
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.LocalMode;
-import org.apache.hadoop.conf.Configuration;
-import org.junit.Test;
 
 /**
  *
  */
 public class ApplicationTest
 {
+  private static final Logger LOG = LoggerFactory.getLogger(ApplicationTest.class);
+
   public ApplicationTest()
   {
   }
@@ -42,7 +48,7 @@
     long start = System.currentTimeMillis();
     lc.run();
     long end = System.currentTimeMillis();
-    long time = end -start;
-    System.out.println("Test used "+time+" ms");
+    long time = end - start;
+    LOG.info("Test used " + time + " ms");
   }
 }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/AvroFileInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/AvroFileInputOperatorTest.java
index 17b1e2c..6824a6a 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/AvroFileInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/AvroFileInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.avro;
+package org.apache.apex.malhar.contrib.avro;
 
 import java.io.File;
 import java.io.IOException;
@@ -32,6 +32,11 @@
 import org.junit.runner.Description;
 import org.python.google.common.collect.Lists;
 
+import org.apache.apex.malhar.lib.helper.TestPortContext;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperatorTest;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.avro.Schema;
 import org.apache.avro.file.DataFileWriter;
 import org.apache.avro.generic.GenericData;
@@ -52,16 +57,12 @@
 import com.datatorrent.api.Context.PortContext;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
+
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.Sink;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.helper.TestPortContext;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.io.fs.AbstractFileInputOperatorTest;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
-
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * <p>
@@ -152,7 +153,7 @@
     avroFileInput.teardown();
 
   }
-  
+
   @Test
   public void testIdempotencyWithCheckPoint() throws Exception
   {
@@ -162,7 +163,7 @@
       public void writeFile(int count, String fileName) throws IOException
       {
         recordList = Lists.newArrayList();
-        
+
         while (count > 0) {
           GenericRecord rec = new GenericData.Record(new Schema.Parser().parse(AVRO_SCHEMA));
           rec.put("orderId", count * 1L);
@@ -172,7 +173,7 @@
           count--;
           recordList.add(rec);
         }
-        
+
         writeAvroFile(new File(fileName));
       }
 
@@ -195,8 +196,8 @@
       }
     });
   }
-  
-  
+
+
   @Test
   public void testMultipleFileAvroReads() throws Exception
   {
diff --git a/contrib/src/test/java/com/datatorrent/contrib/avro/AvroFileToPojoModuleTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/AvroFileToPojoModuleTest.java
similarity index 96%
rename from contrib/src/test/java/com/datatorrent/contrib/avro/AvroFileToPojoModuleTest.java
rename to contrib/src/test/java/org/apache/apex/malhar/contrib/avro/AvroFileToPojoModuleTest.java
index 6965475..e2dd63b 100644
--- a/contrib/src/test/java/com/datatorrent/contrib/avro/AvroFileToPojoModuleTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/AvroFileToPojoModuleTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.avro;
+package org.apache.apex.malhar.contrib.avro;
 
 import java.io.File;
 import java.io.IOException;
@@ -32,6 +32,8 @@
 import org.python.google.common.collect.Lists;
 
 import org.apache.apex.engine.EmbeddedAppLauncherImpl;
+import org.apache.apex.malhar.lib.helper.TestPortContext;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.avro.Schema;
 import org.apache.avro.file.DataFileWriter;
 import org.apache.avro.generic.GenericData;
@@ -49,10 +51,8 @@
 import com.datatorrent.api.Context.PortContext;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.helper.TestPortContext;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * <p>
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/AvroToPojoTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/AvroToPojoTest.java
index 23714a3..8d66581 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/AvroToPojoTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/AvroToPojoTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.avro;
+package org.apache.apex.malhar.contrib.avro;
 
 import java.util.List;
 import java.util.ListIterator;
@@ -28,14 +28,14 @@
 import org.junit.runner.Description;
 import org.python.google.common.collect.Lists;
 
+import org.apache.apex.malhar.lib.helper.TestPortContext;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.avro.Schema;
 import org.apache.avro.generic.GenericData;
 import org.apache.avro.generic.GenericRecord;
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.helper.TestPortContext;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
 public class AvroToPojoTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/PojoToAvroTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/PojoToAvroTest.java
index 787e684..c004cd7 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/PojoToAvroTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/avro/PojoToAvroTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.avro;
+package org.apache.apex.malhar.contrib.avro;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -28,10 +28,11 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.helper.TestPortContext;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.helper.TestPortContext;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
 public class PojoToAvroTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperatorCodecsTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperatorCodecsTest.java
index eb3a300..0cdca1a 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperatorCodecsTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperatorCodecsTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -26,6 +26,8 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.helper.TestPortContext;
+
 import com.datastax.driver.core.ConsistencyLevel;
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
@@ -33,9 +35,8 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.helper.TestPortContext;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperatorCompositePKTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperatorCompositePKTest.java
index 7769c8d..e69b9cb 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperatorCompositePKTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperatorCompositePKTest.java
@@ -16,21 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.util.List;
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.helper.TestPortContext;
+
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.helper.TestPortContext;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 import static org.junit.Assert.assertEquals;
 
 /**
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperatorCountersTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperatorCountersTest.java
index ccfb9d5..7c58c0d 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperatorCountersTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AbstractUpsertOutputOperatorCountersTest.java
@@ -16,11 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.util.List;
 import org.junit.Before;
 import org.junit.Test;
+
+import org.apache.apex.malhar.lib.helper.TestPortContext;
+
 import com.datastax.driver.core.ConsistencyLevel;
 import com.datastax.driver.core.ResultSet;
 import com.datastax.driver.core.Row;
@@ -28,9 +31,8 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.helper.TestPortContext;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 import static org.junit.Assert.assertEquals;
 
 /**
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/Address.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/Address.java
index faeef03..e2ee8c5 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/Address.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/Address.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.util.Set;
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AddressCodec.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AddressCodec.java
index 017b34d..9b0362b 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AddressCodec.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/AddressCodec.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.nio.ByteBuffer;
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CassandraLookupCacheBackedOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CassandraLookupCacheBackedOperatorTest.java
index fc9ed1e..3c41891 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CassandraLookupCacheBackedOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CassandraLookupCacheBackedOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
@@ -30,11 +30,11 @@
 import org.junit.AfterClass;
 import org.junit.BeforeClass;
 
+import org.apache.apex.malhar.lib.db.jdbc.JDBCLookupCacheBackedOperatorTest;
+
 import com.datatorrent.api.Context.OperatorContext;
 
-import com.datatorrent.lib.db.jdbc.JDBCLookupCacheBackedOperatorTest;
-
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Tests for Cassandra backed lookup cache.
@@ -67,7 +67,7 @@
       }
       if (!foundTest) {
         String createKeyspace = "CREATE KEYSPACE " + KEYSPACE_NAME +
-          " WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':3}";
+            " WITH REPLICATION = {'class':'SimpleStrategy', 'replication_factor':3}";
         stmt.executeUpdate(createKeyspace);
       }
       String useKeyspace = "USE " + KEYSPACE_NAME;
@@ -96,8 +96,7 @@
 
       OperatorContext context = mockOperatorContext(7);
       lookupCacheBackedOperator.setup(context);
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       logger.error("cassandra setup", ex);
     }
 
@@ -112,8 +111,7 @@
 
       String dropKeyspace = "DROP KEYSPACE " + KEYSPACE_NAME;
       stmt.executeUpdate(dropKeyspace);
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       logger.error("cassandra teardown", ex);
     }
   }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CassandraOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CassandraOperatorTest.java
index c3a66d8..39a4af3 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CassandraOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CassandraOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.util.ArrayList;
 import java.util.Date;
@@ -36,6 +36,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.helper.TestPortContext;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+
 import com.datastax.driver.core.BoundStatement;
 import com.datastax.driver.core.Cluster;
 import com.datastax.driver.core.Configuration;
@@ -52,12 +56,9 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.helper.TestPortContext;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.FieldInfo;
 import com.datatorrent.netlet.util.DTThrowable;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Tests for {@link AbstractCassandraTransactionableOutputOperator} and {@link AbstractCassandraInputOperator}
@@ -91,25 +92,25 @@
   @BeforeClass
   public static void setup()
   {
-    @SuppressWarnings("UnusedDeclaration") Class<?> clazz = org.codehaus.janino.CompilerFactory.class;
+    @SuppressWarnings("UnusedDeclaration")
+    Class<?> clazz = org.codehaus.janino.CompilerFactory.class;
     try {
       cluster = Cluster.builder()
               .addContactPoint(NODE).build();
       session = cluster.connect(KEYSPACE);
 
       String createMetaTable = "CREATE TABLE IF NOT EXISTS " + CassandraTransactionalStore.DEFAULT_META_TABLE + " ( "
-              + CassandraTransactionalStore.DEFAULT_APP_ID_COL + " TEXT, "
-              + CassandraTransactionalStore.DEFAULT_OPERATOR_ID_COL + " INT, "
-              + CassandraTransactionalStore.DEFAULT_WINDOW_COL + " BIGINT, "
-              + "PRIMARY KEY (" + CassandraTransactionalStore.DEFAULT_APP_ID_COL + ", " + CassandraTransactionalStore.DEFAULT_OPERATOR_ID_COL + ") "
-              + ");";
+          + CassandraTransactionalStore.DEFAULT_APP_ID_COL + " TEXT, "
+          + CassandraTransactionalStore.DEFAULT_OPERATOR_ID_COL + " INT, "
+          + CassandraTransactionalStore.DEFAULT_WINDOW_COL + " BIGINT, "
+          + "PRIMARY KEY (" + CassandraTransactionalStore.DEFAULT_APP_ID_COL + ", " + CassandraTransactionalStore.DEFAULT_OPERATOR_ID_COL + ") "
+          + ");";
       session.execute(createMetaTable);
       String createTable = "CREATE TABLE IF NOT EXISTS " + KEYSPACE + "." + TABLE_NAME + " (id uuid PRIMARY KEY,age int,lastname text,test boolean,floatvalue float,doubleValue double,set1 set<int>,list1 list<int>,map1 map<text,int>,last_visited timestamp);";
       session.execute(createTable);
       createTable = "CREATE TABLE IF NOT EXISTS " + KEYSPACE + "." + TABLE_NAME_INPUT + " (id int PRIMARY KEY,lastname text,age int);";
       session.execute(createTable);
-    }
-    catch (Throwable e) {
+    } catch (Throwable e) {
       DTThrowable.rethrow(e);
     }
   }
@@ -221,8 +222,7 @@
     public void insertEventsInTable(int numEvents)
     {
       try {
-        Cluster cluster = Cluster.builder()
-                .addContactPoint(NODE).build();
+        Cluster cluster = Cluster.builder().addContactPoint(NODE).build();
         Session session = cluster.connect(KEYSPACE);
 
         String insert = "INSERT INTO " + TABLE_NAME_INPUT + " (ID,lastname,age)" + " VALUES (?,?,?);";
@@ -234,8 +234,7 @@
           mapAge.put(i, i + 10);
           session.execute(boundStatement.bind(i, "test" + i, i + 10));
         }
-      }
-      catch (DriverException e) {
+      } catch (DriverException e) {
         throw new RuntimeException(e);
       }
     }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CompositePrimaryKeyRow.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CompositePrimaryKeyRow.java
index 9aa2dae..1600829 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CompositePrimaryKeyRow.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CompositePrimaryKeyRow.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 /**
  A pojo that represents the table row in which a row key is a composite
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CompositePrimaryKeyUpdateOperator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CompositePrimaryKeyUpdateOperator.java
index f2d6737..7dd24bd 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CompositePrimaryKeyUpdateOperator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CompositePrimaryKeyUpdateOperator.java
@@ -16,9 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.util.Map;
+
 import com.datastax.driver.core.TypeCodec;
 
 /**
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CounterColumnTableEntry.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CounterColumnTableEntry.java
index 72b3373..6b5ccc2 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CounterColumnTableEntry.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CounterColumnTableEntry.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 public class CounterColumnTableEntry
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CounterColumnUpdatesOperator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CounterColumnUpdatesOperator.java
index 1ec416c..4cf5c0e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CounterColumnUpdatesOperator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/CounterColumnUpdatesOperator.java
@@ -16,9 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.util.Map;
+
 import com.datastax.driver.core.TypeCodec;
 
 public class CounterColumnUpdatesOperator extends AbstractUpsertOutputOperator
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/FullName.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/FullName.java
index 61636bb..a93e0a1 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/FullName.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/FullName.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 public class FullName
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/FullNameCodec.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/FullNameCodec.java
index 9816d43..1ccdefb 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/FullNameCodec.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/FullNameCodec.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.nio.ByteBuffer;
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/TestInputPojo.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/TestInputPojo.java
index 8f0298f..89de5a8 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/TestInputPojo.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/TestInputPojo.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 
 /*
@@ -37,6 +37,7 @@
   {
     this.id = id;
   }
+
   private String lastname;
   private int age;
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/User.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/User.java
index f4c1d8d..9948c9a 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/User.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/User.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.util.Date;
 import java.util.List;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/UserUpsertOperator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/UserUpsertOperator.java
index e15c9f6..aa48401 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/UserUpsertOperator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/cassandra/UserUpsertOperator.java
@@ -16,10 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.cassandra;
+package org.apache.apex.malhar.contrib.cassandra;
 
 import java.util.HashMap;
 import java.util.Map;
+
 import com.datastax.driver.core.CodecRegistry;
 import com.datastax.driver.core.ConsistencyLevel;
 import com.datastax.driver.core.TypeCodec;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseGetTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseGetTest.java
index 0c2de9b..c66ee5f 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseGetTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseGetTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
 import java.io.IOException;
 import java.net.URI;
@@ -24,13 +24,17 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import com.couchbase.client.CouchbaseClient;
-import com.couchbase.client.CouchbaseConnectionFactoryBuilder;
-
-import org.junit.*;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.couchbase.client.CouchbaseClient;
+import com.couchbase.client.CouchbaseConnectionFactoryBuilder;
+
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
@@ -71,8 +75,7 @@
     URI uri = null;
     try {
       uri = new URI("http://localhost:8091/pools");
-    }
-    catch (URISyntaxException ex) {
+    } catch (URISyntaxException ex) {
       logger.error("Error connecting to Couchbase: " + ex.getMessage());
       DTThrowable.rethrow(ex.getCause());
     }
@@ -84,8 +87,7 @@
       cfb.setOpTimeout(10000);  // wait up to 10 seconds for an operation to succeed
       cfb.setOpQueueMaxBlockTime(5000); // wait up to 5 second when trying to enqueue an operation
       client = new CouchbaseClient(cfb.buildCouchbaseConnection(baseURIs, "default", "default"));
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       logger.error("Error connecting to Couchbase: " + ex.getMessage());
       DTThrowable.rethrow(ex.getCause());
     }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseInputOperatorTest.java
index 776fb11..b654c3e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
 import java.net.URI;
 import java.util.ArrayList;
@@ -24,11 +24,6 @@
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 
-import com.couchbase.client.CouchbaseClient;
-import com.couchbase.client.CouchbaseConnectionFactory;
-import com.couchbase.client.CouchbaseConnectionFactoryBuilder;
-import com.google.common.collect.Lists;
-
 import org.couchbase.mock.Bucket.BucketType;
 import org.couchbase.mock.BucketConfiguration;
 import org.couchbase.mock.CouchbaseMock;
@@ -37,8 +32,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.partitioner.StatelessPartitionerTest.PartitioningContextImpl;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.partitioner.StatelessPartitionerTest.PartitioningContextImpl;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
+import com.couchbase.client.CouchbaseClient;
+import com.couchbase.client.CouchbaseConnectionFactory;
+import com.couchbase.client.CouchbaseConnectionFactoryBuilder;
+import com.google.common.collect.Lists;
 
 import com.datatorrent.api.Attribute.AttributeMap;
 import com.datatorrent.api.DAG;
@@ -139,11 +139,11 @@
       wid++;
     }
     Assert.assertEquals("Tuples read should be same ", 10, sink.collectedTuples.size());
-    for (AbstractCouchBaseInputOperator<String> o: opers){
-     o.teardown();
+    for (AbstractCouchBaseInputOperator<String> o: opers) {
+      o.teardown();
     }
-      mockCouchbase1.stop();
-      mockCouchbase2.stop();
+    mockCouchbase1.stop();
+    mockCouchbase2.stop();
 
   }
 
@@ -176,11 +176,9 @@
         value = i * 100;
         try {
           client.set(key, value).get();
-        }
-        catch (InterruptedException ex) {
+        } catch (InterruptedException ex) {
           DTThrowable.rethrow(ex);
-        }
-        catch (ExecutionException ex) {
+        } catch (ExecutionException ex) {
           DTThrowable.rethrow(ex);
         }
       }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseOutputOperatorTest.java
index 1e7285d..5d5ac67 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseOutputOperatorTest.java
@@ -16,35 +16,37 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
-import com.couchbase.client.CouchbaseConnectionFactory;
-import com.couchbase.client.CouchbaseConnectionFactoryBuilder;
 import java.io.IOException;
 import java.net.URI;
 import java.util.ArrayList;
 
+import java.util.HashMap;
+import java.util.List;
+
+import org.couchbase.mock.Bucket.BucketType;
+import org.couchbase.mock.BucketConfiguration;
+import org.couchbase.mock.CouchbaseMock;
+
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.couchbase.client.CouchbaseConnectionFactory;
+import com.couchbase.client.CouchbaseConnectionFactoryBuilder;
+
 import com.datatorrent.api.Attribute.AttributeMap;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
 
 import com.datatorrent.netlet.util.DTThrowable;
-import java.util.HashMap;
-import java.util.List;
-import org.couchbase.mock.Bucket.BucketType;
-import org.couchbase.mock.BucketConfiguration;
-import org.couchbase.mock.CouchbaseMock;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class CouchBaseOutputOperatorTest
 {
-
   private static final Logger logger = LoggerFactory.getLogger(CouchBaseOutputOperatorTest.class);
   private static final String APP_ID = "CouchBaseOutputOperatorTest";
   private static final String password = "";
@@ -159,8 +161,7 @@
     store.setUriString("localhost:" + port1 + "," + "localhost:" + port1);
     try {
       store.connect();
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       DTThrowable.rethrow(ex);
     }
     store.getInstance().flush();
@@ -201,8 +202,7 @@
     store.setUriString("localhost:" + port1 + "," + "localhost:" + port1);
     try {
       store.connect();
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       DTThrowable.rethrow(ex);
     }
     store.getInstance().flush();
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBasePOJOTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBasePOJOTest.java
index 7ed9831..c7f3f60 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBasePOJOTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBasePOJOTest.java
@@ -16,21 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.concurrent.ExecutionException;
 
-import com.couchbase.client.protocol.views.DesignDocument;
-import com.couchbase.client.protocol.views.ViewDesign;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
+import com.couchbase.client.protocol.views.DesignDocument;
+import com.couchbase.client.protocol.views.ViewDesign;
 
 import com.datatorrent.api.Attribute.AttributeMap;
 import com.datatorrent.api.Context.OperatorContext;
@@ -38,7 +38,7 @@
 
 import com.datatorrent.netlet.util.DTThrowable;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class CouchBasePOJOTest
 {
@@ -63,8 +63,7 @@
     store.setUriString(uri);
     try {
       store.connect();
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       DTThrowable.rethrow(ex);
     }
     store.getInstance().flush();
@@ -74,20 +73,18 @@
     OperatorContext context = mockOperatorContext(OPERATOR_ID, attributeMap);
     TestInputOperator inputOperator = new TestInputOperator();
     inputOperator.setStore(store);
-    inputOperator.setOutputClass("com.datatorrent.contrib.couchbase.TestComplexPojoInput");
+    inputOperator.setOutputClass("org.apache.apex.malhar.contrib.couchbase.TestComplexPojoInput");
     inputOperator.insertEventsInTable(2);
     try {
       Thread.sleep(10000);
-    }
-    catch (InterruptedException ex) {
+    } catch (InterruptedException ex) {
       throw new RuntimeException(ex);
     }
     inputOperator.createAndFetchViewQuery1();
 
     try {
       Thread.sleep(1000);
-    }
-    catch (InterruptedException ex) {
+    } catch (InterruptedException ex) {
       throw new RuntimeException(ex);
     }
     CollectorTestSink<Object> sink = new CollectorTestSink<Object>();
@@ -132,11 +129,9 @@
         store.client.set("Key1", 431);
         store.client.set("Key2", "{\"name\":\"test\",\"map\":{\"test\":12345},\"age\":23}").get();
         store.client.set("Key3", "{\"name\":\"test1\",\"map\":{\"test2\":12345},\"age\":12}").get();
-      }
-      catch (InterruptedException ex) {
+      } catch (InterruptedException ex) {
         DTThrowable.rethrow(ex);
-      }
-      catch (ExecutionException ex) {
+      } catch (ExecutionException ex) {
         DTThrowable.rethrow(ex);
       }
 
@@ -147,11 +142,11 @@
       DesignDocument designDoc = new DesignDocument(DESIGN_DOC_ID1);
       String viewName = TEST_VIEW1;
       String mapFunction
-              = "function (doc, meta) {\n"
-              + "  if( meta.type == \"json\") {\n"
-              + "    emit(doc.key,doc);\n"
-              + "  }\n"
-              + " }";
+          = "function (doc, meta) {\n"
+          + "  if( meta.type == \"json\") {\n"
+          + "    emit(doc.key,doc);\n"
+          + "  }\n"
+          + " }";
 
       ViewDesign viewDesign = new ViewDesign(viewName, mapFunction);
       designDoc.getViews().add(viewDesign);
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseSetTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseSetTest.java
index f57279d..b3fe019 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseSetTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/CouchBaseSetTest.java
@@ -16,15 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
-import com.couchbase.client.CouchbaseClient;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
-import net.spy.memcached.internal.OperationFuture;
-import net.spy.memcached.internal.OperationCompletionListener;
 
 import org.junit.After;
 import org.junit.AfterClass;
@@ -34,6 +31,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.couchbase.client.CouchbaseClient;
+import net.spy.memcached.internal.OperationCompletionListener;
+import net.spy.memcached.internal.OperationFuture;
+
 /**
  * CouchBaseSetTest class which implements unit tests for Couchbase set functionality.
  */
@@ -85,10 +86,8 @@
     // Try to connect to the client
     try {
       client = new CouchbaseClient(nodes, "default", "");
-    }
-    catch (Exception e) {
-      System.err.println("Error connecting to Couchbase: " + e.getMessage());
-      System.exit(1);
+    } catch (Exception e) {
+      throw new RuntimeException(e);
     }
 
     TestPojo obj = new TestPojo();
@@ -97,7 +96,7 @@
     HashMap<String, Integer> map = new HashMap<String, Integer>();
     map.put("test", 12345);
     obj.setMap(map);
-    future = processKeyValue("key" , obj);
+    future = processKeyValue("key", obj);
     future.addListener(listener);
 
   }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/TestComplexPojoInput.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/TestComplexPojoInput.java
index 71c1196..6d4b167 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/TestComplexPojoInput.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/TestComplexPojoInput.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
 import java.util.Map;
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/TestPojo.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/TestPojo.java
index dcc173f..8671081 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/TestPojo.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchbase/TestPojo.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchbase;
+package org.apache.apex.malhar.contrib.couchbase;
 
 import java.io.Serializable;
 import java.util.HashMap;
@@ -55,6 +55,7 @@
   {
     this.phone = phone;
   }
+
   private HashMap<String,Integer> map;
   private Integer phone;
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBInputOperatorTest.java
index 96e07cc..f5f7a21 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBInputOperatorTest.java
@@ -16,11 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchdb;
+package org.apache.apex.malhar.contrib.couchdb;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
-import com.google.common.collect.Maps;
+import java.util.Map;
 
 import org.ektorp.ViewQuery;
 import org.junit.AfterClass;
@@ -29,10 +27,12 @@
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
-import java.util.Map;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import com.google.common.collect.Maps;
+
 
 /**
  * @since 0.3.5
@@ -78,7 +78,7 @@
     boolean found = false;
     for (Object o : sink.collectedTuples) {
       LOG.debug(o.toString());
-      Map<Object, Object> document = (Map<Object, Object>) o;
+      Map<Object, Object> document = (Map<Object, Object>)o;
       if (document.get("_id").equals(testDocumentId)) {
         found = true;
         Assert.assertEquals("name in document", "TD1", document.get("name"));
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBOutputOperatorTest.java
index 0d5c0a6..7b82287 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBOutputOperatorTest.java
@@ -16,20 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchdb;
+package org.apache.apex.malhar.contrib.couchdb;
 
 import java.net.MalformedURLException;
 import java.util.Map;
 
-import com.google.common.collect.Maps;
-
 import org.codehaus.jackson.JsonNode;
 import org.junit.AfterClass;
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import com.google.common.collect.Maps;
+
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Test for {@link MapBasedCouchDbOutputOperator}
@@ -111,6 +111,7 @@
     Assert.assertEquals("City is ","chandigarh",docNode.get("address").get("city").getTextValue());
 
   }
+
   public class TestPOJO
   {
     private String _id;
@@ -232,10 +233,8 @@
     {
       this.city = city;
     }
+
     private String city;
-
-
-
   }
 
   @BeforeClass
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBPOJOInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBPOJOInputOperatorTest.java
index 4b45e4f..8e7419e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBPOJOInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBPOJOInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchdb;
+package org.apache.apex.malhar.contrib.couchdb;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -26,9 +26,9 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class CouchDBPOJOInputOperatorTest
 {
@@ -68,7 +68,7 @@
     operatorTest.setStore(store);
 
     CollectorTestSink sink = new CollectorTestSink();
-    operatorTest.setOutputClass("com.datatorrent.contrib.couchdb.TestInputPOJO");
+    operatorTest.setOutputClass("org.apache.apex.malhar.contrib.couchdb.TestInputPOJO");
     operatorTest.setExpressionForDocId("id");
 
     ArrayList<String> expressions = new ArrayList<String>();
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBTestHelper.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBTestHelper.java
index 3ffb11c..7ab999f 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBTestHelper.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/CouchDBTestHelper.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchdb;
+package org.apache.apex.malhar.contrib.couchdb;
 
 import java.util.Map;
 
@@ -49,8 +49,8 @@
     if (!connector.contains(DESIGN_DOC_ID)) {
       //The design document doesn't exist in the database so we create it.
       JsonNode rootNode = mapper.createObjectNode();
-      ((ObjectNode) rootNode).put("language", "javascript");
-      ((ObjectNode) rootNode).putObject("views").putObject(TEST_VIEW).put("map", "function(doc) {\n  emit(doc._id, doc);\n}");
+      ((ObjectNode)rootNode).put("language", "javascript");
+      ((ObjectNode)rootNode).putObject("views").putObject(TEST_VIEW).put("map", "function(doc) {\n  emit(doc._id, doc);\n}");
       connector.create(DESIGN_DOC_ID, rootNode);
     }
     return new ViewQuery().designDocId(DESIGN_DOC_ID).viewName(TEST_VIEW);
@@ -61,7 +61,7 @@
     connector.create(dbTuple);
   }
 
-   public static void insertDocument(Object dbTuple)
+  public static void insertDocument(Object dbTuple)
   {
     connector.create(dbTuple);
   }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/PagedCouchDBInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/PagedCouchDBInputOperatorTest.java
index 2e0c797..ac9d79f 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/PagedCouchDBInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/PagedCouchDBInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchdb;
+package org.apache.apex.malhar.contrib.couchdb;
 
 import java.io.IOException;
 import java.util.Map;
@@ -29,11 +29,11 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Test for {@link PagedCouchDBInputOperatorTest}
@@ -59,8 +59,7 @@
       Map<Object, Object> valueMap = Maps.newHashMap();
       try {
         valueMap = mapper.readValue(row.getValueAsNode(), valueMap.getClass());
-      }
-      catch (IOException e) {
+      } catch (IOException e) {
         e.printStackTrace();
       }
       return valueMap;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/TestInputPOJO.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/TestInputPOJO.java
index 7d60573..3f535cb 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/TestInputPOJO.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/couchdb/TestInputPOJO.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.couchdb;
+package org.apache.apex.malhar.contrib.couchdb;
 
 public class TestInputPOJO
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchOperatorTest.java
index 671d7dc..03205f4 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.elasticsearch;
+package org.apache.apex.malhar.contrib.elasticsearch;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -86,11 +86,12 @@
   private List<String> writeToES()
   {
 
-    ElasticSearchMapOutputOperator<Map<String, Object>> operator = new ElasticSearchMapOutputOperator<Map<String, Object>>() {
+    ElasticSearchMapOutputOperator<Map<String, Object>> operator = new ElasticSearchMapOutputOperator<Map<String, Object>>()
+    {
       /*
        * (non-Javadoc)
        *
-       * @see com.datatorrent.contrib.elasticsearch. AbstractElasticSearchOutputOperator #processTuple(java.lang.Object)
+       * @see org.apache.apex.malhar.contrib.elasticsearch. AbstractElasticSearchOutputOperator #processTuple(java.lang.Object)
        */
       @Override
       public void processTuple(Map<String, Object> tuple)
@@ -134,11 +135,12 @@
    */
   private List<String> readFromES(List<String> writtenTupleIDs, final long testStartTime)
   {
-    ElasticSearchMapInputOperator<Map<String, Object>> operator = new ElasticSearchMapInputOperator<Map<String, Object>>() {
+    ElasticSearchMapInputOperator<Map<String, Object>> operator = new ElasticSearchMapInputOperator<Map<String, Object>>()
+    {
       /**
        * Set SearchRequestBuilder parameters specific to current window.
        *
-       * @see com.datatorrent.contrib.elasticsearch.ElasticSearchMapInputOperator#getSearchRequestBuilder()
+       * @see org.apache.apex.malhar.contrib.elasticsearch.ElasticSearchMapInputOperator#getSearchRequestBuilder()
        */
       @Override
       protected SearchRequestBuilder getSearchRequestBuilder()
@@ -155,8 +157,8 @@
 
     final List<String> tupleIDsRead = new ArrayList<String>();
 
-    Sink sink = new Sink<Map<String, Object>>() {
-
+    Sink sink = new Sink<Map<String, Object>>()
+    {
       @Override
       public void put(Map<String, Object> tuple)
       {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchPercolateTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchPercolateTest.java
index daf1602..25f82ed 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchPercolateTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/elasticsearch/ElasticSearchPercolateTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.elasticsearch;
+package org.apache.apex.malhar.contrib.elasticsearch;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -36,7 +36,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Test class for percolate operator
@@ -65,11 +65,10 @@
   @Test
   public void testPercolate() throws IOException
   {
-    try{
+    try {
       registerPercolateQueries();
       checkPercolateResponse();
-    }
-    catch(NoNodeAvailableException e){
+    } catch (NoNodeAvailableException e) {
       //This indicates that elasticsearch is not running on a particular machine.
       //Silently ignore in this case.
     }
@@ -100,30 +99,30 @@
     oper.documentType = DOCUMENT_TYPE;
     oper.setup(null);
 
-    String[] messages = { "{content:'This will match only with malhar'}",
+    String[] messages = {"{content:'This will match only with malhar'}",
 
-    "{content:'This will match only with github'}",
+      "{content:'This will match only with github'}",
 
-    "{content:'This will match with both github and malhar'}",
+      "{content:'This will match with both github and malhar'}",
 
-    "{content:'This will not match with any of them'}"
+      "{content:'This will not match with any of them'}"
 
     };
 
     String[][] matches = {
 
-    { MALHAR_TOPIC },
+      {MALHAR_TOPIC},
 
-    { GITHUB_TOPIC },
+      {GITHUB_TOPIC},
 
-    { GITHUB_TOPIC, MALHAR_TOPIC },
+      {GITHUB_TOPIC, MALHAR_TOPIC},
 
-    {}
+      {}
 
     };
 
     CollectorTestSink<PercolateResponse> sink = new CollectorTestSink<PercolateResponse>();
-    oper.outputPort.setSink((CollectorTestSink) sink);
+    oper.outputPort.setSink((CollectorTestSink)sink);
 
     for (String message : messages) {
       oper.inputPort.process(message);
@@ -145,15 +144,14 @@
   @After
   public void cleanup() throws IOException
   {
-    try{
+    try {
       DeleteIndexResponse delete = store.client.admin().indices().delete(new DeleteIndexRequest(INDEX_NAME)).actionGet();
       if (!delete.isAcknowledged()) {
         logger.error("Index wasn't deleted");
       }
 
       store.disconnect();
-    }
-    catch(NoNodeAvailableException e){
+    } catch (NoNodeAvailableException e) {
       //This indicates that elasticsearch is not running on a particular machine.
       //Silently ignore in this case.
     }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/EmployeeOrder.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/EmployeeOrder.java
index 6015435..b91be58 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/EmployeeOrder.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/EmployeeOrder.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 public class EmployeeOrder
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/FileEnrichmentTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/FileEnrichmentTest.java
index d12cdae..ce9096a 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/FileEnrichmentTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/FileEnrichmentTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.io.File;
 import java.io.IOException;
@@ -29,14 +29,13 @@
 import org.junit.Rule;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.commons.io.FileUtils;
 
 import com.esotericsoftware.kryo.Kryo;
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
-
 public class FileEnrichmentTest
 {
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/JDBCLoaderTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/JDBCLoaderTest.java
index 708f151..9778a5a 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/JDBCLoaderTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/JDBCLoaderTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.sql.SQLException;
 import java.sql.Statement;
@@ -32,7 +32,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+
 import com.datatorrent.netlet.util.DTThrowable;
 
 public class JDBCLoaderTest
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/MapEnricherTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/MapEnricherTest.java
index 7323f0d..bf8833e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/MapEnricherTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/MapEnricherTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -28,6 +28,10 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.hadoop.conf.Configuration;
 
@@ -38,10 +42,6 @@
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.TestUtils;
 
 public class MapEnricherTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/Order.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/Order.java
index 52aa698..94e472e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/Order.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/Order.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 /**
  * Input Class for POJO Enricher test.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/POJOEnricherTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/POJOEnricherTest.java
index 7a6bc27..47577f3 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/POJOEnricherTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/enrich/POJOEnricherTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.enrich;
+package org.apache.apex.malhar.contrib.enrich;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -26,6 +26,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
@@ -36,8 +38,6 @@
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
 
 public class POJOEnricherTest extends JDBCLoaderTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/formatter/CsvFormatterTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/formatter/CsvFormatterTest.java
index 4a1c770..3e222f2 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/formatter/CsvFormatterTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/formatter/CsvFormatterTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.formatter;
+package org.apache.apex.malhar.contrib.formatter;
 
 import java.io.IOException;
 
@@ -29,6 +29,11 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.contrib.parser.CsvPOJOParserTest.Ad;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
@@ -38,11 +43,6 @@
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.contrib.parser.CsvPOJOParserTest.Ad;
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
 
 public class CsvFormatterTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeCheckpointStoreTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeCheckpointStoreTest.java
index 5bde40c..9e04065 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeCheckpointStoreTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeCheckpointStoreTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.geode;
+package org.apache.apex.malhar.contrib.geode;
 
 import java.io.IOException;
 import java.text.SimpleDateFormat;
@@ -99,7 +99,7 @@
 
   @Test
   public void testDelete() throws IOException, FunctionDomainException, TypeMismatchException, NameResolutionException,
-      QueryInvocationTargetException
+    QueryInvocationTargetException
   {
     testLoad();
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeKeyValueStorageAgentTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeKeyValueStorageAgentTest.java
index 74e5c1c..e67ae0e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeKeyValueStorageAgentTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeKeyValueStorageAgentTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.geode;
+package org.apache.apex.malhar.contrib.geode;
 
 import java.io.File;
 import java.io.IOException;
@@ -167,7 +167,7 @@
 
   @Test
   public void testDelete() throws IOException, FunctionDomainException, TypeMismatchException, NameResolutionException,
-      QueryInvocationTargetException
+    QueryInvocationTargetException
   {
     testLoad();
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeOperatorTest.java
index 5f06391..8a3ad69 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeOperatorTest.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.geode;
+package org.apache.apex.malhar.contrib.geode;
 
 import org.junit.Before;
 import org.junit.Test;
 
-import com.datatorrent.lib.db.KeyValueStoreOperatorTest;
+import org.apache.apex.malhar.lib.db.KeyValueStoreOperatorTest;
 
 public class GeodeOperatorTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodePOJOOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodePOJOOperatorTest.java
index 0cacc02..b30d1cf 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodePOJOOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodePOJOOperatorTest.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.geode;
+package org.apache.apex.malhar.contrib.geode;
 
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
-import com.datatorrent.contrib.util.TestPOJO;
-import com.datatorrent.contrib.util.TupleGenerator;
-import com.datatorrent.lib.util.TableInfo;
+import org.apache.apex.malhar.contrib.util.TestPOJO;
+import org.apache.apex.malhar.contrib.util.TupleGenerator;
+import org.apache.apex.malhar.lib.util.TableInfo;
+
 import com.datatorrent.netlet.util.DTThrowable;
 
 @SuppressWarnings("rawtypes")
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeStoreTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeStoreTest.java
index cad6876..aeffad9 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeStoreTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/geode/GeodeStoreTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.geode;
+package org.apache.apex.malhar.contrib.geode;
 
 import java.io.IOException;
 import java.util.ArrayList;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseColTupleGenerator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseColTupleGenerator.java
index 9b97bab..037e8d0 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseColTupleGenerator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseColTupleGenerator.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
-import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
+import com.datatorrent.common.util.BaseOperator;
 
 /**
  *
@@ -39,7 +39,7 @@
     HBaseTuple tuple = new HBaseTuple();
     tuple.setRow("row0");
     tuple.setColFamily("colfam0");
-    tuple.setColName("col" + "-" +colCount);
+    tuple.setColName("col" + "-" + colCount);
     tuple.setColValue("val" + "-" + "0" + "-" + colCount);
     ++colCount;
     outputPort.emit(tuple);
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseCsvMappingPutOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseCsvMappingPutOperatorTest.java
index 9dfa80a..8151830 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseCsvMappingPutOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseCsvMappingPutOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.IOException;
 
@@ -25,14 +25,16 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
-public class HBaseCsvMappingPutOperatorTest {
+public class HBaseCsvMappingPutOperatorTest
+{
   private static final Logger logger = LoggerFactory
       .getLogger(HBaseCsvMappingPutOperatorTest.class);
 
   @Test
-  public void testPut() throws Exception {
+  public void testPut() throws Exception
+  {
     try {
       HBaseTestHelper.startLocalCluster();
       HBaseTestHelper.clearHBase();
@@ -43,7 +45,7 @@
       csvMappingPutOperator.getStore().setZookeeperClientPort(2181);
       String s = "patrick,fremont,cali,milinda";
       String s1 = "gillett,santaclara,cali,milindas";
-      String s2= "aventferry,raleigh,nc,milind";
+      String s2 = "aventferry,raleigh,nc,milind";
       csvMappingPutOperator.setMappingString("colfam0.street,colfam0.city,colfam0.state,row");
       csvMappingPutOperator.setup(mockOperatorContext(0));
       csvMappingPutOperator.beginWindow(0);
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseGetOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseGetOperatorTest.java
index 44f2323..043512c 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseGetOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseGetOperatorTest.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.util.List;
 
+import org.junit.Assert;
+import org.junit.Test;
 import org.apache.hadoop.hbase.KeyValue;
 import org.apache.hadoop.hbase.client.Get;
 import org.apache.hadoop.hbase.util.Bytes;
-import org.junit.Assert;
-import org.junit.Test;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
@@ -93,8 +93,7 @@
       Assert.assertEquals("Tuple column family", tuple.getColFamily(), "colfam0");
       Assert.assertEquals("Tuple column name", tuple.getColName(), "col-499");
       Assert.assertEquals("Tuple column value", tuple.getColValue(), "val-0-499");
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       ex.printStackTrace();
       //logger.error(ex.getMessage());
       assert false;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseNameValueCsvPutOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseNameValueCsvPutOperatorTest.java
index f615f80..98cb085 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseNameValueCsvPutOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseNameValueCsvPutOperatorTest.java
@@ -16,17 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.IOException;
-import java.util.Collection;
 
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class HBaseNameValueCsvPutOperatorTest
 {
@@ -58,9 +57,7 @@
       Assert.assertEquals("Tuple column family", tuple.getColFamily(), "colfam0");
       Assert.assertEquals("Tuple column name", tuple.getColName(), "street");
       Assert.assertEquals("Tuple column value", tuple.getColValue(), "patrick");
-    }
-    catch (IOException e) {
-
+    } catch (IOException e) {
       logger.error(e.getMessage());
     }
   }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOInputOperatorTest.java
index 6630e09..0b580cb 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOInputOperatorTest.java
@@ -16,22 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
-
-import static com.datatorrent.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.OPERATOR_ID;
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.hadoop.conf.Configuration;
 import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-import org.junit.internal.runners.statements.Fail;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.apex.malhar.contrib.util.TestPOJO;
+import org.apache.apex.malhar.contrib.util.TupleCacheOutputOperator;
+import org.apache.apex.malhar.contrib.util.TupleGenerateCacheOperator;
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
+import org.apache.apex.malhar.lib.util.TableInfo;
+import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Attribute.AttributeMap;
 import com.datatorrent.api.Context;
@@ -39,11 +40,9 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.contrib.util.TestPOJO;
-import com.datatorrent.contrib.util.TupleCacheOutputOperator;
-import com.datatorrent.contrib.util.TupleGenerateCacheOperator;
-import com.datatorrent.lib.util.FieldInfo.SupportType;
-import com.datatorrent.lib.util.TableInfo;
+
+import static org.apache.apex.malhar.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.OPERATOR_ID;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class HBasePOJOInputOperatorTest
 {
@@ -53,7 +52,7 @@
     HBASEOUTPUT,
     HBASEINPUT,
     OUTPUT
-  };
+  }
 
   public static class MyGenerator extends TupleGenerateCacheOperator<TestPOJO>
   {
@@ -71,7 +70,7 @@
       try {
         // Added to let the output operator insert data into hbase table before input operator can read it
         Thread.sleep(1000);
-      } catch(InterruptedException e) {
+      } catch (InterruptedException e) {
         throw new RuntimeException(e);
       }
       super.setup(context);
@@ -107,7 +106,8 @@
     // Create DAG for testing.
     LocalMode lma = LocalMode.newInstance();
 
-    StreamingApplication app = new StreamingApplication() {
+    StreamingApplication app = new StreamingApplication()
+    {
       @Override
       public void populateDAG(DAG dag, Configuration conf)
       {
@@ -142,26 +142,19 @@
 
     long start = System.currentTimeMillis();
     //generator.doneLatch.await();
-    while(true)
-    {
-      try
-      {
-        Thread.sleep(1000);
-      }
-      catch( Exception e ){}
+    while (true) {
+      Thread.sleep(1000);
       logger.info("Tuple row key: ", output.getReceivedTuples());
       logger.info( "Received tuple number {}, instance is {}.", output.getReceivedTuples() == null ? 0 : output.getReceivedTuples().size(), System.identityHashCode( output ) );
-      if( output.getReceivedTuples() != null && output.getReceivedTuples().size() == TUPLE_NUM ) {
+      if ( output.getReceivedTuples() != null && output.getReceivedTuples().size() == TUPLE_NUM ) {
         break;
       }
-      if(System.currentTimeMillis() - start > RUN_DURATION) {
+      if (System.currentTimeMillis() - start > RUN_DURATION) {
         throw new RuntimeException("Testcase taking too long");
       }
     }
 
     lc.shutdown();
-
-
     validate( generator.getTuples(), output.getReceivedTuples() );
   }
 
@@ -169,7 +162,7 @@
   {
     logger.info( "expected size: " + expected.size() );
     logger.info( "actual size: " + actual.size() );
-    Assert.assertTrue( String.format( "The expected size {%d} is different from actual size {%d}.", expected.size(), actual.size()  ), expected.size()==actual.size() );
+    Assert.assertTrue( String.format( "The expected size {%d} is different from actual size {%d}.", expected.size(), actual.size()  ), expected.size() == actual.size() );
     actual.removeAll(expected);
     Assert.assertTrue( "content not same.", actual.isEmpty() );
   }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOPutOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOPutOperatorTest.java
index a237201..5fca7d1 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOPutOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBasePOJOPutOperatorTest.java
@@ -16,9 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import org.junit.After;
 import org.junit.Assert;
@@ -26,25 +30,30 @@
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.contrib.util.TestPOJO;
+import org.apache.apex.malhar.contrib.util.TupleGenerator;
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
+import org.apache.apex.malhar.lib.util.TableInfo;
 import org.apache.hadoop.hbase.Cell;
 import org.apache.hadoop.hbase.CellUtil;
 import org.apache.hadoop.hbase.HColumnDescriptor;
 import org.apache.hadoop.hbase.HTableDescriptor;
-import org.apache.hadoop.hbase.client.*;
+import org.apache.hadoop.hbase.client.HBaseAdmin;
+import org.apache.hadoop.hbase.client.HTable;
+import org.apache.hadoop.hbase.client.Result;
+import org.apache.hadoop.hbase.client.ResultScanner;
+import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.util.Bytes;
 
-import com.datatorrent.lib.util.FieldInfo.SupportType;
-import com.datatorrent.lib.util.TableInfo;
-import com.datatorrent.contrib.util.TestPOJO;
-import com.datatorrent.contrib.util.TupleGenerator;
 import com.datatorrent.api.Attribute.AttributeMap;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Operator.ProcessingMode;
 
-import static com.datatorrent.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.APP_ID;
-import static com.datatorrent.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.OPERATOR_ID;
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.APP_ID;
+import static org.apache.apex.malhar.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.OPERATOR_ID;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 
 public class HBasePOJOPutOperatorTest
@@ -90,27 +99,20 @@
   protected void writeRecords()
   {
     long windowId = startWindowId;
-    try
-    {
+    try {
       int countInWindow = 0;
-      for (int i = 0; i < TEST_SIZE; ++i)
-      {
-        if( countInWindow == 0 )
+      for (int i = 0; i < TEST_SIZE; ++i) {
+        if ( countInWindow == 0 ) {
           operator.beginWindow(windowId++);
+        }
         operator.processTuple(getNextTuple());
-        if( ++countInWindow == WINDOW_SIZE )
-        {
+        if ( ++countInWindow == WINDOW_SIZE ) {
           operator.endWindow();
           countInWindow = 0;
         }
       }
-
       Thread.sleep(30000);
-
-
-    }
-    catch (Exception e)
-    {
+    } catch (Exception e) {
       logger.error("testPutInternal() exception.", e);
       Assert.fail(e.getMessage());
     }
@@ -119,40 +121,28 @@
   protected void createOrDeleteTable(HBaseStore store, boolean isDelete ) throws Exception
   {
     HBaseAdmin admin = null;
-    try
-    {
+    try {
       admin = new HBaseAdmin(store.getConfiguration());
       final String tableName = store.getTableName();
 
-      if (!admin.isTableAvailable(tableName) && !isDelete )
-      {
+      if (!admin.isTableAvailable(tableName) && !isDelete ) {
         HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
         tableDescriptor.addFamily(new HColumnDescriptor("f0"));
         tableDescriptor.addFamily(new HColumnDescriptor("f1"));
 
         admin.createTable(tableDescriptor);
-      }
-      else if( isDelete )
-      {
+      } else if ( isDelete ) {
         admin.disableTable(tableName);
         admin.deleteTable( tableName );
       }
-    }
-    catch (Exception e)
-    {
+    } catch (Exception e) {
       logger.error("exception", e);
       throw e;
-    }
-    finally
-    {
-      if (admin != null)
-      {
-        try
-        {
+    } finally {
+      if (admin != null) {
+        try {
           admin.close();
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
           logger.warn("close admin exception. ", e);
         }
       }
@@ -179,7 +169,7 @@
 
     tableInfo.setRowOrIdExpression("row");
 
-    List<HBaseFieldInfo> fieldsInfo = new ArrayList<HBaseFieldInfo>();
+    List<HBaseFieldInfo> fieldsInfo = new ArrayList<>();
     fieldsInfo.add( new HBaseFieldInfo( "name", "name", SupportType.STRING, "f0") );
     fieldsInfo.add( new HBaseFieldInfo( "age", "age", SupportType.INTEGER, "f1") );
     fieldsInfo.add( new HBaseFieldInfo( "address", "address", SupportType.STRING, "f1") );
@@ -200,48 +190,47 @@
 
   protected Object getNextTuple()
   {
-    if( tupleGenerator == null )
+    if ( tupleGenerator == null ) {
       tupleGenerator = new TupleGenerator<TestPOJO>( TestPOJO.class );
-
+    }
     return tupleGenerator.getNextTuple();
   }
 
   protected void resetTupleGenerator()
   {
-    if( tupleGenerator == null )
+    if ( tupleGenerator == null ) {
       tupleGenerator = new TupleGenerator<TestPOJO>( TestPOJO.class );
-    else
+    } else {
       tupleGenerator.reset();
+    }
   }
 
   protected void readRecordsAndVerify()
   {
     int[] rowIds = new int[ TEST_SIZE ];
-    for( int i=1; i<=TEST_SIZE; ++i )
-      rowIds[i-1] = 1;
-    try
-    {
+    for ( int i = 1; i <= TEST_SIZE; ++i ) {
+      rowIds[i - 1] = 1;
+    }
+    try {
       HTable table = operator.getStore().getTable();
       Scan scan = new Scan();
       ResultScanner resultScanner = table.getScanner(scan);
 
       int recordCount = 0;
-      while( true )
-      {
+      while ( true ) {
         Result result = resultScanner.next();
-        if( result == null )
+        if ( result == null ) {
           break;
-
+        }
         int rowId = Integer.valueOf( Bytes.toString( result.getRow() ) );
-        Assert.assertTrue( "rowId="+rowId+" aut of range" , ( rowId > 0 && rowId <= TEST_SIZE ) );
-        Assert.assertTrue( "the rowId="+rowId+" already processed.", rowIds[rowId-1] == 1 );
-        rowIds[rowId-1]=0;
+        Assert.assertTrue( "rowId=" + rowId + " aut of range", ( rowId > 0 && rowId <= TEST_SIZE ) );
+        Assert.assertTrue( "the rowId=" + rowId + " already processed.", rowIds[rowId - 1] == 1 );
+        rowIds[rowId - 1] = 0;
 
         List<Cell> cells = result.listCells();
 
-        Map<String, byte[]> map = new HashMap<String,byte[]>();
-        for( Cell cell : cells )
-        {
+        Map<String, byte[]> map = new HashMap<>();
+        for ( Cell cell : cells ) {
           String columnName = Bytes.toString( CellUtil.cloneQualifier(cell) );
           byte[] value = CellUtil.cloneValue(cell);
           map.put(columnName, value);
@@ -255,20 +244,15 @@
       }
 
       int missedCount = 0;
-      if( recordCount != TEST_SIZE )
-      {
+      if ( recordCount != TEST_SIZE ) {
         logger.error( "unsaved records: " );
         StringBuilder sb = new StringBuilder();
-
-        for( int i=0; i<TEST_SIZE; ++i )
-        {
-          if( rowIds[i] != 0 )
-          {
-            sb.append(i+1).append(", ");
+        for ( int i = 0; i < TEST_SIZE; ++i ) {
+          if ( rowIds[i] != 0 ) {
+            sb.append(i + 1).append(", ");
             missedCount++;
           }
-          if( missedCount>0 && ( missedCount%20 == 0 ) )
-          {
+          if ( missedCount > 0 && ( missedCount % 20 == 0 ) ) {
             logger.error( sb.toString() );
             sb.delete( 0, sb.length() );
           }
@@ -276,10 +260,8 @@
         logger.error( sb.toString() );
         logger.error( "End of unsaved records" );
       }
-      Assert.assertTrue( "expected total records = " + TEST_SIZE + ", got " + recordCount + ", missed " + missedCount, recordCount==TEST_SIZE );
-    }
-    catch( Exception e )
-    {
+      Assert.assertTrue( "expected total records = " + TEST_SIZE + ", got " + recordCount + ", missed " + missedCount, recordCount == TEST_SIZE );
+    } catch ( Exception e ) {
       throw new RuntimeException( "exception", e );
     }
   }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseRowStringGenerator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseRowStringGenerator.java
index 70f323a..ed408b2 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseRowStringGenerator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseRowStringGenerator.java
@@ -16,19 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
-import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
+import com.datatorrent.common.util.BaseOperator;
 
 /**
  *
  */
 public class HBaseRowStringGenerator extends BaseOperator implements InputOperator
 {
-
   int rowCount;
 
   public final transient DefaultOutputPort<String> outputPort = new DefaultOutputPort<String>();
@@ -37,14 +36,15 @@
   public void emitTuples()
   {
 
-    StringBuffer s=new StringBuffer();
-    s.append("street"+rowCount+",");
-    s.append("city"+rowCount+",");
-    s.append("state"+rowCount+",");
-    s.append("row"+rowCount);
+    StringBuffer s = new StringBuffer();
+    s.append("street" + rowCount + ",");
+    s.append("city" + rowCount + ",");
+    s.append("state" + rowCount + ",");
+    s.append("row" + rowCount);
     ++rowCount;
-    if(rowCount==100000)
-      rowCount=0;
+    if (rowCount == 100000) {
+      rowCount = 0;
+    }
     outputPort.emit(s.toString());
   }
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseRowTupleGenerator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseRowTupleGenerator.java
index 0c0a9bf..fc5458e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseRowTupleGenerator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseRowTupleGenerator.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
-import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
+import com.datatorrent.common.util.BaseOperator;
 
 /**
  *
@@ -39,7 +39,7 @@
     HBaseTuple tuple = new HBaseTuple();
     tuple.setRow("row" + rowCount);
     tuple.setColFamily("colfam0");
-    tuple.setColName("col" + "-" +0);
+    tuple.setColName("col" + "-" + 0);
     tuple.setColValue("val" + "-" + rowCount + "-" + 0);
     ++rowCount;
     outputPort.emit(tuple);
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseScanOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseScanOperatorTest.java
index 254ef37..9ca9b48 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseScanOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseScanOperatorTest.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.util.List;
 
+import org.junit.Assert;
+import org.junit.Test;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.apache.hadoop.hbase.client.Result;
 import org.apache.hadoop.hbase.client.Scan;
 import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;
 import org.apache.hadoop.hbase.filter.Filter;
 import org.apache.hadoop.hbase.util.Bytes;
-import org.junit.Assert;
-import org.junit.Test;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTestHelper.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTestHelper.java
index 3644b7a..e8bd932 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTestHelper.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTestHelper.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.File;
 import java.io.IOException;
@@ -38,19 +38,17 @@
 import org.apache.zookeeper.server.NIOServerCnxnFactory;
 import org.apache.zookeeper.server.ZooKeeperServer;
 
-//import org.apache.hadoop.hbase.EmptyWatcher;
-
 /**
  *
  */
 public class HBaseTestHelper
 {
-
   public static final byte[] table_bytes = Bytes.toBytes("table1");
   public static final byte[] colfam0_bytes = Bytes.toBytes("colfam0");
   public static final byte[] col0_bytes = Bytes.toBytes("col-0");
 
-  public static void startLocalCluster() throws IOException, InterruptedException {
+  public static void startLocalCluster() throws IOException, InterruptedException
+  {
     startZooKeeperServer();
     //Configuration conf = HBaseConfiguration.create();
     Configuration conf = getConfiguration();
@@ -58,7 +56,8 @@
     lc.startup();
   }
 
-  private static void startZooKeeperServer() throws IOException, InterruptedException {
+  private static void startZooKeeperServer() throws IOException, InterruptedException
+  {
     String zooLocation = System.getProperty("java.io.tmpdir");
     File zooFile = new File(zooLocation, "zookeeper-malhartest");
     ZooKeeperServer zooKeeper = new ZooKeeperServer(zooFile, zooFile, 2000);
@@ -68,34 +67,40 @@
     serverFactory.startup(zooKeeper);
   }
 
-  public static void populateHBase() throws IOException {
-      Configuration conf = getConfiguration();
-      clearHBase(conf);
-      HTable table1 = new HTable(conf, "table1");
-      for (int i=0; i < 500; ++i) {
-        Put put = new Put(Bytes.toBytes("row" + i));
-        for (int j=0; j < 500; ++j) {
-          put.add(colfam0_bytes, Bytes.toBytes("col" + "-" +  j ), Bytes.toBytes("val" + "-" + i + "-" + j));
-        }
-        table1.put(put);
+  public static void populateHBase() throws IOException
+  {
+    Configuration conf = getConfiguration();
+    clearHBase(conf);
+    HTable table1 = new HTable(conf, "table1");
+    for (int i = 0; i < 500; ++i) {
+      Put put = new Put(Bytes.toBytes("row" + i));
+      for (int j = 0; j < 500; ++j) {
+        put.add(colfam0_bytes, Bytes.toBytes("col" + "-" +  j ), Bytes.toBytes("val" + "-" + i + "-" + j));
       }
+      table1.put(put);
+    }
+    table1.close();
   }
 
-  public static void clearHBase() throws IOException {
+  public static void clearHBase() throws IOException
+  {
     Configuration conf = getConfiguration();
     clearHBase(conf);
   }
 
-  private static void clearHBase(Configuration conf) throws IOException {
+  private static void clearHBase(Configuration conf) throws IOException
+  {
     HBaseAdmin admin = new HBaseAdmin(conf);
     if (admin.tableExists(table_bytes)) {
       try {
         admin.disableTable(table_bytes);
       } catch (Exception ex) {
+        // ignore
       }
       try {
         admin.deleteTable(table_bytes);
       } catch (Exception ex) {
+        // ignore
       }
     }
     HTableDescriptor tdesc = new HTableDescriptor(table_bytes);
@@ -104,7 +109,8 @@
     admin.createTable(tdesc);
   }
 
-  public static HBaseTuple getHBaseTuple(String row, String colFamily, String colName) throws IOException {
+  public static HBaseTuple getHBaseTuple(String row, String colFamily, String colName) throws IOException
+  {
     Configuration conf = getConfiguration();
     HTable table1 = new HTable(conf, "table1");
     Get get = new Get(Bytes.toBytes(row));
@@ -114,7 +120,8 @@
     return getHBaseTuple(result);
   }
 
-  public static HBaseTuple getHBaseTuple(Result result) {
+  public static HBaseTuple getHBaseTuple(Result result)
+  {
     HBaseTuple tuple = null;
     KeyValue[] kvs = result.raw();
     for (KeyValue kv : kvs) {
@@ -124,20 +131,22 @@
     return tuple;
   }
 
-  public static HBaseTuple getHBaseTuple(KeyValue kv) {
-      HBaseTuple tuple = new HBaseTuple();
-      tuple.setRow(new String(kv.getRow()));
-      tuple.setColFamily(new String(kv.getFamily()));
-      tuple.setColName(new String(kv.getQualifier()));
-      tuple.setColValue(new String(kv.getValue()));
-      return tuple;
+  public static HBaseTuple getHBaseTuple(KeyValue kv)
+  {
+    HBaseTuple tuple = new HBaseTuple();
+    tuple.setRow(new String(kv.getRow()));
+    tuple.setColFamily(new String(kv.getFamily()));
+    tuple.setColName(new String(kv.getQualifier()));
+    tuple.setColValue(new String(kv.getValue()));
+    return tuple;
   }
 
-  public static HBaseTuple findTuple(List<HBaseTuple> tuples, String row, String colFamily, String colName) {
+  public static HBaseTuple findTuple(List<HBaseTuple> tuples, String row, String colFamily, String colName)
+  {
     HBaseTuple mtuple = null;
     for (HBaseTuple tuple : tuples) {
       if (tuple.getRow().equals(row) && tuple.getColFamily().equals(colFamily)
-              && tuple.getColName().equals(colName)) {
+          && tuple.getColName().equals(colName)) {
         mtuple = tuple;
         break;
       }
@@ -145,7 +154,8 @@
     return mtuple;
   }
 
-  private static Configuration getConfiguration() {
+  private static Configuration getConfiguration()
+  {
     Configuration conf = HBaseConfiguration.create();
     conf.set("hbase.zookeeper.quorum", "127.0.0.1");
     conf.set("hbase.zookeeper.property.clientPort", "2181");
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTransactionalAppendOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTransactionalAppendOperatorTest.java
index a8ecd64..7956725 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTransactionalAppendOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTransactionalAppendOperatorTest.java
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
-import org.apache.hadoop.hbase.client.Append;
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.hadoop.hbase.client.Append;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
@@ -33,7 +33,7 @@
 public class HBaseTransactionalAppendOperatorTest
 {
   private static final Logger logger = LoggerFactory
-    .getLogger(HBaseTransactionalAppendOperatorTest.class);
+      .getLogger(HBaseTransactionalAppendOperatorTest.class);
 
   public HBaseTransactionalAppendOperatorTest()
   {
@@ -50,9 +50,9 @@
 
       dag.setAttribute(DAG.APPLICATION_NAME, "HBaseAppendOperatorTest");
       HBaseColTupleGenerator ctg = dag.addOperator("coltuplegenerator",
-        HBaseColTupleGenerator.class);
+          HBaseColTupleGenerator.class);
       TestHBaseAppendOperator thop = dag.addOperator("testhbaseput",
-        TestHBaseAppendOperator.class);
+          TestHBaseAppendOperator.class);
       dag.addStream("ss", ctg.outputPort, thop.input);
 
       thop.getStore().setTableName("table1");
@@ -63,43 +63,32 @@
       lc.setHeartbeatMonitoringEnabled(false);
       lc.run(30000);
 
-      HBaseTuple tuple = HBaseTestHelper.getHBaseTuple("row0", "colfam0",
-        "col-0");
+      HBaseTuple tuple = HBaseTestHelper.getHBaseTuple("row0", "colfam0", "col-0");
       Assert.assertNotNull("Tuple", tuple);
       Assert.assertEquals("Tuple row", tuple.getRow(), "row0");
-      Assert.assertEquals("Tuple column family", tuple.getColFamily(),
-        "colfam0");
-      Assert.assertEquals("Tuple column name", tuple.getColName(),
-        "col-0");
-      Assert.assertEquals("Tuple column value", tuple.getColValue(),
-        "val-0-0");
+      Assert.assertEquals("Tuple column family", tuple.getColFamily(), "colfam0");
+      Assert.assertEquals("Tuple column name", tuple.getColName(), "col-0");
+      Assert.assertEquals("Tuple column value", tuple.getColValue(), "val-0-0");
       tuple = HBaseTestHelper.getHBaseTuple("row0", "colfam0", "col-499");
       Assert.assertNotNull("Tuple", tuple);
       Assert.assertEquals("Tuple row", tuple.getRow(), "row0");
-      Assert.assertEquals("Tuple column family", tuple.getColFamily(),
-        "colfam0");
-      Assert.assertEquals("Tuple column name", tuple.getColName(),
-        "col-499");
-      Assert.assertEquals("Tuple column value", tuple.getColValue(),
-        "val-0-499");
-    }
-    catch (Exception ex) {
+      Assert.assertEquals("Tuple column family", tuple.getColFamily(), "colfam0");
+      Assert.assertEquals("Tuple column name", tuple.getColName(), "col-499");
+      Assert.assertEquals("Tuple column value", tuple.getColValue(), "val-0-499");
+    } catch (Exception ex) {
       logger.error(ex.getMessage());
       assert false;
     }
   }
 
-  @SuppressWarnings("serial")
-  public static class TestHBaseAppendOperator extends
-    AbstractHBaseWindowAppendOutputOperator<HBaseTuple>
+  public static class TestHBaseAppendOperator extends AbstractHBaseWindowAppendOutputOperator<HBaseTuple>
   {
 
     @Override
     public Append operationAppend(HBaseTuple t)
     {
       Append append = new Append(t.getRow().getBytes());
-      append.add(t.getColFamily().getBytes(), t.getColName().getBytes(),
-        t.getColValue().getBytes());
+      append.add(t.getColFamily().getBytes(), t.getColName().getBytes(), t.getColValue().getBytes());
       return append;
     }
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTransactionalPutOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTransactionalPutOperatorTest.java
index 665cd40..cb9de05 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTransactionalPutOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTransactionalPutOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.IOException;
 
@@ -31,18 +31,16 @@
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.Operator.ProcessingMode;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
-/**
- *
- */
-public class HBaseTransactionalPutOperatorTest {
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
+public class HBaseTransactionalPutOperatorTest
+{
   private static final Logger logger = LoggerFactory
       .getLogger(HBaseTransactionalPutOperatorTest.class);
 
-  public HBaseTransactionalPutOperatorTest() {
-  }
   @Test
-  public void testAtleastOnce() throws Exception {
+  public void testAtleastOnce() throws Exception
+  {
     try {
       //   HBaseTestHelper.startLocalCluster();
       HBaseTestHelper.clearHBase();
@@ -51,10 +49,16 @@
       thop.getStore().setTableName("table1");
       thop.getStore().setZookeeperQuorum("127.0.0.1");
       thop.getStore().setZookeeperClientPort(2181);
-      HBaseTuple t1=new HBaseTuple();
-      t1.setColFamily("colfam0");t1.setColName("street");t1.setRow("row1");t1.setColValue("ts");
-      HBaseTuple t2=new HBaseTuple();
-      t2.setColFamily("colfam0");t2.setColName("city");t2.setRow("row2");t2.setColValue("tc");
+      HBaseTuple t1 = new HBaseTuple();
+      t1.setColFamily("colfam0");
+      t1.setColName("street");
+      t1.setRow("row1");
+      t1.setColValue("ts");
+      HBaseTuple t2 = new HBaseTuple();
+      t2.setColFamily("colfam0");
+      t2.setColName("city");
+      t2.setRow("row2");
+      t2.setColValue("tc");
       AttributeMap.DefaultAttributeMap attributeMap = new AttributeMap.DefaultAttributeMap();
       attributeMap.put(OperatorContext.PROCESSING_MODE, ProcessingMode.AT_LEAST_ONCE);
       thop.setup(mockOperatorContext(0, attributeMap));
@@ -77,8 +81,10 @@
       logger.error(e.getMessage());
     }
   }
+
   @Test
-  public void testAtmostOnce1() throws Exception {
+  public void testAtmostOnce1() throws Exception
+  {
     try {
       //   HBaseTestHelper.startLocalCluster();
       HBaseTestHelper.clearHBase();
@@ -86,10 +92,16 @@
       thop.getStore().setTableName("table1");
       thop.getStore().setZookeeperQuorum("127.0.0.1");
       thop.getStore().setZookeeperClientPort(2181);
-      HBaseTuple t1=new HBaseTuple();
-      t1.setColFamily("colfam0");t1.setColName("street");t1.setRow("row1");t1.setColValue("ts");
-      HBaseTuple t2=new HBaseTuple();
-      t2.setColFamily("colfam0");t2.setColName("city");t2.setRow("row2");t2.setColValue("tc");
+      HBaseTuple t1 = new HBaseTuple();
+      t1.setColFamily("colfam0");
+      t1.setColName("street");
+      t1.setRow("row1");
+      t1.setColValue("ts");
+      HBaseTuple t2 = new HBaseTuple();
+      t2.setColFamily("colfam0");
+      t2.setColName("city");
+      t2.setRow("row2");
+      t2.setColValue("tc");
       AttributeMap.DefaultAttributeMap attributeMap = new AttributeMap.DefaultAttributeMap();
       attributeMap.put(OperatorContext.PROCESSING_MODE, ProcessingMode.AT_MOST_ONCE);
       thop.setup(mockOperatorContext(0, attributeMap));
@@ -114,8 +126,10 @@
       logger.error(e.getMessage());
     }
   }
+
   @Test
-  public void testAtmostOnce2() throws Exception {
+  public void testAtmostOnce2() throws Exception
+  {
     try {
       //   HBaseTestHelper.startLocalCluster();
       HBaseTestHelper.clearHBase();
@@ -123,10 +137,16 @@
       thop.getStore().setTableName("table1");
       thop.getStore().setZookeeperQuorum("127.0.0.1");
       thop.getStore().setZookeeperClientPort(2181);
-      HBaseTuple t1=new HBaseTuple();
-      t1.setColFamily("colfam0");t1.setColName("street");t1.setRow("row1");t1.setColValue("ts");
-      HBaseTuple t2=new HBaseTuple();
-      t2.setColFamily("colfam0");t2.setColName("city");t2.setRow("row2");t2.setColValue("tc");
+      HBaseTuple t1 = new HBaseTuple();
+      t1.setColFamily("colfam0");
+      t1.setColName("street");
+      t1.setRow("row1");
+      t1.setColValue("ts");
+      HBaseTuple t2 = new HBaseTuple();
+      t2.setColFamily("colfam0");
+      t2.setColName("city");
+      t2.setRow("row2");
+      t2.setColValue("tc");
       thop.beginWindow(0);
       thop.input.process(t1);
       AttributeMap.DefaultAttributeMap attributeMap = new AttributeMap.DefaultAttributeMap();
@@ -135,10 +155,11 @@
 
       thop.input.process(t2);
       thop.endWindow();
-      HBaseTuple tuple,tuple2;
+      HBaseTuple tuple;
+      HBaseTuple tuple2;
 
       tuple = HBaseTestHelper.getHBaseTuple("row1", "colfam0", "street");
-      tuple2= HBaseTestHelper.getHBaseTuple("row2", "colfam0", "city");
+      tuple2 = HBaseTestHelper.getHBaseTuple("row2", "colfam0", "city");
       Assert.assertNull("Tuple", tuple);
       Assert.assertNotNull("Tuple2", tuple2);
       Assert.assertEquals("Tuple row", tuple2.getRow(), "row2");
@@ -151,11 +172,11 @@
     }
   }
 
-  public static class TestHBasePutOperator extends
-  AbstractHBaseWindowPutOutputOperator<HBaseTuple> {
-
+  public static class TestHBasePutOperator extends AbstractHBaseWindowPutOutputOperator<HBaseTuple>
+  {
     @Override
-    public Put operationPut(HBaseTuple t) throws IOException {
+    public Put operationPut(HBaseTuple t) throws IOException
+    {
       Put put = new Put(t.getRow().getBytes());
       put.add(t.getColFamily().getBytes(), t.getColName().getBytes(), t.getColValue().getBytes());
       return put;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTuple.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTuple.java
index eccb482..4f6ffb1 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTuple.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTuple.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.Serializable;
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTupleCollector.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTupleCollector.java
index 4ad77f8..1c5cc42 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTupleCollector.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseTupleCollector.java
@@ -16,32 +16,31 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
-import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.api.DefaultInputPort;
 import java.util.ArrayList;
 import java.util.List;
+import com.datatorrent.api.DefaultInputPort;
+import com.datatorrent.common.util.BaseOperator;
 
 /**
  *
  */
 public class HBaseTupleCollector extends BaseOperator
 {
+  public static List<HBaseTuple> tuples;
 
-    public static List<HBaseTuple> tuples;
+  public HBaseTupleCollector()
+  {
+    tuples = new ArrayList<HBaseTuple>();
+  }
 
-    public HBaseTupleCollector()
+  public final transient DefaultInputPort<HBaseTuple> inputPort = new DefaultInputPort<HBaseTuple>()
+  {
+    public void process(HBaseTuple tuple)
     {
-      tuples = new ArrayList<HBaseTuple>();
+      tuples.add(tuple);
     }
-
-    public final transient DefaultInputPort<HBaseTuple> inputPort = new DefaultInputPort<HBaseTuple>()
-    {
-      public void process(HBaseTuple tuple)
-      {
-        tuples.add(tuple);
-      }
-    };
+  };
 
 }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseUtil.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseUtil.java
index 5b54f3e..a534b3c 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseUtil.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/hbase/HBaseUtil.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hbase;
+package org.apache.apex.malhar.contrib.hbase;
 
 import java.io.IOException;
 
@@ -32,24 +32,18 @@
   public static void createTable(Configuration configuration, String tableName ) throws MasterNotRunningException, ZooKeeperConnectionException, IOException
   {
     HBaseAdmin admin = null;
-    try
-    {
+    try {
       admin = new HBaseAdmin( configuration );
 
-      if (!admin.isTableAvailable(tableName) )
-      {
+      if (!admin.isTableAvailable(tableName) ) {
         HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);
         tableDescriptor.addFamily(new HColumnDescriptor("f0"));
         tableDescriptor.addFamily(new HColumnDescriptor("f1"));
 
         admin.createTable(tableDescriptor);
       }
-
-    }
-    finally
-    {
-      if (admin != null)
-      {
+    } finally {
+      if (admin != null) {
         admin.close();
       }
     }
@@ -58,20 +52,14 @@
   public static void deleteTable( Configuration configuration, String tableName ) throws MasterNotRunningException, ZooKeeperConnectionException, IOException
   {
     HBaseAdmin admin = null;
-    try
-    {
+    try {
       admin = new HBaseAdmin( configuration );
-
-      if ( admin.isTableAvailable(tableName) )
-      {
+      if ( admin.isTableAvailable(tableName) ) {
         admin.disableTable(tableName);
         admin.deleteTable( tableName );
       }
-    }
-    finally
-    {
-      if (admin != null)
-      {
+    } finally {
+      if (admin != null) {
         admin.close();
       }
     }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/helper/CollectorModule.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/helper/CollectorModule.java
index dc226c6..3a9ab22 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/helper/CollectorModule.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/helper/CollectorModule.java
@@ -16,16 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.helper;
+package org.apache.apex.malhar.contrib.helper;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 
-import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.Operator;
-
+import com.datatorrent.common.util.BaseOperator;
 
 public class CollectorModule<T> extends BaseOperator
 {
@@ -33,7 +32,7 @@
 
   public static class CollectorInputPort<T> extends DefaultInputPort<T>
   {
-    public volatile static HashMap<String, List<?>> collections = new HashMap<String, List<?>>();
+    public static volatile HashMap<String, List<?>> collections = new HashMap<String, List<?>>();
     ArrayList<T> list;
 
     final String id;
@@ -47,7 +46,6 @@
     @Override
     public void process(T tuple)
     {
-  //    System.out.print("collector process:"+tuple);
       list.add(tuple);
     }
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/helper/MessageQueueTestHelper.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/helper/MessageQueueTestHelper.java
index 5465c28..9a2e54e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/helper/MessageQueueTestHelper.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/helper/MessageQueueTestHelper.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.helper;
+package org.apache.apex.malhar.contrib.helper;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -24,11 +24,11 @@
 
 import org.junit.Assert;
 
-public class MessageQueueTestHelper {
-
+public class MessageQueueTestHelper
+{
   public static void validateResults(int testNum, HashMap<String, List<?>> collections )
   {
-    ArrayList<byte[]> byteList =(ArrayList<byte[]>) collections.get("collector");
+    ArrayList<byte[]> byteList = (ArrayList<byte[]>)collections.get("collector");
     Assert.assertEquals("emitted value for testNum was ", testNum * 3, byteList.size());
     for (int i = 0; i < byteList.size(); i++) {
       String str = new String(byteList.get(i));
@@ -37,8 +37,7 @@
       Integer value = Integer.parseInt(str.substring(eq + 1, str.length() - 1));
       if (key.equals("a")) {
         Assert.assertEquals("emitted value for 'a' was ", new Integer(2), value);
-      }
-      else if (key.equals("b")) {
+      } else if (key.equals("b")) {
         Assert.assertEquals("emitted value for 'b' was ", new Integer(20), value);
       }
       if (key.equals("c")) {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/helper/SourceModule.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/helper/SourceModule.java
index 020e64e..6ea8d88 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/helper/SourceModule.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/helper/SourceModule.java
@@ -16,21 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.helper;
+package org.apache.apex.malhar.contrib.helper;
 
 import java.util.HashMap;
 import java.util.concurrent.ArrayBlockingQueue;
 
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.api.Operator.ActivationListener;
+import com.datatorrent.common.util.BaseOperator;
 
 public class SourceModule extends BaseOperator
-implements InputOperator, ActivationListener<OperatorContext>
+    implements InputOperator, ActivationListener<OperatorContext>
 {
   public final transient DefaultOutputPort<byte[]> outPort = new DefaultOutputPort<byte[]>();
   transient ArrayBlockingQueue<byte[]> holdingBuffer;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/jython/PythonOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/jython/PythonOperatorTest.java
index 4740564..c65a9aa 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/jython/PythonOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/jython/PythonOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.jython;
+package org.apache.apex.malhar.contrib.jython;
 
 import java.util.HashMap;
 
@@ -24,7 +24,7 @@
 import org.junit.Test;
 import org.python.core.PyInteger;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Unit test for PythonOperator.
@@ -57,7 +57,7 @@
     for (Object o : sink.collectedTuples) {
       PyInteger val = (PyInteger)o;
       Assert.assertEquals("emitted should be 4", new Integer(4),
-                          (Integer)val.__tojava__(Integer.class));
+          (Integer)val.__tojava__(Integer.class));
     }
   }
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaExactlyOnceOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaExactlyOnceOutputOperatorTest.java
index 5f32fb0..b8ca917 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaExactlyOnceOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaExactlyOnceOutputOperatorTest.java
@@ -16,10 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.util.Properties;
-import java.util.concurrent.*;
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
+import java.util.concurrent.TimeUnit;
 
 import org.junit.Assert;
 import org.junit.Test;
@@ -90,8 +94,8 @@
               stringBuffer.put((++i) + "###testString " + i);
             }
             stringBuffer.put((maxTuple + 1) + "###" + KafkaOperatorTestBase.END_TUPLE);
-          }
-          catch (InterruptedException ie) {
+          } catch (InterruptedException ie) {
+            //
           }
         }
       };
@@ -179,8 +183,8 @@
 
   }
 
-  public static class SimpleKafkaExactOnceOutputOperator extends AbstractExactlyOnceKafkaOutputOperator<String, String, String>{
-
+  public static class SimpleKafkaExactOnceOutputOperator extends AbstractExactlyOnceKafkaOutputOperator<String, String, String>
+  {
     @Override
     protected int compareToLastMsg(Pair<String, String> tupleKeyValue, Pair<byte[], byte[]> lastReceivedKeyValue)
     {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaInputOperatorTest.java
index c2ebf85..60fbc64 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.io.File;
 import java.io.IOException;
@@ -29,9 +29,6 @@
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
-import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
-import org.apache.commons.io.FileUtils;
-import org.apache.hadoop.conf.Configuration;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Rule;
@@ -40,6 +37,12 @@
 import org.junit.runner.Description;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.partitioner.StatelessPartitionerTest;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
+import org.apache.commons.io.FileUtils;
+import org.apache.hadoop.conf.Configuration;
+
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
@@ -49,13 +52,11 @@
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.Partitioner;
-import com.datatorrent.common.util.FSStorageAgent;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.partitioner.StatelessPartitionerTest;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import com.datatorrent.common.util.FSStorageAgent;
 import com.datatorrent.stram.StramLocalCluster;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 
 public class KafkaInputOperatorTest extends KafkaOperatorTestBase
@@ -136,14 +137,14 @@
 
     // Create KafkaSinglePortStringInputOperator
     KafkaSinglePortStringInputOperator node = dag.addOperator("Kafka message consumer", KafkaSinglePortStringInputOperator.class);
-    if(isSuicide) {
+    if (isSuicide) {
       // make some extreme assumptions to make it fail if checkpointing wrong offsets
       dag.setAttribute(Context.DAGContext.CHECKPOINT_WINDOW_COUNT, 1);
       dag.setAttribute(Context.OperatorContext.STORAGE_AGENT, new FSStorageAgent("target/ck", new Configuration()));
       node.setMaxTuplesPerWindow(500);
     }
 
-    if(idempotent) {
+    if (idempotent) {
       node.setWindowDataManager(new FSWindowDataManager());
     }
     consumer.setTopic(TEST_TOPIC);
@@ -173,7 +174,7 @@
 
     // Check results
     Assert.assertTrue("Expected count >= " + totalCount + "; Actual count " + tupleCount.intValue(),
-      totalCount <= tupleCount.intValue());
+        totalCount <= tupleCount.intValue());
     logger.debug(String.format("Number of emitted tuples: %d", tupleCount.intValue()));
 
     p.close();
@@ -227,9 +228,9 @@
   {
     int totalCount = 10000;
     SimpleKafkaConsumer consumer = new SimpleKafkaConsumer();
-    try{
+    try {
       testKafkaInputOperator(1000, totalCount,consumer, false, false);
-    }catch(Exception e){
+    } catch (Exception e) {
       // invalid host setup expect to fail here
       Assert.assertEquals("Error creating local cluster", e.getMessage());
     }
@@ -424,7 +425,8 @@
   }
 
   @Test
-  public void testMaxTotalSize() throws InterruptedException {
+  public void testMaxTotalSize() throws InterruptedException
+  {
     int totalCount = 1500;
     int maxTotalSize = 500;
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaOperatorTestBase.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaOperatorTestBase.java
index 64651f4..96f3d61 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaOperatorTestBase.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaOperatorTestBase.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.io.File;
 import java.io.IOException;
 import java.net.InetSocketAddress;
 import java.util.Properties;
 
-import kafka.admin.TopicCommand;
-import kafka.server.KafkaConfig;
-import kafka.server.KafkaServerStartable;
+import org.junit.After;
+import org.junit.Before;
+import org.slf4j.LoggerFactory;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.zookeeper.server.NIOServerCnxnFactory;
@@ -33,9 +33,10 @@
 import org.apache.zookeeper.server.ZKDatabase;
 import org.apache.zookeeper.server.ZooKeeperServer;
 import org.apache.zookeeper.server.persistence.FileTxnSnapLog;
-import org.junit.After;
-import org.junit.Before;
-import org.slf4j.LoggerFactory;
+
+import kafka.admin.TopicCommand;
+import kafka.server.KafkaConfig;
+import kafka.server.KafkaServerStartable;
 
 /**
  * This is a base class setup/clean Kafka testing environment for all the input/output test If it's a multipartition
@@ -45,8 +46,8 @@
 {
 
   public static final String END_TUPLE = "END_TUPLE";
-  public static final int[] TEST_ZOOKEEPER_PORT = new int[] { 2182, 2183 };
-  public static final int[][] TEST_KAFKA_BROKER_PORT = new int[][] { new int[] { 9092, 9093 }, new int[] { 9094, 9095 } };
+  public static final int[] TEST_ZOOKEEPER_PORT = new int[] {2182, 2183};
+  public static final int[][] TEST_KAFKA_BROKER_PORT = new int[][] {new int[] {9092, 9093}, new int[] {9094, 9095}};
   public static final String TEST_TOPIC = "test_topic";
 
   static final org.slf4j.Logger logger = LoggerFactory.getLogger(KafkaOperatorTestBase.class);
@@ -62,8 +63,8 @@
 
   private final String zkBaseDir = "zookeeper-server-data";
   private final String kafkaBaseDir = "kafka-server-data";
-  private final String[] zkdir = new String[] { "zookeeper-server-data/1", "zookeeper-server-data/2" };
-  private final String[][] kafkadir = new String[][] { new String[] { "kafka-server-data/1/1", "kafka-server-data/1/2" }, new String[] { "kafka-server-data/2/1", "kafka-server-data/2/2" } };
+  private final String[] zkdir = new String[] {"zookeeper-server-data/1", "zookeeper-server-data/2"};
+  private final String[][] kafkadir = new String[][] {new String[] {"kafka-server-data/1/1", "kafka-server-data/1/2"}, new String[] {"kafka-server-data/2/1", "kafka-server-data/2/2"}};
   protected boolean hasMultiPartition = false;
   protected boolean hasMultiCluster = false;
 
@@ -125,11 +126,12 @@
 
   public void startKafkaServer()
   {
-    boolean[][] startable = new boolean[][] { new boolean[] { true, hasMultiPartition }, new boolean[] { hasMultiCluster, hasMultiCluster && hasMultiPartition } };
+    boolean[][] startable = new boolean[][] {new boolean[] {true, hasMultiPartition }, new boolean[] {hasMultiCluster, hasMultiCluster && hasMultiPartition}};
     for (int i = 0; i < startable.length; i++) {
       for (int j = 0; j < startable[i].length; j++) {
-        if (startable[i][j])
+        if (startable[i][j]) {
           startKafkaServer(i, j, hasMultiPartition ? 2 : 1);
+        }
       }
     }
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaOutputOperatorTest.java
index cc1f267..6209097 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaOutputOperatorTest.java
@@ -16,23 +16,27 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.util.Properties;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import org.apache.hadoop.conf.Configuration;
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.*;
+import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
+import com.datatorrent.api.DefaultOutputPort;
+import com.datatorrent.api.InputOperator;
+import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.Operator.ActivationListener;
+import com.datatorrent.api.StreamingApplication;
 
 /**
  *
@@ -88,8 +92,8 @@
               tupleCount++;
             }
             stringBuffer.put(KafkaOperatorTestBase.END_TUPLE);
-          }
-          catch (InterruptedException ie) {
+          } catch (InterruptedException ie) {
+            //
           }
         }
       };
@@ -133,8 +137,8 @@
 
     // Create DAG for testing.
     LocalMode lma = LocalMode.newInstance();
-
-    StreamingApplication app = new StreamingApplication() {
+    StreamingApplication app = new StreamingApplication()
+    {
       @Override
       public void populateDAG(DAG dag, Configuration conf)
       {
@@ -205,8 +209,8 @@
 
     // Create DAG for testing.
     LocalMode lma = LocalMode.newInstance();
-
-    StreamingApplication app = new StreamingApplication() {
+    StreamingApplication app = new StreamingApplication()
+    {
       @Override
       public void populateDAG(DAG dag, Configuration conf)
       {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaPartitionableInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaPartitionableInputOperatorTest.java
index adea673..d1939fd 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaPartitionableInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaPartitionableInputOperatorTest.java
@@ -16,9 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Properties;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -29,8 +34,11 @@
 import org.junit.runners.Parameterized;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.api.*;
+import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
+import com.datatorrent.api.DefaultInputPort;
+import com.datatorrent.api.LocalMode;
+import com.datatorrent.api.Operator;
 import com.datatorrent.common.util.BaseOperator;
 
 /**
@@ -46,10 +54,10 @@
   @Parameterized.Parameters(name = "multi-cluster: {0}, multi-partition: {1}")
   public static Collection<Boolean[]> testScenario()
   {
-    return Arrays.asList(new Boolean[][] { { true, false }, // multi cluster with single partition
-        { true, true }, // multi cluster with multi partitions
-        { false, true }, // single cluster with multi partitions
-        { false, false } // single cluster with single partition
+    return Arrays.asList(new Boolean[][] {{true, false}, // multi cluster with single partition
+        {true, true}, // multi cluster with multi partitions
+        {false, true}, // single cluster with multi partitions
+        {false, false} // single cluster with single partition
         });
   }
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaSimpleConsumer.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaSimpleConsumer.java
index 06e87cd..b438454 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaSimpleConsumer.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaSimpleConsumer.java
@@ -16,22 +16,22 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.nio.ByteBuffer;
 import java.nio.charset.Charset;
 import java.nio.charset.CharsetDecoder;
 import java.util.Iterator;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import kafka.api.FetchRequest;
 import kafka.api.FetchRequestBuilder;
 import kafka.javaapi.consumer.SimpleConsumer;
 import kafka.javaapi.message.ByteBufferMessageSet;
 import kafka.message.MessageAndOffset;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  *
  */
@@ -73,8 +73,7 @@
       data = decoder.decode(buffer).toString();
       // reset buffer's position to its original so it is not altered:
       buffer.position(old_position);
-    }
-    catch (Exception e) {
+    } catch (Exception e) {
       return data;
     }
     return data;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaTestConsumer.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaTestConsumer.java
index dbeeefa..a1db902 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaTestConsumer.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaTestConsumer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.nio.ByteBuffer;
 import java.util.HashMap;
@@ -26,15 +26,15 @@
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.CountDownLatch;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import kafka.consumer.ConsumerConfig;
 import kafka.consumer.ConsumerIterator;
 import kafka.consumer.KafkaStream;
 import kafka.javaapi.consumer.ConsumerConnector;
 import kafka.message.Message;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * A kafka consumer for testing
  */
@@ -45,7 +45,7 @@
   protected static final int BUFFER_SIZE_DEFAULT = 1024 * 1024; // 1M
   // Config parameters that user can set.
   private final int bufferSize = BUFFER_SIZE_DEFAULT;
-  public transient ArrayBlockingQueue<Message> holdingBuffer = new ArrayBlockingQueue<Message>(bufferSize);;
+  public transient ArrayBlockingQueue<Message> holdingBuffer = new ArrayBlockingQueue<Message>(bufferSize);
   private final String topic;
   private String zkaddress = "localhost:2182";
   private boolean isAlive = true;
@@ -112,7 +112,7 @@
       if (latch != null) {
         latch.countDown();
       }
-      if(getMessage(msg).equals(KafkaOperatorTestBase.END_TUPLE)){
+      if (getMessage(msg).equals(KafkaOperatorTestBase.END_TUPLE)) {
         break;
       }
       holdingBuffer.add(msg);
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaTestPartitioner.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaTestPartitioner.java
index e409353..2632030 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaTestPartitioner.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaTestPartitioner.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import kafka.producer.Partitioner;
 import kafka.utils.VerifiableProperties;
@@ -30,12 +30,13 @@
  */
 public class KafkaTestPartitioner implements Partitioner
 {
-  public KafkaTestPartitioner (VerifiableProperties props) {
-
+  public KafkaTestPartitioner(VerifiableProperties props)
+  {
   }
+
   @Override
   public int partition(Object key, int num_Partitions)
   {
-    return Integer.parseInt((String)key)%num_Partitions;
+    return Integer.parseInt((String)key) % num_Partitions;
   }
 }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaTestProducer.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaTestProducer.java
index cbd946a..d0591a7 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaTestProducer.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/KafkaTestProducer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.util.List;
 import java.util.Properties;
@@ -25,6 +25,7 @@
 import kafka.javaapi.producer.Producer;
 import kafka.producer.KeyedMessage;
 import kafka.producer.ProducerConfig;
+
 /**
  * A kafka producer for testing
  */
@@ -53,7 +54,8 @@
     this.sendCount = sendCount;
   }
 
-  public void setMessages(List<String> messages) {
+  public void setMessages(List<String> messages)
+  {
     this.messages = messages;
   }
 
@@ -63,11 +65,11 @@
     props.setProperty("serializer.class", "kafka.serializer.StringEncoder");
     props.setProperty("key.serializer.class", "kafka.serializer.StringEncoder");
 //    props.put("metadata.broker.list", "localhost:"+KafkaOperatorTestBase.TEST_KAFKA_BROKER1_PORT );
-    if(hasPartition){
-      props.put("metadata.broker.list", "localhost:"+KafkaOperatorTestBase.TEST_KAFKA_BROKER_PORT[cid][0] + ",localhost:" + KafkaOperatorTestBase.TEST_KAFKA_BROKER_PORT[cid][1]);
+    if (hasPartition) {
+      props.put("metadata.broker.list", "localhost:" + KafkaOperatorTestBase.TEST_KAFKA_BROKER_PORT[cid][0] + ",localhost:" + KafkaOperatorTestBase.TEST_KAFKA_BROKER_PORT[cid][1]);
       props.setProperty("partitioner.class", KafkaTestPartitioner.class.getCanonicalName());
     } else {
-      props.put("metadata.broker.list", "localhost:"+KafkaOperatorTestBase.TEST_KAFKA_BROKER_PORT[cid][0] );
+      props.put("metadata.broker.list", "localhost:" + KafkaOperatorTestBase.TEST_KAFKA_BROKER_PORT[cid][0] );
     }
     props.setProperty("topic.metadata.refresh.interval.ms", "20000");
 
@@ -89,14 +91,15 @@
     this.hasPartition = hasPartition;
     this.hasMultiCluster = hasMultiCluster;
     producer = new Producer<String, String>(createProducerConfig(0));
-    if(hasMultiCluster){
+    if (hasMultiCluster) {
       producer1 = new Producer<String, String>(createProducerConfig(1));
     } else {
       producer1 = null;
     }
   }
 
-  public KafkaTestProducer(String topic, boolean hasPartition) {
+  public KafkaTestProducer(String topic, boolean hasPartition)
+  {
     this(topic, hasPartition, false);
   }
 
@@ -108,7 +111,7 @@
       String messageStr = "Message_" + messageNo;
       int k = rand.nextInt(100);
       producer.send(new KeyedMessage<String, String>(topic, "" + k, "c1" + messageStr));
-      if(hasMultiCluster){
+      if (hasMultiCluster) {
         messageNo++;
         producer1.send(new KeyedMessage<String, String>(topic, "" + k, "c2" + messageStr));
       }
@@ -117,13 +120,13 @@
     }
     // produce the end tuple to let the test input operator know it's done produce messages
     producer.send(new KeyedMessage<String, String>(topic, "" + 0, KafkaOperatorTestBase.END_TUPLE));
-    if(hasMultiCluster) {
+    if (hasMultiCluster) {
       producer1.send(new KeyedMessage<String, String>(topic, "" + 0, KafkaOperatorTestBase.END_TUPLE));
     }
-    if(hasPartition){
+    if (hasPartition) {
       // Send end_tuple to other partition if it exist
       producer.send(new KeyedMessage<String, String>(topic, "" + 1, KafkaOperatorTestBase.END_TUPLE));
-      if(hasMultiCluster) {
+      if (hasMultiCluster) {
         producer1.send(new KeyedMessage<String, String>(topic, "" + 1, KafkaOperatorTestBase.END_TUPLE));
       }
     }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/OffsetManagerTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/OffsetManagerTest.java
index 04fe282..09e4b75 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/OffsetManagerTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/OffsetManagerTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
 import java.io.IOException;
 import java.util.Collections;
@@ -28,27 +28,30 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
-import static org.junit.Assert.*;
+import org.junit.Test;
+import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.contrib.kafka.AbstractKafkaInputOperator.PartitionStrategy;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.FileContext;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Options.Rename;
 import org.apache.hadoop.fs.Path;
-import org.junit.Test;
-import org.slf4j.LoggerFactory;
+
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.SetMultimap;
 
 import com.datatorrent.api.Context;
-import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.api.DAG;
+import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.Operator;
-import com.datatorrent.api.DAG.Locality;
-import com.datatorrent.contrib.kafka.AbstractKafkaInputOperator.PartitionStrategy;
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.SetMultimap;
+import com.datatorrent.common.util.BaseOperator;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 
 public class OffsetManagerTest extends KafkaOperatorTestBase
 {
@@ -64,12 +67,12 @@
   static final int totalCount = 100;
   static CountDownLatch latch;
   static final String OFFSET_FILE = ".offset";
-  static long initialPos = 10l;
+  static long initialPos = 10L;
   static Path baseFolder = new Path("target");
 
 
-  public static class TestOffsetManager implements OffsetManager{
-
+  public static class TestOffsetManager implements OffsetManager
+  {
     private final transient Map<KafkaPartition, Long> offsets = Collections.synchronizedMap(new HashMap<KafkaPartition, Long>());
 
     private String filename = null;
@@ -96,22 +99,19 @@
     @Override
     public void updateOffsets(Map<KafkaPartition, Long> offsetsOfPartitions)
     {
-
       offsets.putAll(offsetsOfPartitions);
-
       try {
         Path tmpFile = new Path(baseFolder, filename + ".tmp");
         Path dataFile = new Path(baseFolder, filename);
         FSDataOutputStream out = fs.create(tmpFile, true);
         for (Entry<KafkaPartition, Long> e : offsets.entrySet()) {
-          out.writeBytes(e.getKey() +", " + e.getValue() + "\n");
+          out.writeBytes(e.getKey() + ", " + e.getValue() + "\n");
         }
         out.close();
         fc.rename(tmpFile, dataFile, Rename.OVERWRITE);
       } catch (Exception e) {
-
+        //
       }
-
       countdownLatch();
     }
 
@@ -141,6 +141,7 @@
     }
 
   }
+
   /**
    * Test Operator to collect tuples from KafkaSingleInputStringOperator.
    *
@@ -191,9 +192,9 @@
   @Test
   public void testSimpleConsumerUpdateOffsets() throws Exception
   {
-    initialPos = 10l;
+    initialPos = 10L;
     // Create template simple consumer
-    try{
+    try {
       SimpleKafkaConsumer consumer = new SimpleKafkaConsumer();
       testPartitionableInputOperator(consumer, totalCount - (int)initialPos - (int)initialPos);
     } finally {
@@ -214,9 +215,9 @@
   @Test
   public void testSimpleConsumerInvalidInitialOffsets() throws Exception
   {
-    initialPos = 1000l;
+    initialPos = 1000L;
     // Create template simple consumer
-    try{
+    try {
       SimpleKafkaConsumer consumer = new SimpleKafkaConsumer();
       testPartitionableInputOperator(consumer, totalCount);
     } finally {
@@ -230,12 +231,12 @@
     try {
       FileSystem.get(new Configuration()).delete(new Path(baseFolder, TEST_TOPIC + OFFSET_FILE), true);
     } catch (IOException e) {
-
+      //
     }
   }
 
-  public void testPartitionableInputOperator(KafkaConsumer consumer, int expectedCount) throws Exception{
-
+  public void testPartitionableInputOperator(KafkaConsumer consumer, int expectedCount) throws Exception
+  {
     // Set to 3 because we want to make sure END_TUPLE from both 2 partitions are received and offsets has been updated to 102
     latch = new CountDownLatch(3);
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/SimpleKakfaConsumerTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/SimpleKakfaConsumerTest.java
index 1368cc0..ad2dd5d 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/SimpleKakfaConsumerTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kafka/SimpleKakfaConsumerTest.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kafka;
+package org.apache.apex.malhar.contrib.kafka;
 
-import com.datatorrent.lib.util.KryoCloneUtils;
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
+
 public class SimpleKakfaConsumerTest
 {
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisByteArrayOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisByteArrayOutputOperatorTest.java
index a3df0f1..f9ae526 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisByteArrayOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisByteArrayOutputOperatorTest.java
@@ -16,24 +16,27 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import java.nio.ByteBuffer;
 
-import com.amazonaws.services.kinesis.model.Record;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.contrib.util.*;
+import org.apache.apex.malhar.contrib.util.FieldValueSerializableGenerator;
+import org.apache.apex.malhar.contrib.util.POJOTupleGenerateOperator;
+import org.apache.apex.malhar.contrib.util.TestPOJO;
+import org.apache.apex.malhar.contrib.util.TupleGenerator;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+
+import com.amazonaws.services.kinesis.model.Record;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DefaultOutputPort;
 
 import com.datatorrent.common.util.Pair;
-import com.datatorrent.lib.util.FieldInfo;
 
 @SuppressWarnings("rawtypes")
 public class KinesisByteArrayOutputOperatorTest extends KinesisOutputOperatorTest<KinesisByteArrayOutputOperator, POJOTupleGenerateOperator>
@@ -65,20 +68,20 @@
     String iterator = listener.prepareIterator();
     // save the tuples
     for (int i = 0; i < maxTuple; ++i) {
-      if (i % 2 == 0)
+      if (i % 2 == 0) {
         iterator = listener.processNextIterator(iterator);
-
+      }
       operator.processTuple(getNextTuple(generator));
     }
     listener.processNextIterator(iterator);
   }
 
-  @SuppressWarnings("unchecked")
   protected Pair<String, byte[]> getNextTuple(TupleGenerator<TestPOJO> generator)
   {
     TestPOJO obj = generator.getNextTuple();
-    if (fieldValueGenerator == null)
+    if (fieldValueGenerator == null) {
       fieldValueGenerator = FieldValueSerializableGenerator.getFieldValueGenerator(TestPOJO.class, null);
+    }
     return new Pair<String, byte[]>(obj.getRow(), fieldValueGenerator.serializeObject(obj));
   }
 
@@ -132,7 +135,7 @@
       long key = Long.valueOf(partitionKey);
       TestPOJO expected = new TestPOJO(key);
 
-      TestPOJO read = (TestPOJO) fieldValueGenerator.deserializeObject(dataBytes);
+      TestPOJO read = (TestPOJO)fieldValueGenerator.deserializeObject(dataBytes);
 
       if (!read.outputFieldsEquals(expected)) {
         logger.error("read is not same as expected. read={}, expected={}", read, expected);
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisInputOperatorTest.java
index a0eb042..2fc3397 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -33,6 +33,7 @@
 import org.junit.runner.Description;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 
 import com.datatorrent.api.Attribute;
@@ -42,9 +43,8 @@
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class KinesisInputOperatorTest extends KinesisOperatorTestBase
 {
@@ -117,7 +117,7 @@
     });
     testMeta.operator = inputOperator;
     Assert.assertTrue("Default behaviour of WindowDataManager changed",
-      (inputOperator.getWindowDataManager() instanceof WindowDataManager.NoopWindowDataManager));
+        (inputOperator.getWindowDataManager() instanceof WindowDataManager.NoopWindowDataManager));
   }
 
   /**
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisOperatorTestBase.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisOperatorTestBase.java
index c9948ba..a4954e0 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisOperatorTestBase.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisOperatorTestBase.java
@@ -16,7 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
+
+import org.junit.After;
+import org.junit.Before;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import com.amazonaws.auth.AWSCredentialsProvider;
 import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
@@ -24,11 +29,6 @@
 import com.amazonaws.services.kinesis.model.CreateStreamRequest;
 import com.amazonaws.services.kinesis.model.ResourceInUseException;
 
-import org.junit.After;
-import org.junit.Before;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /**
  * This is a base class setup/clean Kinesis testing environment for all the input/output test
  * If it's a multipartition test, this class creates 2 kinesis partitions
@@ -37,8 +37,8 @@
 {
   public static final String END_TUPLE = "END_TUPLE";
   protected boolean hasMultiPartition = false;
-  protected String streamNamePrefix= "StreamName-";
-  protected String streamName = null ;
+  protected String streamNamePrefix = "StreamName-";
+  protected String streamName = null;
   protected int shardCount = 1;
   protected transient AmazonKinesisClient client = null;
   protected transient AWSCredentialsProvider credentials = null;
@@ -57,10 +57,8 @@
     CreateStreamRequest streamRequest = null;
     createClient();
 
-    for( int i=0; i<100; ++i )
-    {
-      try
-      {
+    for (int i = 0; i < 100; ++i) {
+      try {
         streamName = streamNamePrefix + i;
         streamRequest = new CreateStreamRequest();
         streamRequest.setStreamName(streamName);
@@ -71,13 +69,9 @@
         Thread.sleep(30000);
 
         break;
-      }
-      catch( ResourceInUseException riue )
-      {
+      } catch ( ResourceInUseException riue ) {
         logger.warn( "Resource is in use.", riue.getMessage() );
-      }
-      catch (Exception e)
-      {
+      } catch (Exception e) {
         logger.error( "Got exception.", e );
         throw new RuntimeException(e);
       }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisOutputOperatorTest.java
index b478b9f..e853b28 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisOutputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
@@ -29,14 +29,18 @@
 
 import org.apache.hadoop.conf.Configuration;
 
-import com.datatorrent.api.*;
+import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
+import com.datatorrent.api.DefaultOutputPort;
+import com.datatorrent.api.LocalMode;
+import com.datatorrent.api.Operator;
+import com.datatorrent.api.StreamingApplication;
 
 /**
  *
  */
 @SuppressWarnings("rawtypes")
-public abstract class KinesisOutputOperatorTest< O extends AbstractKinesisOutputOperator, G extends Operator > extends KinesisOperatorTestBase
+public abstract class KinesisOutputOperatorTest<O extends AbstractKinesisOutputOperator, G extends Operator> extends KinesisOperatorTestBase
 {
   private static final Logger logger = LoggerFactory.getLogger(KinesisOutputOperatorTest.class);
   //protected static int tupleCount = 0;
@@ -68,11 +72,9 @@
   {
     // Setup a message listener to receive the message
     KinesisTestConsumer listener = null;
-    if( enableConsumer )
-    {
+    if ( enableConsumer ) {
       listener = createConsumerListener(streamName);
-      if( listener != null )
-      {
+      if ( listener != null ) {
         //initialize the latch to synchronize the threads
         doneLatch = new CountDownLatch(maxTuple);
         listener.setDoneLatch(doneLatch);
@@ -82,8 +84,8 @@
     }
     // Create DAG for testing.
     LocalMode lma = LocalMode.newInstance();
-
-    StreamingApplication app = new StreamingApplication() {
+    StreamingApplication app = new StreamingApplication()
+    {
       @Override
       public void populateDAG(DAG dag, Configuration conf)
       {
@@ -109,33 +111,33 @@
     lc.runAsync();
 
     int waitTime = 300000;
-    if( doneLatch != null )
+    if ( doneLatch != null ) {
       doneLatch.await(waitTime, TimeUnit.MILLISECONDS);
-    else
-    {
-      try
-      {
+    } else {
+      try {
         Thread.sleep(waitTime);
+      } catch ( Exception e ) {
+        //
       }
-      catch( Exception e ){}
     }
 
-    if( listener != null )
+    if ( listener != null ) {
       listener.setIsAlive(false);
+    }
 
-    if( listenerThread != null )
+    if ( listenerThread != null ) {
       listenerThread.join( 1000 );
-
+    }
     lc.shutdown();
 
     // Check values send vs received
-    if( listener != null )
-    {
+    if ( listener != null ) {
       Assert.assertEquals("Number of emitted tuples", maxTuple, listener.holdingBuffer.size());
       logger.debug(String.format("Number of emitted tuples: %d", listener.holdingBuffer.size()));
     }
-    if( listener != null )
+    if ( listener != null ) {
       listener.close();
+    }
   }
 
   protected KinesisTestConsumer createConsumerListener( String streamName )
@@ -154,7 +156,9 @@
   }
 
   protected abstract G addGenerateOperator( DAG dag );
+
   protected abstract DefaultOutputPort getOutputPortOfGenerator( G generator );
+
   protected abstract O addTestingOperator( DAG dag );
 
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisPartitionableInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisPartitionableInputOperatorTest.java
index f1e1e5f..bf4a0b5 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisPartitionableInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisPartitionableInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -29,9 +29,10 @@
 import org.junit.Test;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.api.*;
+import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
-
+import com.datatorrent.api.DefaultInputPort;
+import com.datatorrent.api.LocalMode;
 import com.datatorrent.common.util.BaseOperator;
 
 /**
@@ -116,8 +117,8 @@
     testPartitionableInputOperator(consumer);
   }
 
-  public void testPartitionableInputOperator(KinesisConsumer consumer) throws Exception{
-
+  public void testPartitionableInputOperator(KinesisConsumer consumer) throws Exception
+  {
     // Set to 2 because we want to make sure END_TUPLE from both 2 partitions are received
     latch = new CountDownLatch(2);
 
@@ -165,4 +166,4 @@
     lc.shutdown();
   }
 
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisStringOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisStringOutputOperatorTest.java
index f0a9eb7..b79b03d 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisStringOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisStringOutputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import java.util.concurrent.ArrayBlockingQueue;
 
@@ -26,7 +26,7 @@
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.api.Operator.ActivationListener;
 
-public class KinesisStringOutputOperatorTest extends KinesisOutputOperatorTest< KinesisStringOutputOperator, KinesisStringOutputOperatorTest.StringGeneratorInputOperator >
+public class KinesisStringOutputOperatorTest extends KinesisOutputOperatorTest<KinesisStringOutputOperator, KinesisStringOutputOperatorTest.StringGeneratorInputOperator>
 {
   @Override
   protected StringGeneratorInputOperator addGenerateOperator( DAG dag )
@@ -90,8 +90,7 @@
             while (dataGeneratorThread != null && i < maxTuple) {
               stringBuffer.put("testString " + (++i));
             }
-          }
-          catch (Exception ie) {
+          } catch (Exception ie) {
             throw new RuntimeException(ie);
           }
         }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisTestConsumer.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisTestConsumer.java
index a1547c1..860c3cd 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisTestConsumer.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisTestConsumer.java
@@ -16,20 +16,27 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import java.nio.ByteBuffer;
 import java.util.List;
 import java.util.concurrent.ArrayBlockingQueue;
 import java.util.concurrent.CountDownLatch;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import com.amazonaws.auth.AWSCredentialsProvider;
 import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
 import com.amazonaws.services.kinesis.AmazonKinesisClient;
-import com.amazonaws.services.kinesis.model.*;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import com.amazonaws.services.kinesis.model.DescribeStreamRequest;
+import com.amazonaws.services.kinesis.model.DescribeStreamResult;
+import com.amazonaws.services.kinesis.model.GetRecordsRequest;
+import com.amazonaws.services.kinesis.model.GetRecordsResult;
+import com.amazonaws.services.kinesis.model.GetShardIteratorRequest;
+import com.amazonaws.services.kinesis.model.GetShardIteratorResult;
+import com.amazonaws.services.kinesis.model.Record;
+import com.amazonaws.services.kinesis.model.Shard;
 
 /**
  * A kinesis consumer for testing
@@ -93,15 +100,13 @@
   {
     String iterator = prepareIterator();
 
-    while (isAlive )
-    {
+    while (isAlive ) {
       iterator = processNextIterator(iterator);
 
       //sleep at least 1 second to avoid exceeding the limit on getRecords frequency
-      try
-      {
+      try {
         Thread.sleep(1000);
-      }catch( Exception e ){
+      } catch ( Exception e ) {
         throw new RuntimeException(e);
       }
     }
@@ -120,8 +125,9 @@
         shards = describeResponse.getStreamDescription().getShards();
         if (shards.isEmpty()) {
           logger.warn("shards is empty");
-        } else
+        } else {
           break;
+        }
       } catch (Exception e) {
         logger.error("get Stream description exception: ", e);
         throw new RuntimeException(e);
@@ -129,6 +135,7 @@
       try {
         Thread.sleep(1000);
       } catch (Exception e) {
+        //
       }
     }
 
@@ -163,23 +170,22 @@
   protected boolean shouldProcessRecord = true;
   protected void processResponseRecords( List<Record> records )
   {
-    if( records == null || records.isEmpty() )
+    if ( records == null || records.isEmpty() ) {
       return;
+    }
     receiveCount += records.size();
     logger.debug("ReceiveCount= {}", receiveCount);
 
-    for( Record record : records )
-    {
+    for ( Record record : records ) {
       holdingBuffer.add(record);
-      if( shouldProcessRecord )
-      {
+      if ( shouldProcessRecord ) {
         processRecord( record );
       }
 
-      if( doneLatch != null )
+      if ( doneLatch != null ) {
         doneLatch.countDown();
+      }
     }
-
   }
 
   protected void processRecord( Record record )
@@ -198,4 +204,4 @@
     this.doneLatch = produceLatch;
   }
 
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisTestProducer.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisTestProducer.java
index fe1a2e2..945ee2c 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisTestProducer.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/KinesisTestProducer.java
@@ -16,16 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
-
-import com.amazonaws.auth.AWSCredentialsProvider;
-import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
-import com.amazonaws.services.kinesis.AmazonKinesisClient;
-import com.amazonaws.services.kinesis.model.*;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
+
+import com.amazonaws.auth.AWSCredentialsProvider;
+import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
+import com.amazonaws.services.kinesis.AmazonKinesisClient;
+import com.amazonaws.services.kinesis.model.PutRecordRequest;
+import com.amazonaws.services.kinesis.model.PutRecordsRequest;
+import com.amazonaws.services.kinesis.model.PutRecordsRequestEntry;
+
 /**
  * A kinesis producer for testing
  */
@@ -40,7 +43,8 @@
   private boolean hasPartition = false;
   private List<String> records;
 
-  public void setRecords(List<String> records) {
+  public void setRecords(List<String> records)
+  {
     this.records = records;
   }
 
@@ -72,8 +76,7 @@
       putRecordsEntry.setData(ByteBuffer.wrap(dataStr.getBytes()));
       putRecordsEntry.setPartitionKey(dataStr);
       putRecordsRequestEntryList.add(putRecordsEntry);
-      if( (putRecordsRequestEntryList.size() == batchSize) || (recordNo == sendCount ))
-      {
+      if ( (putRecordsRequestEntryList.size() == batchSize) || (recordNo == sendCount )) {
         PutRecordsRequest putRecordsRequest = new PutRecordsRequest();
         putRecordsRequest.setStreamName(streamName);
         putRecordsRequest.setRecords(putRecordsRequestEntryList);
@@ -119,4 +122,4 @@
   {
     this.sendCount = sendCount;
   }
-} // End of KinesisTestProducer
\ No newline at end of file
+} // End of KinesisTestProducer
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/ShardManagerTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/ShardManagerTest.java
index 7948d10..0563c17 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/ShardManagerTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/kinesis/ShardManagerTest.java
@@ -16,19 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.kinesis;
-
-import com.datatorrent.api.*;
-import com.datatorrent.api.DAG.Locality;
-import com.datatorrent.common.util.BaseOperator;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FSDataOutputStream;
-import org.apache.hadoop.fs.FileContext;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Options.Rename;
-import org.apache.hadoop.fs.Path;
-import org.junit.Test;
-import org.slf4j.LoggerFactory;
+package org.apache.apex.malhar.contrib.kinesis;
 
 import java.io.IOException;
 import java.util.Iterator;
@@ -39,6 +27,22 @@
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
+import org.junit.Test;
+import org.slf4j.LoggerFactory;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FSDataOutputStream;
+import org.apache.hadoop.fs.FileContext;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Options.Rename;
+import org.apache.hadoop.fs.Path;
+
+import com.datatorrent.api.DAG;
+import com.datatorrent.api.DAG.Locality;
+import com.datatorrent.api.DefaultInputPort;
+import com.datatorrent.api.LocalMode;
+import com.datatorrent.api.Operator;
+import com.datatorrent.common.util.BaseOperator;
+
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotEquals;
 
@@ -56,10 +60,8 @@
   static CountDownLatch latch;
   static final String OFFSET_FILE = ".offset";
 
-
-  public static class TestShardManager extends ShardManager {
-
-
+  public static class TestShardManager extends ShardManager
+  {
     private String filename = null;
 
     private transient FileSystem fs = FileSystem.get(new Configuration());
@@ -82,7 +84,7 @@
         Path dataFile = new Path(filename);
         FSDataOutputStream out = fs.create(tmpFile, true);
         for (Entry<String, String> e : shardPos.entrySet()) {
-          out.writeBytes(e.getKey() +", " + e.getValue() + "\n");
+          out.writeBytes(e.getKey() + ", " + e.getValue() + "\n");
         }
         out.close();
         fc.rename(tmpFile, dataFile, Rename.OVERWRITE);
@@ -99,7 +101,7 @@
         // when latch is 1, it means consumer has consumed all the records
         int count = 0;
         for (Entry<String, String> entry : shardPos.entrySet()) {
-          count ++;
+          count++;
         }
         if (count == totalCount + 2) {
           // wait until all offsets add up to totalCount + 2 control END_TUPLE
@@ -119,6 +121,7 @@
     }
 
   }
+
   /**
    * Test Operator to collect tuples from KinesisSingleInputStringOperator.
    */
@@ -168,7 +171,7 @@
   public void testConsumerUpdateShardPos() throws Exception
   {
     // Create template simple consumer
-    try{
+    try {
       KinesisConsumer consumer = new KinesisConsumer();
       testPartitionableInputOperator(consumer);
     } finally {
@@ -186,8 +189,8 @@
     }
   }
 
-  public void testPartitionableInputOperator(KinesisConsumer consumer) throws Exception{
-
+  public void testPartitionableInputOperator(KinesisConsumer consumer) throws Exception
+  {
     // Set to 3 because we want to make sure all the tuples from both 2 partitions are received and offsets has been updated to 102
     latch = new CountDownLatch(3);
 
@@ -298,14 +301,14 @@
 
     assertEquals("ShardPos Size", 2, node.getShardManager().loadInitialShardPositions().size());
     Iterator ite = node.getShardManager().loadInitialShardPositions().entrySet().iterator();
-    Entry e = (Entry) ite.next();
-    assertNotEquals("Record Seq No in Shard Id 1" , "", e.getValue());
-    e = (Entry) ite.next();
-    assertNotEquals("Record Seq No in Shard Id 2" , "", e.getValue());
+    Entry e = (Entry)ite.next();
+    assertNotEquals("Record Seq No in Shard Id 1", "", e.getValue());
+    e = (Entry)ite.next();
+    assertNotEquals("Record Seq No in Shard Id 2", "", e.getValue());
     // Check results
     assertEquals("Tuple count", totalCount, collectedTuples.size());
     logger.debug(String.format("Number of emitted tuples: %d -> %d", collectedTuples.size(), totalCount));
 
     lc.shutdown();
   }
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/memcache/MemcacheOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/memcache/MemcacheOperatorTest.java
index b50e6f0..5ebc29e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/memcache/MemcacheOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/memcache/MemcacheOperatorTest.java
@@ -16,16 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memcache;
-
-import java.net.InetSocketAddress;
-
-import net.spy.memcached.AddrUtil;
+package org.apache.apex.malhar.contrib.memcache;
 
 import org.junit.Before;
 import org.junit.Test;
 
-import com.datatorrent.lib.db.KeyValueStoreOperatorTest;
+import org.apache.apex.malhar.lib.db.KeyValueStoreOperatorTest;
+
+import net.spy.memcached.AddrUtil;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/memcache/MemcachePOJOOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/memcache/MemcachePOJOOperatorTest.java
index 2ae525c..4134c6a 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/memcache/MemcachePOJOOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/memcache/MemcachePOJOOperatorTest.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memcache;
+package org.apache.apex.malhar.contrib.memcache;
 
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
 
-import com.datatorrent.lib.util.TableInfo;
-import com.datatorrent.contrib.util.TestPOJO;
-import com.datatorrent.contrib.util.TupleGenerator;
+import org.apache.apex.malhar.contrib.util.TestPOJO;
+import org.apache.apex.malhar.contrib.util.TupleGenerator;
+import org.apache.apex.malhar.lib.util.TableInfo;
 
 import com.datatorrent.netlet.util.DTThrowable;
 
@@ -46,14 +46,10 @@
 
   public void cleanup()
   {
-    if( store != null )
-    {
-      try
-      {
+    if ( store != null ) {
+      try {
         store.disconnect();
-      }
-      catch( Exception e )
-      {
+      } catch ( Exception e ) {
         DTThrowable.rethrow(e);
       }
     }
@@ -77,8 +73,7 @@
 
     TupleGenerator<TestPOJO> generator = new TupleGenerator<TestPOJO>( TestPOJO.class );
 
-    for( int i=0; i<TUPLE_SIZE; ++i )
-    {
+    for ( int i = 0; i < TUPLE_SIZE; ++i ) {
       operator.processTuple( generator.getNextTuple() );
     }
 
@@ -89,8 +84,7 @@
   {
     generator.reset();
 
-    for( int i=0; i<TUPLE_SIZE; ++i )
-    {
+    for ( int i = 0; i < TUPLE_SIZE; ++i ) {
       TestPOJO expected = generator.getNextTuple();
       TestPOJO read = (TestPOJO)store.get( expected.getRow() );
       Assert.assertTrue( String.format( "expected={%s}, actually={%s}", expected.toString(), read.toString() ), expected.completeEquals(read) );
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/memcache_whalin/MemcacheWhalinOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/memcache_whalin/MemcacheWhalinOperatorTest.java
index 7bf4627..097b305 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/memcache_whalin/MemcacheWhalinOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/memcache_whalin/MemcacheWhalinOperatorTest.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memcache_whalin;
+package org.apache.apex.malhar.contrib.memcache_whalin;
 
 import org.junit.Before;
 import org.junit.Test;
 
-import com.datatorrent.lib.db.KeyValueStoreOperatorTest;
+import org.apache.apex.malhar.lib.db.KeyValueStoreOperatorTest;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlInputOperatorTest.java
index 8ecfda9..1b750c3 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlInputOperatorTest.java
@@ -16,13 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memsql;
+package org.apache.apex.malhar.contrib.memsql;
 
-import com.datatorrent.api.Attribute;
-import com.datatorrent.api.Context;
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 import java.sql.Statement;
@@ -32,7 +27,14 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
+import com.datatorrent.api.Attribute;
+import com.datatorrent.api.Context;
+import com.datatorrent.api.Context.OperatorContext;
+
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class AbstractMemsqlInputOperatorTest
 {
@@ -57,11 +59,9 @@
     memsqlStore.connect();
 
     try {
-      String insert = "insert into " + FQ_TABLE + " (" + INDEX_COLUMN + "," +DATA_COLUMN2 + ") " + "VALUES (" + "?,?" + ")";
+      String insert = "insert into " + FQ_TABLE + " (" + INDEX_COLUMN + "," + DATA_COLUMN2 + ") " + "VALUES (" + "?,?" + ")";
       PreparedStatement stmt = memsqlStore.getConnection().prepareStatement(insert);
-      for (int counter = 0;
-              counter < DATABASE_SIZE;
-              counter++) {
+      for (int counter = 0; counter < DATABASE_SIZE; counter++) {
         String test = "Testname" + counter;
         stmt.setInt(1, counter);
         stmt.setString(2, test);
@@ -69,8 +69,7 @@
       }
 
       stmt.close();
-    }
-    catch (SQLException ex) {
+    } catch (SQLException ex) {
       LOG.error(null, ex);
     }
 
@@ -91,16 +90,16 @@
 
     statement = memsqlStore.getConnection().createStatement();
     statement.executeUpdate("create table "
-            + FQ_TABLE
-            + "(" + INDEX_COLUMN + " INTEGER PRIMARY KEY, "
-            + DATA_COLUMN2
-            + " VARCHAR(256))");
+        + FQ_TABLE
+        + "(" + INDEX_COLUMN + " INTEGER PRIMARY KEY, "
+        + DATA_COLUMN2
+        + " VARCHAR(256))");
     String createMetaTable = "CREATE TABLE IF NOT EXISTS " + DATABASE + "." + JdbcTransactionalStore.DEFAULT_META_TABLE + " ( "
-            + JdbcTransactionalStore.DEFAULT_APP_ID_COL + " VARCHAR(100) NOT NULL, "
-            + JdbcTransactionalStore.DEFAULT_OPERATOR_ID_COL + " INT NOT NULL, "
-            + JdbcTransactionalStore.DEFAULT_WINDOW_COL + " BIGINT NOT NULL, "
-            + "PRIMARY KEY (" + JdbcTransactionalStore.DEFAULT_APP_ID_COL + ", " + JdbcTransactionalStore.DEFAULT_OPERATOR_ID_COL + ") "
-            + ")";
+        + JdbcTransactionalStore.DEFAULT_APP_ID_COL + " VARCHAR(100) NOT NULL, "
+        + JdbcTransactionalStore.DEFAULT_OPERATOR_ID_COL + " INT NOT NULL, "
+        + JdbcTransactionalStore.DEFAULT_WINDOW_COL + " BIGINT NOT NULL, "
+        + "PRIMARY KEY (" + JdbcTransactionalStore.DEFAULT_APP_ID_COL + ", " + JdbcTransactionalStore.DEFAULT_OPERATOR_ID_COL + ") "
+        + ")";
 
     statement.executeUpdate(createMetaTable);
 
@@ -160,9 +159,7 @@
 
     inputOperator.setup(null);
 
-    for (int wid = 0;
-            wid < NUM_WINDOWS + 1;
-            wid++) {
+    for (int wid = 0; wid < NUM_WINDOWS + 1; wid++) {
       inputOperator.beginWindow(wid);
       inputOperator.emitTuples();
       inputOperator.endWindow();
@@ -195,8 +192,8 @@
     columns.add("data_index");
     columns.add("data2");
     inputOperator.setColumns(columns);
-    inputOperator.setQuery("select * from " + FQ_TABLE +";");
-    inputOperator.setOutputClass("com.datatorrent.contrib.memsql.TestInputPojo");
+    inputOperator.setQuery("select * from " + FQ_TABLE + ";");
+    inputOperator.setOutputClass("org.apache.apex.malhar.contrib.memsql.TestInputPojo");
     CollectorTestSink<Object> sink = new CollectorTestSink<Object>();
     inputOperator.outputPort.setSink(sink);
 
@@ -209,11 +206,11 @@
     Assert.assertEquals("rows from db", 100, sink.collectedTuples.size());
     for (int i = 0; i < 10; i++) {
       TestInputPojo object = (TestInputPojo)sink.collectedTuples.get(i);
-      Assert.assertEquals("id set in testpojo", i , object.getId());
+      Assert.assertEquals("id set in testpojo", i, object.getId());
       Assert.assertEquals("name set in testpojo", "Testname" + i, object.getName());
     }
     sink.clear();
-    inputOperator.setQuery("select * from " + FQ_TABLE + " where " + "%p " + ">= " + "%s"+";");
+    inputOperator.setQuery("select * from " + FQ_TABLE + " where " + "%p " + ">= " + "%s" + ";");
     inputOperator.setStartRow(10);
     inputOperator.setup(context);
 
@@ -222,7 +219,7 @@
     inputOperator.endWindow();
     Assert.assertEquals("rows from db", 90, sink.collectedTuples.size());
     sink.clear();
-    inputOperator.setQuery("select * from " + FQ_TABLE + " where " + "%p " + ">= " + "%s" + " LIMIT " + "%l" +";");
+    inputOperator.setQuery("select * from " + FQ_TABLE + " where " + "%p " + ">= " + "%s" + " LIMIT " + "%l" + ";");
     inputOperator.setStartRow(1);
 
     inputOperator.setBatchSize(10);
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlOutputOperatorTest.java
index f00ea5d..5001e97 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/AbstractMemsqlOutputOperatorTest.java
@@ -16,18 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memsql;
+package org.apache.apex.malhar.contrib.memsql;
 
-import com.datatorrent.api.Attribute.AttributeMap;
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.api.Operator.ProcessingMode;
-
-import static com.datatorrent.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.APP_ID;
-import static com.datatorrent.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.OPERATOR_ID;
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
-
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
@@ -37,9 +27,20 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
+
+import com.datatorrent.api.Attribute.AttributeMap;
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.api.DAG;
+import com.datatorrent.api.Operator.ProcessingMode;
+
+import static org.apache.apex.malhar.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.APP_ID;
+import static org.apache.apex.malhar.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.OPERATOR_ID;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
 public class AbstractMemsqlOutputOperatorTest
 {
-  private static transient final Logger LOG = LoggerFactory.getLogger(AbstractMemsqlOutputOperatorTest.class);
+  private static final Logger LOG = LoggerFactory.getLogger(AbstractMemsqlOutputOperatorTest.class);
 
   public static final String HOST_PREFIX = "jdbc:mysql://";
   public static final String HOST = "localhost";
@@ -99,17 +100,17 @@
 
     statement = memsqlStore.getConnection().createStatement();
     statement.executeUpdate("create table "
-            + FQ_TABLE
-            + "(" + DATA_COLUMN1
-            + " INTEGER PRIMARY KEY, "
-            + DATA_COLUMN2
-            + " VARCHAR(256))");
+        + FQ_TABLE
+        + "(" + DATA_COLUMN1
+        + " INTEGER PRIMARY KEY, "
+        + DATA_COLUMN2
+        + " VARCHAR(256))");
     String createMetaTable = "CREATE TABLE IF NOT EXISTS " + DATABASE + "." + JdbcTransactionalStore.DEFAULT_META_TABLE + " ( "
-            + JdbcTransactionalStore.DEFAULT_APP_ID_COL + " VARCHAR(100) NOT NULL, "
-            + JdbcTransactionalStore.DEFAULT_OPERATOR_ID_COL + " INT NOT NULL, "
-            + JdbcTransactionalStore.DEFAULT_WINDOW_COL + " BIGINT NOT NULL, "
-            + "PRIMARY KEY (" + JdbcTransactionalStore.DEFAULT_APP_ID_COL + ", " + JdbcTransactionalStore.DEFAULT_OPERATOR_ID_COL + ") "
-            + ")";
+        + JdbcTransactionalStore.DEFAULT_APP_ID_COL + " VARCHAR(100) NOT NULL, "
+        + JdbcTransactionalStore.DEFAULT_OPERATOR_ID_COL + " INT NOT NULL, "
+        + JdbcTransactionalStore.DEFAULT_WINDOW_COL + " BIGINT NOT NULL, "
+        + "PRIMARY KEY (" + JdbcTransactionalStore.DEFAULT_APP_ID_COL + ", " + JdbcTransactionalStore.DEFAULT_OPERATOR_ID_COL + ") "
+        + ")";
 
     statement.executeUpdate(createMetaTable);
 
@@ -149,9 +150,7 @@
 
     outputOperator.setup(context);
 
-    for (int wid = 0;
-            wid < NUM_WINDOWS;
-            wid++) {
+    for (int wid = 0; wid < NUM_WINDOWS; wid++) {
       outputOperator.beginWindow(wid);
       innerObj.setIntVal(wid + 1);
       outputOperator.input.put(innerObj);
@@ -163,7 +162,7 @@
 
     memsqlStore.connect();
 
-    int databaseSize ;
+    int databaseSize;
 
     Statement statement = memsqlStore.getConnection().createStatement();
     ResultSet resultSet = statement.executeQuery("select count(*) from " + FQ_TABLE);
@@ -172,9 +171,7 @@
 
     memsqlStore.disconnect();
 
-    Assert.assertEquals("Numer of tuples in database",
-                        DATABASE_SIZE,
-                        databaseSize);
+    Assert.assertEquals("Numer of tuples in database", DATABASE_SIZE, databaseSize);
   }
 
   public InnerObj innerObj = new InnerObj();
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/MemsqlInputOperator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/MemsqlInputOperator.java
index 5b9025f..0b4c8c9 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/MemsqlInputOperator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/MemsqlInputOperator.java
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memsql;
+package org.apache.apex.malhar.contrib.memsql;
 
-import com.datatorrent.api.Context.OperatorContext;
-import java.sql.Statement;
 import java.sql.ResultSet;
 import java.sql.SQLException;
+import java.sql.Statement;
 import javax.validation.constraints.NotNull;
+import com.datatorrent.api.Context.OperatorContext;
 
 public class MemsqlInputOperator extends AbstractMemsqlInputOperator<Object>
 {
@@ -82,8 +82,7 @@
       resultSet.next();
       inputSize = resultSet.getInt(1);
       statement.close();
-    }
-    catch (SQLException ex) {
+    } catch (SQLException ex) {
       throw new RuntimeException(ex);
     }
   }
@@ -95,8 +94,7 @@
 
     try {
       tuple = result.getInt(2);
-    }
-    catch (SQLException ex) {
+    } catch (SQLException ex) {
       throw new RuntimeException(ex);
     }
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/MemsqlStoreTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/MemsqlStoreTest.java
index 6056b8b..b69b5ae 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/MemsqlStoreTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/MemsqlStoreTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memsql;
+package org.apache.apex.malhar.contrib.memsql;
 
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/TestInputPojo.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/TestInputPojo.java
index ce817e1..4b75895 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/TestInputPojo.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/memsql/TestInputPojo.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.memsql;
+package org.apache.apex.malhar.contrib.memsql;
 
 public class TestInputPojo
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/AbstractStreamPatternMatcherTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/AbstractStreamPatternMatcherTest.java
index 1f669bc..a8018f4 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/AbstractStreamPatternMatcherTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/AbstractStreamPatternMatcherTest.java
@@ -31,8 +31,9 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
 
 @Deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/AllAfterMatchMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/AllAfterMatchMapTest.java
index 1356004..56036bd 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/AllAfterMatchMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/AllAfterMatchMapTest.java
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/DistinctMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/DistinctMapTest.java
index c082f83..0b2f8f9 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/DistinctMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/DistinctMapTest.java
@@ -25,7 +25,7 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeyValsTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeyValsTest.java
index be2f6ee..135243d 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeyValsTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeyValsTest.java
@@ -25,7 +25,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysHashMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysHashMapTest.java
index a25c2df..46e2162 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysHashMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysHashMapTest.java
@@ -25,7 +25,7 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysMapTest.java
index 74cebdd..4375de8 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FilterKeysMapTest.java
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FirstMatchMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FirstMatchMapTest.java
index d02ee27..9ab2fa9 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FirstMatchMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FirstMatchMapTest.java
@@ -23,7 +23,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FirstNTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FirstNTest.java
index e6c3e7e..c47e180 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FirstNTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FirstNTest.java
@@ -27,7 +27,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FirstTillMatchTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FirstTillMatchTest.java
index 51b8415..706de50 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FirstTillMatchTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/FirstTillMatchTest.java
@@ -24,7 +24,7 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/InsertSortDescTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/InsertSortDescTest.java
index cebd628..00dd244 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/InsertSortDescTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/InsertSortDescTest.java
@@ -26,7 +26,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndexArrayTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndexArrayTest.java
index d37789d..d6e3625 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndexArrayTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndexArrayTest.java
@@ -27,9 +27,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.api.Sink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import com.datatorrent.api.Sink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndexTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndexTest.java
index 337cefb..c0d30f5 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndexTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/InvertIndexTest.java
@@ -27,9 +27,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.api.Sink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import com.datatorrent.api.Sink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/LastMatchMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/LastMatchMapTest.java
index c930932..aec6c3c 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/LastMatchMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/LastMatchMapTest.java
@@ -23,7 +23,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyMapTest.java
index 2c0fcad..69f2ca7 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyMapTest.java
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyValueMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyValueMapTest.java
index 287312c..e49cfe0 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyValueMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/LeastFrequentKeyValueMapTest.java
@@ -25,7 +25,7 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/MatchMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/MatchMapTest.java
index 1d2b5ff..9e072ef 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/MatchMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/MatchMapTest.java
@@ -24,12 +24,12 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.algo.MatchMap;
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.algo.MatchMap;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  * @deprecated
- * Functional tests for {@link com.datatorrent.lib.algo.MatchMap}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.MatchMap}<p>
  *
  */
 @Deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyMapTest.java
index 58a1059..980b725 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyMapTest.java
@@ -25,7 +25,7 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyValueMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyValueMapTest.java
index c356079..9f844d3 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyValueMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/MostFrequentKeyValueMapTest.java
@@ -25,7 +25,7 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/SamplerTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/SamplerTest.java
index e91b0f9..8ff22fe 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/SamplerTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/algo/SamplerTest.java
@@ -22,7 +22,7 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountTestSink;
+import org.apache.apex.malhar.lib.testbench.CountTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertKeyValTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertKeyValTest.java
index a5bd664..95a3a35 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertKeyValTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertKeyValTest.java
@@ -24,8 +24,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertMapTest.java
index aa757af..d6bdf05 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertMapTest.java
@@ -25,7 +25,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertTest.java
index 745b7e5..d02fcb6 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeAlertTest.java
@@ -23,8 +23,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeKeyValTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeKeyValTest.java
index 0b3318c..853288a 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeKeyValTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeKeyValTest.java
@@ -23,8 +23,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeTest.java
index 9ce0a73..e954e3b 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ChangeTest.java
@@ -23,7 +23,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/CompareExceptMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/CompareExceptMapTest.java
index 9785a4a..7e16527 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/CompareExceptMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/CompareExceptMapTest.java
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/CompareMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/CompareMapTest.java
index c91e4c9..5713f59 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/CompareMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/CompareMapTest.java
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/CountKeyValTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/CountKeyValTest.java
index 317790a..215589e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/CountKeyValTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/CountKeyValTest.java
@@ -21,8 +21,8 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ExceptMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ExceptMapTest.java
index 8c8b267..e455afe 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ExceptMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/ExceptMapTest.java
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/QuotientMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/QuotientMapTest.java
index 7682ae3..460463a 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/QuotientMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/QuotientMapTest.java
@@ -26,7 +26,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/SumCountMapTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/SumCountMapTest.java
index a50a3bd..af19a34 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/SumCountMapTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/math/SumCountMapTest.java
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * @deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/DeleteOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/DeleteOperatorTest.java
index a535053..776ff40 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/DeleteOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/DeleteOperatorTest.java
@@ -25,8 +25,7 @@
 import org.slf4j.LoggerFactory;
 
 import org.apache.apex.malhar.contrib.misc.streamquery.condition.EqualValueCondition;
-
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.DeleteOperator}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/FullOuterJoinOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/FullOuterJoinOperatorTest.java
index ce5ba33..f2c85c4 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/FullOuterJoinOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/FullOuterJoinOperatorTest.java
@@ -24,10 +24,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.streamquery.condition.Condition;
-import com.datatorrent.lib.streamquery.condition.JoinColumnEqualCondition;
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.condition.JoinColumnEqualCondition;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
 @Deprecated
 public class FullOuterJoinOperatorTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/GroupByOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/GroupByOperatorTest.java
index 0d2a2f5..abbe83d 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/GroupByOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/GroupByOperatorTest.java
@@ -26,9 +26,8 @@
 
 import org.apache.apex.malhar.contrib.misc.streamquery.condition.EqualValueCondition;
 import org.apache.apex.malhar.contrib.misc.streamquery.function.SumFunction;
-
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.GroupByOperatorTest}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/HavingOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/HavingOperatorTest.java
index 3c685ab..b630f28 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/HavingOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/HavingOperatorTest.java
@@ -29,9 +29,8 @@
 import org.apache.apex.malhar.contrib.misc.streamquery.condition.HavingCondition;
 import org.apache.apex.malhar.contrib.misc.streamquery.function.FunctionIndex;
 import org.apache.apex.malhar.contrib.misc.streamquery.function.SumFunction;
-
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.HavingOperatorTest}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/InnerJoinOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/InnerJoinOperatorTest.java
index 18312d1..9894db2 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/InnerJoinOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/InnerJoinOperatorTest.java
@@ -24,14 +24,14 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.streamquery.condition.Condition;
-import com.datatorrent.lib.streamquery.condition.JoinColumnEqualCondition;
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.condition.JoinColumnEqualCondition;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  *
- * Functional test for {@link com.datatorrent.lib.streamquery.InnerJoinOperator }.
+ * Functional test for {@link org.apache.apex.malhar.lib.streamquery.InnerJoinOperator }.
  * @deprecated
  */
 @Deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/LeftOuterJoinOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/LeftOuterJoinOperatorTest.java
index eb1ec6d..044102a 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/LeftOuterJoinOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/LeftOuterJoinOperatorTest.java
@@ -24,10 +24,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.streamquery.condition.Condition;
-import com.datatorrent.lib.streamquery.condition.JoinColumnEqualCondition;
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.condition.JoinColumnEqualCondition;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 @Deprecated
 public class LeftOuterJoinOperatorTest
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/OrderByOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/OrderByOperatorTest.java
index 88aa2d0..7cdcb39 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/OrderByOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/OrderByOperatorTest.java
@@ -24,10 +24,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
- *  Functional test for {@link com.datatorrent.lib.streamquery.OrderByOperatorTest}.
+ *  Functional test for {@link org.apache.apex.malhar.lib.streamquery.OrderByOperatorTest}.
  *  @deprecated
  */
 @Deprecated
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/RightOuterJoinOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/RightOuterJoinOperatorTest.java
index 70bc031..cb027f4 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/RightOuterJoinOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/RightOuterJoinOperatorTest.java
@@ -24,10 +24,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.streamquery.condition.Condition;
-import com.datatorrent.lib.streamquery.condition.JoinColumnEqualCondition;
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.condition.JoinColumnEqualCondition;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 @Deprecated
 public class RightOuterJoinOperatorTest
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/SelectOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/SelectOperatorTest.java
index c5acbdd..ca8a3ed 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/SelectOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/SelectOperatorTest.java
@@ -25,9 +25,8 @@
 import org.slf4j.LoggerFactory;
 
 import org.apache.apex.malhar.contrib.misc.streamquery.condition.EqualValueCondition;
-
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.SelectOperatorTest}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/SelectTopOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/SelectTopOperatorTest.java
index 4b609c1..6eee7bb 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/SelectTopOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/SelectTopOperatorTest.java
@@ -24,7 +24,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 @Deprecated
 public class SelectTopOperatorTest
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/UpdateOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/UpdateOperatorTest.java
index f480cc7..fbdac0c 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/UpdateOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/UpdateOperatorTest.java
@@ -25,8 +25,7 @@
 import org.slf4j.LoggerFactory;
 
 import org.apache.apex.malhar.contrib.misc.streamquery.condition.EqualValueCondition;
-
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 @Deprecated
 public class UpdateOperatorTest
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/BetweenConditionTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/BetweenConditionTest.java
index 568aed9..a954517 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/BetweenConditionTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/BetweenConditionTest.java
@@ -26,9 +26,8 @@
 
 import org.apache.apex.malhar.contrib.misc.streamquery.SelectOperator;
 import org.apache.apex.malhar.contrib.misc.streamquery.condition.BetweenCondition;
-
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.advanced.BetweenConditionTest}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/CompoundConditionTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/CompoundConditionTest.java
index 929d134..78e7142 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/CompoundConditionTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/CompoundConditionTest.java
@@ -27,9 +27,8 @@
 import org.apache.apex.malhar.contrib.misc.streamquery.SelectOperator;
 import org.apache.apex.malhar.contrib.misc.streamquery.condition.CompoundCondition;
 import org.apache.apex.malhar.contrib.misc.streamquery.condition.EqualValueCondition;
-
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.advanced.CompoundConditionTest}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/InConditionTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/InConditionTest.java
index 255389b..02783a9 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/InConditionTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/InConditionTest.java
@@ -26,9 +26,8 @@
 
 import org.apache.apex.malhar.contrib.misc.streamquery.SelectOperator;
 import org.apache.apex.malhar.contrib.misc.streamquery.condition.InCondition;
-
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.advanced.InConditionTest}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/LikeConditionTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/LikeConditionTest.java
index e09d47a..010019e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/LikeConditionTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/LikeConditionTest.java
@@ -26,9 +26,8 @@
 
 import org.apache.apex.malhar.contrib.misc.streamquery.SelectOperator;
 import org.apache.apex.malhar.contrib.misc.streamquery.condition.LikeCondition;
-
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.advanced.LikeConditionTest}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/NegateIndexTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/NegateIndexTest.java
index 745c8c9..58f2b0d 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/NegateIndexTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/NegateIndexTest.java
@@ -26,8 +26,7 @@
 
 import org.apache.apex.malhar.contrib.misc.streamquery.SelectOperator;
 import org.apache.apex.malhar.contrib.misc.streamquery.index.NegateExpression;
-
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.SelectOperatorTest}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectAverageTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectAverageTest.java
index c1fa8b7..0ca5b1b 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectAverageTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectAverageTest.java
@@ -26,8 +26,7 @@
 
 import org.apache.apex.malhar.contrib.misc.streamquery.SelectFunctionOperator;
 import org.apache.apex.malhar.contrib.misc.streamquery.function.AverageFunction;
-
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.SelectOperatorTest}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectCountTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectCountTest.java
index 8ac1e33..4c72aa6 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectCountTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectCountTest.java
@@ -26,8 +26,7 @@
 
 import org.apache.apex.malhar.contrib.misc.streamquery.SelectFunctionOperator;
 import org.apache.apex.malhar.contrib.misc.streamquery.function.CountFunction;
-
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.SelectOperatorTest}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectFirstLastTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectFirstLastTest.java
index 17341da..2e47144 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectFirstLastTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectFirstLastTest.java
@@ -26,8 +26,7 @@
 
 import org.apache.apex.malhar.contrib.misc.streamquery.SelectFunctionOperator;
 import org.apache.apex.malhar.contrib.misc.streamquery.function.FirstLastFunction;
-
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.SelectOperatorTest}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectMaxMinTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectMaxMinTest.java
index fa347c1..bbb2755 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectMaxMinTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SelectMaxMinTest.java
@@ -26,8 +26,7 @@
 
 import org.apache.apex.malhar.contrib.misc.streamquery.SelectFunctionOperator;
 import org.apache.apex.malhar.contrib.misc.streamquery.function.MaxMinFunction;
-
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.SelectOperatorTest}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SumIndexTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SumIndexTest.java
index 0d374dc..2121aee 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SumIndexTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/misc/streamquery/advanced/SumIndexTest.java
@@ -26,8 +26,7 @@
 
 import org.apache.apex.malhar.contrib.misc.streamquery.SelectOperator;
 import org.apache.apex.malhar.contrib.misc.streamquery.index.SumExpression;
-
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Functional test for {@link org.apache.apex.malhar.contrib.misc.streamquery.SelectOperatorTest}.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/mongodb/MongoDBInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/mongodb/MongoDBInputOperatorTest.java
index 0a7f39e..ddd3355 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/mongodb/MongoDBInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/mongodb/MongoDBInputOperatorTest.java
@@ -16,40 +16,38 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mongodb;
+package org.apache.apex.malhar.contrib.mongodb;
 
 
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
 import com.mongodb.DBCursor;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
-/**
- *
- */
 public class MongoDBInputOperatorTest
 {
   private static final Logger logger = LoggerFactory.getLogger(MongoDBInputOperatorTest.class);
   public String[] hashMapping1 = new String[columnNum];
   public String[] arrayMapping1 = new String[columnNum];
-  public final static int maxTuple = 20;
-  public final static int columnNum = 5;
+  public static final int maxTuple = 20;
+  public static final int columnNum = 5;
 
   public class MyMongoDBInputOperator extends MongoDBInputOperator<Object>
   {
     @Override
     public Object getTuple(DBCursor result)
     {
-      while(result.hasNext()) {
-        System.out.println(result.next().toString());
+      while (result.hasNext()) {
+        logger.debug(result.next().toString());
       }
       return result;
     }
-  };
+  }
 
   @Test
   public void MongoDBInputOperatorTest()
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/mongodb/MongoDBOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/mongodb/MongoDBOutputOperatorTest.java
index 469fe22..d5463cb 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/mongodb/MongoDBOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/mongodb/MongoDBOutputOperatorTest.java
@@ -16,33 +16,33 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mongodb;
+package org.apache.apex.malhar.contrib.mongodb;
 
-import com.datatorrent.api.Attribute.AttributeMap;
-import com.datatorrent.api.Attribute.AttributeMap.DefaultAttributeMap;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 
-import com.mongodb.DBCursor;
-import com.mongodb.DBObject;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import com.mongodb.DBCursor;
+import com.mongodb.DBObject;
+
+import com.datatorrent.api.Attribute.AttributeMap;
+import com.datatorrent.api.Attribute.AttributeMap.DefaultAttributeMap;
 import com.datatorrent.api.DAG;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class MongoDBOutputOperatorTest
 {
   private static final Logger logger = LoggerFactory.getLogger(MongoDBOutputOperatorTest.class);
   public String[] hashMapping1 = new String[columnNum];
   public String[] arrayMapping1 = new String[columnNum];
-  public final static int maxTuple = 20;
-  public final static int columnNum = 5;
+  public static final int maxTuple = 20;
+  public static final int columnNum = 5;
   public AttributeMap attrmap = new DefaultAttributeMap();
   private static final int inputCount = 6;
 
@@ -75,11 +75,9 @@
       String type = tokens[2];
       if (type.contains("INT")) {
         hm.put(prop, j * columnNum + i);
-      }
-      else if (type.equals("STRING")) {
+      } else if (type.equals("STRING")) {
         hm.put(prop, String.valueOf(j * columnNum + i));
-      }
-      else if (type.equals("DATE")) {
+      } else if (type.equals("DATE")) {
         hm.put(prop, new Date());
       }
       oper.propTableMap.put(prop, table);
@@ -98,11 +96,9 @@
       String type = tokens[1];
       if (type.contains("INT")) {
         al.add(j * columnNum + i);
-      }
-      else if (type.equals("STRING")) {
+      } else if (type.equals("STRING")) {
         al.add(String.valueOf(j * columnNum + i));
-      }
-      else if (type.equals("DATE")) {
+      } else if (type.equals("DATE")) {
         al.add(new Date());
       }
 
@@ -116,7 +112,7 @@
       String table = (String)o;
       DBCursor cursor = oper.db.getCollection(table).find();
       while (cursor.hasNext()) {
-        System.out.println(cursor.next());
+        logger.debug("{}", cursor.next());
       }
     }
   }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/mongodb/TestPOJO.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/mongodb/TestPOJO.java
index 46e3e0e..4e37d34 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/mongodb/TestPOJO.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/mongodb/TestPOJO.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mongodb;
+package org.apache.apex.malhar.contrib.mongodb;
 
 import java.util.Map;
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/mqtt/MqttInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/mqtt/MqttInputOperatorTest.java
index 2a76b52..a043aa3 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/mqtt/MqttInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/mqtt/MqttInputOperatorTest.java
@@ -16,14 +16,8 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mqtt;
+package org.apache.apex.malhar.contrib.mqtt;
 
-import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.api.DefaultInputPort;
-import com.datatorrent.api.LocalMode;
-import com.datatorrent.lib.util.KeyValPair;
 import java.util.HashMap;
 import java.util.Map.Entry;
 import org.fusesource.mqtt.client.Message;
@@ -32,9 +26,14 @@
 import org.junit.Test;
 import org.slf4j.LoggerFactory;
 
-/**
- *
- */
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
+import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.api.DAG;
+import com.datatorrent.api.DefaultInputPort;
+import com.datatorrent.api.LocalMode;
+import com.datatorrent.common.util.BaseOperator;
+
 public class MqttInputOperatorTest
 {
   private static final org.slf4j.Logger logger = LoggerFactory.getLogger(MqttInputOperatorTest.class);
@@ -50,14 +49,12 @@
       return new KeyValPair<String, String>(msg.getTopic(), new String(msg.getPayload()));
     }
 
-    @SuppressWarnings("UseOfSystemOutOrSystemErr")
     public void generateData() throws Exception
     {
       HashMap<String, Integer> map = new HashMap<String, Integer>();
       map.put("a", 10);
       map.put("b", 200);
       map.put("c", 3000);
-      System.out.println("Data generator map:" + map.toString());
       for (Entry<String, Integer> entry : map.entrySet()) {
         connection.publish(entry.getKey(), entry.getValue().toString().getBytes(), QoS.AT_MOST_ONCE, false);
       }
@@ -89,7 +86,6 @@
   }
 
   @Test
-  @SuppressWarnings("UseOfSystemOutOrSystemErr")
   public void testInputOperator() throws InterruptedException, Exception
   {
     String host = "localhost";
@@ -133,13 +129,12 @@
         if (resultCount == 0) {
           Thread.sleep(10);
           Assert.assertTrue("timeout without getting any data", System.currentTimeMillis() < timeout1);
-        }
-        else {
+        } else {
           break;
         }
       }
-    }
-    catch (InterruptedException ex) {
+    } catch (InterruptedException ex) {
+      // ignore
     }
     lc.shutdown();
 
@@ -147,7 +142,7 @@
     Assert.assertEquals("value of a is ", "10", resultMap.get("a"));
     Assert.assertEquals("value of b is ", "200", resultMap.get("b"));
     Assert.assertEquals("value of c is ", "3000", resultMap.get("c"));
-    System.out.println("resultCount:" + resultCount);
+    logger.debug("resultCount:" + resultCount);
   }
 
 }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/mqtt/MqttOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/mqtt/MqttOutputOperatorTest.java
index 7afe22c..6cc1678 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/mqtt/MqttOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/mqtt/MqttOutputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.mqtt;
+package org.apache.apex.malhar.contrib.mqtt;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -30,9 +30,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.api.*;
 import com.datatorrent.api.Context.OperatorContext;
+import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
+import com.datatorrent.api.DefaultOutputPort;
+import com.datatorrent.api.InputOperator;
+import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.Operator.ActivationListener;
 import com.datatorrent.common.util.BaseOperator;
 
@@ -45,7 +48,7 @@
   private static final Map<String, String> sendingData = new HashMap<String, String>();
   private static final Map<String, String> receivedData = new HashMap<String, String>();
   static int sentTuples = 0;
-  final static int totalTuples = 9;
+  static final int totalTuples = 9;
 
   private static final class TestMqttOutputOperator extends AbstractSinglePortMqttOutputOperator<Map<String, String>>
   {
@@ -55,8 +58,7 @@
       for (Map.Entry<String, String> entry : tuple.entrySet()) {
         try {
           connection.publish(entry.getKey(), entry.getValue().getBytes(), QoS.AT_LEAST_ONCE, false);
-        }
-        catch (Exception ex) {
+        } catch (Exception ex) {
           throw new RuntimeException(ex);
         }
       }
@@ -78,8 +80,7 @@
             Message msg = connection.receive();
             receivedData.put(msg.getTopic(), new String(msg.getPayload()));
           }
-        }
-        catch (Exception ex) {
+        } catch (Exception ex) {
           throw new RuntimeException(ex);
         }
       }
@@ -89,7 +90,7 @@
   }
 
   public static class SourceModule extends BaseOperator
-          implements InputOperator, ActivationListener<OperatorContext>
+      implements InputOperator, ActivationListener<OperatorContext>
   {
     public final transient DefaultOutputPort<Map<String, String>> outPort = new DefaultOutputPort<Map<String, String>>();
     static transient ArrayBlockingQueue<Map<String, String>> holdingBuffer;
@@ -161,23 +162,16 @@
 
     final LocalMode.Controller lc = lma.getController();
     lc.runAsync();
-
-    try {
-      Thread.sleep(2000);
-    }
-    catch (InterruptedException ex) {
-    }
+    Thread.sleep(2000);
     lc.shutdown();
 
     Assert.assertEquals("emitted value for testNum was ", 3, receivedData.size());
     for (Map.Entry<String, String> e : receivedData.entrySet()) {
       if (e.getKey().equals("testa")) {
         Assert.assertEquals("emitted value for 'testa' was ", "2", e.getValue());
-      }
-      else if (e.getKey().equals("testb")) {
+      } else if (e.getKey().equals("testb")) {
         Assert.assertEquals("emitted value for 'testb' was ", "20", e.getValue());
-      }
-      else if (e.getKey().equals("testc")) {
+      } else if (e.getKey().equals("testc")) {
         Assert.assertEquals("emitted value for 'testc' was ", "1000", e.getValue());
       }
     }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortInputOperatorTest.java
index f4e9782..90f4a61 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi;
+package org.apache.apex.malhar.contrib.nifi;
 
 import java.io.File;
 import java.io.IOException;
@@ -33,6 +33,9 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.apex.malhar.contrib.nifi.mock.MockDataPacket;
+import org.apache.apex.malhar.contrib.nifi.mock.MockSiteToSiteClient;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.nifi.remote.protocol.DataPacket;
@@ -42,11 +45,8 @@
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
-import com.datatorrent.contrib.nifi.mock.MockDataPacket;
-import com.datatorrent.contrib.nifi.mock.MockSiteToSiteClient;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class NiFiSinglePortInputOperatorTest
 {
@@ -80,7 +80,8 @@
   }
 
   @After
-  public void teardown() {
+  public void teardown()
+  {
     if (operator != null) {
       operator.teardown();
     }
@@ -156,7 +157,7 @@
   {
     List<DataPacket> dataPackets = new ArrayList<>();
 
-    for (int i=1; i <= size; i++) {
+    for (int i = 1; i <= size; i++) {
       dataPackets.add(getDataPacket(String.valueOf(i)));
     }
     return dataPackets;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortOutputOperatorTest.java
index 461d90f..b874833 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/NiFiSinglePortOutputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi;
+package org.apache.apex.malhar.contrib.nifi;
 
 import java.io.File;
 import java.io.IOException;
@@ -30,6 +30,8 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.apex.malhar.contrib.nifi.mock.MockSiteToSiteClient;
+import org.apache.apex.malhar.contrib.nifi.mock.MockTransaction;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.commons.io.IOUtils;
@@ -39,10 +41,8 @@
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
-import com.datatorrent.contrib.nifi.mock.MockSiteToSiteClient;
-import com.datatorrent.contrib.nifi.mock.MockTransaction;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class NiFiSinglePortOutputOperatorTest
 {
@@ -189,29 +189,24 @@
     // convert all the data packets in the transactions to strings
     final List<String> dataPacketContents = new ArrayList<>();
 
-    for (MockTransaction mockTransaction : transactions)
-    {
+    for (MockTransaction mockTransaction : transactions) {
       List<DataPacket> dps = mockTransaction.getSentDataPackets();
       Assert.assertTrue(dps.size() > 0);
 
-      for (DataPacket dp : dps)
-      {
+      for (DataPacket dp : dps) {
         final String dpContent = IOUtils.toString(dp.getData());
         dataPacketContents.add(dpContent);
       }
     }
 
     // verify each expected piece of content is found in the data packet contents
-    for (String expectedContent : expectedContents)
-    {
+    for (String expectedContent : expectedContents) {
       boolean found = false;
-      for (String dataPacket : dataPacketContents)
-      {
-          if (dataPacket.equals(expectedContent))
-          {
-            found = true;
-            break;
-          }
+      for (String dataPacket : dataPacketContents) {
+        if (dataPacket.equals(expectedContent)) {
+          found = true;
+          break;
+        }
       }
       Assert.assertTrue(found);
     }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/demo/TestNiFiInputApplication.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/demo/TestNiFiInputApplication.java
index 906fa31..26e3396 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/demo/TestNiFiInputApplication.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/demo/TestNiFiInputApplication.java
@@ -16,8 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi.demo;
+package org.apache.apex.malhar.contrib.nifi.demo;
 
+import org.apache.apex.malhar.contrib.nifi.NiFiSinglePortInputOperator;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.nifi.remote.client.SiteToSiteClient;
@@ -26,8 +28,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.contrib.nifi.NiFiSinglePortInputOperator;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 /**
  * A sample application that shows how to receive data to a NiFi Output Port.
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/demo/TestNiFiOutputApplication.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/demo/TestNiFiOutputApplication.java
index 046c25e..081e8cf 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/demo/TestNiFiOutputApplication.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/demo/TestNiFiOutputApplication.java
@@ -16,11 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi.demo;
+package org.apache.apex.malhar.contrib.nifi.demo;
 
 import java.nio.charset.StandardCharsets;
 import java.util.HashMap;
 
+import org.apache.apex.malhar.contrib.nifi.NiFiDataPacket;
+import org.apache.apex.malhar.contrib.nifi.NiFiDataPacketBuilder;
+import org.apache.apex.malhar.contrib.nifi.NiFiSinglePortOutputOperator;
+import org.apache.apex.malhar.contrib.nifi.StandardNiFiDataPacket;
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
+import org.apache.apex.malhar.lib.wal.WindowDataManager;
+
 import org.apache.hadoop.conf.Configuration;
 import org.apache.nifi.remote.client.SiteToSiteClient;
 import org.apache.nifi.remote.client.SiteToSiteClientConfig;
@@ -28,12 +35,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.contrib.nifi.NiFiDataPacket;
-import com.datatorrent.contrib.nifi.NiFiDataPacketBuilder;
-import com.datatorrent.contrib.nifi.NiFiSinglePortOutputOperator;
-import com.datatorrent.contrib.nifi.StandardNiFiDataPacket;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
-import org.apache.apex.malhar.lib.wal.WindowDataManager;
 
 /**
  * A sample application that shows how to send data to a NiFi Input Port.
@@ -69,7 +70,7 @@
     RandomEventGenerator rand = dag.addOperator("rand", new RandomEventGenerator());
 
     NiFiSinglePortOutputOperator nifi = dag.addOperator("nifi",
-        new NiFiSinglePortOutputOperator(builder, dataPacketBuilder, windowDataManager ,batchSize));
+        new NiFiSinglePortOutputOperator(builder, dataPacketBuilder, windowDataManager, batchSize));
 
     dag.addStream("rand_nifi", rand.string_data, nifi.inputPort).setLocality(null);
   }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/mock/MockDataPacket.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/mock/MockDataPacket.java
index a57a771..c348586 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/mock/MockDataPacket.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/mock/MockDataPacket.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi.mock;
+package org.apache.apex.malhar.contrib.nifi.mock;
 
 import java.io.InputStream;
 import java.util.Map;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/mock/MockSiteToSiteClient.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/mock/MockSiteToSiteClient.java
index ee8fc55..078d9f0 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/mock/MockSiteToSiteClient.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/mock/MockSiteToSiteClient.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi.mock;
+package org.apache.apex.malhar.contrib.nifi.mock;
 
 import java.io.IOException;
 import java.util.ArrayList;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/mock/MockTransaction.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/mock/MockTransaction.java
index 373f62b..8060b8e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/mock/MockTransaction.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/nifi/mock/MockTransaction.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.nifi.mock;
+package org.apache.apex.malhar.contrib.nifi.mock;
 
 import java.io.IOException;
 import java.util.ArrayList;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/parquet/ParquetFilePOJOReaderTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/parquet/ParquetFilePOJOReaderTest.java
index 862c96a..67ed1c5 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/parquet/ParquetFilePOJOReaderTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/parquet/ParquetFilePOJOReaderTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parquet;
+package org.apache.apex.malhar.contrib.parquet;
 
 import java.io.File;
 import java.io.IOException;
@@ -35,6 +35,11 @@
 import org.junit.runner.Description;
 import org.python.google.common.collect.Lists;
 
+import org.apache.apex.malhar.lib.helper.TestPortContext;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -42,19 +47,6 @@
 import org.apache.hadoop.fs.FileContext;
 import org.apache.hadoop.fs.Path;
 
-import com.google.common.collect.Sets;
-
-import com.datatorrent.api.Attribute;
-import com.datatorrent.api.Context;
-import com.datatorrent.api.DAG;
-import com.datatorrent.api.LocalMode;
-import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.helper.TestPortContext;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
-
 import org.apache.parquet.column.ColumnDescriptor;
 import org.apache.parquet.hadoop.ParquetWriter;
 import org.apache.parquet.hadoop.api.WriteSupport;
@@ -65,12 +57,19 @@
 import org.apache.parquet.schema.MessageType;
 import org.apache.parquet.schema.MessageTypeParser;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import com.google.common.collect.Sets;
+
+import com.datatorrent.api.Attribute;
+import com.datatorrent.api.Context;
+import com.datatorrent.api.DAG;
+import com.datatorrent.api.LocalMode;
+import com.datatorrent.api.StreamingApplication;
+
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class ParquetFilePOJOReaderTest
 {
-
-  private static final String PARQUET_SCHEMA = "message com.datatorrent.contrib.parquet.eventsEventRecord {"
+  private static final String PARQUET_SCHEMA = "message org.apache.apex.malhar.contrib.parquet.eventsEventRecord {"
       + "required INT32 event_id;" + "required BINARY org_id (UTF8);" + "required INT64 long_id;"
       + "optional BOOLEAN css_file_loaded;" + "optional FLOAT float_val;" + "optional DOUBLE double_val;}";
 
@@ -251,7 +250,7 @@
   }
 
   private static void writeParquetFile(String rawSchema, File outputParquetFile, List<EventRecord> data)
-      throws IOException
+    throws IOException
   {
     Path path = new Path(outputParquetFile.toURI());
     MessageType schema = MessageTypeParser.parseMessageType(rawSchema);
@@ -594,7 +593,7 @@
     }
 
     private Getter generateGettersForField(Class<?> klass, String inputFieldName)
-        throws NoSuchFieldException, SecurityException
+      throws NoSuchFieldException, SecurityException
     {
       Field f = klass.getDeclaredField(inputFieldName);
       Class c = ClassUtils.primitiveToWrapper(f.getType());
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/CSVParserTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/CSVParserTest.java
index 57b5eb1..2368b40 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/CSVParserTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/CSVParserTest.java
@@ -16,22 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
-import com.datatorrent.netlet.util.DTThrowable;
-import com.datatorrent.contrib.parser.AbstractCsvParser.Field;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.ReusableStringReader;
-import com.datatorrent.lib.util.TestUtils.TestInfo;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Map;
-import org.apache.commons.io.FileUtils;
-import org.apache.hadoop.conf.Configuration;
-import org.apache.hadoop.fs.FSDataOutputStream;
-import org.apache.hadoop.fs.FileSystem;
-import org.apache.hadoop.fs.Path;
+
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
@@ -43,6 +34,18 @@
 import org.supercsv.io.ICsvMapReader;
 import org.supercsv.prefs.CsvPreference;
 
+import org.apache.apex.malhar.contrib.parser.AbstractCsvParser.Field;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.ReusableStringReader;
+import org.apache.apex.malhar.lib.util.TestUtils.TestInfo;
+import org.apache.commons.io.FileUtils;
+import org.apache.hadoop.conf.Configuration;
+import org.apache.hadoop.fs.FSDataOutputStream;
+import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.fs.Path;
+
+import com.datatorrent.netlet.util.DTThrowable;
+
 public class CSVParserTest
 {
   private static final String filename = "test.txt";
@@ -171,8 +174,7 @@
     try {
       hdfs = FileSystem.get(new Configuration());
       hdfs.createNewFile(newFilePath);
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       DTThrowable.rethrow(ex);
     }
     //Writing data to a HDFS file
@@ -194,8 +196,7 @@
       FSDataOutputStream fsOutStream = hdfs.create(newFilePath);
       fsOutStream.write(byt);
       fsOutStream.close();
-    }
-    catch (IOException ex) {
+    } catch (IOException ex) {
       DTThrowable.rethrow(ex);
 
     }
@@ -231,8 +232,7 @@
       Map<String, Object> fieldValueMapping = null;
       try {
         fieldValueMapping = csvReader.read(properties, processors);
-      }
-      catch (IOException ex) {
+      } catch (IOException ex) {
         DTThrowable.rethrow(ex);
       }
       return fieldValueMapping;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/CommonLogParserTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/CommonLogParserTest.java
index ec529fe..7c69f78 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/CommonLogParserTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/CommonLogParserTest.java
@@ -28,8 +28,7 @@
 import org.junit.runner.Description;
 
 import org.apache.apex.malhar.contrib.parser.log.CommonLog;
-
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 public class CommonLogParserTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/CsvPOJOParserTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/CsvPOJOParserTest.java
index b0e6322..a4253f6 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/CsvPOJOParserTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/CsvPOJOParserTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
 import java.util.Date;
 
@@ -26,9 +26,9 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 public class CsvPOJOParserTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/FixedWidthTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/FixedWidthTest.java
index bc72efd..3edd09b 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/FixedWidthTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/FixedWidthTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
 import java.util.Date;
 
@@ -26,9 +26,9 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 public class FixedWidthTest
 {
@@ -310,7 +310,7 @@
     Assert.assertEquals(0, parser.getErrorTupleCount());
     Assert.assertEquals(0, parser.getEmittedObjectCount());
     parser.in.process("123982_____adxyz0.22015-03-08 03:37:1211/12/201212___y_CAMP_AD123Yyes       Extra_stuff"
-      .getBytes());
+        .getBytes());
     parser.endWindow();
     Assert.assertEquals(0, parser.getParsedOutputCount());
     Assert.assertEquals(1, parser.getIncomingTuplesCount());
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/JsonParserApplicationTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/JsonParserApplicationTest.java
index d1b1efa..21f0d8f 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/JsonParserApplicationTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/JsonParserApplicationTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
 import java.io.IOException;
 
@@ -25,6 +25,9 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.contrib.parser.JsonParserTest.Product;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
@@ -34,9 +37,6 @@
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.contrib.parser.JsonParserTest.Product;
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 public class JsonParserApplicationTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/JsonParserTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/JsonParserTest.java
index f492597..516153e 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/JsonParserTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/JsonParserTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
 import java.util.Date;
 import java.util.List;
@@ -30,11 +30,11 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import com.fasterxml.jackson.annotation.JsonFormat;
 
 public class JsonParserTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/LogParserTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/LogParserTest.java
index 996502d..cc0b86c 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/LogParserTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/LogParserTest.java
@@ -26,11 +26,8 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
-import org.apache.apex.malhar.contrib.parser.LogParser;
-import org.apache.apex.malhar.contrib.parser.LogSchemaDetails;
-
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 public class LogParserTest
 {
@@ -101,7 +98,7 @@
     Assert.assertEquals(0, error.collectedTuples.size());
     Object obj = pojoPort.collectedTuples.get(0);
     Assert.assertNotNull(obj);
-    LogSchema pojo = (LogSchema) obj;
+    LogSchema pojo = (LogSchema)obj;
     Assert.assertEquals("125.125.125.125", pojo.getHost());
     Assert.assertEquals("smith", pojo.getUserName());
     Assert.assertEquals("200", pojo.getStatusCode());
@@ -123,41 +120,50 @@
     Assert.assertEquals(1, error.collectedTuples.size());
   }
 
-  public static class LogSchema {
+  public static class LogSchema
+  {
     private String host;
     private String userName;
     private String statusCode;
     private String bytes;
 
-    public String getHost() {
+    public String getHost()
+    {
       return host;
     }
 
-    public void setHost(String host) {
+    public void setHost(String host)
+    {
       this.host = host;
     }
 
-    public String getUserName() {
+    public String getUserName()
+    {
       return userName;
     }
 
-    public void setUserName(String username) {
+    public void setUserName(String username)
+    {
       this.userName = username;
     }
 
-    public String getStatusCode() {
+    public String getStatusCode()
+    {
       return statusCode;
     }
 
-    public void setStatusCode(String statusCode) {
+    public void setStatusCode(String statusCode)
+    {
       this.statusCode = statusCode;
     }
 
-    public String getBytes() {
+    public String getBytes()
+    {
       return bytes;
     }
 
-    public void setBytes(String bytes) {
+    public void setBytes(String bytes)
+    {
       this.bytes = bytes;
     }
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/RegexParserTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/RegexParserTest.java
index ee6e029..6af0212 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/RegexParserTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/RegexParserTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.parser;
+package org.apache.apex.malhar.contrib.parser;
 
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
@@ -29,9 +29,9 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 public class RegexParserTest
 {
@@ -70,8 +70,8 @@
   {
     regex.beginWindow(0);
     String line = "2015-10-01T03:14:49.000-07:00 lvn-d1-dev DevServer[9876]: INFO: [EVENT][SEQ=248717]" +
-      " 2015:10:01:03:14:49 101 sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00 " +
-      "result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik";
+        " 2015:10:01:03:14:49 101 sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00 " +
+        "result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik";
     regex.in.process(line.getBytes());
     regex.endWindow();
     Assert.assertEquals(1, pojoPort.collectedTuples.size());
@@ -85,8 +85,8 @@
     Date date = sdf.parse("2015:10:01:03:14:49");
     Assert.assertEquals(date, pojo.getDate());
     Assert.assertEquals("sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00"
-      + " result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  " +
-      "platform=pik", pojo.getMessage());
+        + " result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  " +
+        "platform=pik", pojo.getMessage());
     Assert.assertEquals(1, regex.getIncomingTuplesCount());
     Assert.assertEquals(1, regex.getEmittedObjectCount());
   }
@@ -109,8 +109,8 @@
   {
     regex.beginWindow(0);
     String line = "2015-10-01T03:14:49.000-07:00 lvn-d1-dev DevServer[9876]: INFO: [EVENT][SEQ=248717]"
-      + " qwerty 101 sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00"
-      + " result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik";
+        + " qwerty 101 sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00"
+        + " result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik";
     regex.in.process(line.getBytes());
     regex.endWindow();
     Assert.assertEquals(0, pojoPort.collectedTuples.size());
@@ -119,8 +119,7 @@
     Assert.assertNotNull(obj);
     Assert.assertEquals("2015-10-01T03:14:49.000-07:00 lvn-d1-dev DevServer[9876]: INFO: [EVENT][SEQ=248717]" +
         " qwerty 101 sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00 " +
-        "result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik"
-      , obj.getKey());
+        "result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik", obj.getKey());
     Assert.assertEquals("The incoming tuple do not match with the Regex pattern defined.", obj.getValue());
     Assert.assertEquals(1, regex.getIncomingTuplesCount());
     Assert.assertEquals(0, regex.getEmittedObjectCount());
@@ -132,16 +131,15 @@
   {
     regex.beginWindow(0);
     String line = "2015-10-01T03:14:49.000-07:00 lvn-d1-dev DevServer[9876]: INFO: [EVENT][SEQ=248717] " +
-      "2015:10:01:03:14:46 hskhhskfk sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00 " +
-      "result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik";
+        "2015:10:01:03:14:46 hskhhskfk sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00 " +
+        "result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik";
     regex.in.process(line.getBytes());
     regex.endWindow();
     KeyValPair<String, String> obj = (KeyValPair<String, String>)error.collectedTuples.get(0);
     Assert.assertNotNull(obj);
     Assert.assertEquals("2015-10-01T03:14:49.000-07:00 lvn-d1-dev DevServer[9876]: INFO: [EVENT][SEQ=248717] " +
         "2015:10:01:03:14:46 hskhhskfk sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00 " +
-        "result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik",
-      obj.getKey());
+        "result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik", obj.getKey());
     Assert.assertEquals("The incoming tuple do not match with the Regex pattern defined.", obj.getValue());
     Assert.assertEquals(0, pojoPort.collectedTuples.size());
     Assert.assertEquals(1, error.collectedTuples.size());
@@ -170,8 +168,8 @@
     Assert.assertEquals(0, regex.getErrorTupleCount());
     Assert.assertEquals(0, regex.getEmittedObjectCount());
     String tuple = "2015-10-01T03:14:49.000-07:00 lvn-d1-dev DevServer[9876]: INFO: [EVENT][SEQ=248717] " +
-      "2015:10:01:03:14:49 101 sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00 " +
-      "result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik";
+        "2015:10:01:03:14:49 101 sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00 " +
+        "result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik";
     regex.in.process(tuple.getBytes());
     regex.endWindow();
     Assert.assertEquals(1, regex.getIncomingTuplesCount());
@@ -201,8 +199,8 @@
     Assert.assertEquals(0, regex.getErrorTupleCount());
     Assert.assertEquals(0, regex.getEmittedObjectCount());
     String tuple = "2015-10-01T03:14:49.000-07:00 lvn-d1-dev DevServer[9876]: INFO: [EVENT][SEQ=248717] " +
-      "2015:10:01:03:14:49 101 sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00 " +
-      "result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik";
+        "2015:10:01:03:14:49 101 sign-in_id=11111@psop.com ip_address=1.1.1.1  service_id=IP1234-NPB12345_00 " +
+        "result=RESULT_SUCCESconsole_id=0000000138e91b4e58236bf32besdafasdfasdfasdfsadf  account_id=11111  platform=pik";
     regex.beginWindow(0);
     regex.in.process(tuple.getBytes());
     regex.endWindow();
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/StreamingJsonParserTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/StreamingJsonParserTest.java
index 3e69a02..50c94d2 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/StreamingJsonParserTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/parser/StreamingJsonParserTest.java
@@ -37,6 +37,10 @@
 import org.junit.runner.Description;
 import org.python.google.common.collect.Lists;
 
+import org.apache.apex.malhar.lib.helper.TestPortContext;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperator;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileContext;
@@ -49,10 +53,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.helper.TestPortContext;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.io.fs.AbstractFileInputOperator;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
 public class StreamingJsonParserTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RMaxOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RMaxOperatorTest.java
index 48d723d..b5c7b73 100755
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RMaxOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RMaxOperatorTest.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 public class RMaxOperatorTest
 {
@@ -73,4 +73,4 @@
     Assert.assertEquals("Number of emitted tuples ", 1, maxSink.count);
     Assert.assertEquals("Mismatch in Max value: ", new Double(1000.0), maxSink.tuple);
   }
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RMinOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RMinOperatorTest.java
index f76d1e0..71e0cbd 100755
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RMinOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RMinOperatorTest.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 public class RMinOperatorTest
 {
@@ -73,4 +73,4 @@
     Assert.assertEquals("number emitted tuples", 1, minSink.count);
     Assert.assertEquals("emitted low value was ", new Double(1.0), minSink.tuple);
   }
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptLinearRegressionPredictorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptLinearRegressionPredictorTest.java
index 04483d9..eb880e0 100755
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptLinearRegressionPredictorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptLinearRegressionPredictorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 public class RScriptLinearRegressionPredictorTest
 {
@@ -56,11 +56,11 @@
     HashMap<String, Object> map = new HashMap<String, Object>();
 
     int percent = 10;
-    int year[] = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 };
-    int roll[] = new int[] { 5501, 5945, 6629, 7556, 8716, 9369, 9920, 10167, 11084, 12504, 13746, 13656, 13850, 14145, 14888, 14991, 14836, 14478, 14539, 14395, 14599, 14969, 15107, 14831, 15081, 15127, 15856, 15938, 16081 };
-    double unem[] = new double[] { 8.1, 7.0, 7.3, 7.5, 7.0, 6.4, 6.5, 6.4, 6.3, 7.7, 8.2, 7.5, 7.4, 8.2, 10.1, 9.2, 7.7, 5.7, 6.5, 7.5, 7.3, 9.2, 10.1, 7.5, 8.8, 9.1, 8.8, 7.8, 7.0 };
-    int hgrad[] = new int[] { 9552, 9680, 9731, 11666, 14675, 15265, 15484, 15723, 16501, 16890, 17203, 17707, 18108, 18266, 19308, 18224, 18997, 19505, 1900, 19546, 19117, 18774, 17813, 17304, 16756, 16749, 16925, 17231, 16816 };
-    int inc[] = new int[] { 1923, 1961, 1979, 2030, 2112, 2192, 2235, 2351, 2411, 2475, 2524, 2674, 2833, 2863, 2839, 2898, 3123, 3195, 3239, 3129, 3100, 3008, 2983, 3069, 3151, 3127, 3179, 3207, 3345 };
+    int[] year = new int[] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29};
+    int[] roll = new int[] {5501, 5945, 6629, 7556, 8716, 9369, 9920, 10167, 11084, 12504, 13746, 13656, 13850, 14145, 14888, 14991, 14836, 14478, 14539, 14395, 14599, 14969, 15107, 14831, 15081, 15127, 15856, 15938, 16081 };
+    double[] unem = new double[] {8.1, 7.0, 7.3, 7.5, 7.0, 6.4, 6.5, 6.4, 6.3, 7.7, 8.2, 7.5, 7.4, 8.2, 10.1, 9.2, 7.7, 5.7, 6.5, 7.5, 7.3, 9.2, 10.1, 7.5, 8.8, 9.1, 8.8, 7.8, 7.0 };
+    int[] hgrad = new int[] {9552, 9680, 9731, 11666, 14675, 15265, 15484, 15723, 16501, 16890, 17203, 17707, 18108, 18266, 19308, 18224, 18997, 19505, 1900, 19546, 19117, 18774, 17813, 17304, 16756, 16749, 16925, 17231, 16816 };
+    int[] inc = new int[] {1923, 1961, 1979, 2030, 2112, 2192, 2235, 2351, 2411, 2475, 2524, 2674, 2833, 2863, 2839, 2898, 3123, 3195, 3239, 3129, 3100, 3008, 2983, 3069, 3151, 3127, 3179, 3207, 3345 };
 
     map.put("PERCENT", percent);
     map.put("YEAR", year);
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorBooleanTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorBooleanTest.java
index 492777d..7ab273c 100755
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorBooleanTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorBooleanTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 public class RScriptOperatorBooleanTest
 {
@@ -53,7 +53,7 @@
 
     HashMap<String, Object> map = new HashMap<String, Object>();
 
-    boolean smallStates[] = new boolean[] { true, false, true, false };
+    boolean[] smallStates = new boolean[] {true, false, true, false };
 
     // Return the value passed for 'DUMMY'
     // A boolean value being passed and returned
@@ -88,12 +88,12 @@
 
     // Although there were two elements in the sink, only last one is accessible.
     Assert.assertEquals("Mismatch in number of elements returned : ", 2, hashSinkAP.count);
-    Boolean[] bArr = (Boolean[]) hashSinkAP.tuple;
+    Boolean[] bArr = (Boolean[])hashSinkAP.tuple;
     // Check few random values. Expected results are obtained by actually running the function in R
-    Assert.assertEquals("Boolean array return mismatch : ", (Boolean) false, bArr[5]);
-    Assert.assertEquals("Boolean array return mismatch : ", (Boolean) true, bArr[6]);
-    Assert.assertEquals("Boolean array return mismatch : ", (Boolean) true, bArr[7]);
-    Assert.assertEquals("Boolean array return mismatch : ", (Boolean) false, bArr[8]);
+    Assert.assertEquals("Boolean array return mismatch : ", (Boolean)false, bArr[5]);
+    Assert.assertEquals("Boolean array return mismatch : ", (Boolean)true, bArr[6]);
+    Assert.assertEquals("Boolean array return mismatch : ", (Boolean)true, bArr[7]);
+    Assert.assertEquals("Boolean array return mismatch : ", (Boolean)false, bArr[8]);
 
     // There are 50 states in US and hence should return 50 values.
     Assert.assertEquals("Boolean array length mismatch : ", 50, bArr.length);
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorDoubleArrayTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorDoubleArrayTest.java
index 8d3ad55..01f8504 100755
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorDoubleArrayTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorDoubleArrayTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 public class RScriptOperatorDoubleArrayTest
 {
@@ -51,7 +51,7 @@
 
     HashMap<String, Object> map = new HashMap<String, Object>();
 
-    double dArr[] = new double[5];
+    double[] dArr = new double[5];
     dArr[0] = 0.0;
     dArr[1] = 1.1;
     dArr[2] = 2.2;
@@ -60,7 +60,7 @@
 
     map.put("num1", dArr);
 
-    double dArr1[] = new double[5];
+    double[] dArr1 = new double[5];
     dArr1[0] = 5.5;
     dArr1[1] = 6.6;
     dArr1[2] = 7.7;
@@ -74,6 +74,6 @@
     oper.teardown();
 
     Assert.assertEquals("Mismatch in number of integer arrays returned : ", 1, hashSink.count);
-    Assert.assertEquals("Mismatch in returned array length: ", 5, ((Double[]) hashSink.tuple).length);
+    Assert.assertEquals("Mismatch in returned array length: ", 5, ((Double[])hashSink.tuple).length);
   }
 }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorIntTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorIntTest.java
index a9c0dbc..88b12f2 100755
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorIntTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorIntTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 public class RScriptOperatorIntTest
 {
@@ -65,4 +65,4 @@
     oper.teardown();
 
   }
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorRealTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorRealTest.java
index 277e8b1..b35d526 100755
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorRealTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorRealTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 public class RScriptOperatorRealTest
 {
@@ -55,7 +55,7 @@
 
     oper.inBindings.process(map);
     Assert.assertEquals("Mismatch in number of elements emitted : ", 1, hashSink.count);
-    Assert.assertEquals("Mismatch in number of elements emitted : ", (Double) 17.6, (Double) hashSink.tuple);
+    Assert.assertEquals("Mismatch in number of elements emitted : ", (Double)17.6, (Double)hashSink.tuple);
 
     map = new HashMap<String, Object>();
 
@@ -67,6 +67,6 @@
     oper.teardown();
 
     Assert.assertEquals("Mismatch in number of elements emitted : ", 2, hashSink.count);
-    Assert.assertEquals("Mismatch in number of elements emitted : ", (Double) 22.7, (Double) hashSink.tuple);
+    Assert.assertEquals("Mismatch in number of elements emitted : ", (Double)22.7, (Double)hashSink.tuple);
   }
 }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorStrTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorStrTest.java
index fb9eebd..02fa5c0 100755
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorStrTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RScriptOperatorStrTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 public class RScriptOperatorStrTest
 {
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RStandardDeviationOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RStandardDeviationOperatorTest.java
index 309c480..79ef1d1 100755
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RStandardDeviationOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/r/RStandardDeviationOperatorTest.java
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.r;
+package org.apache.apex.malhar.contrib.r;
 
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 public class RStandardDeviationOperatorTest
 {
@@ -46,7 +46,7 @@
 
     Assert.assertEquals("Must be one tuple in sink", variance.collectedTuples.size(), 1);
     Assert.assertEquals("Must be one tuple in sink", deviation.collectedTuples.size(), 1);
-    Assert.assertEquals("Mismatch in variance  ", new Double(13.333),(Double) variance.collectedTuples.get(0), 0.001);
-    Assert.assertEquals("Mismatch in deviation ", new Double(3.6514), (Double) deviation.collectedTuples.get(0), 0.001);
+    Assert.assertEquals("Mismatch in variance  ", new Double(13.333),(Double)variance.collectedTuples.get(0), 0.001);
+    Assert.assertEquals("Mismatch in deviation ", new Double(3.6514), (Double)deviation.collectedTuples.get(0), 0.001);
   }
 }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQInputOperatorBenchmark.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQInputOperatorBenchmark.java
index 34c0520..b9f1db3 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQInputOperatorBenchmark.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQInputOperatorBenchmark.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.rabbitmq;
+package org.apache.apex.malhar.contrib.rabbitmq;
 
 import org.junit.Test;
 import org.slf4j.Logger;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQInputOperatorTest.java
index ff8fe24..f21bed5 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQInputOperatorTest.java
@@ -16,36 +16,36 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.rabbitmq;
+package org.apache.apex.malhar.contrib.rabbitmq;
 
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 
-import com.rabbitmq.client.Channel;
-import com.rabbitmq.client.Connection;
-import com.rabbitmq.client.ConnectionFactory;
-import com.rabbitmq.client.QueueingConsumer;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.contrib.helper.CollectorModule;
+import org.apache.apex.malhar.contrib.helper.MessageQueueTestHelper;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 
-import com.datatorrent.contrib.helper.CollectorModule;
-import com.datatorrent.contrib.helper.MessageQueueTestHelper;
-import com.datatorrent.api.Context.OperatorContext;
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.Connection;
+import com.rabbitmq.client.ConnectionFactory;
+import com.rabbitmq.client.QueueingConsumer;
+
 import com.datatorrent.api.Attribute;
+import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.LocalMode;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 import com.datatorrent.netlet.util.DTThrowable;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQOutputOperatorBenchmark.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQOutputOperatorBenchmark.java
index a128181..4b3a0cf 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQOutputOperatorBenchmark.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQOutputOperatorBenchmark.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.rabbitmq;
+package org.apache.apex.malhar.contrib.rabbitmq;
 
 import org.junit.Test;
 import org.slf4j.LoggerFactory;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQOutputOperatorTest.java
index 3fa36ab..e73df38 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/rabbitmq/RabbitMQOutputOperatorTest.java
@@ -16,22 +16,28 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.rabbitmq;
+package org.apache.apex.malhar.contrib.rabbitmq;
 
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.util.HashMap;
 import java.util.Map;
 
-import com.rabbitmq.client.*;
-
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.contrib.helper.SourceModule;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 
-import com.datatorrent.contrib.helper.SourceModule;
+import com.rabbitmq.client.AMQP;
+import com.rabbitmq.client.Channel;
+import com.rabbitmq.client.Connection;
+import com.rabbitmq.client.ConnectionFactory;
+import com.rabbitmq.client.DefaultConsumer;
+import com.rabbitmq.client.Envelope;
+import com.rabbitmq.client.ShutdownSignalException;
+
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.LocalMode;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/redis/RedisInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/redis/RedisInputOperatorTest.java
index b01bdb7..37d794b 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/redis/RedisInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/redis/RedisInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -25,20 +25,20 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 
 import redis.clients.jedis.ScanParams;
 
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
-
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class RedisInputOperatorTest
 {
@@ -47,7 +47,7 @@
 
   public static class CollectorModule extends BaseOperator
   {
-    volatile static List<KeyValPair<String, String>> resultMap = new ArrayList<KeyValPair<String, String>>();
+    static volatile List<KeyValPair<String, String>> resultMap = new ArrayList<KeyValPair<String, String>>();
     static long resultCount = 0;
 
     public final transient DefaultInputPort<KeyValPair<String, String>> inputPort = new DefaultInputPort<KeyValPair<String, String>>()
@@ -103,6 +103,7 @@
               }
             }
           } catch (InterruptedException ex) {
+            //
           }
           lc.shutdown();
         }
@@ -186,7 +187,7 @@
       Assert.assertEquals("num of messages in window 2",numberOfMessagesInWindow2, sink.collectedTuples.size());
     } finally {
       for (Object e : sink.collectedTuples) {
-        KeyValPair<String, String> entry = (KeyValPair<String, String>) e;
+        KeyValPair<String, String> entry = (KeyValPair<String, String>)e;
         testStore.remove(entry.getKey());
       }
       sink.collectedTuples.clear();
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/redis/RedisOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/redis/RedisOperatorTest.java
index 24ff158..621e200 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/redis/RedisOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/redis/RedisOperatorTest.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
 import org.junit.Before;
 import org.junit.Test;
 
-import com.datatorrent.lib.db.TransactionableKeyValueStoreOperatorTest;
+import org.apache.apex.malhar.lib.db.TransactionableKeyValueStoreOperatorTest;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/redis/RedisPOJOOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/redis/RedisPOJOOperatorTest.java
index 708e397..a491cb7 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/redis/RedisPOJOOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/redis/RedisPOJOOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.redis;
+package org.apache.apex.malhar.contrib.redis;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -26,18 +26,19 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.contrib.redis.RedisInputOperatorTest.CollectorModule;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import redis.clients.jedis.ScanParams;
 
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.contrib.redis.RedisInputOperatorTest.CollectorModule;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.FieldInfo.SupportType;
-import com.datatorrent.lib.util.KeyValPair;
-
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class RedisPOJOOperatorTest
 {
@@ -130,7 +131,7 @@
 
   public static class ObjectCollectorModule extends BaseOperator
   {
-    volatile static Map<String, Object> resultMap = new HashMap<String, Object>();
+    static volatile Map<String, Object> resultMap = new HashMap<String, Object>();
     static long resultCount = 0;
 
     public final transient DefaultInputPort<KeyValPair<String, Object>> inputPort = new DefaultInputPort<KeyValPair<String, Object>>()
@@ -209,6 +210,7 @@
               }
             }
           } catch (InterruptedException ex) {
+            //
           }
           lc.shutdown();
         }
@@ -220,7 +222,7 @@
       Assert.assertTrue(ObjectCollectorModule.resultMap.containsKey("test_def_in"));
       Assert.assertTrue(ObjectCollectorModule.resultMap.containsKey("test_ghi_in"));
 
-      TestClass a = (TestClass) ObjectCollectorModule.resultMap.get("test_abc_in");
+      TestClass a = (TestClass)ObjectCollectorModule.resultMap.get("test_abc_in");
       Assert.assertNotNull(a);
       Assert.assertEquals("abc", a.stringValue);
       Assert.assertEquals("1", a.intValue.toString());
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/romesyndication/RomeSyndicationOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/romesyndication/RomeSyndicationOperatorTest.java
index 6701908..7905fbb 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/romesyndication/RomeSyndicationOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/romesyndication/RomeSyndicationOperatorTest.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.romesyndication;
+package org.apache.apex.malhar.contrib.romesyndication;
 
-import com.datatorrent.api.DAG;
-import com.datatorrent.api.DefaultInputPort;
-import com.datatorrent.api.LocalMode;
-import com.datatorrent.common.util.BaseOperator;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Assert;
@@ -31,10 +32,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
+import com.datatorrent.api.DAG;
+import com.datatorrent.api.DefaultInputPort;
+import com.datatorrent.api.LocalMode;
+import com.datatorrent.common.util.BaseOperator;
 
 /**
  *
@@ -101,8 +102,7 @@
       if (index == 0) {
         is = getClass().getResourceAsStream("/com/datatorrent/contrib/romesyndication/datatorrent_feed.rss");
         ++index;
-      }
-      else {
+      } else {
         is = getClass().getResourceAsStream("/com/datatorrent/contrib/romesyndication/datatorrent_feed_updated.rss");
       }
       return is;
@@ -140,8 +140,7 @@
       // Check last entry
       Assert.assertEquals("Last entry title", entries.get(9).getSyndEntry().getTitle(), "Dimensions Computation (Aggregate Navigator) Part 2: Implementation");
       Assert.assertEquals("Last entry URI", entries.get(9).getSyndEntry().getUri(), "https://www.datatorrent.com/?p=2401");
-    }
-    catch (Exception ex) {
+    } catch (Exception ex) {
       logger.error(ex.getMessage());
       Assert.assertFalse(true);
     }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/ruby/RubyOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/ruby/RubyOperatorTest.java
index 8357a24..831f960 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/ruby/RubyOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/ruby/RubyOperatorTest.java
@@ -16,25 +16,25 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.ruby;
+package org.apache.apex.malhar.contrib.ruby;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import java.util.HashMap;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import java.util.HashMap;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Unit test for RubyOperator.
  *
  */
-public class RubyOperatorTest {
-
+public class RubyOperatorTest
+{
   @SuppressWarnings({ "rawtypes", "unchecked" })
   @Test
-  public void TestRubyOperatorInvoke() {
-
+  public void TestRubyOperatorInvoke()
+  {
     RubyOperator oper = new RubyOperator();
     String setupScript = "def square(val)\n";
     setupScript += "  return val*val\nend\n";
@@ -60,8 +60,8 @@
 
   @SuppressWarnings({ "rawtypes", "unchecked" })
   @Test
-  public void TestRubyOperatorEval() {
-
+  public void TestRubyOperatorEval()
+  {
     RubyOperator oper = new RubyOperator();
     String setupScript1 = "b=0";
     String setupScript2 = "c=0";
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/splunk/SplunkInputFromForwarderTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/splunk/SplunkInputFromForwarderTest.java
index 6e3a9d4..3204ad6 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/splunk/SplunkInputFromForwarderTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/splunk/SplunkInputFromForwarderTest.java
@@ -16,23 +16,24 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.splunk;
+package org.apache.apex.malhar.contrib.splunk;
 
 import java.io.IOException;
 import java.util.Properties;
 
-public class SplunkInputFromForwarderTest {
-
-  private static class InputFromForwarder extends SplunkInputFromForwarder<String> {
-
+public class SplunkInputFromForwarderTest
+{
+  private static class InputFromForwarder extends SplunkInputFromForwarder<String>
+  {
     @Override
-    public String getMessage(String line) {
+    public String getMessage(String line)
+    {
       return line;
     }
-
   }
 
-  public static void main(String[] args) {
+  public static void main(String[] args)
+  {
     InputFromForwarder iff = new InputFromForwarder();
     Properties props = new Properties();
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/splunk/SplunkInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/splunk/SplunkInputOperatorTest.java
index 6d66e9e..27f0b38 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/splunk/SplunkInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/splunk/SplunkInputOperatorTest.java
@@ -16,17 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.splunk;
+package org.apache.apex.malhar.contrib.splunk;
 
-import com.datatorrent.api.Attribute.AttributeMap;
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
+import com.datatorrent.api.Attribute.AttributeMap;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  *
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/splunk/SplunkTcpOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/splunk/SplunkTcpOutputOperatorTest.java
index f1d9285..99bc00b 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/splunk/SplunkTcpOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/splunk/SplunkTcpOutputOperatorTest.java
@@ -16,12 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.splunk;
+package org.apache.apex.malhar.contrib.splunk;
 
 import java.util.List;
 import org.junit.Assert;
 import org.junit.Test;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
 import com.google.common.collect.Lists;
 
 /**
@@ -30,8 +32,8 @@
  * queries it for last 10 rows to check if the values are same or not.
  *
  */
-public class SplunkTcpOutputOperatorTest {
-
+public class SplunkTcpOutputOperatorTest
+{
   public static final String HOST = "127.0.0.1";
   public static final int PORT = 8089;
   private static final String USER_NAME = "admin";
@@ -57,8 +59,8 @@
   }
 
   @Test
-  public void TestSplunkTcpOutputOperator() {
-
+  public void TestSplunkTcpOutputOperator()
+  {
     int flag = 1;
     SplunkStore store = new SplunkStore();
     store.setHost(HOST);
@@ -95,23 +97,21 @@
     inputOperator.endWindow();
 
     List<Object> collectedEvents = sink.collectedTuples;
-    if(events.size()!=collectedEvents.size()) {
+    if (events.size() != collectedEvents.size()) {
       flag = 0;
     }
 
-    if(flag==1) {
-      if(collectedEvents.get(0).toString().length() == 1) {
-        for(int i =0; i<collectedEvents.size();i++) {
-          System.out.println(collectedEvents.get(i).toString());
-          if(!events.contains(Integer.parseInt(collectedEvents.get(i).toString()))) {
+    if (flag == 1) {
+      if (collectedEvents.get(0).toString().length() == 1) {
+        for (int i = 0; i < collectedEvents.size(); i++) {
+          if (!events.contains(Integer.parseInt(collectedEvents.get(i).toString()))) {
             flag = 0;
             break;
           }
         }
-      }
-      else if(collectedEvents.get(0).toString().length() == 10) {
-        for(int i=0; i<10; i++) {
-          if(!collectedEvents.get(0).toString().contains(events.get(i).toString())) {
+      } else if (collectedEvents.get(0).toString().length() == 10) {
+        for (int i = 0; i < 10; i++) {
+          if (!collectedEvents.get(0).toString().contains(events.get(i).toString())) {
             flag = 0;
             break;
           }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/util/FieldValueSerializableGenerator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/util/FieldValueSerializableGenerator.java
index 7d34d71..4a2848b 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/util/FieldValueSerializableGenerator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/util/FieldValueSerializableGenerator.java
@@ -16,32 +16,31 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.util;
+package org.apache.apex.malhar.contrib.util;
 
 import java.io.ByteArrayOutputStream;
 import java.util.List;
 import java.util.Map;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldValueGenerator;
+import org.apache.apex.malhar.lib.util.PojoUtils.Setter;
+
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.FieldValueGenerator;
-import com.datatorrent.lib.util.PojoUtils.Setter;
-
-public class FieldValueSerializableGenerator< T extends FieldInfo> extends FieldValueGenerator<T>
+public class FieldValueSerializableGenerator<T extends FieldInfo> extends FieldValueGenerator<T>
 {
 
-  public static < T extends FieldInfo > FieldValueSerializableGenerator<T> getFieldValueGenerator(final Class<?> clazz, List<T> fieldInfos)
+  public static <T extends FieldInfo> FieldValueSerializableGenerator<T> getFieldValueGenerator(final Class<?> clazz, List<T> fieldInfos)
   {
     return new FieldValueSerializableGenerator(clazz, fieldInfos);
   }
 
-
   private static final Logger logger = LoggerFactory.getLogger( FieldValueGenerator.class );
   //it's better to same kryo instance for both de/serialize
   private Kryo _kryo = null;
@@ -68,8 +67,7 @@
     Object convertObj = obj;
 
     //if fields are specified, convert to map and then convert map to byte[]
-    if( fieldGetterMap != null && !fieldGetterMap.isEmpty() )
-    {
+    if ( fieldGetterMap != null && !fieldGetterMap.isEmpty() ) {
       convertObj = getFieldsValueAsMap(obj);
     }
 
@@ -87,29 +85,24 @@
   {
     Object obj = getKryo().readClassAndObject( new Input( bytes ) );
 
-
-    if( fieldGetterMap == null || fieldGetterMap.isEmpty() )
+    if ( fieldGetterMap == null || fieldGetterMap.isEmpty() ) {
       return obj;
+    }
 
     // the obj in fact is a map, convert from map to object
-    try
-    {
+    try {
       Map valueMap = (Map)obj;
       obj = clazz.newInstance();
 
-      for( Map.Entry< T, Setter<Object,Object>> entry : fieldSetterMap.entrySet() )
-      {
+      for ( Map.Entry<T, Setter<Object,Object>> entry : fieldSetterMap.entrySet() ) {
         T fieldInfo = entry.getKey();
         Setter<Object,Object> setter = entry.getValue();
-        if( setter != null )
-        {
+        if (setter != null ) {
           setter.set(obj, valueMap.get( fieldInfo.getColumnName() ) );
         }
       }
       return obj;
-    }
-    catch( Exception e )
-    {
+    } catch ( Exception e ) {
       logger.warn( "Coverting map to obj exception. ", e );
       return obj;
     }
@@ -117,12 +110,11 @@
 
   protected Kryo getKryo()
   {
-    if( _kryo == null )
-    {
-      synchronized( this )
-      {
-        if( _kryo == null )
+    if ( _kryo == null ) {
+      synchronized ( this ) {
+        if ( _kryo == null ) {
           _kryo = new Kryo();
+        }
         _kryo.setClassLoader(clazz.getClassLoader());
       }
     }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/util/POJOTupleGenerateOperator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/util/POJOTupleGenerateOperator.java
index d9f5079..5f465e6 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/util/POJOTupleGenerateOperator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/util/POJOTupleGenerateOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.util;
+package org.apache.apex.malhar.contrib.util;
 
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -87,31 +87,27 @@
   public void emitTuples()
   {
     final int theTupleNum = getTupleNum();
-    if( emitedTuples.get() >= theTupleNum )
-    {
-      try
-      {
+    if ( emitedTuples.get() >= theTupleNum ) {
+      try {
         Thread.sleep(10);
+      } catch ( Exception e ) {
+        //
       }
-      catch( Exception e ){}
       return;
     }
 
 
-    for( int i=0; i<batchNum; ++i )
-    {
+    for ( int i = 0; i < batchNum; ++i ) {
       int count = emitedTuples.get();
-      if( count >= theTupleNum )
+      if ( count >= theTupleNum ) {
         return;
-
-      if( emitedTuples.compareAndSet(count, count+1) )
-      {
+      }
+      if ( emitedTuples.compareAndSet(count, count + 1) ) {
         T tuple = getNextTuple();
-        outputPort.emit ( tuple );
+        outputPort.emit( tuple );
         tupleEmitted( tuple );
 
-        if( count+1 == theTupleNum )
-        {
+        if ( count + 1 == theTupleNum ) {
           tupleEmitDone();
           return;
         }
@@ -122,7 +118,8 @@
 
 
   protected void tupleEmitted( T tuple ){}
-  protected void tupleEmitDone(){}
+
+  protected void tupleEmitDone() {}
 
   public int getEmitedTupleCount()
   {
@@ -133,6 +130,7 @@
   {
     return tupleNum;
   }
+
   public void setTupleNum( int tupleNum )
   {
     this.tupleNum = tupleNum;
@@ -140,9 +138,9 @@
 
   protected T getNextTuple()
   {
-    if( tupleGenerator == null )
+    if ( tupleGenerator == null ) {
       tupleGenerator = createTupleGenerator();
-
+    }
     return tupleGenerator.getNextTuple();
   }
 
@@ -150,4 +148,4 @@
   {
     return new TupleGenerator( tupleClass );
   }
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TestPOJO.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TestPOJO.java
index 99910be..0350dbd 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TestPOJO.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TestPOJO.java
@@ -16,20 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.util;
+package org.apache.apex.malhar.contrib.util;
 
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
 import org.apache.hadoop.hbase.util.Bytes;
 
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.FieldInfo.SupportType;
-
-
-
 public class TestPOJO implements Serializable
 {
   private static final long serialVersionUID = 2153417121590225192L;
@@ -52,8 +49,7 @@
   public static TestPOJO from( Map<String,byte[]> map )
   {
     TestPOJO testPOJO = new TestPOJO();
-    for( Map.Entry<String, byte[]> entry : map.entrySet() )
-    {
+    for ( Map.Entry<String, byte[]> entry : map.entrySet() ) {
       testPOJO.setValue(entry.getKey(), entry.getValue() );
     }
     return testPOJO;
@@ -68,7 +64,7 @@
 
   public TestPOJO(long rowId)
   {
-    this(rowId, "name" + rowId, (int) rowId, "address" + rowId);
+    this(rowId, "name" + rowId, (int)rowId, "address" + rowId);
   }
 
   public TestPOJO(long rowId, String name, int age, String address)
@@ -81,23 +77,19 @@
 
   public void setValue( String fieldName, byte[] value )
   {
-    if( "row".equalsIgnoreCase(fieldName) )
-    {
+    if ( "row".equalsIgnoreCase(fieldName) ) {
       setRow( Bytes.toString(value) );
       return;
     }
-    if( "name".equalsIgnoreCase(fieldName))
-    {
+    if ( "name".equalsIgnoreCase(fieldName)) {
       setName( Bytes.toString(value));
       return;
     }
-    if( "address".equalsIgnoreCase(fieldName))
-    {
+    if ( "address".equalsIgnoreCase(fieldName)) {
       setAddress( Bytes.toString(value));
       return;
     }
-    if( "age".equalsIgnoreCase(fieldName))
-    {
+    if ( "age".equalsIgnoreCase(fieldName)) {
       setAge( Bytes.toInt(value) );
       return;
     }
@@ -107,18 +99,22 @@
   {
     return String.valueOf(rowId);
   }
+
   public void setRow( String row )
   {
     setRowId( Long.valueOf(row) );
   }
+
   public void setRowId( Long rowId )
   {
     this.rowId = rowId;
   }
+
   public Long getRowId()
   {
     return rowId;
   }
+
   public String getName()
   {
     return name;
@@ -152,44 +148,54 @@
   @Override
   public boolean equals( Object obj )
   {
-    if( obj == null )
+    if ( obj == null ) {
       return false;
-    if( !( obj instanceof TestPOJO ) )
+    }
+    if ( !( obj instanceof TestPOJO ) ) {
       return false;
-
+    }
     return completeEquals( (TestPOJO)obj );
   }
 
   public boolean outputFieldsEquals( TestPOJO other )
   {
-    if( other == null )
+    if ( other == null ) {
       return false;
-    if( !fieldEquals( getName(), other.getName() ) )
+    }
+    if ( !fieldEquals( getName(), other.getName() ) ) {
       return false;
-    if( !fieldEquals( getAge(), other.getAge() ) )
+    }
+    if ( !fieldEquals( getAge(), other.getAge() ) ) {
       return false;
-    if( !fieldEquals( getAddress(), other.getAddress() ) )
+    }
+    if ( !fieldEquals( getAddress(), other.getAddress() ) ) {
       return false;
+    }
     return true;
   }
 
   public boolean completeEquals( TestPOJO other )
   {
-    if( other == null )
+    if ( other == null ) {
       return false;
-    if( !outputFieldsEquals( other ) )
+    }
+    if ( !outputFieldsEquals( other ) ) {
       return false;
-    if( !fieldEquals( getRow(), other.getRow() ) )
+    }
+    if ( !fieldEquals( getRow(), other.getRow() ) ) {
       return false;
+    }
     return true;
   }
 
   public <T> boolean fieldEquals( T v1, T v2 )
   {
-    if( v1 == null && v2 == null )
+    if ( v1 == null && v2 == null ) {
       return true;
-    if( v1 == null || v2 == null )
+    }
+    if ( v1 == null || v2 == null ) {
       return false;
+    }
     return v1.equals( v2 );
   }
 
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TupleCacheOutputOperator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TupleCacheOutputOperator.java
index 4bd8c79..986b4e9 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TupleCacheOutputOperator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TupleCacheOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.util;
+package org.apache.apex.malhar.contrib.util;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -35,10 +35,10 @@
   private static final Logger logger = LoggerFactory.getLogger( TupleCacheOutputOperator.class );
 
   //one instance of TupleCacheOutputOperator map to one
-  private static Map< String, List<?> > receivedTuplesMap = new HashMap< String, List<?>>();
+  private static Map<String, List<?>> receivedTuplesMap = new HashMap<>();
 
-  public final transient DefaultInputPort<T> inputPort = new DefaultInputPort<T>() {
-
+  public final transient DefaultInputPort<T> inputPort = new DefaultInputPort<T>()
+  {
     @Override
     public void process(T tuple)
     {
@@ -61,8 +61,7 @@
   public void processTuple( T tuple )
   {
     List<T> receivedTuples = (List<T>)receivedTuplesMap.get(uuid);
-    if( receivedTuples == null )
-    {
+    if ( receivedTuples == null ) {
       receivedTuples = new ArrayList<T>();
       receivedTuplesMap.put(uuid, receivedTuples);
     }
@@ -79,4 +78,4 @@
   {
     return (List<Object>)receivedTuplesMap.get(uuid);
   }
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TupleGenerateCacheOperator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TupleGenerateCacheOperator.java
index 8ee38dd..78bcbce 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TupleGenerateCacheOperator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TupleGenerateCacheOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.util;
+package org.apache.apex.malhar.contrib.util;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -26,7 +26,7 @@
 public class TupleGenerateCacheOperator<T> extends POJOTupleGenerateOperator<T>
 {
   //one instance of TupleCacheOutputOperator map to one
-  private static Map< String, List<?> > emittedTuplesMap = new HashMap< String, List<?>>();
+  private static Map<String, List<?>> emittedTuplesMap = new HashMap<>();
 
   private String uuid;
 
@@ -39,8 +39,7 @@
   protected void tupleEmitted( T tuple )
   {
     List<T> emittedTuples = (List<T>)emittedTuplesMap.get(uuid);
-    if( emittedTuples == null )
-    {
+    if ( emittedTuples == null ) {
       emittedTuples = new ArrayList<T>();
       emittedTuplesMap.put(uuid, emittedTuples);
     }
@@ -52,4 +51,4 @@
   {
     return (List<T>)emittedTuplesMap.get(uuid);
   }
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TupleGenerator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TupleGenerator.java
index 844d31d..0e2334a 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TupleGenerator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/util/TupleGenerator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.util;
+package org.apache.apex.malhar.contrib.util;
 
 import java.lang.reflect.Constructor;
 
@@ -34,7 +34,7 @@
   private volatile long rowId = 0;
   private Constructor<T> constructor;
 
-  private static Class<?>[] paramTypes = new Class<?>[]{ Long.class, long.class, Integer.class, int.class };
+  private static Class<?>[] paramTypes = new Class<?>[]{Long.class, long.class, Integer.class, int.class };
 
   public TupleGenerator()
   {
@@ -47,14 +47,13 @@
 
   public void useTupleClass( Class<T> tupleClass )
   {
-    for( Class<?> paramType : paramTypes )
-    {
+    for ( Class<?> paramType : paramTypes ) {
       constructor = tryGetConstructor( tupleClass, paramType );
-      if( constructor != null )
+      if ( constructor != null ) {
         break;
+      }
     }
-    if( constructor == null )
-    {
+    if ( constructor == null ) {
       logger.error( "Not found proper constructor." );
       throw new RuntimeException( "Not found proper constructor." );
     }
@@ -62,12 +61,9 @@
 
   protected Constructor<T> tryGetConstructor( Class<T> tupleClass, Class<?> parameterType )
   {
-    try
-    {
+    try {
       return tupleClass.getConstructor( parameterType );
-    }
-    catch( Exception e )
-    {
+    } catch ( Exception e ) {
       return null;
     }
   }
@@ -79,19 +75,16 @@
 
   public T getNextTuple()
   {
-    if( constructor == null )
+    if ( constructor == null ) {
       throw new RuntimeException( "Not found proper constructor." );
-
-    long curRowId = ++rowId;
-    try
-    {
-      return constructor.newInstance( curRowId );
     }
-    catch( Exception e)
-    {
+    long curRowId = ++rowId;
+    try {
+      return constructor.newInstance( curRowId );
+    } catch ( Exception e) {
       logger.error( "newInstance failed.", e );
       return null;
     }
   }
 
-}
\ No newline at end of file
+}
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQInputOperatorBenchmark.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQInputOperatorBenchmark.java
index 92c4735..9d29cf1 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQInputOperatorBenchmark.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQInputOperatorBenchmark.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
 
 import org.junit.Test;
 
@@ -26,7 +26,8 @@
 public class ZeroMQInputOperatorBenchmark extends ZeroMQInputOperatorTest
 {
   @Test
-  public void testDag() throws Exception {
+  public void testDag() throws Exception
+  {
     testHelper(2000000);
   }
 }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQInputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQInputOperatorTest.java
index 1bb599a..e2fe3a0 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQInputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
 
 import java.util.List;
 
@@ -24,8 +24,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.contrib.helper.CollectorModule;
-import com.datatorrent.contrib.helper.MessageQueueTestHelper;
+import org.apache.apex.malhar.contrib.helper.CollectorModule;
+import org.apache.apex.malhar.contrib.helper.MessageQueueTestHelper;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
@@ -41,7 +41,8 @@
   protected static Logger logger = LoggerFactory.getLogger(ZeroMQInputOperatorTest.class);
 
   @Test
-  public void testDag() throws InterruptedException, Exception {
+  public void testDag() throws InterruptedException, Exception
+  {
     final int testNum = 3;
     testHelper(testNum);
   }
@@ -62,13 +63,14 @@
     generator.setSyncUrl("tcp://localhost:5557");
 
     dag.addStream("Stream", generator.outputPort, collector.inputPort).setLocality(Locality.CONTAINER_LOCAL);
-    new Thread() {
+    new Thread()
+    {
       @Override
-      public void run() {
+      public void run()
+      {
         try {
           publisher.generateMessages(testNum);
-        }
-        catch (InterruptedException ex) {
+        } catch (InterruptedException ex) {
           logger.debug(ex.toString());
         }
       }
@@ -98,8 +100,7 @@
               break;
             }
           }
-        }
-        catch (InterruptedException ex) {
+        } catch (InterruptedException ex) {
           DTThrowable.rethrow(ex);
         } finally {
           logger.debug("Shutting down..");
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQMessageGenerator.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQMessageGenerator.java
index 6155ec3..43a458d 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQMessageGenerator.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQMessageGenerator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -25,10 +25,10 @@
 import org.slf4j.LoggerFactory;
 import org.zeromq.ZMQ;
 
-import com.datatorrent.contrib.helper.MessageQueueTestHelper;
+import org.apache.apex.malhar.contrib.helper.MessageQueueTestHelper;
 
-class ZeroMQMessageGenerator {
-
+class ZeroMQMessageGenerator
+{
   private static final Logger logger = LoggerFactory.getLogger(ZeroMQMessageGenerator.class);
 
   private ZMQ.Context context;
@@ -68,10 +68,8 @@
       syncservice.send("".getBytes(), 0);
     }
     for (int i = 0; i < msgCount; i++) {
-
       ArrayList<HashMap<String, Integer>>  dataMaps = MessageQueueTestHelper.getMessages();
-      for(int j =0; j < dataMaps.size(); j++)
-      {
+      for (int j = 0; j < dataMaps.size(); j++) {
         send(dataMaps.get(j));
       }
     }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQMessageReceiver.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQMessageReceiver.java
index bb04817..42108c8 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQMessageReceiver.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQMessageReceiver.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
 
 import java.util.HashMap;
 
@@ -58,14 +58,12 @@
   {
     logger.debug("receiver running");
     while (!Thread.currentThread().isInterrupted() && !shutDown) {
-    	//logger.debug("receiver running in loop");
       byte[] msg = subscriber.recv(ZMQ.NOBLOCK);
       // convert to HashMap and save the values for each key
       // then expect c to be 1000, b=20, a=2
       // and do count++ (where count now would be 30)
-      if(msg == null || msg.length ==0)
-      {
-    	  continue;
+      if (msg == null || msg.length == 0) {
+        continue;
       }
       String str = new String(msg);
 
@@ -84,9 +82,8 @@
 
   public void teardown()
   {
-	shutDown=true;
-
-	syncclient.close();
+    shutDown = true;
+    syncclient.close();
     subscriber.close();
     context.term();
   }
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQOutputOperatorBenchmark.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQOutputOperatorBenchmark.java
index 45e6669..932ccfd 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQOutputOperatorBenchmark.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQOutputOperatorBenchmark.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
+package org.apache.apex.malhar.contrib.zmq;
 
 import org.junit.Test;
 import org.slf4j.Logger;
diff --git a/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQOutputOperatorTest.java b/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQOutputOperatorTest.java
index 41c5248..dac137c 100644
--- a/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQOutputOperatorTest.java
+++ b/contrib/src/test/java/org/apache/apex/malhar/contrib/zmq/ZeroMQOutputOperatorTest.java
@@ -16,8 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.zmq;
-
+package org.apache.apex.malhar.contrib.zmq;
 
 import java.util.Map;
 
@@ -25,7 +24,7 @@
 import org.junit.Test;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.contrib.helper.SourceModule;
+import org.apache.apex.malhar.contrib.helper.SourceModule;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
@@ -33,10 +32,6 @@
 
 import com.datatorrent.netlet.util.DTThrowable;
 
-
-/**
- *
- */
 public class ZeroMQOutputOperatorTest
 {
   protected static org.slf4j.Logger logger = LoggerFactory.getLogger(ZeroMQOutputOperatorTest.class);
@@ -51,7 +46,8 @@
     logger.debug("end of test");
   }
 
-  protected void runTest(final int testNum) {
+  protected void runTest(final int testNum)
+  {
     LocalMode lma = LocalMode.newInstance();
     DAG dag = lma.getDAG();
     SourceModule source = dag.addOperator("source", new SourceModule());
@@ -86,8 +82,7 @@
               break;
             }
           }
-        }
-        catch (InterruptedException ex) {
+        } catch (InterruptedException ex) {
           DTThrowable.rethrow(ex);
         } finally {
           logger.debug("done...");
@@ -110,11 +105,9 @@
     for (Map.Entry<String, Integer> e : receiver.dataMap.entrySet()) {
       if (e.getKey().equals("a")) {
         Assert.assertEquals("emitted value for 'a' was ", new Integer(2), e.getValue());
-      }
-      else if (e.getKey().equals("b")) {
+      } else if (e.getKey().equals("b")) {
         Assert.assertEquals("emitted value for 'b' was ", new Integer(20), e.getValue());
-      }
-      else if (e.getKey().equals("c")) {
+      } else if (e.getKey().equals("c")) {
         Assert.assertEquals("emitted value for 'c' was ", new Integer(1000), e.getValue());
       }
     }
diff --git a/examples/csvformatter/pom.xml b/examples/csvformatter/pom.xml
index d9e85cd..88884a9 100644
--- a/examples/csvformatter/pom.xml
+++ b/examples/csvformatter/pom.xml
@@ -25,7 +25,7 @@
     <parent>
         <groupId>org.apache.apex</groupId>
         <artifactId>malhar-examples</artifactId>
-        <version>3.9.0-SNAPSHOT</version>
+        <version>4.0.0-SNAPSHOT</version>
     </parent>
 
     <artifactId>malhar-examples-csvformatter</artifactId>
diff --git a/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/Application.java b/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/Application.java
index e57004a..080ed43 100644
--- a/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/Application.java
+++ b/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/Application.java
@@ -19,15 +19,15 @@
 
 package org.apache.apex.examples.csvformatter;
 
+import org.apache.apex.malhar.contrib.formatter.CsvFormatter;
+import org.apache.apex.malhar.contrib.parser.JsonParser;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.PortContext;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.formatter.CsvFormatter;
-import com.datatorrent.contrib.parser.JsonParser;
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
 
 @ApplicationAnnotation(name = "CustomOutputFormatter")
 /**
diff --git a/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/HDFSOutputOperator.java b/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/HDFSOutputOperator.java
index c833e48..be9ef19 100644
--- a/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/HDFSOutputOperator.java
+++ b/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/HDFSOutputOperator.java
@@ -21,8 +21,9 @@
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperator;
+
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperator;
 
 /**
  * HDFSoutput operator with implementation to write Objects to HDFS
diff --git a/examples/dedup/pom.xml b/examples/dedup/pom.xml
index db46dd6..186c4bc 100644
--- a/examples/dedup/pom.xml
+++ b/examples/dedup/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-examples-dedup</artifactId>
diff --git a/examples/dedup/src/main/java/org/apache/apex/examples/dedup/Application.java b/examples/dedup/src/main/java/org/apache/apex/examples/dedup/Application.java
index d56b3ce..12e9d92 100644
--- a/examples/dedup/src/main/java/org/apache/apex/examples/dedup/Application.java
+++ b/examples/dedup/src/main/java/org/apache/apex/examples/dedup/Application.java
@@ -22,6 +22,7 @@
 import java.util.Random;
 
 import org.apache.apex.malhar.lib.dedup.TimeBasedDedupOperator;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
@@ -31,7 +32,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 @ApplicationAnnotation(name = "DedupExample")
 /**
diff --git a/examples/distributedistinct/pom.xml b/examples/distributedistinct/pom.xml
index 12f479a..b5ffe8c 100644
--- a/examples/distributedistinct/pom.xml
+++ b/examples/distributedistinct/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <properties>
diff --git a/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/Application.java b/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/Application.java
index 8eb8f2d..eeebc48 100644
--- a/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/Application.java
+++ b/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/Application.java
@@ -18,16 +18,16 @@
  */
 package org.apache.apex.examples.distributeddistinct;
 
+import org.apache.apex.malhar.lib.algo.UniqueValueCount;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.stream.Counter;
+import org.apache.apex.malhar.lib.stream.StreamDuplicater;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.algo.UniqueValueCount;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.stream.Counter;
-import com.datatorrent.lib.stream.StreamDuplicater;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * This application demonstrates the UniqueValueCount operator. It uses an input operator which generates random key
diff --git a/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/CountVerifier.java b/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/CountVerifier.java
index 380ed4e..f5fd108 100644
--- a/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/CountVerifier.java
+++ b/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/CountVerifier.java
@@ -21,12 +21,13 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * An operator that takes two streams of Integer to Integer KeyValPairs and verifies that the two streams output the
diff --git a/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/IntegerUniqueValueCountAppender.java b/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/IntegerUniqueValueCountAppender.java
index 229eb32..9c30fda 100644
--- a/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/IntegerUniqueValueCountAppender.java
+++ b/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/IntegerUniqueValueCountAppender.java
@@ -25,8 +25,8 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import com.datatorrent.lib.algo.UniqueValueCount;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.algo.UniqueValueCount;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
  * This operator demonstrates {@link UniqueValueCountAppender} given that the keys and values of the preceding {@link UniqueValueCount} operator
diff --git a/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/RandomKeyValGenerator.java b/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/RandomKeyValGenerator.java
index b8e04be..0941d88 100644
--- a/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/RandomKeyValGenerator.java
+++ b/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/RandomKeyValGenerator.java
@@ -27,12 +27,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KeyHashValPair;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.KeyHashValPair;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Generates random KeyValPairs and optionally, keeps track of the number of unique values per pair to emit to the
diff --git a/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/StatefulApplication.java b/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/StatefulApplication.java
index 550000e..1db9cf4 100644
--- a/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/StatefulApplication.java
+++ b/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/StatefulApplication.java
@@ -20,6 +20,10 @@
 
 import java.io.Serializable;
 
+import org.apache.apex.malhar.lib.algo.UniqueValueCount;
+import org.apache.apex.malhar.lib.algo.UniqueValueCount.InternalCountOutput;
+import org.apache.apex.malhar.lib.codec.KryoSerializableStreamCodec;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
@@ -27,10 +31,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.algo.UniqueValueCount;
-import com.datatorrent.lib.algo.UniqueValueCount.InternalCountOutput;
-import com.datatorrent.lib.codec.KryoSerializableStreamCodec;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 /**
  * This application demonstrates the UniqueValueCount operator. It uses an input operator which generates random key
diff --git a/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/UniqueValueCountAppender.java b/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/UniqueValueCountAppender.java
index c81f7b8..279b560 100644
--- a/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/UniqueValueCountAppender.java
+++ b/examples/distributedistinct/src/main/java/org/apache/apex/examples/distributeddistinct/UniqueValueCountAppender.java
@@ -32,15 +32,16 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.algo.UniqueValueCount;
+import org.apache.apex.malhar.lib.algo.UniqueValueCount.InternalCountOutput;
+import org.apache.apex.malhar.lib.db.jdbc.JDBCLookupCacheBackedOperator;
+
 import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultPartition;
 import com.datatorrent.api.Partitioner;
-import com.datatorrent.lib.algo.UniqueValueCount;
-import com.datatorrent.lib.algo.UniqueValueCount.InternalCountOutput;
-import com.datatorrent.lib.db.jdbc.JDBCLookupCacheBackedOperator;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
diff --git a/examples/distributedistinct/src/test/java/org/apache/apex/examples/distributeddistinct/DistributedDistinctTest.java b/examples/distributedistinct/src/test/java/org/apache/apex/examples/distributeddistinct/DistributedDistinctTest.java
index 5b3cd37..bf75642 100644
--- a/examples/distributedistinct/src/test/java/org/apache/apex/examples/distributeddistinct/DistributedDistinctTest.java
+++ b/examples/distributedistinct/src/test/java/org/apache/apex/examples/distributeddistinct/DistributedDistinctTest.java
@@ -35,11 +35,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.lib.algo.UniqueValueCount.InternalCountOutput;
+import org.apache.apex.malhar.lib.algo.UniqueValueCount.InternalCountOutput;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import com.datatorrent.api.Context.OperatorContext;
+
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
+import com.datatorrent.api.DAG;
 
 /**
  * Test for {@link IntegerUniqueValueCountAppender} and {@link UniqueValueCountAppender}
diff --git a/examples/distributedistinct/src/test/java/org/apache/apex/examples/distributeddistinct/StatefulUniqueCountTest.java b/examples/distributedistinct/src/test/java/org/apache/apex/examples/distributeddistinct/StatefulUniqueCountTest.java
index 6821431..e9a4cce 100644
--- a/examples/distributedistinct/src/test/java/org/apache/apex/examples/distributeddistinct/StatefulUniqueCountTest.java
+++ b/examples/distributedistinct/src/test/java/org/apache/apex/examples/distributeddistinct/StatefulUniqueCountTest.java
@@ -31,6 +31,8 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.algo.UniqueValueCount;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.OperatorContext;
@@ -42,9 +44,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.common.util.BaseOperator;
 
-import com.datatorrent.lib.algo.UniqueValueCount;
-import com.datatorrent.lib.util.KeyValPair;
-
 public class StatefulUniqueCountTest
 {
 
diff --git a/examples/dynamic-partition/pom.xml b/examples/dynamic-partition/pom.xml
index 6b4e8de..e61ac8c 100644
--- a/examples/dynamic-partition/pom.xml
+++ b/examples/dynamic-partition/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-examples-dynamic-partition</artifactId>
diff --git a/examples/dynamic-partition/src/main/java/org/apache/apex/examples/dynamic/App.java b/examples/dynamic-partition/src/main/java/org/apache/apex/examples/dynamic/App.java
index 44c32a3..25943d6 100644
--- a/examples/dynamic-partition/src/main/java/org/apache/apex/examples/dynamic/App.java
+++ b/examples/dynamic-partition/src/main/java/org/apache/apex/examples/dynamic/App.java
@@ -19,14 +19,13 @@
 
 package org.apache.apex.examples.dynamic;
 
+import org.apache.apex.malhar.lib.stream.DevNull;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 
-import com.datatorrent.lib.stream.DevNull;
-
 @ApplicationAnnotation(name = "Dyn")
 /**
  * @since 3.7.0
diff --git a/examples/echoserver/pom.xml b/examples/echoserver/pom.xml
index 3d183da..50b728e 100644
--- a/examples/echoserver/pom.xml
+++ b/examples/echoserver/pom.xml
@@ -24,7 +24,7 @@
   <parent>
     <artifactId>malhar-examples</artifactId>
     <groupId>org.apache.apex</groupId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
   
   <groupId>org.apache.apex</groupId>
diff --git a/examples/enricher/pom.xml b/examples/enricher/pom.xml
index ba68220..b1b8a68 100644
--- a/examples/enricher/pom.xml
+++ b/examples/enricher/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-examples-enricher</artifactId>
diff --git a/examples/enricher/src/main/java/org/apache/apex/examples/enricher/EnricherAppWithJSONFile.java b/examples/enricher/src/main/java/org/apache/apex/examples/enricher/EnricherAppWithJSONFile.java
index c1d62c5..d1e6579 100644
--- a/examples/enricher/src/main/java/org/apache/apex/examples/enricher/EnricherAppWithJSONFile.java
+++ b/examples/enricher/src/main/java/org/apache/apex/examples/enricher/EnricherAppWithJSONFile.java
@@ -21,6 +21,9 @@
 
 import java.util.ArrayList;
 
+import org.apache.apex.malhar.contrib.enrich.JsonFSLoader;
+import org.apache.apex.malhar.contrib.enrich.POJOEnricher;
+import org.apache.apex.malhar.contrib.parser.JsonParser;
 import org.apache.apex.malhar.lib.function.Function;
 import org.apache.apex.malhar.lib.function.FunctionOperator.MapFunctionOperator;
 import org.apache.apex.malhar.lib.function.FunctionOperatorUtil;
@@ -31,9 +34,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.enrich.JsonFSLoader;
-import com.datatorrent.contrib.enrich.POJOEnricher;
-import com.datatorrent.contrib.parser.JsonParser;
 
 @ApplicationAnnotation(name = "EnricherAppWithJSONFile")
 /**
diff --git a/examples/enricher/src/main/java/org/apache/apex/examples/enricher/LineOutputOperator.java b/examples/enricher/src/main/java/org/apache/apex/examples/enricher/LineOutputOperator.java
index d609202..41a67c6 100644
--- a/examples/enricher/src/main/java/org/apache/apex/examples/enricher/LineOutputOperator.java
+++ b/examples/enricher/src/main/java/org/apache/apex/examples/enricher/LineOutputOperator.java
@@ -24,7 +24,7 @@
 
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperator;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperator;
 
 /**
  * Converts each tuple to a string and writes it as a new line to the output file
diff --git a/examples/exactly-once/pom.xml b/examples/exactly-once/pom.xml
index 2b62b16..059f092 100644
--- a/examples/exactly-once/pom.xml
+++ b/examples/exactly-once/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-examples-exactly-once</artifactId>
diff --git a/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceFileOutputApp.java b/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceFileOutputApp.java
index 98786df..6f47bb5 100644
--- a/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceFileOutputApp.java
+++ b/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceFileOutputApp.java
@@ -19,6 +19,9 @@
 package org.apache.apex.examples.exactlyonce;
 
 import org.apache.apex.examples.exactlyonce.ExactlyOnceJdbcOutputApp.KafkaSinglePortStringInputOperator;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.hadoop.conf.Configuration;
 
@@ -26,9 +29,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 @ApplicationAnnotation(name = "ExactlyOnceFileOutput")
 /**
diff --git a/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceJdbcOutputApp.java b/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceJdbcOutputApp.java
index 2ae5b07..a6e4723 100644
--- a/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceJdbcOutputApp.java
+++ b/examples/exactly-once/src/main/java/org/apache/apex/examples/exactlyonce/ExactlyOnceJdbcOutputApp.java
@@ -26,6 +26,11 @@
 import org.apache.apex.malhar.kafka.AbstractKafkaConsumer;
 import org.apache.apex.malhar.kafka.AbstractKafkaInputOperator;
 import org.apache.apex.malhar.kafka.KafkaConsumer09;
+import org.apache.apex.malhar.lib.algo.UniqueCounter;
+import org.apache.apex.malhar.lib.db.jdbc.AbstractJdbcTransactionableOutputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.commons.lang.mutable.MutableInt;
 import org.apache.hadoop.conf.Configuration;
@@ -35,11 +40,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.algo.UniqueCounter;
-import com.datatorrent.lib.db.jdbc.AbstractJdbcTransactionableOutputOperator;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 @ApplicationAnnotation(name = "ExactlyOnceJbdcOutput")
 /**
diff --git a/examples/exactly-once/src/test/java/org/apache/apex/examples/exactlyonce/ExactlyOnceJdbcOutputTest.java b/examples/exactly-once/src/test/java/org/apache/apex/examples/exactlyonce/ExactlyOnceJdbcOutputTest.java
index 5457ec5..4636554 100644
--- a/examples/exactly-once/src/test/java/org/apache/apex/examples/exactlyonce/ExactlyOnceJdbcOutputTest.java
+++ b/examples/exactly-once/src/test/java/org/apache/apex/examples/exactlyonce/ExactlyOnceJdbcOutputTest.java
@@ -36,13 +36,13 @@
 import org.apache.apex.api.Launcher.AppHandle;
 import org.apache.apex.api.Launcher.LaunchMode;
 import org.apache.apex.api.Launcher.ShutdownMode;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.net.NetUtils;
 
 import com.google.common.collect.Sets;
 
 import com.datatorrent.api.Attribute;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
 
 import info.batey.kafka.unit.KafkaUnit;
 import info.batey.kafka.unit.KafkaUnitRule;
diff --git a/examples/filter/pom.xml b/examples/filter/pom.xml
index 24dfb88..54be3e4 100644
--- a/examples/filter/pom.xml
+++ b/examples/filter/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-examples-filter</artifactId>
diff --git a/examples/filter/src/main/java/org/apache/apex/examples/filter/Application.java b/examples/filter/src/main/java/org/apache/apex/examples/filter/Application.java
index 65ec0c8..507b44f 100644
--- a/examples/filter/src/main/java/org/apache/apex/examples/filter/Application.java
+++ b/examples/filter/src/main/java/org/apache/apex/examples/filter/Application.java
@@ -20,6 +20,9 @@
 
 package org.apache.apex.examples.filter;
 
+import org.apache.apex.malhar.contrib.formatter.CsvFormatter;
+import org.apache.apex.malhar.contrib.parser.CsvParser;
+import org.apache.apex.malhar.lib.filter.FilterOperator;
 import org.apache.apex.malhar.lib.fs.FSRecordReaderModule;
 import org.apache.apex.malhar.lib.fs.GenericFileOutputOperator.StringFileOutputOperator;
 import org.apache.hadoop.conf.Configuration;
@@ -27,9 +30,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.formatter.CsvFormatter;
-import com.datatorrent.contrib.parser.CsvParser;
-import com.datatorrent.lib.filter.FilterOperator;
 
 /**
  * Simple application illustrating filter operator
diff --git a/examples/frauddetect/pom.xml b/examples/frauddetect/pom.xml
index dfd6606..c5422f5 100644
--- a/examples/frauddetect/pom.xml
+++ b/examples/frauddetect/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <properties>
diff --git a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/Application.java b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/Application.java
index eed9a68..5498385 100644
--- a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/Application.java
+++ b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/Application.java
@@ -23,6 +23,13 @@
 
 import org.apache.apex.examples.frauddetect.operator.HdfsStringOutputOperator;
 import org.apache.apex.examples.frauddetect.operator.MongoDBOutputOperator;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketInputOperator;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketOutputOperator;
+import org.apache.apex.malhar.lib.math.RangeKeyVal;
+import org.apache.apex.malhar.lib.multiwindow.SimpleMovingAverage;
+import org.apache.apex.malhar.lib.util.BaseKeyValueOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.utils.PubSubHelper;
 import org.apache.hadoop.conf.Configuration;
 
@@ -30,13 +37,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.io.PubSubWebSocketInputOperator;
-import com.datatorrent.lib.io.PubSubWebSocketOutputOperator;
-import com.datatorrent.lib.math.RangeKeyVal;
-import com.datatorrent.lib.multiwindow.SimpleMovingAverage;
-import com.datatorrent.lib.util.BaseKeyValueOperator;
-import com.datatorrent.lib.util.KeyValPair;
 import com.datatorrent.netlet.util.DTThrowable;
 
 
diff --git a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/AverageAlertingOperator.java b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/AverageAlertingOperator.java
index 1b1b64a..bd187e4 100644
--- a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/AverageAlertingOperator.java
+++ b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/AverageAlertingOperator.java
@@ -31,14 +31,13 @@
 import org.slf4j.LoggerFactory;
 
 import org.apache.apex.examples.frauddetect.util.JsonUtils;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.commons.lang.mutable.MutableDouble;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
 
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * Generate an alert if the current transaction amount received on tx input port for the given key is greater by n %
  * than the SMA of the last application window as received on the SMA input port.
diff --git a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/BankIdNumberKey.java b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/BankIdNumberKey.java
index eea6b14..72e01fa 100644
--- a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/BankIdNumberKey.java
+++ b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/BankIdNumberKey.java
@@ -20,7 +20,7 @@
 
 import java.io.Serializable;
 
-import com.datatorrent.lib.util.TimeBucketKey;
+import org.apache.apex.malhar.lib.util.TimeBucketKey;
 
 /**
  * Bank Id Number Key
diff --git a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/BankIdNumberSamplerOperator.java b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/BankIdNumberSamplerOperator.java
index 0731e3c..fb5748f 100644
--- a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/BankIdNumberSamplerOperator.java
+++ b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/BankIdNumberSamplerOperator.java
@@ -31,15 +31,13 @@
 import org.slf4j.LoggerFactory;
 
 import org.apache.apex.examples.frauddetect.util.JsonUtils;
-
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.commons.lang.mutable.MutableLong;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
 
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * Count the transactions for the underlying aggregation window if the same BIN is
  * being used for more than defined number of transactions. Output the data as needed
diff --git a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/CreditCardAmountSamplerOperator.java b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/CreditCardAmountSamplerOperator.java
index 235e36e..0f964b6 100644
--- a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/CreditCardAmountSamplerOperator.java
+++ b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/CreditCardAmountSamplerOperator.java
@@ -32,12 +32,12 @@
 import org.slf4j.LoggerFactory;
 
 import org.apache.apex.examples.frauddetect.util.JsonUtils;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.commons.lang.mutable.MutableLong;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * An operator to alert in case a transaction of a small lowAmount is followed by a transaction which is significantly larger for a given credit card number.
diff --git a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/MerchantTransactionBucketOperator.java b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/MerchantTransactionBucketOperator.java
index 4a57207..77411d5 100644
--- a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/MerchantTransactionBucketOperator.java
+++ b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/MerchantTransactionBucketOperator.java
@@ -25,13 +25,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.commons.lang.mutable.MutableDouble;
 import org.apache.commons.lang.mutable.MutableLong;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * A bucket-like operator to accept merchant transaction object and dissipate the
diff --git a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/SlidingWindowSumKeyVal.java b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/SlidingWindowSumKeyVal.java
index dc2c942..3858188 100644
--- a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/SlidingWindowSumKeyVal.java
+++ b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/SlidingWindowSumKeyVal.java
@@ -20,12 +20,12 @@
 
 import java.util.ArrayList;
 
+import org.apache.apex.malhar.lib.multiwindow.AbstractSlidingWindowKeyVal;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
 
-import com.datatorrent.lib.multiwindow.AbstractSlidingWindowKeyVal;
-import com.datatorrent.lib.util.KeyValPair;
-
 
 /**
  * Sliding window sum operator
diff --git a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/SlidingWindowSumObject.java b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/SlidingWindowSumObject.java
index fc5f95d..c3d7144 100644
--- a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/SlidingWindowSumObject.java
+++ b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/SlidingWindowSumObject.java
@@ -19,10 +19,9 @@
 package org.apache.apex.examples.frauddetect;
 
 
+import org.apache.apex.malhar.lib.multiwindow.SimpleMovingAverageObject;
 import org.apache.commons.lang.mutable.MutableDouble;
 
-import com.datatorrent.lib.multiwindow.SimpleMovingAverageObject;
-
 /**
  * State object for sliding window sum
  *
diff --git a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/TransactionStatsAggregator.java b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/TransactionStatsAggregator.java
index 71f3035..bc5ac12 100644
--- a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/TransactionStatsAggregator.java
+++ b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/TransactionStatsAggregator.java
@@ -25,12 +25,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.apache.apex.examples.frauddetect.util.JsonUtils;
+import org.apache.apex.malhar.lib.util.HighLow;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.HighLow;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Operator to aggregate the min, max, sma, std-dev and variance for the given key.
diff --git a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/operator/HdfsStringOutputOperator.java b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/operator/HdfsStringOutputOperator.java
index 89c4bcd..83d3c89 100644
--- a/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/operator/HdfsStringOutputOperator.java
+++ b/examples/frauddetect/src/main/java/org/apache/apex/examples/frauddetect/operator/HdfsStringOutputOperator.java
@@ -20,9 +20,10 @@
 
 import java.io.File;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperator;
+
 import com.datatorrent.api.Context.DAGContext;
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperator;
 
 /**
  * Adapter for writing Strings to HDFS
diff --git a/examples/ftp/pom.xml b/examples/ftp/pom.xml
index ef4590c..162c151 100644
--- a/examples/ftp/pom.xml
+++ b/examples/ftp/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
 </project>
diff --git a/examples/ftp/src/main/java/org/apache/apex/examples/ftp/Application.java b/examples/ftp/src/main/java/org/apache/apex/examples/ftp/Application.java
index f7d854f..bd33994 100644
--- a/examples/ftp/src/main/java/org/apache/apex/examples/ftp/Application.java
+++ b/examples/ftp/src/main/java/org/apache/apex/examples/ftp/Application.java
@@ -19,12 +19,12 @@
 package org.apache.apex.examples.ftp;
 
 import org.apache.apex.malhar.lib.fs.GenericFileOutputOperator.StringFileOutputOperator;
+import org.apache.apex.malhar.lib.io.AbstractFTPInputOperator.FTPStringInputOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.AbstractFTPInputOperator.FTPStringInputOperator;
 
 /**
  * This application demonstrates the FTPStringInputOperator. It uses the FTPStringInputOperator which reads
diff --git a/examples/highlevelapi/pom.xml b/examples/highlevelapi/pom.xml
index 23ec831..66b677f 100644
--- a/examples/highlevelapi/pom.xml
+++ b/examples/highlevelapi/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <build>
diff --git a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/MinimalWordCount.java b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/MinimalWordCount.java
index 160175f..ae3d7c4 100644
--- a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/MinimalWordCount.java
+++ b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/MinimalWordCount.java
@@ -23,6 +23,7 @@
 import java.util.Map;
 
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.WindowOption;
@@ -35,7 +36,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 import static org.apache.apex.malhar.stream.api.Option.Options.name;
 
diff --git a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/WindowedWordCount.java b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/WindowedWordCount.java
index 6e57bfd..b643e04 100644
--- a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/WindowedWordCount.java
+++ b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/WindowedWordCount.java
@@ -28,6 +28,7 @@
 
 import org.joda.time.Duration;
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.WindowOption;
@@ -46,7 +47,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 import static org.apache.apex.malhar.stream.api.Option.Options.name;
 
diff --git a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/AutoComplete.java b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/AutoComplete.java
index 571a25f..696d792 100644
--- a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/AutoComplete.java
+++ b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/AutoComplete.java
@@ -30,6 +30,7 @@
 import java.util.regex.Pattern;
 
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.Window;
@@ -51,7 +52,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 import static org.apache.apex.malhar.stream.api.Option.Options.name;
 
diff --git a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/StreamingWordExtract.java b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/StreamingWordExtract.java
index b5e491e..a4bd02e 100644
--- a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/StreamingWordExtract.java
+++ b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/StreamingWordExtract.java
@@ -22,6 +22,9 @@
 import java.util.Arrays;
 import java.util.List;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcFieldInfo;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcPOJOInsertOutputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
 import org.apache.apex.malhar.lib.function.Function;
 import org.apache.apex.malhar.stream.api.ApexStream;
 import org.apache.apex.malhar.stream.api.Option;
@@ -31,9 +34,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.db.jdbc.JdbcFieldInfo;
-import com.datatorrent.lib.db.jdbc.JdbcPOJOInsertOutputOperator;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
 
 import static java.sql.Types.VARCHAR;
 
diff --git a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/TopWikipediaSessions.java b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/TopWikipediaSessions.java
index b2b9ae4..4ea9a03 100644
--- a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/TopWikipediaSessions.java
+++ b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/TopWikipediaSessions.java
@@ -27,6 +27,7 @@
 import org.joda.time.Duration;
 
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.Window;
@@ -47,7 +48,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 import static org.apache.apex.malhar.stream.api.Option.Options.name;
 
diff --git a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/TrafficRoutes.java b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/TrafficRoutes.java
index 431263a..8e88244 100644
--- a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/TrafficRoutes.java
+++ b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/TrafficRoutes.java
@@ -30,6 +30,7 @@
 import org.joda.time.Duration;
 
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.WindowOption;
@@ -50,7 +51,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 import static org.apache.apex.malhar.stream.api.Option.Options.name;
 
diff --git a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/TwitterAutoComplete.java b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/TwitterAutoComplete.java
index cf52cb6..781eba9 100644
--- a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/TwitterAutoComplete.java
+++ b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/complete/TwitterAutoComplete.java
@@ -28,7 +28,9 @@
 
 import org.joda.time.Duration;
 
+import org.apache.apex.malhar.contrib.twitter.TwitterSampleInput;
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.Window;
@@ -44,8 +46,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.twitter.TwitterSampleInput;
-import com.datatorrent.lib.util.KeyValPair;
 
 import static org.apache.apex.malhar.stream.api.Option.Options.name;
 
diff --git a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/cookbook/CombinePerKeyExamples.java b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/cookbook/CombinePerKeyExamples.java
index 937476e..06a27ef 100644
--- a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/cookbook/CombinePerKeyExamples.java
+++ b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/cookbook/CombinePerKeyExamples.java
@@ -22,6 +22,7 @@
 import java.util.List;
 
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.WindowOption;
@@ -41,7 +42,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 import static org.apache.apex.malhar.stream.api.Option.Options.name;
 
diff --git a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/cookbook/MaxPerKeyExamples.java b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/cookbook/MaxPerKeyExamples.java
index f28b96a..045c661 100644
--- a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/cookbook/MaxPerKeyExamples.java
+++ b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/cookbook/MaxPerKeyExamples.java
@@ -20,7 +20,14 @@
 
 import java.util.List;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcFieldInfo;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcPOJOInputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcPOJOInsertOutputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcStore;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.Window;
@@ -39,13 +46,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.db.jdbc.JdbcFieldInfo;
-import com.datatorrent.lib.db.jdbc.JdbcPOJOInputOperator;
-import com.datatorrent.lib.db.jdbc.JdbcPOJOInsertOutputOperator;
-import com.datatorrent.lib.db.jdbc.JdbcStore;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.KeyValPair;
 
 import static org.apache.apex.malhar.stream.api.Option.Options.name;
 
diff --git a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/cookbook/TriggerExample.java b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/cookbook/TriggerExample.java
index 2fa7619..1ce9017 100644
--- a/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/cookbook/TriggerExample.java
+++ b/examples/highlevelapi/src/main/java/org/apache/apex/malhar/stream/sample/cookbook/TriggerExample.java
@@ -24,6 +24,7 @@
 import org.joda.time.Duration;
 
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.WindowOption;
@@ -32,8 +33,6 @@
 import org.apache.apex.malhar.stream.api.WindowedStream;
 import org.apache.apex.malhar.stream.api.impl.StreamFactory;
 
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * This example illustrates the basic concepts behind triggering. It shows how to use different
  * trigger definitions to produce partial (speculative) results before all the data is processed and
diff --git a/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/WindowedWordCountTest.java b/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/WindowedWordCountTest.java
index f0c51f6..de66168 100644
--- a/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/WindowedWordCountTest.java
+++ b/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/WindowedWordCountTest.java
@@ -24,10 +24,10 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.LocalMode;
-import com.datatorrent.lib.util.KeyValPair;
 import com.datatorrent.stram.StramLocalCluster;
 
 /**
diff --git a/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/complete/StreamingWordExtractTest.java b/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/complete/StreamingWordExtractTest.java
index dc9cdec..64d7e03 100644
--- a/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/complete/StreamingWordExtractTest.java
+++ b/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/complete/StreamingWordExtractTest.java
@@ -30,11 +30,11 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.base.Throwables;
 import com.datatorrent.api.LocalMode;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
 import com.datatorrent.stram.StramLocalCluster;
 
 /**
diff --git a/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/complete/TrafficRoutesTest.java b/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/complete/TrafficRoutesTest.java
index 766fa60..d482eaf 100644
--- a/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/complete/TrafficRoutesTest.java
+++ b/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/complete/TrafficRoutesTest.java
@@ -24,10 +24,10 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.LocalMode;
-import com.datatorrent.lib.util.KeyValPair;
 import com.datatorrent.stram.StramLocalCluster;
 
 /**
diff --git a/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/cookbook/MaxPerKeyExamplesTest.java b/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/cookbook/MaxPerKeyExamplesTest.java
index ec28b40..a9e3c64 100644
--- a/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/cookbook/MaxPerKeyExamplesTest.java
+++ b/examples/highlevelapi/src/test/java/org/apache/apex/malhar/stream/sample/cookbook/MaxPerKeyExamplesTest.java
@@ -33,12 +33,12 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.base.Throwables;
 
 import com.datatorrent.api.LocalMode;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
 import com.datatorrent.stram.StramLocalCluster;
 
 /**
diff --git a/examples/iteration/pom.xml b/examples/iteration/pom.xml
index 4558932..1eb5c36 100644
--- a/examples/iteration/pom.xml
+++ b/examples/iteration/pom.xml
@@ -36,7 +36,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
 </project>
diff --git a/examples/iteration/src/main/java/org/apache/apex/examples/iteration/Application.java b/examples/iteration/src/main/java/org/apache/apex/examples/iteration/Application.java
index 4b7bae9..70b188f 100644
--- a/examples/iteration/src/main/java/org/apache/apex/examples/iteration/Application.java
+++ b/examples/iteration/src/main/java/org/apache/apex/examples/iteration/Application.java
@@ -25,6 +25,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
@@ -35,7 +36,6 @@
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.common.util.BaseOperator;
 import com.datatorrent.common.util.DefaultDelayOperator;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
 
 /**
  * Iteration example : <br>
diff --git a/examples/jdbc/pom.xml b/examples/jdbc/pom.xml
index c98188a..2892669 100644
--- a/examples/jdbc/pom.xml
+++ b/examples/jdbc/pom.xml
@@ -32,7 +32,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
   
   <dependencies>
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCsvParser.java b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCsvParser.java
index 778c6e3..d3135ff 100644
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCsvParser.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCsvParser.java
@@ -20,6 +20,11 @@
 
 import java.util.List;
 
+import org.apache.apex.malhar.contrib.parser.CsvParser;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcFieldInfo;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcPOJOInsertOutputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.collect.Lists;
@@ -27,11 +32,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.parser.CsvParser;
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
-import com.datatorrent.lib.db.jdbc.JdbcFieldInfo;
-import com.datatorrent.lib.db.jdbc.JdbcPOJOInsertOutputOperator;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
 
 import static java.sql.Types.INTEGER;
 import static java.sql.Types.VARCHAR;
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCustomParser.java b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCustomParser.java
index e0d8bca..c04d5bf 100644
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCustomParser.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/FileToJdbcApp/FileToJdbcCustomParser.java
@@ -20,6 +20,9 @@
 
 import java.util.List;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcFieldInfo;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcPOJOInsertOutputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.collect.Lists;
@@ -27,9 +30,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.db.jdbc.JdbcFieldInfo;
-import com.datatorrent.lib.db.jdbc.JdbcPOJOInsertOutputOperator;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
 
 import static java.sql.Types.INTEGER;
 import static java.sql.Types.VARCHAR;
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/FileLineOutputOperator.java b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/FileLineOutputOperator.java
index 3c3c49c..7145ce8 100644
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/FileLineOutputOperator.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/FileLineOutputOperator.java
@@ -18,7 +18,7 @@
  */
 package org.apache.apex.examples.JdbcIngest;
 
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperator;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperator;
 
 /**
  * @since 3.8.0
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcHDFSApp.java b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcHDFSApp.java
index 4eafae2..58fbb9c 100644
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcHDFSApp.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcHDFSApp.java
@@ -20,6 +20,10 @@
 
 import java.util.List;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcPOJOInputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcStore;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.collect.Lists;
@@ -28,10 +32,6 @@
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.db.jdbc.JdbcPOJOInputOperator;
-import com.datatorrent.lib.db.jdbc.JdbcStore;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.FieldInfo.SupportType;
 
 @ApplicationAnnotation(name = "SimpleJdbcToHDFSApp")
 /**
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcPollerApplication.java b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcPollerApplication.java
index 45f6ad4..91e7b1b 100644
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcPollerApplication.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcIngest/JdbcPollerApplication.java
@@ -20,6 +20,10 @@
 
 import java.util.List;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcPOJOPollInputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcStore;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.collect.Lists;
@@ -28,10 +32,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.db.jdbc.JdbcPOJOPollInputOperator;
-import com.datatorrent.lib.db.jdbc.JdbcStore;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.FieldInfo.SupportType;
 
 @ApplicationAnnotation(name = "PollJdbcToHDFSApp")
 /**
diff --git a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcToJdbc/JdbcToJdbcApp.java b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcToJdbc/JdbcToJdbcApp.java
index 92ad49b..690770d 100644
--- a/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcToJdbc/JdbcToJdbcApp.java
+++ b/examples/jdbc/src/main/java/org/apache/apex/examples/JdbcToJdbc/JdbcToJdbcApp.java
@@ -20,6 +20,12 @@
 
 import java.util.List;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcPOJOInputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcPOJOInsertOutputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcStore;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.collect.Lists;
@@ -28,12 +34,6 @@
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.db.jdbc.JdbcPOJOInputOperator;
-import com.datatorrent.lib.db.jdbc.JdbcPOJOInsertOutputOperator;
-import com.datatorrent.lib.db.jdbc.JdbcStore;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.FieldInfo.SupportType;
 
 @ApplicationAnnotation(name = "JdbcToJdbcApp")
 /**
@@ -79,12 +79,12 @@
    * class<br>
    * User can choose to have a SQL support type as an additional paramter
    */
-  private List<com.datatorrent.lib.db.jdbc.JdbcFieldInfo> addJdbcFieldInfos()
+  private List<org.apache.apex.malhar.lib.db.jdbc.JdbcFieldInfo> addJdbcFieldInfos()
   {
-    List<com.datatorrent.lib.db.jdbc.JdbcFieldInfo> fieldInfos = Lists.newArrayList();
-    fieldInfos.add(new com.datatorrent.lib.db.jdbc.JdbcFieldInfo("ACCOUNT_NO", "accountNumber", SupportType.INTEGER,0));
-    fieldInfos.add(new com.datatorrent.lib.db.jdbc.JdbcFieldInfo("NAME", "name", SupportType.STRING,0));
-    fieldInfos.add(new com.datatorrent.lib.db.jdbc.JdbcFieldInfo("AMOUNT", "amount", SupportType.INTEGER,0));
+    List<org.apache.apex.malhar.lib.db.jdbc.JdbcFieldInfo> fieldInfos = Lists.newArrayList();
+    fieldInfos.add(new org.apache.apex.malhar.lib.db.jdbc.JdbcFieldInfo("ACCOUNT_NO", "accountNumber", SupportType.INTEGER,0));
+    fieldInfos.add(new org.apache.apex.malhar.lib.db.jdbc.JdbcFieldInfo("NAME", "name", SupportType.STRING,0));
+    fieldInfos.add(new org.apache.apex.malhar.lib.db.jdbc.JdbcFieldInfo("AMOUNT", "amount", SupportType.INTEGER,0));
     return fieldInfos;
   }
 
diff --git a/examples/jdbc/src/test/java/org/apache/apex/examples/FileToJdbcApp/ApplicationTest.java b/examples/jdbc/src/test/java/org/apache/apex/examples/FileToJdbcApp/ApplicationTest.java
index 8fe0f41..401b710 100755
--- a/examples/jdbc/src/test/java/org/apache/apex/examples/FileToJdbcApp/ApplicationTest.java
+++ b/examples/jdbc/src/test/java/org/apache/apex/examples/FileToJdbcApp/ApplicationTest.java
@@ -32,10 +32,10 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.LocalMode;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
diff --git a/examples/jdbc/src/test/java/org/apache/apex/examples/JdbcToJdbc/JdbcOperatorTest.java b/examples/jdbc/src/test/java/org/apache/apex/examples/JdbcToJdbc/JdbcOperatorTest.java
index c3fe32f..487ffaa 100644
--- a/examples/jdbc/src/test/java/org/apache/apex/examples/JdbcToJdbc/JdbcOperatorTest.java
+++ b/examples/jdbc/src/test/java/org/apache/apex/examples/JdbcToJdbc/JdbcOperatorTest.java
@@ -31,12 +31,12 @@
 import org.junit.BeforeClass;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.db.jdbc.AbstractJdbcInputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.AbstractJdbcTransactionableOutputOperator;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.LocalMode;
-import com.datatorrent.lib.db.jdbc.AbstractJdbcInputOperator;
-import com.datatorrent.lib.db.jdbc.AbstractJdbcTransactionableOutputOperator;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
 
 /**
  * Tests for {@link AbstractJdbcTransactionableOutputOperator} and
diff --git a/examples/kafka/pom.xml b/examples/kafka/pom.xml
index 9570cff..1d08323 100644
--- a/examples/kafka/pom.xml
+++ b/examples/kafka/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-examples-kafka</artifactId>
diff --git a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/ValidationToFile.java b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/ValidationToFile.java
index eb621d4..c1d04b8 100644
--- a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/ValidationToFile.java
+++ b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/exactlyonceoutput/ValidationToFile.java
@@ -28,11 +28,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractSingleFileOutputOperator;
+
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.StreamCodec;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
-import com.datatorrent.lib.io.fs.AbstractSingleFileOutputOperator;
 
 /**
  * @since 3.8.0
diff --git a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/hdfs2kafka/Application.java b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/hdfs2kafka/Application.java
index ba2a781..88188e9 100644
--- a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/hdfs2kafka/Application.java
+++ b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/hdfs2kafka/Application.java
@@ -18,6 +18,7 @@
  */
 package org.apache.apex.examples.kafka.hdfs2kafka;
 
+import org.apache.apex.malhar.contrib.kafka.KafkaSinglePortOutputOperator;
 import org.apache.apex.malhar.lib.fs.LineByLineFileInputOperator;
 import org.apache.hadoop.conf.Configuration;
 
@@ -25,7 +26,6 @@
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.kafka.KafkaSinglePortOutputOperator;
 
 @ApplicationAnnotation(name = "Hdfs2Kafka")
 /**
diff --git a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/kafka2hdfs/LineOutputOperator.java b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/kafka2hdfs/LineOutputOperator.java
index 7ee179a..a31904b 100644
--- a/examples/kafka/src/main/java/org/apache/apex/examples/kafka/kafka2hdfs/LineOutputOperator.java
+++ b/examples/kafka/src/main/java/org/apache/apex/examples/kafka/kafka2hdfs/LineOutputOperator.java
@@ -23,7 +23,7 @@
 
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperator;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperator;
 
 /**
  * Converts each tuple to a string and writes it as a new line to the output file
diff --git a/examples/machinedata/pom.xml b/examples/machinedata/pom.xml
index ef75c51..77642f6 100644
--- a/examples/machinedata/pom.xml
+++ b/examples/machinedata/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <properties>
diff --git a/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/Application.java b/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/Application.java
index 8132c7d..3d2bdbe 100644
--- a/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/Application.java
+++ b/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/Application.java
@@ -26,13 +26,13 @@
 import org.apache.apex.examples.machinedata.data.MachineKey;
 import org.apache.apex.examples.machinedata.operator.MachineInfoAveragingOperator;
 import org.apache.apex.examples.machinedata.operator.MachineInfoAveragingPrerequisitesOperator;
+import org.apache.apex.malhar.contrib.redis.RedisKeyValPairOutputOperator;
+import org.apache.apex.malhar.lib.io.SmtpOutputOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.redis.RedisKeyValPairOutputOperator;
-import com.datatorrent.lib.io.SmtpOutputOperator;
 
 /**
  * <p>
diff --git a/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/CalculatorOperator.java b/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/CalculatorOperator.java
index 34a9514..f637179 100644
--- a/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/CalculatorOperator.java
+++ b/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/CalculatorOperator.java
@@ -31,6 +31,8 @@
 import org.apache.apex.examples.machinedata.data.MachineKey;
 import org.apache.apex.examples.machinedata.data.ResourceType;
 import org.apache.apex.examples.machinedata.util.DataTable;
+import org.apache.apex.malhar.lib.codec.KryoSerializableStreamCodec;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 import com.google.common.base.Objects;
 import com.google.common.collect.Lists;
@@ -41,9 +43,6 @@
 import com.datatorrent.api.StreamCodec;
 import com.datatorrent.common.util.BaseOperator;
 
-import com.datatorrent.lib.codec.KryoSerializableStreamCodec;
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * <p>
  * CalculatorOperator class.
diff --git a/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/MachineInfoAveragingOperator.java b/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/MachineInfoAveragingOperator.java
index 1de676f..669bc27 100644
--- a/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/MachineInfoAveragingOperator.java
+++ b/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/MachineInfoAveragingOperator.java
@@ -29,6 +29,8 @@
 import org.apache.apex.examples.machinedata.data.AverageData;
 import org.apache.apex.examples.machinedata.data.MachineInfo;
 import org.apache.apex.examples.machinedata.data.MachineKey;
+import org.apache.apex.malhar.lib.util.KeyHashValPair;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 import com.google.common.collect.Maps;
 
@@ -36,9 +38,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
 
-import com.datatorrent.lib.util.KeyHashValPair;
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * This class calculates the average for various resources across different devices for a given key
  * <p>MachineInfoAveragingOperator class.</p>
diff --git a/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/MachineInfoAveragingPrerequisitesOperator.java b/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/MachineInfoAveragingPrerequisitesOperator.java
index 14c8d25..930d4a0 100644
--- a/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/MachineInfoAveragingPrerequisitesOperator.java
+++ b/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/MachineInfoAveragingPrerequisitesOperator.java
@@ -24,12 +24,12 @@
 import org.apache.apex.examples.machinedata.data.AverageData;
 import org.apache.apex.examples.machinedata.data.MachineInfo;
 import org.apache.apex.examples.machinedata.data.MachineKey;
+import org.apache.apex.malhar.lib.util.KeyHashValPair;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyHashValPair;
 
 /**
  * This class calculates the partial sum and count for tuples generated by upstream Operator
diff --git a/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/MachineInfoAveragingUnifier.java b/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/MachineInfoAveragingUnifier.java
index 02aabe7..6ec7898 100644
--- a/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/MachineInfoAveragingUnifier.java
+++ b/examples/machinedata/src/main/java/org/apache/apex/examples/machinedata/operator/MachineInfoAveragingUnifier.java
@@ -23,13 +23,12 @@
 
 import org.apache.apex.examples.machinedata.data.AverageData;
 import org.apache.apex.examples.machinedata.data.MachineKey;
+import org.apache.apex.malhar.lib.util.KeyHashValPair;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator.Unifier;
 
-import com.datatorrent.lib.util.KeyHashValPair;
-
 /**
  * This class calculates the partial sum and count for a given key
  * <p>MachineInfoAveragingUnifier class.</p>
diff --git a/examples/machinedata/src/test/java/org/apache/apex/examples/machinedata/CalculatorOperatorTest.java b/examples/machinedata/src/test/java/org/apache/apex/examples/machinedata/CalculatorOperatorTest.java
index c69a2aa..9729912 100644
--- a/examples/machinedata/src/test/java/org/apache/apex/examples/machinedata/CalculatorOperatorTest.java
+++ b/examples/machinedata/src/test/java/org/apache/apex/examples/machinedata/CalculatorOperatorTest.java
@@ -33,14 +33,12 @@
 import org.apache.apex.examples.machinedata.data.MachineKey;
 import org.apache.apex.examples.machinedata.data.ResourceType;
 import org.apache.apex.examples.machinedata.operator.CalculatorOperator;
-
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.TimeBucketKey;
 
 import com.google.common.collect.ImmutableList;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.TimeBucketKey;
-
 /**
  * @since 0.3.5
  */
diff --git a/examples/mobile/pom.xml b/examples/mobile/pom.xml
index eabd147..9ebe050 100644
--- a/examples/mobile/pom.xml
+++ b/examples/mobile/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <properties>
diff --git a/examples/mobile/src/main/java/org/apache/apex/examples/mobile/Application.java b/examples/mobile/src/main/java/org/apache/apex/examples/mobile/Application.java
index dd1e136..f22cd48 100644
--- a/examples/mobile/src/main/java/org/apache/apex/examples/mobile/Application.java
+++ b/examples/mobile/src/main/java/org/apache/apex/examples/mobile/Application.java
@@ -26,6 +26,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.counters.BasicCounters;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketInputOperator;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketOutputOperator;
+import org.apache.apex.malhar.lib.partitioner.StatelessThroughputBasedPartitioner;
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.apex.malhar.lib.utils.PubSubHelper;
 import org.apache.commons.lang.mutable.MutableLong;
 import org.apache.commons.lang3.Range;
@@ -36,11 +41,6 @@
 import com.datatorrent.api.StatsListener;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.counters.BasicCounters;
-import com.datatorrent.lib.io.PubSubWebSocketInputOperator;
-import com.datatorrent.lib.io.PubSubWebSocketOutputOperator;
-import com.datatorrent.lib.partitioner.StatelessThroughputBasedPartitioner;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
 
 /**
  * Mobile Example Application:
diff --git a/examples/mobile/src/main/java/org/apache/apex/examples/mobile/PhoneMovementGenerator.java b/examples/mobile/src/main/java/org/apache/apex/examples/mobile/PhoneMovementGenerator.java
index 3a293f0..049d9a3 100644
--- a/examples/mobile/src/main/java/org/apache/apex/examples/mobile/PhoneMovementGenerator.java
+++ b/examples/mobile/src/main/java/org/apache/apex/examples/mobile/PhoneMovementGenerator.java
@@ -28,6 +28,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.counters.BasicCounters;
+import org.apache.apex.malhar.lib.util.HighLow;
 import org.apache.commons.lang.mutable.MutableLong;
 
 import com.google.common.base.Strings;
@@ -39,8 +41,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.counters.BasicCounters;
-import com.datatorrent.lib.util.HighLow;
 
 /**
  * <p>
diff --git a/examples/mobile/src/test/java/org/apache/apex/examples/mobile/ApplicationTest.java b/examples/mobile/src/test/java/org/apache/apex/examples/mobile/ApplicationTest.java
index b88ed57..86f84e9 100644
--- a/examples/mobile/src/test/java/org/apache/apex/examples/mobile/ApplicationTest.java
+++ b/examples/mobile/src/test/java/org/apache/apex/examples/mobile/ApplicationTest.java
@@ -31,14 +31,16 @@
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.helper.SamplePubSubWebSocketServlet;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketInputOperator;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketOutputOperator;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.apex.malhar.lib.utils.PubSubHelper;
+
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.LocalMode;
-import com.datatorrent.lib.helper.SamplePubSubWebSocketServlet;
-import com.datatorrent.lib.io.PubSubWebSocketInputOperator;
-import com.datatorrent.lib.io.PubSubWebSocketOutputOperator;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
 public class ApplicationTest
 {
diff --git a/examples/mrmonitor/pom.xml b/examples/mrmonitor/pom.xml
index 71a38fb..f8d8853 100644
--- a/examples/mrmonitor/pom.xml
+++ b/examples/mrmonitor/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <properties>
diff --git a/examples/mrmonitor/src/main/java/org/apache/apex/examples/mrmonitor/Application.java b/examples/mrmonitor/src/main/java/org/apache/apex/examples/mrmonitor/Application.java
index 0557919..a705bc6 100644
--- a/examples/mrmonitor/src/main/java/org/apache/apex/examples/mrmonitor/Application.java
+++ b/examples/mrmonitor/src/main/java/org/apache/apex/examples/mrmonitor/Application.java
@@ -18,14 +18,14 @@
  */
 package org.apache.apex.examples.mrmonitor;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.testbench.SeedEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.testbench.SeedEventGenerator;
 
 /**
  * Application
diff --git a/examples/mrmonitor/src/main/java/org/apache/apex/examples/mrmonitor/MRMonitoringApplication.java b/examples/mrmonitor/src/main/java/org/apache/apex/examples/mrmonitor/MRMonitoringApplication.java
index 55d98aa..4ae10bb 100644
--- a/examples/mrmonitor/src/main/java/org/apache/apex/examples/mrmonitor/MRMonitoringApplication.java
+++ b/examples/mrmonitor/src/main/java/org/apache/apex/examples/mrmonitor/MRMonitoringApplication.java
@@ -23,6 +23,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.PubSubWebSocketInputOperator;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketOutputOperator;
 import org.apache.apex.malhar.lib.utils.PubSubHelper;
 import org.apache.hadoop.conf.Configuration;
 
@@ -30,9 +32,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 
-import com.datatorrent.lib.io.PubSubWebSocketInputOperator;
-import com.datatorrent.lib.io.PubSubWebSocketOutputOperator;
-
 /**
  * <p>
  * MRDebuggerApplication class.
diff --git a/examples/mrmonitor/src/test/java/org/apache/apex/examples/mrmonitor/MrMonitoringApplicationTest.java b/examples/mrmonitor/src/test/java/org/apache/apex/examples/mrmonitor/MrMonitoringApplicationTest.java
index b094ddb..330d6b4 100644
--- a/examples/mrmonitor/src/test/java/org/apache/apex/examples/mrmonitor/MrMonitoringApplicationTest.java
+++ b/examples/mrmonitor/src/test/java/org/apache/apex/examples/mrmonitor/MrMonitoringApplicationTest.java
@@ -26,10 +26,10 @@
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.helper.SamplePubSubWebSocketServlet;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.LocalMode;
-import com.datatorrent.lib.helper.SamplePubSubWebSocketServlet;
 
 /**
  * <p>MapReduceDebuggerApplicationTest class.</p>
diff --git a/examples/mroperator/pom.xml b/examples/mroperator/pom.xml
index c21646a..317ec39 100644
--- a/examples/mroperator/pom.xml
+++ b/examples/mroperator/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <properties>
diff --git a/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/HdfsKeyValOutputOperator.java b/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/HdfsKeyValOutputOperator.java
index 94e17c1..12fbd8d 100644
--- a/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/HdfsKeyValOutputOperator.java
+++ b/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/HdfsKeyValOutputOperator.java
@@ -18,8 +18,8 @@
  */
 package org.apache.apex.examples.mroperator;
 
-import com.datatorrent.lib.io.fs.AbstractSingleFileOutputOperator;
-import com.datatorrent.lib.util.KeyHashValPair;
+import org.apache.apex.malhar.lib.io.fs.AbstractSingleFileOutputOperator;
+import org.apache.apex.malhar.lib.util.KeyHashValPair;
 
 /**
  * Adapter for writing KeyHashValPair objects to HDFS
diff --git a/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/MapOperator.java b/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/MapOperator.java
index ce00f54..bc653c1 100644
--- a/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/MapOperator.java
+++ b/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/MapOperator.java
@@ -35,6 +35,7 @@
 import org.slf4j.LoggerFactory;
 
 import org.apache.apex.examples.mroperator.ReporterImpl.ReporterType;
+import org.apache.apex.malhar.lib.util.KeyHashValPair;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.io.serializer.Deserializer;
@@ -59,8 +60,6 @@
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.api.Partitioner;
 
-import com.datatorrent.lib.util.KeyHashValPair;
-
 /**
  * <p>
  * MapOperator class.
diff --git a/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/OutputCollectorImpl.java b/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/OutputCollectorImpl.java
index 31337c1..db04d2d 100644
--- a/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/OutputCollectorImpl.java
+++ b/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/OutputCollectorImpl.java
@@ -27,12 +27,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KeyHashValPair;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.io.serializer.Deserializer;
 import org.apache.hadoop.io.serializer.SerializationFactory;
 import org.apache.hadoop.io.serializer.Serializer;
 import org.apache.hadoop.mapred.OutputCollector;
-import com.datatorrent.lib.util.KeyHashValPair;
 
 /**
  * <p>OutputCollectorImpl class.</p>
diff --git a/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/ReduceOperator.java b/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/ReduceOperator.java
index cdc5ec9..9c04c6a 100644
--- a/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/ReduceOperator.java
+++ b/examples/mroperator/src/main/java/org/apache/apex/examples/mroperator/ReduceOperator.java
@@ -28,6 +28,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KeyHashValPair;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.mapred.Counters;
 import org.apache.hadoop.mapred.JobConf;
@@ -39,7 +40,6 @@
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
-import com.datatorrent.lib.util.KeyHashValPair;
 
 /**
  * <p>ReduceOperator class.</p>
diff --git a/examples/mroperator/src/test/java/org/apache/apex/examples/mroperator/MapOperatorTest.java b/examples/mroperator/src/test/java/org/apache/apex/examples/mroperator/MapOperatorTest.java
index 073d847..baf15bd 100644
--- a/examples/mroperator/src/test/java/org/apache/apex/examples/mroperator/MapOperatorTest.java
+++ b/examples/mroperator/src/test/java/org/apache/apex/examples/mroperator/MapOperatorTest.java
@@ -32,6 +32,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
@@ -45,8 +46,6 @@
 import org.apache.hadoop.mapred.JobConf;
 import org.apache.hadoop.mapred.TextInputFormat;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
 @SuppressWarnings("deprecation")
 public class MapOperatorTest
 {
diff --git a/examples/mroperator/src/test/java/org/apache/apex/examples/mroperator/ReduceOperatorTest.java b/examples/mroperator/src/test/java/org/apache/apex/examples/mroperator/ReduceOperatorTest.java
index bff982a..a39edef 100644
--- a/examples/mroperator/src/test/java/org/apache/apex/examples/mroperator/ReduceOperatorTest.java
+++ b/examples/mroperator/src/test/java/org/apache/apex/examples/mroperator/ReduceOperatorTest.java
@@ -23,12 +23,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyHashValPair;
 import org.apache.hadoop.io.IntWritable;
 import org.apache.hadoop.io.Text;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyHashValPair;
-
 public class ReduceOperatorTest
 {
   private static Logger logger = LoggerFactory.getLogger(ReduceOperatorTest.class);
diff --git a/examples/nyctaxi/pom.xml b/examples/nyctaxi/pom.xml
index 1bfb6af..d3d9c2e 100644
--- a/examples/nyctaxi/pom.xml
+++ b/examples/nyctaxi/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <dependencies>
diff --git a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/Application.java b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/Application.java
index a59c3a4..1f059ec 100644
--- a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/Application.java
+++ b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/Application.java
@@ -25,6 +25,9 @@
 
 import org.joda.time.Duration;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketAppDataQuery;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketAppDataResult;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.WindowOption;
 import org.apache.apex.malhar.lib.window.WindowState;
@@ -40,9 +43,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.io.PubSubWebSocketAppDataQuery;
-import com.datatorrent.lib.io.PubSubWebSocketAppDataResult;
 
 /**
  * The DAG definition of the example that illustrates New York City taxi ride data processing.
diff --git a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiDataServer.java b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiDataServer.java
index 56be293..403b715 100644
--- a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiDataServer.java
+++ b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiDataServer.java
@@ -29,6 +29,7 @@
 import org.slf4j.LoggerFactory;
 
 import org.apache.apex.malhar.lib.appdata.AbstractAppDataServer;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.commons.lang3.tuple.ImmutablePair;
 import org.apache.commons.lang3.tuple.Pair;
@@ -36,7 +37,6 @@
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.experimental.AppData;
-import com.datatorrent.lib.util.KeyValPair;
 
 
 /**
diff --git a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiZipFareExtractor.java b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiZipFareExtractor.java
index 3e0c515..ccb6004 100644
--- a/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiZipFareExtractor.java
+++ b/examples/nyctaxi/src/main/java/org/apache/apex/examples/nyctaxi/NycTaxiZipFareExtractor.java
@@ -27,6 +27,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.ControlTuple;
 import org.apache.apex.malhar.lib.window.Tuple;
 
@@ -34,7 +35,6 @@
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Operator that fills in the zip code based on the lat-lon coordinates in the incoming tuples and prepares
diff --git a/examples/partition/pom.xml b/examples/partition/pom.xml
index 4a643b9..58e7b9a 100644
--- a/examples/partition/pom.xml
+++ b/examples/partition/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-examples-partition</artifactId>
diff --git a/examples/partition/src/main/java/org/apache/apex/examples/partition/Codec3.java b/examples/partition/src/main/java/org/apache/apex/examples/partition/Codec3.java
index 6115747..2bf8532 100644
--- a/examples/partition/src/main/java/org/apache/apex/examples/partition/Codec3.java
+++ b/examples/partition/src/main/java/org/apache/apex/examples/partition/Codec3.java
@@ -19,7 +19,7 @@
 
 package org.apache.apex.examples.partition;
 
-import com.datatorrent.lib.codec.KryoSerializableStreamCodec;
+import org.apache.apex.malhar.lib.codec.KryoSerializableStreamCodec;
 
 /**
  * @since 3.7.0
diff --git a/examples/pi/pom.xml b/examples/pi/pom.xml
index 9f523ab..74634a3 100644
--- a/examples/pi/pom.xml
+++ b/examples/pi/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <properties>
diff --git a/examples/pi/src/main/java/org/apache/apex/examples/pi/Application.java b/examples/pi/src/main/java/org/apache/apex/examples/pi/Application.java
index 45f2b37..aa2cc47 100644
--- a/examples/pi/src/main/java/org/apache/apex/examples/pi/Application.java
+++ b/examples/pi/src/main/java/org/apache/apex/examples/pi/Application.java
@@ -18,14 +18,14 @@
  */
 package org.apache.apex.examples.pi;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
 
 /**
  * Monte Carlo PI estimation Example : <br>
@@ -61,7 +61,7 @@
  * <ul>
  * <li><b>The rand Operator : </b> This operator generates random integer
  * between 0-30k. <br>
- * Class : {@link com.datatorrent.lib.testbench.RandomEventGenerator}<br>
+ * Class : {@link org.apache.apex.malhar.lib.testbench.RandomEventGenerator}<br>
  * StateFull : No</li>
  * <li><b>The calc operator : </b> This operator computes value of pi using
  * monte carlo estimation. <br>
diff --git a/examples/pi/src/main/java/org/apache/apex/examples/pi/ApplicationAppData.java b/examples/pi/src/main/java/org/apache/apex/examples/pi/ApplicationAppData.java
index 999d295..f0f6d39 100644
--- a/examples/pi/src/main/java/org/apache/apex/examples/pi/ApplicationAppData.java
+++ b/examples/pi/src/main/java/org/apache/apex/examples/pi/ApplicationAppData.java
@@ -18,6 +18,12 @@
  */
 package org.apache.apex.examples.pi;
 
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.appdata.snapshot.AppDataSnapshotServerMap;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketAppDataQuery;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketAppDataResult;
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
@@ -25,12 +31,6 @@
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
-import com.datatorrent.lib.appdata.snapshot.AppDataSnapshotServerMap;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.io.PubSubWebSocketAppDataQuery;
-import com.datatorrent.lib.io.PubSubWebSocketAppDataResult;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
 
 /**
  * Monte Carlo PI estimation example : <br>
@@ -68,7 +68,7 @@
  * <ul>
  * <li><b>The rand Operator : </b> This operator generates random integer
  * between 0-30k. <br>
- * Class : {@link com.datatorrent.lib.testbench.RandomEventGenerator}<br>
+ * Class : {@link org.apache.apex.malhar.lib.testbench.RandomEventGenerator}<br>
  * StateFull : No</li>
  * <li><b>The calc operator : </b> This operator computes value of pi using
  * monte carlo estimation. <br>
diff --git a/examples/pi/src/main/java/org/apache/apex/examples/pi/ApplicationWithScript.java b/examples/pi/src/main/java/org/apache/apex/examples/pi/ApplicationWithScript.java
index 8a9cc50..9a86d68 100644
--- a/examples/pi/src/main/java/org/apache/apex/examples/pi/ApplicationWithScript.java
+++ b/examples/pi/src/main/java/org/apache/apex/examples/pi/ApplicationWithScript.java
@@ -18,15 +18,15 @@
  */
 package org.apache.apex.examples.pi;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.script.JavaScriptOperator;
+import org.apache.apex.malhar.lib.stream.RoundRobinHashMap;
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.script.JavaScriptOperator;
-import com.datatorrent.lib.stream.RoundRobinHashMap;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
 
 /**
  * Monte Carlo PI estimation example : <br>
@@ -61,14 +61,14 @@
  * <ul>
  * <li><b>The rand Operator : </b> This operator generates random integer
  * between 0-30k. <br>
- * Class : {@link com.datatorrent.lib.testbench.RandomEventGenerator} <br>
+ * Class : {@link org.apache.apex.malhar.lib.testbench.RandomEventGenerator} <br>
  * StateFull : No</li>
  *  <li><b>The rrhm Operator : </b> This operator takes input from random generator
  *  creates tuples of (x,y) in round robin fashion. <br>
- * Class : {@link com.datatorrent.lib.stream.RandomEventGenerator} <br>
+ * Class : {@link org.apache.apex.malhar.lib.stream.RandomEventGenerator} <br>
  * StateFull : Yes, tuple is emitted after (x, y) values have been aggregated.</li>
  * <li><b>The calc operator : </b> This is java script operator implementing <br>
- * Class : {@link com.datatorrent.lib.math.Script} <br>
+ * Class : {@link org.apache.apex.malhar.lib.math.Script} <br>
  * StateFull : No</li>
  * <li><b>The operator Console: </b> This operator just outputs the input tuples
  * to the console (or stdout). User can use any output adapter.  <br>
diff --git a/examples/pi/src/main/java/org/apache/apex/examples/pi/Calculator.java b/examples/pi/src/main/java/org/apache/apex/examples/pi/Calculator.java
index 672a931..1d505b6 100644
--- a/examples/pi/src/main/java/org/apache/apex/examples/pi/Calculator.java
+++ b/examples/pi/src/main/java/org/apache/apex/examples/pi/Calculator.java
@@ -18,22 +18,22 @@
  */
 package org.apache.apex.examples.pi;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.math.Division;
+import org.apache.apex.malhar.lib.math.LogicalCompareToConstant;
+import org.apache.apex.malhar.lib.math.MultiplyByConstant;
+import org.apache.apex.malhar.lib.math.RunningAverage;
+import org.apache.apex.malhar.lib.math.Sigma;
+import org.apache.apex.malhar.lib.math.SquareCalculus;
+import org.apache.apex.malhar.lib.stream.AbstractAggregator;
+import org.apache.apex.malhar.lib.stream.ArrayListAggregator;
+import org.apache.apex.malhar.lib.stream.Counter;
+import org.apache.apex.malhar.lib.testbench.RandomEventGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.math.Division;
-import com.datatorrent.lib.math.LogicalCompareToConstant;
-import com.datatorrent.lib.math.MultiplyByConstant;
-import com.datatorrent.lib.math.RunningAverage;
-import com.datatorrent.lib.math.Sigma;
-import com.datatorrent.lib.math.SquareCalculus;
-import com.datatorrent.lib.stream.AbstractAggregator;
-import com.datatorrent.lib.stream.ArrayListAggregator;
-import com.datatorrent.lib.stream.Counter;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
 
 /**
  * <p>Calculator class.</p>
diff --git a/examples/pi/src/main/resources/app/PiJsonExample.json b/examples/pi/src/main/resources/app/PiJsonExample.json
index b1e2972..778ca20 100644
--- a/examples/pi/src/main/resources/app/PiJsonExample.json
+++ b/examples/pi/src/main/resources/app/PiJsonExample.json
@@ -3,7 +3,7 @@
   "operators": [
     {
       "name": "rand",
-      "class": "com.datatorrent.lib.testbench.RandomEventGenerator",
+      "class": "org.apache.apex.malhar.lib.testbench.RandomEventGenerator",
       "properties": {
         "minvalue": 0,
         "maxvalue": 30000
@@ -18,7 +18,7 @@
     },
     {
       "name": "console",
-      "class": "com.datatorrent.lib.io.ConsoleOutputOperator"
+      "class": "org.apache.apex.malhar.lib.io.ConsoleOutputOperator"
     }
   ],
   "streams": [
diff --git a/examples/pom.xml b/examples/pom.xml
index 7d0805b..aa1c8e5 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-examples</artifactId>
diff --git a/examples/r/pom.xml b/examples/r/pom.xml
index 41edb6c..6f91e74 100644
--- a/examples/r/pom.xml
+++ b/examples/r/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <properties>
diff --git a/examples/r/src/main/java/org/apache/apex/examples/r/oldfaithful/FaithfulRScript.java b/examples/r/src/main/java/org/apache/apex/examples/r/oldfaithful/FaithfulRScript.java
index 4b61d42..ada2cff 100755
--- a/examples/r/src/main/java/org/apache/apex/examples/r/oldfaithful/FaithfulRScript.java
+++ b/examples/r/src/main/java/org/apache/apex/examples/r/oldfaithful/FaithfulRScript.java
@@ -25,10 +25,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.contrib.r.RScript;
+
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
-import com.datatorrent.contrib.r.RScript;
 
 /**
  * @since 2.1.0
diff --git a/examples/r/src/main/java/org/apache/apex/examples/r/oldfaithful/OldFaithfulApplication.java b/examples/r/src/main/java/org/apache/apex/examples/r/oldfaithful/OldFaithfulApplication.java
index bd51c29..f695a6b 100755
--- a/examples/r/src/main/java/org/apache/apex/examples/r/oldfaithful/OldFaithfulApplication.java
+++ b/examples/r/src/main/java/org/apache/apex/examples/r/oldfaithful/OldFaithfulApplication.java
@@ -21,12 +21,12 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 /**
  * The application attempts to simulate 'Old Faithful Geyser" eruption.
diff --git a/examples/recordReader/pom.xml b/examples/recordReader/pom.xml
index 463ab41..0ef5f39 100644
--- a/examples/recordReader/pom.xml
+++ b/examples/recordReader/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-examples-recordReader</artifactId>
diff --git a/examples/recordReader/src/main/java/org/apache/apex/examples/recordReader/Application.java b/examples/recordReader/src/main/java/org/apache/apex/examples/recordReader/Application.java
index f56217f..18a9929 100644
--- a/examples/recordReader/src/main/java/org/apache/apex/examples/recordReader/Application.java
+++ b/examples/recordReader/src/main/java/org/apache/apex/examples/recordReader/Application.java
@@ -18,6 +18,8 @@
  */
 package org.apache.apex.examples.recordReader;
 
+import org.apache.apex.malhar.contrib.formatter.CsvFormatter;
+import org.apache.apex.malhar.contrib.parser.CsvParser;
 import org.apache.apex.malhar.lib.fs.FSRecordReaderModule;
 import org.apache.apex.malhar.lib.fs.GenericFileOutputOperator.StringFileOutputOperator;
 import org.apache.hadoop.conf.Configuration;
@@ -25,8 +27,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.formatter.CsvFormatter;
-import com.datatorrent.contrib.parser.CsvParser;
 
 @ApplicationAnnotation(name = "RecordReaderExample")
 /**
diff --git a/examples/s3/pom.xml b/examples/s3/pom.xml
index 7e5c135..aca9272 100644
--- a/examples/s3/pom.xml
+++ b/examples/s3/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <artifactId>malhar-examples</artifactId>
     <groupId>org.apache.apex</groupId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-examples-s3</artifactId>
diff --git a/examples/s3/src/main/java/org/apache/apex/examples/s3Output/Application.java b/examples/s3/src/main/java/org/apache/apex/examples/s3Output/Application.java
index 55bf69a..16fe1bb 100644
--- a/examples/s3/src/main/java/org/apache/apex/examples/s3Output/Application.java
+++ b/examples/s3/src/main/java/org/apache/apex/examples/s3Output/Application.java
@@ -19,12 +19,12 @@
 package org.apache.apex.examples.s3Output;
 
 import org.apache.apex.malhar.lib.fs.s3.S3OutputModule;
+import org.apache.apex.malhar.lib.io.fs.FSInputModule;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.fs.FSInputModule;
 
 /**
  * Application illustrating copy files from HDFS to S3 bucket.
diff --git a/examples/s3/src/main/java/org/apache/apex/examples/s3ToHdfsSync/S3ToHDFSSyncApplication.java b/examples/s3/src/main/java/org/apache/apex/examples/s3ToHdfsSync/S3ToHDFSSyncApplication.java
index 7b0024d..a04c03f 100644
--- a/examples/s3/src/main/java/org/apache/apex/examples/s3ToHdfsSync/S3ToHDFSSyncApplication.java
+++ b/examples/s3/src/main/java/org/apache/apex/examples/s3ToHdfsSync/S3ToHDFSSyncApplication.java
@@ -18,14 +18,14 @@
  */
 package org.apache.apex.examples.s3ToHdfsSync;
 
+import org.apache.apex.malhar.lib.io.fs.HDFSFileCopyModule;
+import org.apache.apex.malhar.lib.io.fs.S3InputModule;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.fs.HDFSFileCopyModule;
-import com.datatorrent.lib.io.fs.S3InputModule;
 
 /**
  * Simple application illustrating file copy from S3. S3 Input
diff --git a/examples/s3/src/main/resources/META-INF/properties-s3TupleOutput.xml b/examples/s3/src/main/resources/META-INF/properties-s3TupleOutput.xml
index 15435e7..5ac57de 100644
--- a/examples/s3/src/main/resources/META-INF/properties-s3TupleOutput.xml
+++ b/examples/s3/src/main/resources/META-INF/properties-s3TupleOutput.xml
@@ -62,6 +62,6 @@
   </property>
   <!--property>
     <name>dt.loggers.level</name>
-    <value>org.apache.apex.malhar.lib.fs.s3.*:DEBUG,org.apache.apex.*:DEBUG,com.datatorrent.stram.plan.physical.*:DEBUG,com.datatorrent.lib.*:DEBUG</value>
+    <value>org.apache.apex.malhar.lib.fs.s3.*:DEBUG,org.apache.apex.*:DEBUG,com.datatorrent.stram.plan.physical.*:DEBUG,org.apache.apex.malhar.lib.*:DEBUG</value>
   </property-->
 </configuration>
diff --git a/examples/sql/pom.xml b/examples/sql/pom.xml
index 83fb36e..6f3cd79 100644
--- a/examples/sql/pom.xml
+++ b/examples/sql/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <build>
diff --git a/examples/sql/src/main/java/org/apache/apex/malhar/sql/sample/FusionStyleSQLApplication.java b/examples/sql/src/main/java/org/apache/apex/malhar/sql/sample/FusionStyleSQLApplication.java
index 80b997d..3ab5d99 100644
--- a/examples/sql/src/main/java/org/apache/apex/malhar/sql/sample/FusionStyleSQLApplication.java
+++ b/examples/sql/src/main/java/org/apache/apex/malhar/sql/sample/FusionStyleSQLApplication.java
@@ -21,6 +21,7 @@
 import java.util.Date;
 import java.util.Map;
 
+import org.apache.apex.malhar.contrib.parser.CsvParser;
 import org.apache.apex.malhar.kafka.KafkaSinglePortInputOperator;
 import org.apache.apex.malhar.sql.SQLExecEnvironment;
 import org.apache.apex.malhar.sql.table.CSVMessageFormat;
@@ -36,7 +37,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.contrib.parser.CsvParser;
 
 
 @ApplicationAnnotation(name = "FusionStyleSQLApplication")
diff --git a/examples/throttle/pom.xml b/examples/throttle/pom.xml
index d711f89..7624e0a 100644
--- a/examples/throttle/pom.xml
+++ b/examples/throttle/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-examples-throttle</artifactId>
diff --git a/examples/transform/pom.xml b/examples/transform/pom.xml
index ce7805c..19e95f3 100644
--- a/examples/transform/pom.xml
+++ b/examples/transform/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-examples-transform</artifactId>
diff --git a/examples/transform/src/main/java/org/apache/apex/examples/transform/DynamicTransformApplication.java b/examples/transform/src/main/java/org/apache/apex/examples/transform/DynamicTransformApplication.java
index 54d3a23..d8d1368 100644
--- a/examples/transform/src/main/java/org/apache/apex/examples/transform/DynamicTransformApplication.java
+++ b/examples/transform/src/main/java/org/apache/apex/examples/transform/DynamicTransformApplication.java
@@ -21,14 +21,14 @@
 
 import java.util.Arrays;
 
+import org.apache.apex.malhar.lib.partitioner.StatelessThroughputBasedPartitioner;
+import org.apache.apex.malhar.lib.transform.TransformOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StatsListener;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.partitioner.StatelessThroughputBasedPartitioner;
-import com.datatorrent.lib.transform.TransformOperator;
 
 @ApplicationAnnotation(name = "DynamicTransformApp")
 /**
diff --git a/examples/transform/src/main/java/org/apache/apex/examples/transform/SimpleTransformApplication.java b/examples/transform/src/main/java/org/apache/apex/examples/transform/SimpleTransformApplication.java
index 76f0f81..d4b98ae 100644
--- a/examples/transform/src/main/java/org/apache/apex/examples/transform/SimpleTransformApplication.java
+++ b/examples/transform/src/main/java/org/apache/apex/examples/transform/SimpleTransformApplication.java
@@ -25,6 +25,7 @@
 import org.apache.apex.malhar.lib.function.Function;
 import org.apache.apex.malhar.lib.function.FunctionOperator;
 import org.apache.apex.malhar.lib.function.FunctionOperatorUtil;
+import org.apache.apex.malhar.lib.transform.TransformOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -34,7 +35,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.common.partitioner.StatelessPartitioner;
-import com.datatorrent.lib.transform.TransformOperator;
 
 @ApplicationAnnotation(name = "TransformExample")
 /**
diff --git a/examples/twitter/pom.xml b/examples/twitter/pom.xml
index e94ad03..82f5e94 100644
--- a/examples/twitter/pom.xml
+++ b/examples/twitter/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <properties>
diff --git a/examples/twitter/src/main/java/org/apache/apex/examples/twitter/KinesisHashtagsApplication.java b/examples/twitter/src/main/java/org/apache/apex/examples/twitter/KinesisHashtagsApplication.java
index 225ea25..2ebe392 100644
--- a/examples/twitter/src/main/java/org/apache/apex/examples/twitter/KinesisHashtagsApplication.java
+++ b/examples/twitter/src/main/java/org/apache/apex/examples/twitter/KinesisHashtagsApplication.java
@@ -18,6 +18,14 @@
  */
 package org.apache.apex.examples.twitter;
 
+import org.apache.apex.malhar.contrib.kinesis.AbstractKinesisInputOperator;
+import org.apache.apex.malhar.contrib.kinesis.KinesisStringInputOperator;
+import org.apache.apex.malhar.contrib.kinesis.KinesisStringOutputOperator;
+import org.apache.apex.malhar.contrib.kinesis.ShardManager;
+import org.apache.apex.malhar.contrib.twitter.TwitterSampleInput;
+import org.apache.apex.malhar.lib.algo.UniqueCounter;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketOutputOperator;
 import org.apache.apex.malhar.lib.utils.PubSubHelper;
 import org.apache.hadoop.conf.Configuration;
 
@@ -26,14 +34,6 @@
 import com.datatorrent.api.Operator.InputPort;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.kinesis.AbstractKinesisInputOperator;
-import com.datatorrent.contrib.kinesis.KinesisStringInputOperator;
-import com.datatorrent.contrib.kinesis.KinesisStringOutputOperator;
-import com.datatorrent.contrib.kinesis.ShardManager;
-import com.datatorrent.contrib.twitter.TwitterSampleInput;
-import com.datatorrent.lib.algo.UniqueCounter;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.io.PubSubWebSocketOutputOperator;
 
 /**
  * Twitter Example Application: <br>
@@ -144,20 +144,20 @@
  * StateFull : No, window count 1 <br>
  * </li>
  * <li><b>The outputOp operator : </b> This operator sent the tags into the kinesis. <br>
- * Class : {@link com.datatorrent.contrib.kinesis.KinesisStringOutputOperator} <br>
+ * Class : {@link org.apache.apex.malhar.contrib.kinesis.KinesisStringOutputOperator} <br>
  * </li>
  * <li><b>The inputOp operator : </b> This operator fetches the records from kinesis and
  * converts into hastags and emits them. <br>
- * Class : {@link com.datatorrent.contrib.kinesis.KinesisStringOutputOperator} <br>
+ * Class : {@link org.apache.apex.malhar.contrib.kinesis.KinesisStringOutputOperator} <br>
  * </li>
  * <li><b>The uniqueCounter operator : </b> This operator aggregates count for each
  * Hashtag extracted from random samples. <br>
- * Class : {@link com.datatorrent.lib.algo.UniqueCounter} <br>
+ * Class : {@link org.apache.apex.malhar.lib.algo.UniqueCounter} <br>
  * StateFull : No, window count 1 <br>
  * </li>
  * <li><b> The topCounts operator : </b> This operator caluculates top Hashtag in last 1
  * min sliding window count 1. <br>
- * Class : com.datatorrent.lib.algo.WindowedTopCounter <br>
+ * Class : org.apache.apex.malhar.lib.algo.WindowedTopCounter <br>
  * StateFull : Yes, sliding window count 120 (1 min) <br>
  * </li>
  * <li><b>The operator Console: </b> This operator just outputs the input tuples
diff --git a/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterDumpApplication.java b/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterDumpApplication.java
index 62ec6cf..3aba62f 100644
--- a/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterDumpApplication.java
+++ b/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterDumpApplication.java
@@ -23,15 +23,14 @@
 
 import javax.annotation.Nonnull;
 
+import org.apache.apex.malhar.contrib.twitter.TwitterSampleInput;
+import org.apache.apex.malhar.lib.db.jdbc.AbstractJdbcTransactionableOutputOperator;
 import org.apache.hadoop.conf.Configuration;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 
-import com.datatorrent.contrib.twitter.TwitterSampleInput;
-import com.datatorrent.lib.db.jdbc.AbstractJdbcTransactionableOutputOperator;
-
 import twitter4j.Status;
 
 /**
diff --git a/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterDumpHBaseApplication.java b/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterDumpHBaseApplication.java
index 3169132..67f8158 100644
--- a/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterDumpHBaseApplication.java
+++ b/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterDumpHBaseApplication.java
@@ -20,6 +20,8 @@
 
 import java.nio.ByteBuffer;
 
+import org.apache.apex.malhar.contrib.hbase.AbstractHBasePutOutputOperator;
+import org.apache.apex.malhar.contrib.twitter.TwitterSampleInput;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hbase.client.Put;
 
@@ -28,9 +30,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 
-import com.datatorrent.contrib.hbase.AbstractHBasePutOutputOperator;
-import com.datatorrent.contrib.twitter.TwitterSampleInput;
-
 import twitter4j.Status;
 
 /**
diff --git a/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterTopCounterApplication.java b/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterTopCounterApplication.java
index 77384a8..a540f23 100644
--- a/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterTopCounterApplication.java
+++ b/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterTopCounterApplication.java
@@ -22,7 +22,15 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.contrib.twitter.TwitterSampleInput;
+import org.apache.apex.malhar.lib.algo.UniqueCounter;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.appdata.snapshot.AppDataSnapshotServerMap;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketAppDataQuery;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketAppDataResult;
 import org.apache.apex.malhar.lib.utils.PubSubHelper;
+
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.collect.Maps;
@@ -33,13 +41,6 @@
 import com.datatorrent.api.Operator.OutputPort;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.twitter.TwitterSampleInput;
-import com.datatorrent.lib.algo.UniqueCounter;
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
-import com.datatorrent.lib.appdata.snapshot.AppDataSnapshotServerMap;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.io.PubSubWebSocketAppDataQuery;
-import com.datatorrent.lib.io.PubSubWebSocketAppDataResult;
 
 /**
  * Twitter Example Application: <br>
@@ -129,12 +130,12 @@
  * </li>
  * <li><b>The uniqueCounter operator : </b> This operator aggregates count for each
  * url extracted from random samples. <br>
- * Class : {@link com.datatorrent.lib.algo.UniqueCounter} <br>
+ * Class : {@link org.apache.apex.malhar.lib.algo.UniqueCounter} <br>
  * StateFull : No, window count 1 <br>
  * </li>
  * <li><b> The topCounts operator : </b> This operator caluculates top url in last 1
  * min sliding window count 1. <br>
- * Class : com.datatorrent.lib.algo.WindowedTopCounter <br>
+ * Class : org.apache.apex.malhar.lib.algo.WindowedTopCounter <br>
  * StateFull : Yes, sliding window count 120 (1 min) <br>
  * </li>
  * <li><b>The operator Console: </b> This operator just outputs the input tuples
diff --git a/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterTopWordsApplication.java b/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterTopWordsApplication.java
index fb274ea..087c558 100644
--- a/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterTopWordsApplication.java
+++ b/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterTopWordsApplication.java
@@ -18,14 +18,14 @@
  */
 package org.apache.apex.examples.twitter;
 
+import org.apache.apex.malhar.contrib.twitter.TwitterSampleInput;
+import org.apache.apex.malhar.lib.algo.UniqueCounter;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.twitter.TwitterSampleInput;
-import com.datatorrent.lib.algo.UniqueCounter;
 
 /**
  * This application is same as other twitter example
diff --git a/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterTrendingHashtagsApplication.java b/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterTrendingHashtagsApplication.java
index 7a03a64..bbbc171 100644
--- a/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterTrendingHashtagsApplication.java
+++ b/examples/twitter/src/main/java/org/apache/apex/examples/twitter/TwitterTrendingHashtagsApplication.java
@@ -18,13 +18,13 @@
  */
 package org.apache.apex.examples.twitter;
 
+import org.apache.apex.malhar.contrib.twitter.TwitterSampleInput;
+import org.apache.apex.malhar.lib.algo.UniqueCounter;
 import org.apache.hadoop.conf.Configuration;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.contrib.twitter.TwitterSampleInput;
-import com.datatorrent.lib.algo.UniqueCounter;
 
 /**
  * Twitter Example Application: <br>
@@ -116,12 +116,12 @@
  * </li>
  * <li><b>The uniqueCounter operator : </b> This operator aggregates count for each
  * Hashtag extracted from random samples. <br>
- * Class : {@link com.datatorrent.lib.algo.UniqueCounter} <br>
+ * Class : {@link org.apache.apex.malhar.lib.algo.UniqueCounter} <br>
  * StateFull : No, window count 1 <br>
  * </li>
  * <li><b> The topCounts operator : </b> This operator caluculates top Hashtag in last 1
  * min sliding window count 1. <br>
- * Class : com.datatorrent.lib.algo.WindowedTopCounter <br>
+ * Class : org.apache.apex.malhar.lib.algo.WindowedTopCounter <br>
  * StateFull : Yes, sliding window count 120 (1 min) <br>
  * </li>
  * <li><b>The operator Console: </b> This operator just outputs the input tuples
diff --git a/examples/twitter/src/test/java/org/apache/apex/examples/twitter/TwitterTopCounterTest.java b/examples/twitter/src/test/java/org/apache/apex/examples/twitter/TwitterTopCounterTest.java
index 628a807..68e24cd 100644
--- a/examples/twitter/src/test/java/org/apache/apex/examples/twitter/TwitterTopCounterTest.java
+++ b/examples/twitter/src/test/java/org/apache/apex/examples/twitter/TwitterTopCounterTest.java
@@ -19,9 +19,10 @@
 package org.apache.apex.examples.twitter;
 
 import org.junit.Test;
+
+import org.apache.apex.malhar.contrib.twitter.TwitterSampleInput;
 import org.apache.hadoop.conf.Configuration;
 import com.datatorrent.api.LocalMode;
-import com.datatorrent.contrib.twitter.TwitterSampleInput;
 
 /**
  * Test the DAG declaration in local mode.
diff --git a/examples/twitter/src/test/java/org/apache/apex/examples/twitter/TwitterTopWordsTest.java b/examples/twitter/src/test/java/org/apache/apex/examples/twitter/TwitterTopWordsTest.java
index e888eb3..a073b55 100644
--- a/examples/twitter/src/test/java/org/apache/apex/examples/twitter/TwitterTopWordsTest.java
+++ b/examples/twitter/src/test/java/org/apache/apex/examples/twitter/TwitterTopWordsTest.java
@@ -19,9 +19,10 @@
 package org.apache.apex.examples.twitter;
 
 import org.junit.Test;
+
+import org.apache.apex.malhar.contrib.twitter.TwitterSampleInput;
 import org.apache.hadoop.conf.Configuration;
 import com.datatorrent.api.LocalMode;
-import com.datatorrent.contrib.twitter.TwitterSampleInput;
 
 /**
  * Test the DAG declaration in local mode.
diff --git a/examples/uniquecount/pom.xml b/examples/uniquecount/pom.xml
index 45ea847..f712b2c 100644
--- a/examples/uniquecount/pom.xml
+++ b/examples/uniquecount/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <properties>
diff --git a/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/Application.java b/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/Application.java
index fad3718..ed54508 100644
--- a/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/Application.java
+++ b/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/Application.java
@@ -18,6 +18,12 @@
  */
 package org.apache.apex.examples.uniquecount;
 
+import org.apache.apex.malhar.lib.algo.UniqueCounter;
+import org.apache.apex.malhar.lib.converter.MapToKeyHashValuePairConverter;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.stream.Counter;
+import org.apache.apex.malhar.lib.stream.StreamDuplicater;
+import org.apache.apex.malhar.lib.util.KeyHashValPair;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
@@ -27,12 +33,6 @@
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 
 import com.datatorrent.common.partitioner.StatelessPartitioner;
-import com.datatorrent.lib.algo.UniqueCounter;
-import com.datatorrent.lib.converter.MapToKeyHashValuePairConverter;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.stream.Counter;
-import com.datatorrent.lib.stream.StreamDuplicater;
-import com.datatorrent.lib.util.KeyHashValPair;
 
 /**
  * Application to demonstrate PartitionableUniqueCount operator. <br>
diff --git a/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/CountVerifier.java b/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/CountVerifier.java
index 422807e..778b783 100644
--- a/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/CountVerifier.java
+++ b/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/CountVerifier.java
@@ -21,12 +21,13 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.KeyHashValPair;
+
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.KeyHashValPair;
 
 /*
 Compare results and print non-matching values to console.
diff --git a/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/RandomDataGenerator.java b/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/RandomDataGenerator.java
index 3e29a70..334da62 100644
--- a/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/RandomDataGenerator.java
+++ b/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/RandomDataGenerator.java
@@ -24,10 +24,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Generate random Key value pairs.
diff --git a/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/RandomKeyValues.java b/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/RandomKeyValues.java
index 6d39c37..46a41e5 100644
--- a/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/RandomKeyValues.java
+++ b/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/RandomKeyValues.java
@@ -23,10 +23,11 @@
 import java.util.Map;
 import java.util.Random;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Input port operator for generating random values on keys. <br>
diff --git a/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/RandomKeysGenerator.java b/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/RandomKeysGenerator.java
index 9f26b4e..9db3324 100644
--- a/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/RandomKeysGenerator.java
+++ b/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/RandomKeysGenerator.java
@@ -23,13 +23,13 @@
 import java.util.Map;
 import java.util.Random;
 
+import org.apache.apex.malhar.lib.util.KeyHashValPair;
 import org.apache.commons.lang3.mutable.MutableInt;
 
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.KeyHashValPair;
 
 /*
     Generate random keys.
diff --git a/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/UniqueKeyValCountExample.java b/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/UniqueKeyValCountExample.java
index ff9fdf0..87bc40f 100644
--- a/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/UniqueKeyValCountExample.java
+++ b/examples/uniquecount/src/main/java/org/apache/apex/examples/uniquecount/UniqueKeyValCountExample.java
@@ -18,6 +18,10 @@
  */
 package org.apache.apex.examples.uniquecount;
 
+import org.apache.apex.malhar.lib.algo.UniqueCounter;
+import org.apache.apex.malhar.lib.converter.MapToKeyHashValuePairConverter;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
@@ -28,11 +32,6 @@
 
 import com.datatorrent.common.partitioner.StatelessPartitioner;
 
-import com.datatorrent.lib.algo.UniqueCounter;
-import com.datatorrent.lib.converter.MapToKeyHashValuePairConverter;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * <p>UniqueKeyValCountExample class.</p>
  *
diff --git a/examples/wordcount/pom.xml b/examples/wordcount/pom.xml
index 889a8bf..805f585 100644
--- a/examples/wordcount/pom.xml
+++ b/examples/wordcount/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <properties>
diff --git a/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/Application.java b/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/Application.java
index 6652b79..56ca720 100644
--- a/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/Application.java
+++ b/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/Application.java
@@ -18,13 +18,13 @@
  */
 package org.apache.apex.examples.wordcount;
 
+import org.apache.apex.malhar.lib.algo.UniqueCounter;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.algo.UniqueCounter;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 /**
  * Simple Word Count Example : <br>
@@ -64,7 +64,7 @@
  * </pre> <br> <br>
  *
  * Scaling Options : <br>
- * This operator app can not be scaled, please look at implementation {@link com.datatorrent.lib.algo.UniqueCounterEach}  <br> <br>
+ * This operator app can not be scaled, please look at implementation {@link org.apache.apex.malhar.lib.algo.UniqueCounterEach}  <br> <br>
  *
  * Application DAG : <br>
  * <img src="doc-files/UniqueWordCounter.jpg" width=600px > <br>
@@ -81,7 +81,7 @@
  *  </li>
  *  <li>
  *     <p><b> The operator count : </b>  This operator aggregates unique key count  over one window count(app). <br>
- *     Class : {@link com.datatorrent.lib.algo.UniqueCounterEach}  <br>
+ *     Class : {@link org.apache.apex.malhar.lib.algo.UniqueCounterEach}  <br>
  *     Operator Application Window Count : 1 <br>
  *     StateFull : No
  *  </li>
diff --git a/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/ApplicationWithQuerySupport.java b/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/ApplicationWithQuerySupport.java
index 440b30a..9fabd06 100644
--- a/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/ApplicationWithQuerySupport.java
+++ b/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/ApplicationWithQuerySupport.java
@@ -22,6 +22,12 @@
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.appdata.snapshot.AppDataSnapshotServerMap;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketAppDataQuery;
+import org.apache.apex.malhar.lib.io.PubSubWebSocketAppDataResult;
 import org.apache.apex.malhar.lib.utils.PubSubHelper;
 import org.apache.hadoop.conf.Configuration;
 
@@ -29,11 +35,6 @@
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
-import com.datatorrent.lib.appdata.snapshot.AppDataSnapshotServerMap;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.io.PubSubWebSocketAppDataQuery;
-import com.datatorrent.lib.io.PubSubWebSocketAppDataResult;
 
 /**
  * Simple example that computes word frequencies from any file dropped into a
diff --git a/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/LineReader.java b/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/LineReader.java
index ca25fb8..6058f9e 100644
--- a/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/LineReader.java
+++ b/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/LineReader.java
@@ -26,11 +26,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperator;
 import org.apache.hadoop.fs.Path;
 
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.io.fs.AbstractFileInputOperator;
 
 /**
  * Reads lines from input file and returns them. If EOF is reached, a control tuple
diff --git a/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/WordCountInputOperator.java b/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/WordCountInputOperator.java
index d5fc66a..10e7cb3 100644
--- a/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/WordCountInputOperator.java
+++ b/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/WordCountInputOperator.java
@@ -27,7 +27,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.io.SimpleSinglePortInputOperator;
+import org.apache.apex.malhar.lib.io.SimpleSinglePortInputOperator;
 
 /**
  * <p>WordCountInputOperator class.</p>
diff --git a/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/WordCountWriter.java b/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/WordCountWriter.java
index e4ee35e..9a67ea1 100644
--- a/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/WordCountWriter.java
+++ b/examples/wordcount/src/main/java/org/apache/apex/examples/wordcount/WordCountWriter.java
@@ -26,7 +26,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperator;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperator;
 
 /**
  * Write top N words and their frequencies to a file
diff --git a/examples/yahoofinance/pom.xml b/examples/yahoofinance/pom.xml
index 7c3b601..39430c2 100644
--- a/examples/yahoofinance/pom.xml
+++ b/examples/yahoofinance/pom.xml
@@ -31,7 +31,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-examples</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <properties>
diff --git a/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/ApplicationWithDerbySQL.java b/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/ApplicationWithDerbySQL.java
index 15ba713..c09ee99 100644
--- a/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/ApplicationWithDerbySQL.java
+++ b/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/ApplicationWithDerbySQL.java
@@ -20,12 +20,12 @@
 
 import org.apache.apex.malhar.contrib.misc.streamquery.AbstractSqlStreamOperator;
 import org.apache.apex.malhar.contrib.misc.streamquery.DerbySqlStreamOperator;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 /**
  * This example will output the stock market data from yahoo finance
diff --git a/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/StockTickInput.java b/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/StockTickInput.java
index d50c0d6..95dcc2e 100644
--- a/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/StockTickInput.java
+++ b/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/StockTickInput.java
@@ -31,6 +31,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpStatus;
 import org.apache.commons.httpclient.cookie.CookiePolicy;
@@ -42,7 +43,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.KeyValPair;
 
 import au.com.bytecode.opencsv.CSVReader;
 
diff --git a/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/YahooFinanceApplication.java b/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/YahooFinanceApplication.java
index d25d8f9..d76e832 100644
--- a/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/YahooFinanceApplication.java
+++ b/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/YahooFinanceApplication.java
@@ -18,6 +18,13 @@
  */
 package org.apache.apex.examples.yahoofinance;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.math.RangeKeyVal;
+import org.apache.apex.malhar.lib.math.SumKeyVal;
+import org.apache.apex.malhar.lib.multiwindow.SimpleMovingAverage;
+import org.apache.apex.malhar.lib.stream.ConsolidatorKeyVal;
+import org.apache.apex.malhar.lib.util.BaseKeyValueOperator.DefaultPartitionCodec;
+import org.apache.apex.malhar.lib.util.HighLow;
 import org.apache.hadoop.conf.Configuration;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.Context.PortContext;
@@ -25,13 +32,6 @@
 import com.datatorrent.api.Operator.InputPort;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.math.RangeKeyVal;
-import com.datatorrent.lib.math.SumKeyVal;
-import com.datatorrent.lib.multiwindow.SimpleMovingAverage;
-import com.datatorrent.lib.stream.ConsolidatorKeyVal;
-import com.datatorrent.lib.util.BaseKeyValueOperator.DefaultPartitionCodec;
-import com.datatorrent.lib.util.HighLow;
 
 /**
  * Yahoo! Finance Application Example :<br>
@@ -72,8 +72,8 @@
  * Output Adapter : <br>
  * Output values are written to console through ConsoleOutputOerator<br>
  * if you need to change write to HDFS,HTTP .. instead of console, <br>
- * Please refer to {@link com.datatorrent.lib.io.HttpOutputOperator} or
- * {@link com.datatorrent.lib.io.fs.HdfsOutputOperator}. <br>
+ * Please refer to {@link org.apache.apex.malhar.lib.io.HttpOutputOperator} or
+ * {@link org.apache.apex.malhar.lib.io.fs.HdfsOutputOperator}. <br>
  * <br>
  *
  * Run Sample Application : <br>
@@ -126,7 +126,7 @@
  * follow. This operator assumes that the application restarts before market
  * opens every day.
  * </p>
- * Class : {@link com.datatorrent.lib.math.SumKeyVal} <br>
+ * Class : {@link org.apache.apex.malhar.lib.math.SumKeyVal} <br>
  * Operator Application Window Count : 1 <br>
  * StateFull : Yes, volume gets aggregated every window count.</li>
  *
@@ -138,7 +138,7 @@
  * DailyVolume, this operator is also SumKeyVal<String,Long>, but with
  * cumulative set to false. Application Window is set to 1 minute. We will
  * explain how to set this later. <br>
- * Class : {@link com.datatorrent.lib.math.SumKeyVal} <br>
+ * Class : {@link org.apache.apex.malhar.lib.math.SumKeyVal} <br>
  * Operator App Window Count : 60 (1 Minute) <br>
  * StateFull : Yes, aggregate over last 60 windows.</li>
  *
@@ -149,7 +149,7 @@
  * StockTickInput). This operator just consolidates the three data and and emits
  * the consolidated data. It utilizes the class ConsolidatorKeyVal<K> from
  * stream package.<br>
- * Class : {@link com.datatorrent.lib.stream.ConsolidatorKeyVal} <br>
+ * Class : {@link org.apache.apex.malhar.lib.stream.ConsolidatorKeyVal} <br>
  * Operator App Window Count : 1 <br>
  * StateFull : No</li>
  *
@@ -158,7 +158,7 @@
  * <b>The operator Chart:</b> This operator is very similar to the operator
  * Quote, except that it takes inputs from High Low and Minute Vol and outputs
  * the consolidated tuples to the output port. <br>
- * Class : {@link com.datatorrent.lib.stream.ConsolidatorKeyVal} <br>
+ * Class : {@link org.apache.apex.malhar.lib.stream.ConsolidatorKeyVal} <br>
  * StateFull : No<br>
  * Operator App Window Count : 1</li>
  *
@@ -172,7 +172,7 @@
  * package. SimpleMovingAverage keeps track of the data of the previous N
  * application windows in a sliding manner. For each end window event, it
  * provides the average of the data in those application windows. <br>
- * Class : {@link com.datatorrent.lib.multiwindow.SimpleMovingAverage} <br>
+ * Class : {@link org.apache.apex.malhar.lib.multiwindow.SimpleMovingAverage} <br>
  * StateFull : Yes, stores values across application window. <br>
  * Operator App Window : 1 <br>
  * Operator Sliding Window : 300 (5 mins).</li>
@@ -213,7 +213,7 @@
   }
 
   /**
-   * Instantiate {@link com.datatorrent.lib.math.SumKeyVal} operator
+   * Instantiate {@link org.apache.apex.malhar.lib.math.SumKeyVal} operator
    * to sends total daily volume by adding volumes from each ticks.
    * @param name  Operator name
    * @param dag   Application DAG graph.
@@ -228,7 +228,7 @@
   }
 
   /**
-   * Instantiate {@link com.datatorrent.lib.math.SumKeyVal} operator
+   * Instantiate {@link org.apache.apex.malhar.lib.math.SumKeyVal} operator
    * Get aggregated volume of 1 minute and send at the end window of 1 minute.
    * @param name  Operator name
    * @param dag   Application DAG graph.
@@ -244,7 +244,7 @@
   }
 
   /**
-   * Instantiate {@link com.datatorrent.lib.math.RangeKeyVal} operator to get high/low
+   * Instantiate {@link org.apache.apex.malhar.lib.math.RangeKeyVal} operator to get high/low
    * value for each key within given application window.
    * Get High-low range for 1 minute.
    * @param name  Operator name
@@ -261,7 +261,7 @@
   }
 
   /**
-   * Instantiate {@link com.datatorrent.lib.stream.ConsolidatorKeyVal} to send
+   * Instantiate {@link org.apache.apex.malhar.lib.stream.ConsolidatorKeyVal} to send
    * Quote (Merge price, daily volume, time)
    * @param name  Operator name
    * @param dag   Application DAG graph.
@@ -274,7 +274,7 @@
   }
 
   /**
-   * Instantiate {@link com.datatorrent.lib.stream.ConsolidatorKeyVal} to send
+   * Instantiate {@link org.apache.apex.malhar.lib.stream.ConsolidatorKeyVal} to send
    * Chart (Merge minute volume and minute high-low)
    * @param name  Operator name
    * @param dag   Application DAG graph.
@@ -287,7 +287,7 @@
   }
 
   /**
-   * Instantiate {@link com.datatorrent.lib.multiwindow.SimpleMovingAverage} to calculate moving average for price
+   * Instantiate {@link org.apache.apex.malhar.lib.multiwindow.SimpleMovingAverage} to calculate moving average for price
    * over given window size. Sliding window size is 1.
    * @param name  Operator name
    * @param dag   Application DAG graph.
diff --git a/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/YahooFinanceCSVInputOperator.java b/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/YahooFinanceCSVInputOperator.java
index 37c9896..be21a02 100644
--- a/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/YahooFinanceCSVInputOperator.java
+++ b/examples/yahoofinance/src/main/java/org/apache/apex/examples/yahoofinance/YahooFinanceCSVInputOperator.java
@@ -28,6 +28,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.SimpleSinglePortInputOperator;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpStatus;
 import org.apache.commons.httpclient.cookie.CookiePolicy;
@@ -35,7 +36,6 @@
 import org.apache.commons.httpclient.params.DefaultHttpParams;
 
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.io.SimpleSinglePortInputOperator;
 
 import au.com.bytecode.opencsv.CSVReader;
 
diff --git a/examples/yahoofinance/src/test/resources/alert_create.json b/examples/yahoofinance/src/test/resources/alert_create.json
index 3059145..8a00e14 100644
--- a/examples/yahoofinance/src/test/resources/alert_create.json
+++ b/examples/yahoofinance/src/test/resources/alert_create.json
@@ -2,14 +2,14 @@
     "name":"alertName",
     "streamName":"yahooFinance.outputPort",
     "filter": { 
-        "class": "com.datatorrent.lib.util.JavaScriptFilterOperator", 
+        "class": "org.apache.apex.malhar.lib.util.JavaScriptFilterOperator", 
         "properties": {
             "setupScript":"function f() { return s0 == \"AAPL\" && l1 > 508 }",
             "functionName":"f"
         }
     },
     "escalation": { 
-        "class": "com.datatorrent.lib.util.AlertEscalationOperator", 
+        "class": "org.apache.apex.malhar.lib.util.AlertEscalationOperator", 
         "properties": { 
             "alertInterval":"5000",
             "timeout":"10000"
@@ -18,7 +18,7 @@
     "actions": [{ 
         "outputPort":"alert",
         "inputPort":"input",
-        "class":"com.datatorrent.lib.io.ConsoleOutputOperator"
+        "class":"org.apache.apex.malhar.lib.io.ConsoleOutputOperator"
     }],
     "saveAs":"firstAlert"
 }
diff --git a/flume/pom.xml b/flume/pom.xml
index 09dcef2..f5c6ab3 100644
--- a/flume/pom.xml
+++ b/flume/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <artifactId>malhar</artifactId>
     <groupId>org.apache.apex</groupId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-flume</artifactId>
diff --git a/flume/src/main/java/org/apache/apex/malhar/flume/storage/HDFSStorage.java b/flume/src/main/java/org/apache/apex/malhar/flume/storage/HDFSStorage.java
index 54716b7..6d18d43 100644
--- a/flume/src/main/java/org/apache/apex/malhar/flume/storage/HDFSStorage.java
+++ b/flume/src/main/java/org/apache/apex/malhar/flume/storage/HDFSStorage.java
@@ -534,7 +534,8 @@
         }
         logger.info("deleted file {}", cleanedFileCounter);
         ++cleanedFileCounter;
-      } while (cleanedFileCounter < cleanFileIndex);
+      }
+      while (cleanedFileCounter < cleanFileIndex);
       // writeData(cleanFileCounterFile, String.valueOf(cleanedFileCounter).getBytes()).close();
 
     } catch (IOException e) {
diff --git a/hive/pom.xml b/hive/pom.xml
index 4fb5083..6c8c425 100755
--- a/hive/pom.xml
+++ b/hive/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-hive</artifactId>
diff --git a/hive/src/main/java/org/apache/apex/malhar/hive/AbstractFSRollingOutputOperator.java b/hive/src/main/java/org/apache/apex/malhar/hive/AbstractFSRollingOutputOperator.java
index 37b5f2e..1720e00 100755
--- a/hive/src/main/java/org/apache/apex/malhar/hive/AbstractFSRollingOutputOperator.java
+++ b/hive/src/main/java/org/apache/apex/malhar/hive/AbstractFSRollingOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hive;
+package org.apache.apex.malhar.hive;
 
 import java.io.File;
 import java.io.IOException;
@@ -32,6 +32,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperator;
 import org.apache.commons.lang3.mutable.MutableInt;
 
 import com.datatorrent.api.Context.OperatorContext;
@@ -39,7 +40,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator.CheckpointNotificationListener;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperator;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
diff --git a/hive/src/main/java/org/apache/apex/malhar/hive/FSPojoToHiveOperator.java b/hive/src/main/java/org/apache/apex/malhar/hive/FSPojoToHiveOperator.java
index eaae68f..7c854ca 100644
--- a/hive/src/main/java/org/apache/apex/malhar/hive/FSPojoToHiveOperator.java
+++ b/hive/src/main/java/org/apache/apex/malhar/hive/FSPojoToHiveOperator.java
@@ -16,23 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hive;
+package org.apache.apex.malhar.hive;
 
 import java.sql.Date;
 import java.sql.Timestamp;
 import java.util.ArrayList;
 
-import com.google.common.collect.Lists;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterBoolean;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterChar;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterDouble;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterFloat;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterInt;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterLong;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterShort;
 
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
-import com.datatorrent.lib.util.PojoUtils.GetterBoolean;
-import com.datatorrent.lib.util.PojoUtils.GetterChar;
-import com.datatorrent.lib.util.PojoUtils.GetterDouble;
-import com.datatorrent.lib.util.PojoUtils.GetterFloat;
-import com.datatorrent.lib.util.PojoUtils.GetterInt;
-import com.datatorrent.lib.util.PojoUtils.GetterLong;
-import com.datatorrent.lib.util.PojoUtils.GetterShort;
+import com.google.common.collect.Lists;
 
 /**
  * An Implementation of AbstractFSRollingOutputOperator which takes any POJO as
diff --git a/hive/src/main/java/org/apache/apex/malhar/hive/HiveOperator.java b/hive/src/main/java/org/apache/apex/malhar/hive/HiveOperator.java
index ed4ca85..abd0d96 100755
--- a/hive/src/main/java/org/apache/apex/malhar/hive/HiveOperator.java
+++ b/hive/src/main/java/org/apache/apex/malhar/hive/HiveOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hive;
+package org.apache.apex.malhar.hive;
 
 import java.io.IOException;
 import java.sql.SQLException;
@@ -28,6 +28,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.hive.AbstractFSRollingOutputOperator.FilePartitionMapping;
+import org.apache.apex.malhar.lib.counters.BasicCounters;
+import org.apache.apex.malhar.lib.db.AbstractStoreOutputOperator;
 import org.apache.commons.lang.mutable.MutableLong;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
@@ -35,9 +38,6 @@
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.contrib.hive.AbstractFSRollingOutputOperator.FilePartitionMapping;
-import com.datatorrent.lib.counters.BasicCounters;
-import com.datatorrent.lib.db.AbstractStoreOutputOperator;
 
 /**
  * Hive operator which can insert data in txt format in tables/partitions from a
diff --git a/hive/src/main/java/org/apache/apex/malhar/hive/HiveOutputModule.java b/hive/src/main/java/org/apache/apex/malhar/hive/HiveOutputModule.java
index d859634..6aac702 100644
--- a/hive/src/main/java/org/apache/apex/malhar/hive/HiveOutputModule.java
+++ b/hive/src/main/java/org/apache/apex/malhar/hive/HiveOutputModule.java
@@ -26,6 +26,7 @@
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.hive.FSPojoToHiveOperator.FIELD_TYPE;
 import org.apache.commons.beanutils.ConvertUtils;
 import org.apache.commons.beanutils.converters.AbstractConverter;
 import org.apache.commons.beanutils.converters.ArrayConverter;
@@ -33,10 +34,6 @@
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Module;
-import com.datatorrent.contrib.hive.FSPojoToHiveOperator;
-import com.datatorrent.contrib.hive.FSPojoToHiveOperator.FIELD_TYPE;
-import com.datatorrent.contrib.hive.HiveOperator;
-import com.datatorrent.contrib.hive.HiveStore;
 
 /**
  * HiveOutputModule provides abstraction for the operators needed for writing
diff --git a/hive/src/main/java/org/apache/apex/malhar/hive/HiveStore.java b/hive/src/main/java/org/apache/apex/malhar/hive/HiveStore.java
index 362a824..a8f2c3a 100755
--- a/hive/src/main/java/org/apache/apex/malhar/hive/HiveStore.java
+++ b/hive/src/main/java/org/apache/apex/malhar/hive/HiveStore.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hive;
+package org.apache.apex.malhar.hive;
 
 import javax.validation.constraints.NotNull;
 
-import com.datatorrent.lib.db.jdbc.JdbcStore;
+import org.apache.apex.malhar.lib.db.jdbc.JdbcStore;
 
 /**
  * Hive Store that extends Jdbc Store and provides its own driver name.
diff --git a/hive/src/main/java/org/apache/apex/malhar/hive/HiveStreamCodec.java b/hive/src/main/java/org/apache/apex/malhar/hive/HiveStreamCodec.java
index becab2c..c074471 100755
--- a/hive/src/main/java/org/apache/apex/malhar/hive/HiveStreamCodec.java
+++ b/hive/src/main/java/org/apache/apex/malhar/hive/HiveStreamCodec.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hive;
+package org.apache.apex.malhar.hive;
 
 import java.io.ByteArrayOutputStream;
 import java.io.Externalizable;
@@ -25,11 +25,11 @@
 import java.io.ObjectOutput;
 import java.io.ObjectOutputStream;
 
+import org.apache.apex.malhar.lib.codec.KryoSerializableStreamCodec;
+
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
 
-import com.datatorrent.lib.codec.KryoSerializableStreamCodec;
-
 /**
  * Stream codec for uniform distribution of tuples on upstream operator. This is
  * used to make sure that data being sent to a particular hive partition goes to
diff --git a/hive/src/main/java/org/apache/apex/malhar/hive/package-info.java b/hive/src/main/java/org/apache/apex/malhar/hive/package-info.java
index ad93d8f..949550d 100644
--- a/hive/src/main/java/org/apache/apex/malhar/hive/package-info.java
+++ b/hive/src/main/java/org/apache/apex/malhar/hive/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.contrib.hive;
+package org.apache.apex.malhar.hive;
diff --git a/hive/src/test/java/org/apache/apex/malhar/hive/FSRollingMapTestImpl.java b/hive/src/test/java/org/apache/apex/malhar/hive/FSRollingMapTestImpl.java
index 27b727f..dd903d2 100755
--- a/hive/src/test/java/org/apache/apex/malhar/hive/FSRollingMapTestImpl.java
+++ b/hive/src/test/java/org/apache/apex/malhar/hive/FSRollingMapTestImpl.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hive;
+package org.apache.apex.malhar.hive;
 
 import java.util.ArrayList;
 import java.util.Iterator;
diff --git a/hive/src/test/java/org/apache/apex/malhar/hive/FSRollingTestImpl.java b/hive/src/test/java/org/apache/apex/malhar/hive/FSRollingTestImpl.java
index f3bade6..24a7705 100755
--- a/hive/src/test/java/org/apache/apex/malhar/hive/FSRollingTestImpl.java
+++ b/hive/src/test/java/org/apache/apex/malhar/hive/FSRollingTestImpl.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hive;
+package org.apache.apex.malhar.hive;
 
 import java.util.ArrayList;
 
diff --git a/hive/src/test/java/org/apache/apex/malhar/hive/HiveMockTest.java b/hive/src/test/java/org/apache/apex/malhar/hive/HiveMockTest.java
index 2e0c5cf..0784b40 100755
--- a/hive/src/test/java/org/apache/apex/malhar/hive/HiveMockTest.java
+++ b/hive/src/test/java/org/apache/apex/malhar/hive/HiveMockTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hive;
+package org.apache.apex.malhar.hive;
 
 import java.io.File;
 import java.io.IOException;
@@ -33,12 +33,16 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.hive.AbstractFSRollingOutputOperator.FilePartitionMapping;
+import org.apache.apex.malhar.hive.FSPojoToHiveOperator.FIELD_TYPE;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.thrift.TException;
 
 import io.teknek.hiveunit.HiveTestService;
 
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.serializers.FieldSerializer;
 
@@ -46,10 +50,6 @@
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Operator.ProcessingMode;
-import com.datatorrent.contrib.hive.AbstractFSRollingOutputOperator.FilePartitionMapping;
-import com.datatorrent.contrib.hive.FSPojoToHiveOperator.FIELD_TYPE;
-
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class HiveMockTest extends HiveTestService
 {
diff --git a/hive/src/test/java/org/apache/apex/malhar/hive/HiveStoreTest.java b/hive/src/test/java/org/apache/apex/malhar/hive/HiveStoreTest.java
index 4f32899..68617e1 100755
--- a/hive/src/test/java/org/apache/apex/malhar/hive/HiveStoreTest.java
+++ b/hive/src/test/java/org/apache/apex/malhar/hive/HiveStoreTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.contrib.hive;
+package org.apache.apex.malhar.hive;
 
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/kafka/kafka-common/pom.xml b/kafka/kafka-common/pom.xml
index 6aaba2d..b79d875 100755
--- a/kafka/kafka-common/pom.xml
+++ b/kafka/kafka-common/pom.xml
@@ -26,7 +26,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-kafka-connectors</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-kafka-common</artifactId>
diff --git a/kafka/kafka-common/src/main/java/org/apache/apex/malhar/kafka/AbstractKafkaPartitioner.java b/kafka/kafka-common/src/main/java/org/apache/apex/malhar/kafka/AbstractKafkaPartitioner.java
index 791972f..7252673 100644
--- a/kafka/kafka-common/src/main/java/org/apache/apex/malhar/kafka/AbstractKafkaPartitioner.java
+++ b/kafka/kafka-common/src/main/java/org/apache/apex/malhar/kafka/AbstractKafkaPartitioner.java
@@ -34,6 +34,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.kafka.clients.consumer.KafkaConsumer;
 import org.apache.kafka.common.PartitionInfo;
@@ -45,7 +46,6 @@
 import com.datatorrent.api.DefaultPartition;
 import com.datatorrent.api.Partitioner;
 import com.datatorrent.api.StatsListener;
-import com.datatorrent.lib.util.KryoCloneUtils;
 
 /**
  * Abstract partitioner used to manage the partitions of kafka input operator.
diff --git a/kafka/kafka010/pom.xml b/kafka/kafka010/pom.xml
index 90e1ca8..cdbd0c1 100755
--- a/kafka/kafka010/pom.xml
+++ b/kafka/kafka010/pom.xml
@@ -26,7 +26,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-kafka-connectors</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-kafka010</artifactId>
diff --git a/kafka/kafka010/src/test/java/org/apache/apex/malhar/kafka/KafkaOperatorTestBase.java b/kafka/kafka010/src/test/java/org/apache/apex/malhar/kafka/KafkaOperatorTestBase.java
index 235eeba..a1642a3 100644
--- a/kafka/kafka010/src/test/java/org/apache/apex/malhar/kafka/KafkaOperatorTestBase.java
+++ b/kafka/kafka010/src/test/java/org/apache/apex/malhar/kafka/KafkaOperatorTestBase.java
@@ -258,7 +258,7 @@
     }
 
     public TestZookeeperServer(FileTxnSnapLog txnLogFactory, int tickTime, DataTreeBuilder treeBuilder)
-        throws IOException
+      throws IOException
     {
       super(txnLogFactory, tickTime, treeBuilder);
       // TODO Auto-generated constructor stub
diff --git a/kafka/kafka09/pom.xml b/kafka/kafka09/pom.xml
index aba7002..3d3e6fa 100755
--- a/kafka/kafka09/pom.xml
+++ b/kafka/kafka09/pom.xml
@@ -26,7 +26,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar-kafka-connectors</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-kafka</artifactId>
diff --git a/kafka/kafka09/src/test/java/org/apache/apex/malhar/kafka/KafkaOperatorTestBase.java b/kafka/kafka09/src/test/java/org/apache/apex/malhar/kafka/KafkaOperatorTestBase.java
index 235eeba..a1642a3 100644
--- a/kafka/kafka09/src/test/java/org/apache/apex/malhar/kafka/KafkaOperatorTestBase.java
+++ b/kafka/kafka09/src/test/java/org/apache/apex/malhar/kafka/KafkaOperatorTestBase.java
@@ -258,7 +258,7 @@
     }
 
     public TestZookeeperServer(FileTxnSnapLog txnLogFactory, int tickTime, DataTreeBuilder treeBuilder)
-        throws IOException
+      throws IOException
     {
       super(txnLogFactory, tickTime, treeBuilder);
       // TODO Auto-generated constructor stub
diff --git a/kafka/kafka09/src/test/java/org/apache/apex/malhar/kafka/KafkaOutputOperatorTest.java b/kafka/kafka09/src/test/java/org/apache/apex/malhar/kafka/KafkaOutputOperatorTest.java
index 2b4307f..9af3185 100644
--- a/kafka/kafka09/src/test/java/org/apache/apex/malhar/kafka/KafkaOutputOperatorTest.java
+++ b/kafka/kafka09/src/test/java/org/apache/apex/malhar/kafka/KafkaOutputOperatorTest.java
@@ -43,7 +43,7 @@
 import com.datatorrent.api.Operator;
 import com.datatorrent.common.util.BaseOperator;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 import static org.apache.kafka.clients.consumer.ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG;
 import static org.apache.kafka.clients.consumer.ConsumerConfig.GROUP_ID_CONFIG;
 import static org.apache.kafka.clients.consumer.ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG;
diff --git a/kafka/pom.xml b/kafka/pom.xml
index 50f1bb2..8575850 100755
--- a/kafka/pom.xml
+++ b/kafka/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-kafka-connectors</artifactId>
diff --git a/kudu/pom.xml b/kudu/pom.xml
index 32d6351..0696a12 100755
--- a/kudu/pom.xml
+++ b/kudu/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-kudu</artifactId>
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/AbstractKuduInputOperator.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/AbstractKuduInputOperator.java
index 14ea6b7..21fcc68 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/AbstractKuduInputOperator.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/AbstractKuduInputOperator.java
@@ -49,6 +49,7 @@
 import org.apache.apex.malhar.kudu.scanner.KuduScanOrderStrategy;
 import org.apache.apex.malhar.kudu.sqltranslator.KuduSQLParseTreeListener;
 import org.apache.apex.malhar.kudu.sqltranslator.SQLToKuduPredicatesTranslator;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.hadoop.classification.InterfaceStability;
@@ -66,7 +67,6 @@
 import com.datatorrent.api.Partitioner;
 import com.datatorrent.api.StatsListener;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.util.PojoUtils;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/AbstractKuduOutputOperator.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/AbstractKuduOutputOperator.java
index 754e569..9b70c01 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/AbstractKuduOutputOperator.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/AbstractKuduOutputOperator.java
@@ -32,6 +32,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.hadoop.classification.InterfaceStability;
@@ -56,7 +57,6 @@
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.annotation.Stateless;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.PojoUtils;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/ApexKuduConnection.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/ApexKuduConnection.java
index ef57efc..b08ec17 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/ApexKuduConnection.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/ApexKuduConnection.java
@@ -35,8 +35,11 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /**
- * <p>Represents a connection to the Kudu cluster. An instance of this class is to be supplied (via a builder pattern to)
- * {@link AbstractKuduOutputOperator} to connect to a Kudu cluster.</p>
+ * <p>
+ * Represents a connection to the Kudu cluster. An instance of this class is to
+ * be supplied (via a builder pattern to) {@link AbstractKuduOutputOperator} to
+ * connect to a Kudu cluster.
+ * </p>
  *
  * @since 3.8.0
  */
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/AbstractKuduInputPartitioner.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/AbstractKuduInputPartitioner.java
index e2ba64f..0f5e6ee 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/AbstractKuduInputPartitioner.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/partitioner/AbstractKuduInputPartitioner.java
@@ -32,6 +32,7 @@
 import org.apache.apex.malhar.kudu.scanner.AbstractKuduPartitionScanner;
 import org.apache.apex.malhar.kudu.scanner.KuduPartitionScanAssignmentMeta;
 import org.apache.apex.malhar.kudu.sqltranslator.SQLToKuduPredicatesTranslator;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.kudu.ColumnSchema;
 import org.apache.kudu.client.KuduClient;
 import org.apache.kudu.client.KuduScanToken;
@@ -39,7 +40,6 @@
 
 import com.datatorrent.api.DefaultPartition;
 import com.datatorrent.api.Partitioner;
-import com.datatorrent.lib.util.KryoCloneUtils;
 
 /**
  * An abstract class that contains logic that is common across all partitioners available for the Kudu input operator.
diff --git a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionScannerCallable.java b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionScannerCallable.java
index 7510502..118810a 100644
--- a/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionScannerCallable.java
+++ b/kudu/src/main/java/org/apache/apex/malhar/kudu/scanner/KuduPartitionScannerCallable.java
@@ -31,6 +31,7 @@
 import org.apache.apex.malhar.kudu.ApexKuduConnection;
 import org.apache.apex.malhar.kudu.InputOperatorControlTuple;
 import org.apache.apex.malhar.kudu.sqltranslator.SQLToKuduPredicatesTranslator;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.kudu.ColumnSchema;
 import org.apache.kudu.Common;
 import org.apache.kudu.client.KuduClient;
@@ -39,8 +40,6 @@
 import org.apache.kudu.client.RowResult;
 import org.apache.kudu.client.RowResultIterator;
 
-import com.datatorrent.lib.util.PojoUtils;
-
 import static com.google.common.base.Preconditions.checkNotNull;
 
 /***
diff --git a/kudu/src/test/java/org/apache/apex/malhar/kudu/IncrementalStepScanInputOperatorTest.java b/kudu/src/test/java/org/apache/apex/malhar/kudu/IncrementalStepScanInputOperatorTest.java
index 7feb843..f0e0a87 100644
--- a/kudu/src/test/java/org/apache/apex/malhar/kudu/IncrementalStepScanInputOperatorTest.java
+++ b/kudu/src/test/java/org/apache/apex/malhar/kudu/IncrementalStepScanInputOperatorTest.java
@@ -32,15 +32,15 @@
 import org.apache.apex.malhar.kudu.scanner.KuduScanOrderStrategy;
 import org.apache.apex.malhar.kudu.test.KuduClusterAvailabilityTestRule;
 import org.apache.apex.malhar.kudu.test.KuduClusterTestContext;
+import org.apache.apex.malhar.lib.helper.TestPortContext;
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.Partitioner;
-import com.datatorrent.lib.helper.TestPortContext;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class IncrementalStepScanInputOperatorTest extends KuduClientTestCommons
 {
diff --git a/kudu/src/test/java/org/apache/apex/malhar/kudu/KuduClientTestCommons.java b/kudu/src/test/java/org/apache/apex/malhar/kudu/KuduClientTestCommons.java
index b7c63f4..a747483 100644
--- a/kudu/src/test/java/org/apache/apex/malhar/kudu/KuduClientTestCommons.java
+++ b/kudu/src/test/java/org/apache/apex/malhar/kudu/KuduClientTestCommons.java
@@ -27,6 +27,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.kudu.ColumnSchema;
 import org.apache.kudu.Schema;
 import org.apache.kudu.Type;
@@ -42,8 +43,6 @@
 import org.apache.kudu.client.RowResult;
 import org.apache.kudu.client.RowResultIterator;
 
-import com.datatorrent.lib.util.KryoCloneUtils;
-
 import static org.powermock.api.mockito.PowerMockito.when;
 
 /** Common test code for all kudu operators
diff --git a/kudu/src/test/java/org/apache/apex/malhar/kudu/KuduCreateUpdateDeleteOutputOperatorTest.java b/kudu/src/test/java/org/apache/apex/malhar/kudu/KuduCreateUpdateDeleteOutputOperatorTest.java
index b4ab141..918e1ee 100644
--- a/kudu/src/test/java/org/apache/apex/malhar/kudu/KuduCreateUpdateDeleteOutputOperatorTest.java
+++ b/kudu/src/test/java/org/apache/apex/malhar/kudu/KuduCreateUpdateDeleteOutputOperatorTest.java
@@ -28,14 +28,14 @@
 
 import org.apache.apex.malhar.kudu.test.KuduClusterAvailabilityTestRule;
 import org.apache.apex.malhar.kudu.test.KuduClusterTestContext;
+import org.apache.apex.malhar.lib.helper.TestPortContext;
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.helper.TestPortContext;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 import static org.junit.Assert.assertEquals;
 
 public class KuduCreateUpdateDeleteOutputOperatorTest extends KuduClientTestCommons
diff --git a/kudu/src/test/java/org/apache/apex/malhar/kudu/KuduInputOperatorCommons.java b/kudu/src/test/java/org/apache/apex/malhar/kudu/KuduInputOperatorCommons.java
index 19a815c..d075df1 100644
--- a/kudu/src/test/java/org/apache/apex/malhar/kudu/KuduInputOperatorCommons.java
+++ b/kudu/src/test/java/org/apache/apex/malhar/kudu/KuduInputOperatorCommons.java
@@ -29,6 +29,7 @@
 import org.apache.apex.malhar.kudu.partitioner.KuduPartitionScanStrategy;
 import org.apache.apex.malhar.kudu.scanner.AbstractKuduPartitionScanner;
 import org.apache.apex.malhar.kudu.scanner.KuduScanOrderStrategy;
+import org.apache.apex.malhar.lib.helper.TestPortContext;
 import org.apache.kudu.client.Delete;
 import org.apache.kudu.client.KuduScanToken;
 import org.apache.kudu.client.KuduScanner;
@@ -45,9 +46,8 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.Partitioner;
-import com.datatorrent.lib.helper.TestPortContext;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class KuduInputOperatorCommons extends KuduClientTestCommons
 {
diff --git a/kudu/src/test/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToManyPartitionerTest.java b/kudu/src/test/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToManyPartitionerTest.java
index 97768d2..2b06960 100644
--- a/kudu/src/test/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToManyPartitionerTest.java
+++ b/kudu/src/test/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToManyPartitionerTest.java
@@ -37,9 +37,9 @@
 import org.apache.apex.malhar.kudu.scanner.KuduPartitionScanAssignmentMeta;
 import org.apache.apex.malhar.kudu.test.KuduClusterAvailabilityTestRule;
 import org.apache.apex.malhar.kudu.test.KuduClusterTestContext;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 
 import com.datatorrent.api.Partitioner;
-import com.datatorrent.lib.util.KryoCloneUtils;
 
 import static org.hamcrest.Matchers.greaterThanOrEqualTo;
 import static org.hamcrest.Matchers.lessThanOrEqualTo;
diff --git a/kudu/src/test/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToOnePartitionerTest.java b/kudu/src/test/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToOnePartitionerTest.java
index 7d0d417..9865747 100644
--- a/kudu/src/test/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToOnePartitionerTest.java
+++ b/kudu/src/test/java/org/apache/apex/malhar/kudu/partitioner/KuduOneToOnePartitionerTest.java
@@ -37,9 +37,9 @@
 import org.apache.apex.malhar.kudu.scanner.KuduPartitionScanAssignmentMeta;
 import org.apache.apex.malhar.kudu.test.KuduClusterAvailabilityTestRule;
 import org.apache.apex.malhar.kudu.test.KuduClusterTestContext;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 
 import com.datatorrent.api.Partitioner;
-import com.datatorrent.lib.util.KryoCloneUtils;
 
 import static org.hamcrest.core.Is.is;
 import static org.hamcrest.junit.MatcherAssert.assertThat;
diff --git a/library/pom.xml b/library/pom.xml
index 29438d0..aa46d95 100644
--- a/library/pom.xml
+++ b/library/pom.xml
@@ -26,7 +26,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-library</artifactId>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/BottomNMap.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/BottomNMap.java
index 7946b47..cc27e30 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/BottomNMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/BottomNMap.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
-import com.datatorrent.api.DefaultOutputPort;
+import org.apache.apex.malhar.lib.util.AbstractBaseNNonUniqueOperatorMap;
 
-import com.datatorrent.lib.util.AbstractBaseNNonUniqueOperatorMap;
+import com.datatorrent.api.DefaultOutputPort;
 
 /**
  * This operator takes an input stream of key value pairs is ordered by key,
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/BottomNUnifier.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/BottomNUnifier.java
index 8b76852..07d685f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/BottomNUnifier.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/BottomNUnifier.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -24,10 +24,11 @@
 
 import javax.validation.constraints.Min;
 
+import org.apache.apex.malhar.lib.util.TopNSort;
+
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator.Unifier;
-import com.datatorrent.lib.util.TopNSort;
 
 /**
  * This unifier takes an input stream of key value pairs is ordered by key,
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/BottomNUniqueMap.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/BottomNUniqueMap.java
index a2e8764..c77fe18 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/BottomNUniqueMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/BottomNUniqueMap.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
-import com.datatorrent.api.DefaultOutputPort;
+import org.apache.apex.malhar.lib.util.AbstractBaseNUniqueOperatorMap;
 
-import com.datatorrent.lib.util.AbstractBaseNUniqueOperatorMap;
+import com.datatorrent.api.DefaultOutputPort;
 
 /**
  * This operator takes an input stream of key value pairs,
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/CompareExceptCountMap.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/CompareExceptCountMap.java
index 1989f24..cb107aa 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/CompareExceptCountMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/CompareExceptCountMap.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.UnifierSumNumber;
+
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.UnifierSumNumber;
-
 /**
  * This operator produces a count of how many tuples of value type Number satisfy and do not satisfy a specified compare function.
  * <p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/Distinct.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/Distinct.java
index ce29c50..d06168c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/Distinct.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/Distinct.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.BaseKeyOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator.Unifier;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.BaseKeyOperator;
-
 /**
  * This operator computes and emits distinct tuples of type K (i.e drops duplicates) at end of window.
  * <p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/FilterValues.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/FilterValues.java
index c7a70bb..1fa10ef 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/FilterValues.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/FilterValues.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.Arrays;
 import java.util.HashSet;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/InsertSort.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/InsertSort.java
index d4414a4..4849be1 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/InsertSort.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/InsertSort.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.AbstractBaseSortOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator.Unifier;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 
-import com.datatorrent.lib.util.AbstractBaseSortOperator;
-
 /**
  * This operator takes the values it receives each window and outputs them in ascending order at the end of each window.
  * <p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/LeastFrequentKeyArrayUnifier.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/LeastFrequentKeyArrayUnifier.java
index b14e46f..bc4ee9d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/LeastFrequentKeyArrayUnifier.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/LeastFrequentKeyArrayUnifier.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/LeastFrequentKeyUnifier.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/LeastFrequentKeyUnifier.java
index de899b6..71bf4d5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/LeastFrequentKeyUnifier.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/LeastFrequentKeyUnifier.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/LeastFrequentValue.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/LeastFrequentValue.java
index ac91e96..ef6b83f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/LeastFrequentValue.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/LeastFrequentValue.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.AbstractBaseFrequentKey;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
 
-import com.datatorrent.lib.util.AbstractBaseFrequentKey;
-
 /**
  * This operator filters the incoming stream of values by emitting the value or values (if there is a tie)
  * that occurred the fewest number of times within each window to the output port "list".&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/MatchAllMap.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/MatchAllMap.java
index 0d258f6..630d9b4 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/MatchAllMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/MatchAllMap.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseMatchOperator;
+import org.apache.apex.malhar.lib.util.UnifierBooleanAnd;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.BaseMatchOperator;
-import com.datatorrent.lib.util.UnifierBooleanAnd;
-
 /**
  * This operator filters the incoming stream of key value pairs by obtaining the values corresponding to a specified key,
  * and comparing those values to a specified number.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/MatchAnyMap.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/MatchAnyMap.java
index f3ed5ae..13be783 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/MatchAnyMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/MatchAnyMap.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseMatchOperator;
+import org.apache.apex.malhar.lib.util.UnifierBooleanOr;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.BaseMatchOperator;
-import com.datatorrent.lib.util.UnifierBooleanOr;
-
 /**
  * This operator filters the incoming stream of key value pairs by obtaining the values corresponding to a specified key,
  * and comparing those values to a specified number.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/MatchMap.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/MatchMap.java
index c9b171c..780b5f3 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/MatchMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/MatchMap.java
@@ -16,20 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseMatchOperator;
+import org.apache.apex.malhar.lib.util.UnifierHashMap;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
 import com.datatorrent.api.annotation.Stateless;
 
-import com.datatorrent.lib.util.BaseMatchOperator;
-import com.datatorrent.lib.util.UnifierHashMap;
-
 /**
  * This operator filters the incoming stream of key value pairs by obtaining the values corresponding to a specified key,
  * and comparing those values to a specified number.&nbsp;If a key value pair satisfies the comparison, then it is emitted.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/MergeSort.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/MergeSort.java
index a3f8a0e..769742e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/MergeSort.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/MergeSort.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/MergeSortNumber.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/MergeSortNumber.java
index 5839797..9c1a4e8 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/MergeSortNumber.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/MergeSortNumber.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/MostFrequentValue.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/MostFrequentValue.java
index ca4aedf..39834db 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/MostFrequentValue.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/MostFrequentValue.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.AbstractBaseFrequentKey;
+import org.apache.apex.malhar.lib.util.UnifierArrayHashMapFrequent;
+import org.apache.apex.malhar.lib.util.UnifierHashMapFrequent;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.AbstractBaseFrequentKey;
-import com.datatorrent.lib.util.UnifierArrayHashMapFrequent;
-import com.datatorrent.lib.util.UnifierHashMapFrequent;
-
 /**
  * This operator filters the incoming stream of values by emitting the value or values (if there is a tie)
  * that occurred the largest number of times within each window to the output port "list".&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/TopN.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/TopN.java
index f5dc20a..bf7710c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/TopN.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/TopN.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.AbstractBaseNNonUniqueOperatorMap;
+
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator.Unifier;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.AbstractBaseNNonUniqueOperatorMap;
-
 /**
  * This operator orders tuples per key and emits the top N tuples per key at the end of the window.
  * <p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/TopNUnique.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/TopNUnique.java
index d80f1c1..6c12d56 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/TopNUnique.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/TopNUnique.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.AbstractBaseNUniqueOperatorMap;
+
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.AbstractBaseNUniqueOperatorMap;
-
 /**
  * This operator orders tuples per key and emits the top N unique values per key at the end of the window.
  * <p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/UniqueCounter.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/UniqueCounter.java
index d029da6..b1c0cee 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/UniqueCounter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/UniqueCounter.java
@@ -16,16 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.HashMap;
 import java.util.HashSet;
 
+import org.apache.apex.malhar.lib.util.BaseUniqueKeyCounter;
+import org.apache.apex.malhar.lib.util.UnifierHashMapSumKeys;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.lib.util.BaseUniqueKeyCounter;
-import com.datatorrent.lib.util.UnifierHashMapSumKeys;
 
 /**
  * This operator counts the number of times a tuple is received and emits
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/UniqueValueCount.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/UniqueValueCount.java
index c56448e..8cf4366 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/UniqueValueCount.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/UniqueValueCount.java
@@ -16,11 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
@@ -30,7 +32,6 @@
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.Stateless;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * This operator counts the number of unique values corresponding to a key within a window.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/algo/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/algo/package-info.java
index d368186..733e5dc 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/algo/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/algo/package-info.java
@@ -20,4 +20,4 @@
  * Library of algorithmic operators
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/AbstractAppDataServer.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/AbstractAppDataServer.java
index 4b8bfad..e5e04ab 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/AbstractAppDataServer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/AbstractAppDataServer.java
@@ -28,7 +28,6 @@
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.common.experimental.AppData;
-import com.datatorrent.lib.appdata.StoreUtils;
 
 /**
  * This is an operator that lays the framework of serving data to queries coming from an embeddable query info provider,
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/QueueUtils.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/QueueUtils.java
index f8880bb..3bfe105 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/QueueUtils.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/QueueUtils.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata;
+package org.apache.apex.malhar.lib.appdata;
 
 /**
  * @since 3.3.0
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/StoreUtils.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/StoreUtils.java
index 31c3588..c6f1c0b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/StoreUtils.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/StoreUtils.java
@@ -16,17 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata;
+package org.apache.apex.malhar.lib.appdata;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.SimpleSinglePortInputOperator.BufferingOutputPort;
+
 import com.google.common.base.Preconditions;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Sink;
-import com.datatorrent.lib.io.SimpleSinglePortInputOperator.BufferingOutputPort;
 
 /**
  * @since 3.3.0
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/datastructs/CacheLRUSynchronousFlush.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/datastructs/CacheLRUSynchronousFlush.java
index bed700b..91104af 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/datastructs/CacheLRUSynchronousFlush.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/datastructs/CacheLRUSynchronousFlush.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.datastructs;
+package org.apache.apex.malhar.lib.appdata.datastructs;
 
 import java.util.HashMap;
 import java.util.Iterator;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/datastructs/DimensionalTable.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/datastructs/DimensionalTable.java
index be228fa..18604a9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/datastructs/DimensionalTable.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/datastructs/DimensionalTable.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.datastructs;
+package org.apache.apex.malhar.lib.appdata.datastructs;
 
 import java.util.Collections;
 import java.util.List;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/datastructs/NOPCacheFlushListener.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/datastructs/NOPCacheFlushListener.java
index a078c43..7357e66 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/datastructs/NOPCacheFlushListener.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/datastructs/NOPCacheFlushListener.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.datastructs;
+package org.apache.apex.malhar.lib.appdata.datastructs;
 
-import com.datatorrent.lib.appdata.datastructs.CacheLRUSynchronousFlush.CacheFlushListener;
+import org.apache.apex.malhar.lib.appdata.datastructs.CacheLRUSynchronousFlush.CacheFlushListener;
 
 /**
  * This is a listener which is called by {@link CacheLRUSynchronousFlush} when the cache is flushed.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOByteArrayList.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOByteArrayList.java
index 0819941..6c8435a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOByteArrayList.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOByteArrayList.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.util.Collection;
 import java.util.Iterator;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOGetters.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOGetters.java
index 9f26f22..6393935 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOGetters.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOGetters.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
-import com.datatorrent.lib.util.PojoUtils.Getter;
-import com.datatorrent.lib.util.PojoUtils.GetterBoolean;
-import com.datatorrent.lib.util.PojoUtils.GetterByte;
-import com.datatorrent.lib.util.PojoUtils.GetterChar;
-import com.datatorrent.lib.util.PojoUtils.GetterDouble;
-import com.datatorrent.lib.util.PojoUtils.GetterFloat;
-import com.datatorrent.lib.util.PojoUtils.GetterInt;
-import com.datatorrent.lib.util.PojoUtils.GetterLong;
-import com.datatorrent.lib.util.PojoUtils.GetterShort;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterBoolean;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterByte;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterChar;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterDouble;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterFloat;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterInt;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterLong;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterShort;
 
 /**
  * This is a helper class which is intended to be used for operators
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOMutable.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOMutable.java
index 3609f2e..2dc88ea 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOMutable.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOMutable.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.io.Serializable;
 
 import java.util.Arrays;
 
-import com.google.common.base.Preconditions;
+import org.apache.apex.malhar.lib.appdata.schemas.Fields;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 
-import com.datatorrent.lib.appdata.schemas.Fields;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
+import com.google.common.base.Preconditions;
 
 /**
  * {@link GPOMutable} is an object which stores primitive fields.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOType.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOType.java
index 2e202b4..856b845 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOType.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOType.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.util.List;
 import java.util.Map;
@@ -25,36 +25,35 @@
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
 
+import org.apache.apex.malhar.lib.appdata.schemas.ResultFormatter;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterBoolean;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterByte;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterChar;
 import org.apache.commons.lang3.mutable.MutableInt;
 
-import com.datatorrent.lib.appdata.schemas.ResultFormatter;
-import com.datatorrent.lib.appdata.schemas.Type;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.GetterBoolean;
-import com.datatorrent.lib.util.PojoUtils.GetterByte;
-import com.datatorrent.lib.util.PojoUtils.GetterChar;
-
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.createGetters;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.createGettersObject;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.createGettersString;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.deserializeBoolean;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.deserializeByte;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.deserializeChar;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.deserializeDouble;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.deserializeFloat;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.deserializeInt;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.deserializeLong;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.deserializeShort;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.deserializeString;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.serializeBoolean;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.serializeByte;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.serializeChar;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.serializeDouble;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.serializeFloat;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.serializeInt;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.serializeLong;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.serializeShort;
-import static com.datatorrent.lib.appdata.gpo.GPOUtils.serializeString;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.createGetters;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.createGettersObject;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.createGettersString;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.deserializeBoolean;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.deserializeByte;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.deserializeChar;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.deserializeDouble;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.deserializeFloat;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.deserializeInt;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.deserializeLong;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.deserializeShort;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.deserializeString;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.serializeBoolean;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.serializeByte;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.serializeChar;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.serializeDouble;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.serializeFloat;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.serializeInt;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.serializeLong;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.serializeShort;
+import static org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.serializeString;
 
 /**
  * This is a helper class that reduces the need for switch statements in may utility method in {@link GPOUtils}.
@@ -121,7 +120,7 @@
   public abstract void setFieldFromJSON(GPOMutable gpo, String field, JSONArray jo, int index);
 
   public abstract void serializeJSONObject(JSONObject jo, GPOMutable gpo, String field, ResultFormatter resultFormatter)
-      throws JSONException;
+    throws JSONException;
 
   public abstract void serialize(GPOMutable gpo, String field, byte[] sbytes, MutableInt offset);
 
@@ -158,7 +157,7 @@
 
     @Override
     public void serializeJSONObject(JSONObject jo, GPOMutable gpo, String field, ResultFormatter resultFormatter)
-        throws JSONException
+      throws JSONException
     {
       jo.put(field, gpo.getFieldBool(field));
     }
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOUtils.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOUtils.java
index c866918..81724c9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOUtils.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/GPOUtils.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.io.Serializable;
 import java.lang.reflect.Array;
@@ -30,27 +30,26 @@
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
 
+import org.apache.apex.malhar.lib.appdata.schemas.Fields;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.ResultFormatter;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterBoolean;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterByte;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterChar;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterDouble;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterFloat;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterInt;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterLong;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterShort;
 import org.apache.commons.lang3.mutable.MutableInt;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
-import com.datatorrent.lib.appdata.schemas.Fields;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.ResultFormatter;
-import com.datatorrent.lib.appdata.schemas.Type;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
-import com.datatorrent.lib.util.PojoUtils.GetterBoolean;
-import com.datatorrent.lib.util.PojoUtils.GetterByte;
-import com.datatorrent.lib.util.PojoUtils.GetterChar;
-import com.datatorrent.lib.util.PojoUtils.GetterDouble;
-import com.datatorrent.lib.util.PojoUtils.GetterFloat;
-import com.datatorrent.lib.util.PojoUtils.GetterInt;
-import com.datatorrent.lib.util.PojoUtils.GetterLong;
-import com.datatorrent.lib.util.PojoUtils.GetterShort;
-
 /**
  * This class holds utility methods for serializing and deserializing {@link GPOMutable} objects to/from bytes and JSON.
  * There are also utility methods for converting POJOs into GPOMutable objects.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/Serde.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/Serde.java
index d4fa73b..59c886c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/Serde.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/Serde.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import org.apache.commons.lang3.mutable.MutableInt;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeFieldsDescriptor.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeFieldsDescriptor.java
index 521cea2..693d528 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeFieldsDescriptor.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeFieldsDescriptor.java
@@ -16,17 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.commons.lang3.mutable.MutableInt;
 
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
-
 /**
  * @since 3.1.0
  */
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListGPOMutable.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListGPOMutable.java
index 949902b..8ea9ad2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListGPOMutable.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListGPOMutable.java
@@ -16,17 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
 import org.apache.commons.lang3.mutable.MutableInt;
 
 import com.google.common.collect.Lists;
 
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-
 /**
  * @since 3.1.0
  */
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListPrimitive.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListPrimitive.java
index 2f236c7..0574e94 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListPrimitive.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListPrimitive.java
@@ -16,16 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.util.List;
 
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.commons.lang3.mutable.MutableInt;
 
 import com.google.common.collect.Lists;
 
-import com.datatorrent.lib.appdata.schemas.Type;
-
 /**
  * @since 3.1.0
  */
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListString.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListString.java
index d2dffe1..4093b62 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListString.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListString.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.util.List;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeMapPrimitive.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeMapPrimitive.java
index 8c8b83a..6f4fe1f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeMapPrimitive.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeMapPrimitive.java
@@ -16,16 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.commons.lang3.mutable.MutableInt;
 
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.appdata.schemas.Type;
-
 /**
  * TODO: this class can move to Malhar. put in Megh for implementing TOP/BOTTOM dimension computation.
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeObjectPayloadFix.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeObjectPayloadFix.java
index 70e6b7c..67cfb49 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeObjectPayloadFix.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeObjectPayloadFix.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 /**
  * @since 3.1.0
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/package-info.java
index 3218464..bae708a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.appdata;
+package org.apache.apex.malhar.lib.appdata;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/AbstractWindowEndQueueManager.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/AbstractWindowEndQueueManager.java
index b13e2d7..e903db0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/AbstractWindowEndQueueManager.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/AbstractWindowEndQueueManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -24,12 +24,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.QueueUtils.ConditionBarrier;
+import org.apache.apex.malhar.lib.appdata.query.QueueList.QueueListNode;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.appdata.QueueUtils.ConditionBarrier;
-import com.datatorrent.lib.appdata.query.QueueList.QueueListNode;
 
 /**
  * This is an abstract implementation of a QueueManager which works in the following way.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/AppDataWindowEndQueueManager.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/AppDataWindowEndQueueManager.java
index dac3fd3..4b26d16 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/AppDataWindowEndQueueManager.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/AppDataWindowEndQueueManager.java
@@ -16,17 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.appdata.query.QueueList.QueueListNode;
+import org.apache.apex.malhar.lib.appdata.schemas.Query;
 import org.apache.commons.lang3.mutable.MutableLong;
 
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.appdata.query.QueueList.QueueListNode;
-import com.datatorrent.lib.appdata.schemas.Query;
-
 /**
  * This {@link QueueManager} behaves like {@link WindowEndQueueManager} except that if another query is added to the queue with
  * the same query id as an existing query in the queue, the existing query is replaced with the new query.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryBundle.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryBundle.java
index 2f8043c..eafbf5b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryBundle.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryBundle.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 /**
  * This is a container object to be used by Queue Managers. It is a container for a query, the query's meta data,
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryExecutor.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryExecutor.java
index 41b03d5..764b1a6 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryExecutor.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryExecutor.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 /**
  * This is an interface for a Query Executor which is responsible for converting a query into a result
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerAsynchronous.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerAsynchronous.java
index f20db7d..d93b720 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerAsynchronous.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerAsynchronous.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import java.util.concurrent.Callable;
 import java.util.concurrent.ConcurrentLinkedQueue;
@@ -29,6 +29,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageSerializerFactory;
+import org.apache.apex.malhar.lib.appdata.schemas.Result;
+
 import com.google.common.annotations.VisibleForTesting;
 import com.google.common.base.Preconditions;
 
@@ -37,8 +40,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator.IdleTimeHandler;
 import com.datatorrent.common.util.NameableThreadFactory;
-import com.datatorrent.lib.appdata.query.serde.MessageSerializerFactory;
-import com.datatorrent.lib.appdata.schemas.Result;
 
 /**
  * @since 3.1.0
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerSynchronous.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerSynchronous.java
index a349a52..2e3ce99 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerSynchronous.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerSynchronous.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import com.google.common.base.Preconditions;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueueList.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueueList.java
index 386d303..3edb85a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueueList.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueueList.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import com.google.common.base.Preconditions;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueueManager.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueueManager.java
index 3cdfee3..4741cf6 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueueManager.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/QueueManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import com.datatorrent.api.Component;
 import com.datatorrent.api.Context.OperatorContext;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/SimpleDoneQueueManager.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/SimpleDoneQueueManager.java
index 88ee363..b1ae016 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/SimpleDoneQueueManager.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/SimpleDoneQueueManager.java
@@ -16,14 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import java.util.concurrent.Semaphore;
 
+import org.apache.apex.malhar.lib.appdata.query.QueueList.QueueListNode;
 import org.apache.commons.lang3.mutable.MutableBoolean;
 
-import com.datatorrent.lib.appdata.query.QueueList.QueueListNode;
-
 /**
  * This is simple queue whose queue context is a {@link MutableBoolean} which determines whether or not to keep the query in the queue. If the
  * queue context is true, then the query is remove, if the queue context is false, then the query stays in the queue.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/SimpleQueueManager.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/SimpleQueueManager.java
index 7c44949..5270dbe 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/SimpleQueueManager.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/SimpleQueueManager.java
@@ -16,13 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import java.util.LinkedList;
 import java.util.concurrent.Semaphore;
 
+import org.apache.apex.malhar.lib.appdata.QueueUtils.ConditionBarrier;
+
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.appdata.QueueUtils.ConditionBarrier;
 
 /**
  * This {@link QueueManager} functions like a standard {@link QueueManager}. Queries can be enqueued and when they are dequeued they are
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/WindowBoundedService.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/WindowBoundedService.java
index 4d631c3..cda5f1f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/WindowBoundedService.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/WindowBoundedService.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import java.util.concurrent.Callable;
 import java.util.concurrent.ExecutorService;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/WindowEndQueueManager.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/WindowEndQueueManager.java
index 48ad333..f649980 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/WindowEndQueueManager.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/WindowEndQueueManager.java
@@ -16,12 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
+import org.apache.apex.malhar.lib.appdata.query.QueueList.QueueListNode;
 import org.apache.commons.lang3.mutable.MutableLong;
 
-import com.datatorrent.lib.appdata.query.QueueList.QueueListNode;
-
 /**
  * The WindowEndQueueManager keeps a countdown representing the number of application windows a query should stay alive for. If
  * a query's countdown reaches 0 it is removed from the queue.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/CustomMessageDeserializer.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/CustomMessageDeserializer.java
index 319dbf3..da07300 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/CustomMessageDeserializer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/CustomMessageDeserializer.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import java.io.IOException;
 
-import com.datatorrent.lib.appdata.schemas.Message;
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
 
 /**
  * This is an interface for a message deserializer. Classes implementing this interface should have a public
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/CustomMessageSerializer.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/CustomMessageSerializer.java
index cdad772..b1f9709 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/CustomMessageSerializer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/CustomMessageSerializer.java
@@ -16,10 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
-import com.datatorrent.lib.appdata.schemas.Message;
-import com.datatorrent.lib.appdata.schemas.ResultFormatter;
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
+import org.apache.apex.malhar.lib.appdata.schemas.ResultFormatter;
 
 /**
  * This interface defines a Message serializer, which will be used to convert a result to JSON. Classes
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/CustomMessageValidator.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/CustomMessageValidator.java
index d937565..843f943 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/CustomMessageValidator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/CustomMessageValidator.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
-import com.datatorrent.lib.appdata.schemas.Message;
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
 
 /**
  * This interface defines a validator which validates the state of deserialized messages. Classes
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/DataQuerySnapshotDeserializer.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/DataQuerySnapshotDeserializer.java
index 2e51f9c..73b6a3e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/DataQuerySnapshotDeserializer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/DataQuerySnapshotDeserializer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import java.io.IOException;
 import java.util.Map;
@@ -27,12 +27,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.Sets;
+import org.apache.apex.malhar.lib.appdata.schemas.DataQuerySnapshot;
+import org.apache.apex.malhar.lib.appdata.schemas.Fields;
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
 
-import com.datatorrent.lib.appdata.schemas.DataQuerySnapshot;
-import com.datatorrent.lib.appdata.schemas.Fields;
-import com.datatorrent.lib.appdata.schemas.Message;
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
+import com.google.common.collect.Sets;
 
 /**
  * This class is a deserializer for {@link DataQuerySnapshot} objects.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/DataQuerySnapshotValidator.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/DataQuerySnapshotValidator.java
index 5805dae..5e02348 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/DataQuerySnapshotValidator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/DataQuerySnapshotValidator.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import java.util.Set;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.appdata.schemas.DataQuerySnapshot;
-import com.datatorrent.lib.appdata.schemas.Fields;
-import com.datatorrent.lib.appdata.schemas.Message;
-import com.datatorrent.lib.appdata.schemas.SchemaRegistry;
-import com.datatorrent.lib.appdata.schemas.SnapshotSchema;
+import org.apache.apex.malhar.lib.appdata.schemas.DataQuerySnapshot;
+import org.apache.apex.malhar.lib.appdata.schemas.Fields;
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaRegistry;
+import org.apache.apex.malhar.lib.appdata.schemas.SnapshotSchema;
 
 /**
  * This class is a validator for {@link DataQuerySnapshot} objects.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/DataResultSnapshotSerializer.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/DataResultSnapshotSerializer.java
index 0bfccf8..7f3637d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/DataResultSnapshotSerializer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/DataResultSnapshotSerializer.java
@@ -16,20 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.gpo.GPOUtils;
-import com.datatorrent.lib.appdata.schemas.DataQuerySnapshot;
-import com.datatorrent.lib.appdata.schemas.DataResultSnapshot;
-import com.datatorrent.lib.appdata.schemas.Message;
-import com.datatorrent.lib.appdata.schemas.Result;
-import com.datatorrent.lib.appdata.schemas.ResultFormatter;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOUtils;
+import org.apache.apex.malhar.lib.appdata.schemas.DataQuerySnapshot;
+import org.apache.apex.malhar.lib.appdata.schemas.DataResultSnapshot;
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
+import org.apache.apex.malhar.lib.appdata.schemas.Result;
+import org.apache.apex.malhar.lib.appdata.schemas.ResultFormatter;
 
 /**
  * This class is used to serialize {@link DataResultSnapshot} objects.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageDeserializerFactory.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageDeserializerFactory.java
index 0feeba0..fa20eec 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageDeserializerFactory.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageDeserializerFactory.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import java.io.IOException;
 import java.lang.annotation.Annotation;
@@ -28,12 +28,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
-import com.datatorrent.lib.appdata.schemas.Message;
-
 /**
  * This is a utility class which simplifies deserializing AppData messages. The factory is configured by specifying the {@link Message} Classes
  * that messages will be deserialized into. The {@link MessageDeserializerFactory} knows the correct type of a Message, its deserializer, and its
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageDeserializerInfo.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageDeserializerInfo.java
index 54a25a7..b5636da 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageDeserializerInfo.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageDeserializerInfo.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import java.lang.annotation.Documented;
 import java.lang.annotation.ElementType;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageSerializerFactory.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageSerializerFactory.java
index 014824a..34d0316 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageSerializerFactory.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageSerializerFactory.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import java.lang.annotation.Annotation;
 import java.util.Map;
@@ -24,12 +24,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.schemas.Result;
+import org.apache.apex.malhar.lib.appdata.schemas.ResultFormatter;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.appdata.schemas.Result;
-import com.datatorrent.lib.appdata.schemas.ResultFormatter;
-
 /**
  * This class simplifies serializing Messages. This is done by placing an annotation on the Message
  * class which specifies the serializer for the class. Also another annotation is placed on the Message
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageSerializerInfo.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageSerializerInfo.java
index 2cd4a4d..d554783 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageSerializerInfo.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageSerializerInfo.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import java.lang.annotation.Documented;
 import java.lang.annotation.ElementType;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageType.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageType.java
index 5359ee5..55ed587 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageType.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageType.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import java.lang.annotation.Documented;
 import java.lang.annotation.ElementType;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageValidatorInfo.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageValidatorInfo.java
index da7ad2a..4250123 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageValidatorInfo.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageValidatorInfo.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import java.lang.annotation.Documented;
 import java.lang.annotation.ElementType;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SchemaQueryDeserializer.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SchemaQueryDeserializer.java
index 970c2ee..e98753b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SchemaQueryDeserializer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SchemaQueryDeserializer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import java.io.IOException;
 
@@ -26,10 +26,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.appdata.schemas.Message;
-import com.datatorrent.lib.appdata.schemas.Query;
-import com.datatorrent.lib.appdata.schemas.SchemaQuery;
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
+import org.apache.apex.malhar.lib.appdata.schemas.Query;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaQuery;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
 
 /**
  * @since 3.1.0
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataDeserializer.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataDeserializer.java
index 348993f..f2d84c5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataDeserializer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataDeserializer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import java.io.IOException;
 
@@ -24,7 +24,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.appdata.schemas.Message;
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
 
 /**
  * This is a simple Message deserializer which deserializes messages using Jackson.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataSerializer.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataSerializer.java
index 0499486..47eb44c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataSerializer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataSerializer.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import java.io.IOException;
 
 import org.codehaus.jackson.map.ObjectMapper;
 
-import com.datatorrent.lib.appdata.schemas.Message;
-import com.datatorrent.lib.appdata.schemas.ResultFormatter;
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
+import org.apache.apex.malhar.lib.appdata.schemas.ResultFormatter;
 
 /**
  * This is a simple message serializer, which serializes messages using Jackson.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataValidator.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataValidator.java
index 7b50970..7e2dde6 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataValidator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataValidator.java
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import javax.validation.Validation;
 import javax.validation.Validator;
 import javax.validation.ValidatorFactory;
 
-import com.datatorrent.lib.appdata.schemas.Message;
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
 
 /**
  * This is a Message validator which validates deserialized Messages using java validation.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/CustomTimeBucket.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/CustomTimeBucket.java
index 8f45862..50b7402 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/CustomTimeBucket.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/CustomTimeBucket.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.io.Serializable;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DataQuerySnapshot.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DataQuerySnapshot.java
index b5de6f3..f424b30 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DataQuerySnapshot.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DataQuerySnapshot.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.Map;
 
-import com.google.common.base.Preconditions;
+import org.apache.apex.malhar.lib.appdata.query.serde.DataQuerySnapshotDeserializer;
+import org.apache.apex.malhar.lib.appdata.query.serde.DataQuerySnapshotValidator;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageDeserializerInfo;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageType;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageValidatorInfo;
 
-import com.datatorrent.lib.appdata.query.serde.DataQuerySnapshotDeserializer;
-import com.datatorrent.lib.appdata.query.serde.DataQuerySnapshotValidator;
-import com.datatorrent.lib.appdata.query.serde.MessageDeserializerInfo;
-import com.datatorrent.lib.appdata.query.serde.MessageType;
-import com.datatorrent.lib.appdata.query.serde.MessageValidatorInfo;
+import com.google.common.base.Preconditions;
 
 /**
  * This object represents queries issued against the {@link SnapshotSchema}.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DataResultSnapshot.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DataResultSnapshot.java
index 47d068c..f0b6670 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DataResultSnapshot.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DataResultSnapshot.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.List;
 
-import com.google.common.base.Preconditions;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.query.serde.DataResultSnapshotSerializer;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageSerializerInfo;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageType;
 
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.query.serde.DataResultSnapshotSerializer;
-import com.datatorrent.lib.appdata.query.serde.MessageSerializerInfo;
-import com.datatorrent.lib.appdata.query.serde.MessageType;
+import com.google.common.base.Preconditions;
 
 /**
  * This class represents the result sent in response to a {@link DataQuerySnapshot}.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalConfigurationSchema.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalConfigurationSchema.java
index 59625f9..37eb5f6 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalConfigurationSchema.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalConfigurationSchema.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -60,7 +60,7 @@
  * <p>
  * This is a configuration schema which defines the configuration for any dimensions computation operation.
  * Users of this configuration schema include the
- * {@link com.datatorrent.lib.dimensions.AbstractDimensionsComputationFlexibleSingleSchema}
+ * {@link org.apache.apex.malhar.lib.dimensions.AbstractDimensionsComputationFlexibleSingleSchema}
  * operator as well as the {@link DimensionalSchema}, which represents dimensions information for App Data. The
  * schema is created by defining a configuration JSON schema like the example provided below.
  * The information from the JSON schema, is extracted and used to create metadata which is required by
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalSchema.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalSchema.java
index 4fef2df..9590079 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalSchema.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalSchema.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.Collections;
 import java.util.List;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Fields.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Fields.java
index b2d5ea9..11ac6e1 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Fields.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Fields.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.io.Serializable;
 import java.util.Collection;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/FieldsDescriptor.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/FieldsDescriptor.java
index ceed34f..ac1c4c0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/FieldsDescriptor.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/FieldsDescriptor.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.io.Serializable;
 import java.util.ArrayList;
@@ -29,14 +29,14 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.gpo.Serde;
+import org.apache.apex.malhar.lib.appdata.gpo.SerdeObjectPayloadFix;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
-import com.datatorrent.lib.appdata.gpo.Serde;
-import com.datatorrent.lib.appdata.gpo.SerdeObjectPayloadFix;
-
 import it.unimi.dsi.fastutil.objects.Object2IntLinkedOpenHashMap;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/JSONType.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/JSONType.java
index d09b7a7..6cd6f21 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/JSONType.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/JSONType.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 /**
  * This is an enum type which contains entries for each unique JSONType.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Message.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Message.java
index fcb7fa3..eec24f0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Message.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Message.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import com.google.common.base.Preconditions;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/QRBase.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/QRBase.java
index cbeaf2e..61c2715 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/QRBase.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/QRBase.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import javax.validation.constraints.NotNull;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Query.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Query.java
index fc88886..69b1aba 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Query.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Query.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.Collections;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Result.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Result.java
index ea08ce0..f40ded0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Result.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Result.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import com.google.common.base.Preconditions;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/ResultFormatter.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/ResultFormatter.java
index 1cd6712..d2c4e7d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/ResultFormatter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/ResultFormatter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.io.Serializable;
 import java.text.DecimalFormat;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Schema.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Schema.java
index 4460b51..3e3e042 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Schema.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Schema.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.Map;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaQuery.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaQuery.java
index a3fd69d..12abbf7 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaQuery.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaQuery.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.Map;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.appdata.query.serde.MessageDeserializerInfo;
-import com.datatorrent.lib.appdata.query.serde.MessageType;
-import com.datatorrent.lib.appdata.query.serde.MessageValidatorInfo;
-import com.datatorrent.lib.appdata.query.serde.SchemaQueryDeserializer;
-import com.datatorrent.lib.appdata.query.serde.SimpleDataValidator;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageDeserializerInfo;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageType;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageValidatorInfo;
+import org.apache.apex.malhar.lib.appdata.query.serde.SchemaQueryDeserializer;
+import org.apache.apex.malhar.lib.appdata.query.serde.SimpleDataValidator;
 
 /**
  * This class represents a schema query.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistry.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistry.java
index 374e16c..7d475e5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistry.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistry.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.Map;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistryMultiple.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistryMultiple.java
index eaabcbf..9fc7164 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistryMultiple.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistryMultiple.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.io.Serializable;
 import java.util.Collections;
@@ -24,9 +24,9 @@
 import java.util.List;
 import java.util.Map;
 
-import com.google.common.base.Preconditions;
+import org.apache.apex.malhar.lib.appdata.datastructs.DimensionalTable;
 
-import com.datatorrent.lib.appdata.datastructs.DimensionalTable;
+import com.google.common.base.Preconditions;
 
 /**
  * This class is a schema registry which can hold multiple schemas. It is intended to be
@@ -64,7 +64,7 @@
    * The names of all the schema keys for all schemas in this registry.
    * @param schemaKeys The names of all the schema keys for all schemas in this registry.
    * @param schemaComparator The comparator used to order the schemas returned in the {@link SchemaResult} produced
-   * by {@link SchemaRegistryMultiple#getSchemaResult(com.datatorrent.lib.appdata.schemas.SchemaQuery)}
+   * by {@link SchemaRegistryMultiple#getSchemaResult(org.apache.apex.malhar.lib.appdata.schemas.SchemaQuery)}
    */
   public SchemaRegistryMultiple(List<String> schemaKeys, Comparator<Schema> schemaComparator)
   {
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistrySingle.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistrySingle.java
index 12c5434..cd42c14 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistrySingle.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistrySingle.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.io.Serializable;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaResult.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaResult.java
index b7cc6bc..7153dc2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaResult.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaResult.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.List;
 
-import com.google.common.base.Preconditions;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageSerializerInfo;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageType;
 
-import com.datatorrent.lib.appdata.query.serde.MessageSerializerInfo;
-import com.datatorrent.lib.appdata.query.serde.MessageType;
+import com.google.common.base.Preconditions;
 
 /**
  * This class represents a schema result, which will be serialized into JSON and sent
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaResultSerializer.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaResultSerializer.java
index d9fd92c..914866f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaResultSerializer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaResultSerializer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONException;
@@ -24,7 +24,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.appdata.query.serde.CustomMessageSerializer;
+import org.apache.apex.malhar.lib.appdata.query.serde.CustomMessageSerializer;
 
 /**
  * This is the serializer class for {@link SchemaResult} objects.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaUtils.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaUtils.java
index b628662..94552ef 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaUtils.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaUtils.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SnapshotSchema.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SnapshotSchema.java
index dd6aa64..0f0eba7 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SnapshotSchema.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/SnapshotSchema.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.Collections;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/TimeBucket.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/TimeBucket.java
index 5570ca0..aef7492 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/TimeBucket.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/TimeBucket.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.Collections;
 import java.util.Comparator;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Type.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Type.java
index 5e79466..fcb2355 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Type.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/schemas/Type.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.io.Serializable;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/snapshot/AbstractAppDataSnapshotServer.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/snapshot/AbstractAppDataSnapshotServer.java
index 88d89c4..5648fb6 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/snapshot/AbstractAppDataSnapshotServer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/snapshot/AbstractAppDataSnapshotServer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.snapshot;
+package org.apache.apex.malhar.lib.appdata.snapshot;
 
 import java.io.IOException;
 import java.util.List;
@@ -29,6 +29,23 @@
 import org.slf4j.LoggerFactory;
 
 import org.apache.apex.malhar.lib.appdata.AbstractAppDataServer;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.query.AppDataWindowEndQueueManager;
+import org.apache.apex.malhar.lib.appdata.query.QueryExecutor;
+import org.apache.apex.malhar.lib.appdata.query.QueryManagerSynchronous;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageDeserializerFactory;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageSerializerFactory;
+import org.apache.apex.malhar.lib.appdata.schemas.DataQuerySnapshot;
+import org.apache.apex.malhar.lib.appdata.schemas.DataResultSnapshot;
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
+import org.apache.apex.malhar.lib.appdata.schemas.Query;
+import org.apache.apex.malhar.lib.appdata.schemas.Result;
+import org.apache.apex.malhar.lib.appdata.schemas.ResultFormatter;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaQuery;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaRegistry;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaRegistrySingle;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaResult;
+import org.apache.apex.malhar.lib.appdata.schemas.SnapshotSchema;
 import org.apache.commons.lang3.mutable.MutableLong;
 
 import com.google.common.base.Preconditions;
@@ -40,23 +57,6 @@
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.common.experimental.AppData;
 import com.datatorrent.common.experimental.AppData.EmbeddableQueryInfoProvider;
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.query.AppDataWindowEndQueueManager;
-import com.datatorrent.lib.appdata.query.QueryExecutor;
-import com.datatorrent.lib.appdata.query.QueryManagerSynchronous;
-import com.datatorrent.lib.appdata.query.serde.MessageDeserializerFactory;
-import com.datatorrent.lib.appdata.query.serde.MessageSerializerFactory;
-import com.datatorrent.lib.appdata.schemas.DataQuerySnapshot;
-import com.datatorrent.lib.appdata.schemas.DataResultSnapshot;
-import com.datatorrent.lib.appdata.schemas.Message;
-import com.datatorrent.lib.appdata.schemas.Query;
-import com.datatorrent.lib.appdata.schemas.Result;
-import com.datatorrent.lib.appdata.schemas.ResultFormatter;
-import com.datatorrent.lib.appdata.schemas.SchemaQuery;
-import com.datatorrent.lib.appdata.schemas.SchemaRegistry;
-import com.datatorrent.lib.appdata.schemas.SchemaRegistrySingle;
-import com.datatorrent.lib.appdata.schemas.SchemaResult;
-import com.datatorrent.lib.appdata.schemas.SnapshotSchema;
 
 /**
  * This is an abstract operator for the {@link SnapshotSchema}. This operator is designed to accept input data
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerMap.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerMap.java
index 0fc4200..0fdfca2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerMap.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.snapshot;
+package org.apache.apex.malhar.lib.appdata.snapshot;
 
 import java.util.List;
 import java.util.Map;
@@ -26,12 +26,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-
 /**
  * This operator accepts a list of Map&lt;String,Object&gt; objects, and serves the data under the {@link SnapshotSchema}.
  * Each Map represents a row in the table, and the full list of maps represents a table.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerPOJO.java b/library/src/main/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerPOJO.java
index ab3c760..84564c9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerPOJO.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerPOJO.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.snapshot;
+package org.apache.apex.malhar.lib.appdata.snapshot;
 
 import java.util.Map;
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOGetters;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOUtils;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
 import com.google.common.base.Preconditions;
-import com.datatorrent.lib.appdata.gpo.GPOGetters;
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.gpo.GPOUtils;
 
 /**
  * This operator accepts a list of POJOs, and serves the data under the {@link SnapshotSchema}.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/bandwidth/BandwidthLimitingOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/bandwidth/BandwidthLimitingOperator.java
index 79c61af..20f6398 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/bandwidth/BandwidthLimitingOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/bandwidth/BandwidthLimitingOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.bandwidth;
+package org.apache.apex.malhar.lib.bandwidth;
 
 import com.datatorrent.api.Operator;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/bandwidth/BandwidthManager.java b/library/src/main/java/org/apache/apex/malhar/lib/bandwidth/BandwidthManager.java
index 54bb4d5..c8393d9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/bandwidth/BandwidthManager.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/bandwidth/BandwidthManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.bandwidth;
+package org.apache.apex.malhar.lib.bandwidth;
 
 import java.util.concurrent.Executors;
 import java.util.concurrent.ScheduledExecutorService;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/bandwidth/BandwidthPartitioner.java b/library/src/main/java/org/apache/apex/malhar/lib/bandwidth/BandwidthPartitioner.java
index 9b9eb8d..f77b7e8 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/bandwidth/BandwidthPartitioner.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/bandwidth/BandwidthPartitioner.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.bandwidth;
+package org.apache.apex.malhar.lib.bandwidth;
 
 import java.util.Collection;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/codec/JavaSerializationStreamCodec.java b/library/src/main/java/org/apache/apex/malhar/lib/codec/JavaSerializationStreamCodec.java
index 1096a72..6675153 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/codec/JavaSerializationStreamCodec.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/codec/JavaSerializationStreamCodec.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.codec;
+package org.apache.apex.malhar.lib.codec;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/codec/KryoJdkContainer.java b/library/src/main/java/org/apache/apex/malhar/lib/codec/KryoJdkContainer.java
index a5bd5e9..34364d0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/codec/KryoJdkContainer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/codec/KryoJdkContainer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.codec;
+package org.apache.apex.malhar.lib.codec;
 
 import java.io.Serializable;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/codec/KryoSerializableStreamCodec.java b/library/src/main/java/org/apache/apex/malhar/lib/codec/KryoSerializableStreamCodec.java
index 99e0a6e..ef82bf4 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/codec/KryoSerializableStreamCodec.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/codec/KryoSerializableStreamCodec.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.codec;
+package org.apache.apex.malhar.lib.codec;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/codec/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/codec/package-info.java
index d876e3f..aab43b6 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/codec/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/codec/package-info.java
@@ -20,5 +20,5 @@
  *  Shared codec implementations.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.codec;
+package org.apache.apex.malhar.lib.codec;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/converter/ByteArrayToStringConverterOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/converter/ByteArrayToStringConverterOperator.java
index 33e5bf6..42745f0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/converter/ByteArrayToStringConverterOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/converter/ByteArrayToStringConverterOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.converter;
+package org.apache.apex.malhar.lib.converter;
 
 import java.nio.charset.Charset;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/converter/Converter.java b/library/src/main/java/org/apache/apex/malhar/lib/converter/Converter.java
index 3799cd2..9922696 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/converter/Converter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/converter/Converter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.converter;
+package org.apache.apex.malhar.lib.converter;
 
 import org.apache.hadoop.classification.InterfaceStability;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/converter/MapToKeyHashValuePairConverter.java b/library/src/main/java/org/apache/apex/malhar/lib/converter/MapToKeyHashValuePairConverter.java
index 52d3273..46c4483 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/converter/MapToKeyHashValuePairConverter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/converter/MapToKeyHashValuePairConverter.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.converter;
+package org.apache.apex.malhar.lib.converter;
 
 import java.util.Map;
 import java.util.Map.Entry;
 
+import org.apache.apex.malhar.lib.util.KeyHashValPair;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyHashValPair;
 
 /**
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/converter/MapToKeyValuePairConverter.java b/library/src/main/java/org/apache/apex/malhar/lib/converter/MapToKeyValuePairConverter.java
index efab4a5..69a1b7f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/converter/MapToKeyValuePairConverter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/converter/MapToKeyValuePairConverter.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.converter;
+package org.apache.apex.malhar.lib.converter;
 
 import java.util.Map;
 import java.util.Map.Entry;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/converter/StringValueToNumberConverterForMap.java b/library/src/main/java/org/apache/apex/malhar/lib/converter/StringValueToNumberConverterForMap.java
index e39259e..f619f15 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/converter/StringValueToNumberConverterForMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/converter/StringValueToNumberConverterForMap.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.converter;
+package org.apache.apex.malhar.lib.converter;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/converter/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/converter/package-info.java
index 77429e9..69dc366 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/converter/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/converter/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.converter;
+package org.apache.apex.malhar.lib.converter;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/counters/BasicCounters.java b/library/src/main/java/org/apache/apex/malhar/lib/counters/BasicCounters.java
index 255ec03..c650eb7 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/counters/BasicCounters.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/counters/BasicCounters.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.counters;
+package org.apache.apex.malhar.lib.counters;
 
 import java.io.IOException;
 import java.io.Serializable;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/counters/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/counters/package-info.java
index c8ea286..87fe0b2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/counters/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/counters/package-info.java
@@ -20,4 +20,4 @@
  * Basic counters and aggregates implementations.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.counters;
+package org.apache.apex.malhar.lib.counters;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractAggregateTransactionableKeyValueStoreOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractAggregateTransactionableKeyValueStoreOutputOperator.java
index 5225329..fab117c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractAggregateTransactionableKeyValueStoreOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractAggregateTransactionableKeyValueStoreOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 /**
  * This is the base implementation for an aggregate output operator,
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractAggregateTransactionableStoreOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractAggregateTransactionableStoreOutputOperator.java
index f17dfb0..f838e64 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractAggregateTransactionableStoreOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractAggregateTransactionableStoreOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 /**
  * This is the base implementation for an aggregate output operator,
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractBatchTransactionableStoreOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractBatchTransactionableStoreOutputOperator.java
index fbb924a..00bfa74 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractBatchTransactionableStoreOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractBatchTransactionableStoreOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 import java.util.Collection;
 import com.google.common.collect.Lists;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractKeyValueStoreInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractKeyValueStoreInputOperator.java
index f3f8c63..affbdbb 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractKeyValueStoreInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractKeyValueStoreInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractPassThruTransactionableKeyValueStoreOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractPassThruTransactionableKeyValueStoreOutputOperator.java
index fe828dc..86463d7 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractPassThruTransactionableKeyValueStoreOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractPassThruTransactionableKeyValueStoreOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 /**
  * This is the base implementation for a pass-through output adapter of a transactional key value store.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractPassThruTransactionableStoreOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractPassThruTransactionableStoreOutputOperator.java
index d21bd01..0800cce 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractPassThruTransactionableStoreOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractPassThruTransactionableStoreOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 /**
  * This is the base implementation for a pass-through output adapter of a transactional store.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractStoreInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractStoreInputOperator.java
index 18e23f4..efb732f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractStoreInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractStoreInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 import java.io.IOException;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractStoreOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractStoreOutputOperator.java
index 2ef8d30..65db556 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractStoreOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractStoreOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 import java.io.IOException;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractTransactionableStoreOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractTransactionableStoreOutputOperator.java
index 037a8b2..8047bc8 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractTransactionableStoreOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/AbstractTransactionableStoreOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 import java.io.IOException;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/Connectable.java b/library/src/main/java/org/apache/apex/malhar/lib/db/Connectable.java
index f57763b..506ed46 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/Connectable.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/Connectable.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 import java.io.IOException;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/KeyValueStore.java b/library/src/main/java/org/apache/apex/malhar/lib/db/KeyValueStore.java
index 76759a4..4b545ca 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/KeyValueStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/KeyValueStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 import java.util.List;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/Transactionable.java b/library/src/main/java/org/apache/apex/malhar/lib/db/Transactionable.java
index bbb07e5..2ad0943 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/Transactionable.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/Transactionable.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 /**
  * This interface is for any service that provides transactional feature
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/TransactionableKeyValueStore.java b/library/src/main/java/org/apache/apex/malhar/lib/db/TransactionableKeyValueStore.java
index 3263b87..4e119b5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/TransactionableKeyValueStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/TransactionableKeyValueStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 /**
  * This interface is for a key value store that supports transactions
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/TransactionableStore.java b/library/src/main/java/org/apache/apex/malhar/lib/db/TransactionableStore.java
index 6078895..db2a2d0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/TransactionableStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/TransactionableStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 /**
  * This interface is for a store that supports transactions
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/cache/AbstractDBLookupCacheBackedOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/cache/AbstractDBLookupCacheBackedOperator.java
index 42e02d3..e780fb1 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/cache/AbstractDBLookupCacheBackedOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/cache/AbstractDBLookupCacheBackedOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.cache;
+package org.apache.apex.malhar.lib.db.cache;
 
 import java.io.IOException;
 
@@ -25,12 +25,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.Connectable;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
-import com.datatorrent.lib.db.Connectable;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * This is the base implementation of an operator that maintains a loading cache.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/cache/CacheManager.java b/library/src/main/java/org/apache/apex/malhar/lib/db/cache/CacheManager.java
index 869302b..f97816a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/cache/CacheManager.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/cache/CacheManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.cache;
+package org.apache.apex.malhar.lib.db.cache;
 
 import java.io.Closeable;
 import java.io.IOException;
@@ -36,13 +36,14 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.KeyValueStore;
+
 import com.google.common.base.Strings;
 import com.google.common.collect.Lists;
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Component;
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.db.KeyValueStore;
 
 /**
  * Manages primary and secondary stores.<br/>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/cache/CacheStore.java b/library/src/main/java/org/apache/apex/malhar/lib/db/cache/CacheStore.java
index c073aff..0279f67 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/cache/CacheStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/cache/CacheStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.cache;
+package org.apache.apex.malhar.lib.db.cache;
 
 import java.io.IOException;
 import java.util.List;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/cache/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/db/cache/package-info.java
index efdfef3..d849d4c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/cache/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/cache/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.db.cache;
+package org.apache.apex.malhar.lib.db.cache;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcInputOperator.java
index e63610f..bc04c61 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
@@ -25,9 +25,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.api.Context.OperatorContext;
+import org.apache.apex.malhar.lib.db.AbstractStoreInputOperator;
 
-import com.datatorrent.lib.db.AbstractStoreInputOperator;
+import com.datatorrent.api.Context.OperatorContext;
 
 /**
  * This is a base implementation of a JDBC input operator.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcNonTransactionableBatchOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcNonTransactionableBatchOutputOperator.java
index 7dee870..d57efde 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcNonTransactionableBatchOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcNonTransactionableBatchOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.SQLException;
 import java.util.List;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcNonTransactionableOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcNonTransactionableOutputOperator.java
index 3de0376..197c357 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcNonTransactionableOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcNonTransactionableOutputOperator.java
@@ -16,13 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
 
+import org.apache.apex.malhar.lib.db.AbstractStoreOutputOperator;
+
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.db.AbstractStoreOutputOperator;
 
 /**
  * This is a base implementation of a JDBC non transactionable output operator.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcPOJOOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcPOJOOutputOperator.java
index b4be480..e68a928 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcPOJOOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcPOJOOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.math.BigDecimal;
 import java.sql.Date;
@@ -34,21 +34,22 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterBoolean;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterDouble;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterFloat;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterInt;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterLong;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterShort;
+
 import com.google.common.collect.Lists;
 
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
-import com.datatorrent.lib.util.PojoUtils.GetterBoolean;
-import com.datatorrent.lib.util.PojoUtils.GetterDouble;
-import com.datatorrent.lib.util.PojoUtils.GetterFloat;
-import com.datatorrent.lib.util.PojoUtils.GetterInt;
-import com.datatorrent.lib.util.PojoUtils.GetterLong;
-import com.datatorrent.lib.util.PojoUtils.GetterShort;
 
 /**
  * <p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcPollInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcPollInputOperator.java
index 2042ac8..648477c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcPollInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcPollInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.io.IOException;
 import java.sql.PreparedStatement;
@@ -46,6 +46,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.AbstractStoreInputOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.commons.lang3.tuple.MutablePair;
@@ -61,9 +64,6 @@
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.Stateless;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.db.AbstractStoreInputOperator;
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.KryoCloneUtils;
 
 import static java.sql.ResultSet.CONCUR_READ_ONLY;
 import static java.sql.ResultSet.TYPE_FORWARD_ONLY;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcTransactionableOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcTransactionableOutputOperator.java
index df22e6f..ecad17b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcTransactionableOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/AbstractJdbcTransactionableOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.BatchUpdateException;
 import java.sql.PreparedStatement;
@@ -29,6 +29,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.AbstractPassThruTransactionableStoreOutputOperator;
+
 import com.google.common.collect.Lists;
 import com.datatorrent.api.AutoMetric;
 import com.datatorrent.api.Context;
@@ -36,7 +38,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.db.AbstractPassThruTransactionableStoreOutputOperator;
 
 /**
  * This is the base class implementation of a transactionable JDBC output operator.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JDBCDimensionalOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JDBCDimensionalOutputOperator.java
index 11fac44..1ea5a50 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JDBCDimensionalOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JDBCDimensionalOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.PreparedStatement;
 import java.sql.SQLException;
@@ -29,6 +29,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.schemas.DimensionalConfigurationSchema;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
+import org.apache.apex.malhar.lib.db.AbstractPassThruTransactionableStoreOutputOperator;
 import org.apache.apex.malhar.lib.dimensions.DimensionsDescriptor;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.Aggregate;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.EventKey;
@@ -39,11 +44,6 @@
 import com.google.common.collect.Maps;
 
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.schemas.DimensionalConfigurationSchema;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
-import com.datatorrent.lib.db.AbstractPassThruTransactionableStoreOutputOperator;
 
 import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JDBCLookupCacheBackedOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JDBCLookupCacheBackedOperator.java
index b6a66a3..df9baa2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JDBCLookupCacheBackedOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JDBCLookupCacheBackedOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -26,12 +26,12 @@
 import javax.annotation.Nonnull;
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.db.cache.AbstractDBLookupCacheBackedOperator;
+
 import com.google.common.collect.Lists;
 
 import com.datatorrent.api.Context;
 
-import com.datatorrent.lib.db.cache.AbstractDBLookupCacheBackedOperator;
-
 /**
  * This is the base implementation of an operator that maintains a loading cache.&nbsp;
  * The cache is kept in a database which is connected to via JDBC.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcFieldInfo.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcFieldInfo.java
index 596c108..cff3875 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcFieldInfo.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcFieldInfo.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
-import com.datatorrent.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo;
 
 /**
  * A {@link FieldInfo} object for Jdbc. <br/>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalStore.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalStore.java
index 89022a3..82674e4 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.SQLException;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJOInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJOInputOperator.java
index e587d85..ede7546 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJOInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJOInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.math.BigDecimal;
 import java.sql.Date;
@@ -38,6 +38,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -46,8 +49,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.PojoUtils;
 
 /**
  * A concrete input operator that reads from a database through the JDBC API.<br/>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJOInsertOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJOInsertOutputOperator.java
index 68daa8f..fe8b4a8 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJOInsertOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJOInsertOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.lang.reflect.Field;
 import java.sql.DatabaseMetaData;
@@ -29,10 +29,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.FieldInfo;
+
 import com.google.common.collect.Lists;
 
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.util.FieldInfo;
 
 /**
  * <p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJONonInsertOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJONonInsertOutputOperator.java
index 54d9dd8..cc185cd 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJONonInsertOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJONonInsertOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import javax.validation.constraints.NotNull;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJOPollInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJOPollInputOperator.java
index 9f2c3e3..ebc5f73 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJOPollInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPOJOPollInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.math.BigDecimal;
 import java.sql.Date;
@@ -37,6 +37,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcPOJOInputOperator.ActiveFieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
 import com.google.common.collect.Lists;
@@ -46,9 +49,6 @@
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.db.jdbc.JdbcPOJOInputOperator.ActiveFieldInfo;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.PojoUtils;
 
 /**
  * A concrete implementation for {@link AbstractJdbcPollInputOperator} to
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPollInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPollInputOperator.java
index eb72431..c4d32a1 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPollInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPollInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.ResultSet;
 import java.sql.SQLException;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcStore.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcStore.java
index ea0dd28..b1015cf 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
@@ -29,11 +29,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.Connectable;
+
 import com.google.common.base.CharMatcher;
 import com.google.common.base.Splitter;
 import com.google.common.collect.Iterables;
 
-import com.datatorrent.lib.db.Connectable;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcTransactionalStore.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcTransactionalStore.java
index 9bc18b0..b4b5b4a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcTransactionalStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/JdbcTransactionalStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.PreparedStatement;
 import java.sql.ResultSet;
@@ -27,7 +27,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.db.TransactionableStore;
+import org.apache.apex.malhar.lib.db.TransactionableStore;
 
 /**
  * <p>JdbcTransactionalStore class.</p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/package-info.java
index 724f788..a97fd0e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/jdbc/package-info.java
@@ -19,4 +19,4 @@
 /**
  * JDBC operators and utilities.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/db/package-info.java
index 60452e7..541125d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/package-info.java
@@ -20,4 +20,4 @@
  * Library of interface for database adapters
  */
 
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/redshift/RedshiftJdbcTransactionableOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/db/redshift/RedshiftJdbcTransactionableOutputOperator.java
index 1ab1893..66c117b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/redshift/RedshiftJdbcTransactionableOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/redshift/RedshiftJdbcTransactionableOutputOperator.java
@@ -29,6 +29,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.jdbc.AbstractJdbcTransactionableOutputOperator;
 import org.apache.apex.malhar.lib.fs.FSRecordCompactionOperator;
 import org.apache.hadoop.classification.InterfaceStability;
 
@@ -36,7 +37,6 @@
 
 import com.datatorrent.api.Context;
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.lib.db.jdbc.AbstractJdbcTransactionableOutputOperator;
 
 /**
  *  A concrete implementation of AbstractJdbcTransactionableOutputOperator for Redshift which takes FSRecordCompactionOperator.OutputMetaData.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/db/redshift/RedshiftOutputModule.java b/library/src/main/java/org/apache/apex/malhar/lib/db/redshift/RedshiftOutputModule.java
index 56b7f70..7f0b253 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/db/redshift/RedshiftOutputModule.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/db/redshift/RedshiftOutputModule.java
@@ -21,6 +21,7 @@
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Pattern;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
 import org.apache.apex.malhar.lib.fs.FSRecordCompactionOperator;
 import org.apache.apex.malhar.lib.fs.GenericFileOutputOperator;
 import org.apache.apex.malhar.lib.fs.s3.S3TupleOutputModule;
@@ -31,7 +32,6 @@
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Module;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
 
 import static org.apache.apex.malhar.lib.db.redshift.RedshiftJdbcTransactionableOutputOperator.DEFAULT_REDSHIFT_DELIMITER;
 import static org.apache.apex.malhar.lib.db.redshift.RedshiftOutputModule.READER_MODE.READ_FROM_S3;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dedup/AbstractDeduper.java b/library/src/main/java/org/apache/apex/malhar/lib/dedup/AbstractDeduper.java
index bf81fde..e255671 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dedup/AbstractDeduper.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dedup/AbstractDeduper.java
@@ -29,6 +29,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccessFSImpl;
 import org.apache.apex.malhar.lib.state.BucketedState;
 import org.apache.apex.malhar.lib.state.managed.AbstractManagedStateImpl;
 import org.apache.apex.malhar.lib.state.managed.ManagedTimeUnifiedStateImpl;
@@ -49,7 +50,6 @@
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.Operator.ActivationListener;
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.lib.fileaccess.FileAccessFSImpl;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dedup/BoundedDedupOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/dedup/BoundedDedupOperator.java
index 0552532..ff7df30 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dedup/BoundedDedupOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dedup/BoundedDedupOperator.java
@@ -25,7 +25,8 @@
 
 import org.apache.apex.malhar.lib.state.managed.ManagedTimeStateImpl;
 import org.apache.apex.malhar.lib.state.managed.MovingBoundaryTimeBucketAssigner;
-
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
 import com.datatorrent.api.Context;
@@ -34,8 +35,6 @@
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.StreamCodec;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dedup/DeduperStreamCodec.java b/library/src/main/java/org/apache/apex/malhar/lib/dedup/DeduperStreamCodec.java
index dc69cbd..4df16ad 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dedup/DeduperStreamCodec.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dedup/DeduperStreamCodec.java
@@ -18,12 +18,12 @@
  */
 package org.apache.apex.malhar.lib.dedup;
 
+import org.apache.apex.malhar.lib.codec.KryoSerializableStreamCodec;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
 import com.datatorrent.api.StreamCodec;
-import com.datatorrent.lib.codec.KryoSerializableStreamCodec;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
 
 /**
  * A {@link StreamCodec} for {@link AbstractDeduper}.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dedup/TimeBasedDedupOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/dedup/TimeBasedDedupOperator.java
index 9f83441..4258cd2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dedup/TimeBasedDedupOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dedup/TimeBasedDedupOperator.java
@@ -26,6 +26,8 @@
 import org.joda.time.Instant;
 import org.apache.apex.malhar.lib.state.managed.ManagedTimeUnifiedStateImpl;
 import org.apache.apex.malhar.lib.state.managed.MovingBoundaryTimeBucketAssigner;
+import org.apache.apex.malhar.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
 import com.datatorrent.api.Context;
@@ -35,8 +37,6 @@
 import com.datatorrent.api.Operator.ActivationListener;
 import com.datatorrent.api.StreamCodec;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
-import com.datatorrent.lib.util.PojoUtils;
-import com.datatorrent.lib.util.PojoUtils.Getter;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/CustomTimeBucketRegistry.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/CustomTimeBucketRegistry.java
index 216e577..4889339 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/CustomTimeBucketRegistry.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/CustomTimeBucketRegistry.java
@@ -22,9 +22,9 @@
 import java.util.HashMap;
 import java.util.Map;
 
-import com.google.common.base.Preconditions;
+import org.apache.apex.malhar.lib.appdata.schemas.CustomTimeBucket;
 
-import com.datatorrent.lib.appdata.schemas.CustomTimeBucket;
+import com.google.common.base.Preconditions;
 
 import it.unimi.dsi.fastutil.ints.Int2ObjectMap;
 import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/DimensionsConversionContext.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/DimensionsConversionContext.java
index 90d4f7b..c7da57d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/DimensionsConversionContext.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/DimensionsConversionContext.java
@@ -20,8 +20,8 @@
 
 import java.io.Serializable;
 
-import com.datatorrent.lib.appdata.gpo.GPOUtils.IndexSubset;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOUtils.IndexSubset;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
 
 /**
  * This is a context object used to convert {@link InputEvent}s into aggregates
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/DimensionsDescriptor.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/DimensionsDescriptor.java
index f7df583..5d74d21 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/DimensionsDescriptor.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/DimensionsDescriptor.java
@@ -28,17 +28,17 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.schemas.CustomTimeBucket;
+import org.apache.apex.malhar.lib.appdata.schemas.Fields;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.TimeBucket;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
-import com.datatorrent.lib.appdata.schemas.CustomTimeBucket;
-import com.datatorrent.lib.appdata.schemas.Fields;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.TimeBucket;
-import com.datatorrent.lib.appdata.schemas.Type;
-
 /**
  * <p>
  * This class defines a dimensions combination which is used by dimensions
@@ -162,7 +162,7 @@
    * @param fields
    *          The key fields included in this dimensions combination.
    * @deprecated use
-   *             {@link #DimensionsDescriptor(com.datatorrent.lib.appdata.schemas.CustomTimeBucket, com.datatorrent.lib.appdata.schemas.Fields)}
+   *             {@link #DimensionsDescriptor(org.apache.apex.malhar.lib.appdata.schemas.CustomTimeBucket, org.apache.apex.malhar.lib.appdata.schemas.Fields)}
    *             instead.
    */
   @Deprecated
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/DimensionsEvent.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/DimensionsEvent.java
index de9e096..1c453b6 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/DimensionsEvent.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/DimensionsEvent.java
@@ -21,14 +21,13 @@
 import java.io.Serializable;
 import java.util.List;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOUtils;
 import org.apache.apex.malhar.lib.dimensions.aggregator.AggregateEvent;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
 
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.gpo.GPOUtils;
-
 /**
  * <p>
  * This is the base class for the events that are used for internal processing
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AbstractCompositeAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AbstractCompositeAggregator.java
index 52ef811..52283c2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AbstractCompositeAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AbstractCompositeAggregator.java
@@ -20,12 +20,11 @@
 
 import java.util.Set;
 
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
 import org.apache.apex.malhar.lib.dimensions.DimensionsConversionContext;
 
 import com.google.common.collect.Sets;
 
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-
 /**
  * SimpleCompositAggregator is the aggregator which embed other aggregator
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AbstractIncrementalAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AbstractIncrementalAggregator.java
index bf2054e..1774eaa 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AbstractIncrementalAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AbstractIncrementalAggregator.java
@@ -21,6 +21,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOUtils;
+import org.apache.apex.malhar.lib.appdata.schemas.CustomTimeBucket;
 import org.apache.apex.malhar.lib.dimensions.DimensionsConversionContext;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.Aggregate;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.EventKey;
@@ -28,10 +31,6 @@
 
 import com.google.common.base.Preconditions;
 
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.gpo.GPOUtils;
-import com.datatorrent.lib.appdata.schemas.CustomTimeBucket;
-
 /**
  * * <p>
  * {@link IncrementalAggregator}s perform aggregations in place, on a field by field basis. For example if we have a
@@ -41,7 +40,7 @@
  * </p>
  * <p>
  * {@link IncrementalAggregator}s are intended to be used with subclasses of
- * {@link com.datatorrent.lib.dimensions.AbstractDimensionsComputationFlexibleSingleSchema}. The way in which
+ * {@link org.apache.apex.malhar.lib.dimensions.AbstractDimensionsComputationFlexibleSingleSchema}. The way in which
  * {@link IncrementalAggregator}s are used in this context is that a batch of fields to be aggregated by the aggregator
  * are provided in the form of an {@link InputEvent}. For example, if there are two fields (cost and revenue), which
  * will be aggregated by a sum aggregator, both of those fields will be included in the {@link InputEvent} passed to
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AbstractTopBottomAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AbstractTopBottomAggregator.java
index e38ea0e..6d8592b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AbstractTopBottomAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AbstractTopBottomAggregator.java
@@ -24,6 +24,8 @@
 import java.util.Set;
 import java.util.SortedSet;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.Aggregate;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.EventKey;
 
@@ -31,9 +33,6 @@
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.schemas.Type;
-
 
 /**
  * @since 3.4.0
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorAverage.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorAverage.java
index e5b6d83..2afc24d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorAverage.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorAverage.java
@@ -20,14 +20,15 @@
 
 import java.util.List;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.schemas.Fields;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
+
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 
 import com.datatorrent.api.annotation.Name;
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.schemas.Fields;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
 
 /**
  * This is the average {@link OTFAggregator}.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorCount.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorCount.java
index 61d12a8..9f8827e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorCount.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorCount.java
@@ -21,6 +21,10 @@
 import java.util.Collections;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOUtils;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.Aggregate;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.EventKey;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.InputEvent;
@@ -28,10 +32,6 @@
 import com.google.common.collect.Maps;
 
 import com.datatorrent.api.annotation.Name;
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.gpo.GPOUtils;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
 
 /**
  * This {@link IncrementalAggregator} performs a count of the number of times an input is encountered.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorCumSum.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorCumSum.java
index 744cd1c..48a6030 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorCumSum.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorCumSum.java
@@ -21,6 +21,14 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOUtils;
+import org.apache.apex.malhar.lib.appdata.gpo.Serde;
+import org.apache.apex.malhar.lib.appdata.gpo.SerdeFieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.gpo.SerdeListGPOMutable;
+import org.apache.apex.malhar.lib.appdata.gpo.SerdeObjectPayloadFix;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.Aggregate;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.InputEvent;
 
@@ -28,14 +36,6 @@
 import com.google.common.collect.Maps;
 
 import com.datatorrent.api.annotation.Name;
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.gpo.GPOUtils;
-import com.datatorrent.lib.appdata.gpo.Serde;
-import com.datatorrent.lib.appdata.gpo.SerdeFieldsDescriptor;
-import com.datatorrent.lib.appdata.gpo.SerdeListGPOMutable;
-import com.datatorrent.lib.appdata.gpo.SerdeObjectPayloadFix;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
 
 @Name("CUM_SUM")
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorFirst.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorFirst.java
index a6ceb65..939aba5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorFirst.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorFirst.java
@@ -18,13 +18,13 @@
  */
 package org.apache.apex.malhar.lib.dimensions.aggregator;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOUtils;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.Aggregate;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.InputEvent;
 
 import com.datatorrent.api.annotation.Name;
-import com.datatorrent.lib.appdata.gpo.GPOUtils;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
 
 /**
  * <p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorLast.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorLast.java
index b679098..0da69ba 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorLast.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorLast.java
@@ -18,14 +18,14 @@
  */
 package org.apache.apex.malhar.lib.dimensions.aggregator;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOUtils;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.Aggregate;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.InputEvent;
 
 import com.datatorrent.api.annotation.Name;
-import com.datatorrent.lib.appdata.gpo.GPOUtils;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
 
 /**
  * <p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorMax.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorMax.java
index 8aca886..2024c70 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorMax.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorMax.java
@@ -18,14 +18,14 @@
  */
 package org.apache.apex.malhar.lib.dimensions.aggregator;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOUtils;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.Aggregate;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.InputEvent;
 
 import com.datatorrent.api.annotation.Name;
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.gpo.GPOUtils;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
 
 /**
  * This {@link IncrementalAggregator} takes the max of the fields provided in the {@link InputEvent}.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorMin.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorMin.java
index 1f53011..50bf4b8 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorMin.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorMin.java
@@ -18,14 +18,14 @@
  */
 package org.apache.apex.malhar.lib.dimensions.aggregator;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOUtils;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.Aggregate;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.InputEvent;
 
 import com.datatorrent.api.annotation.Name;
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.gpo.GPOUtils;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
 
 /**
  * This {@link IncrementalAggregator} takes the min of the fields provided in the {@link InputEvent}.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorRegistry.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorRegistry.java
index 85f1822..995aec0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorRegistry.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorRegistry.java
@@ -35,7 +35,7 @@
  * This registry is used by generic dimensions computation operators and dimension stores in order to support
  * plugging different
  * aggregators into the operator. Subclasses of
- * {@link com.datatorrent.lib.dimensions.AbstractDimensionsComputationFlexibleSingleSchema} use this registry
+ * {@link org.apache.apex.malhar.lib.dimensions.AbstractDimensionsComputationFlexibleSingleSchema} use this registry
  * to support pluggable aggregators when doing dimensions computation, and Subclasses of
  * AppDataSingleSchemaDimensionStoreHDHT use this class as well.
  * </p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorSum.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorSum.java
index 9c79247..d2a984c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorSum.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorSum.java
@@ -21,14 +21,14 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOUtils;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.Aggregate;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.InputEvent;
 
 import com.datatorrent.api.annotation.Name;
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.gpo.GPOUtils;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
 
 /**
  * This {@link IncrementalAggregator} performs a sum operation over the fields in the given {@link InputEvent}.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorUtils.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorUtils.java
index 006cadf..60eba00 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorUtils.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/AggregatorUtils.java
@@ -21,13 +21,13 @@
 import java.util.Collections;
 import java.util.Map;
 
-import com.google.common.collect.Maps;
+import org.apache.apex.malhar.lib.appdata.gpo.Serde;
+import org.apache.apex.malhar.lib.appdata.gpo.SerdeMapPrimitive;
+import org.apache.apex.malhar.lib.appdata.schemas.Fields;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 
-import com.datatorrent.lib.appdata.gpo.Serde;
-import com.datatorrent.lib.appdata.gpo.SerdeMapPrimitive;
-import com.datatorrent.lib.appdata.schemas.Fields;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
+import com.google.common.collect.Maps;
 
 /**
  * This class contains utility methods which are useful for aggregators.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/CompositeAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/CompositeAggregator.java
index e64e957..22ae71a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/CompositeAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/CompositeAggregator.java
@@ -21,12 +21,11 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.Aggregate;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.EventKey;
 
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
-
 /**
  * @since 3.4.0
  */
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/IncrementalAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/IncrementalAggregator.java
index 54b86fa..2116a03 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/IncrementalAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/IncrementalAggregator.java
@@ -18,14 +18,13 @@
  */
 package org.apache.apex.malhar.lib.dimensions.aggregator;
 
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.apex.malhar.lib.dimensions.DimensionsConversionContext;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.Aggregate;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.InputEvent;
 import org.apache.apex.malhar.lib.dimensions.aggregator.AggregateEvent.Aggregator;
 
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
-
 /**
  * <p>
  * {@link IncrementalAggregator}s perform aggregations in place, on a field by field basis. For example if we have a
@@ -35,7 +34,7 @@
  * </p>
  * <p>
  * {@link IncrementalAggregator}s are intended to be used with subclasses of
- * {@link com.datatorrent.lib.dimensions.AbstractDimensionsComputationFlexibleSingleSchema}. The way in which
+ * {@link org.apache.apex.malhar.lib.dimensions.AbstractDimensionsComputationFlexibleSingleSchema}. The way in which
  * {@link IncrementalAggregator}s are used in this context is that a batch of fields to be aggregated by the aggregator
  * are provided in the form of an {@link InputEvent}. For example, if there are two fields (cost and revenue), which
  * will be aggregated by a sum aggregator, both of those fields will be included in the {@link InputEvent} passed to
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/OTFAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/OTFAggregator.java
index cef32db..393b4b9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/OTFAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/dimensions/aggregator/OTFAggregator.java
@@ -22,8 +22,8 @@
 
 import java.util.List;
 
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.schemas.Type;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 
 /**
  * <p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/expression/Expression.java b/library/src/main/java/org/apache/apex/malhar/lib/expression/Expression.java
index fd28434..46e0a87 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/expression/Expression.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/expression/Expression.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.expression;
+package org.apache.apex.malhar.lib.expression;
 
 /**
  * This is the Expression interface, object of which will be returned after evaluating expression.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/expression/JavaExpressionParser.java b/library/src/main/java/org/apache/apex/malhar/lib/expression/JavaExpressionParser.java
index 257f8a0..9964ba4 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/expression/JavaExpressionParser.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/expression/JavaExpressionParser.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.expression;
+package org.apache.apex.malhar.lib.expression;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
@@ -27,7 +27,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
  * Defines how quasi-Java Expression should be parsed.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/DTFileReader.java b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/DTFileReader.java
index f5b51cf..1a40607 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/DTFileReader.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/DTFileReader.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.fileaccess;
+package org.apache.apex.malhar.lib.fileaccess;
 
 import java.io.IOException;
 import java.util.TreeMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/FileAccess.java b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/FileAccess.java
index 12f9036..ad64c7a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/FileAccess.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/FileAccess.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.fileaccess;
+package org.apache.apex.malhar.lib.fileaccess;
 
 import java.io.Closeable;
 import java.io.DataInputStream;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/FileAccessFSImpl.java b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/FileAccessFSImpl.java
index 7184a82..da42907 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/FileAccessFSImpl.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/FileAccessFSImpl.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.fileaccess;
+package org.apache.apex.malhar.lib.fileaccess;
 
 import java.io.IOException;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/TFileImpl.java b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/TFileImpl.java
index f11f2bc..6b5a7a5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/TFileImpl.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/TFileImpl.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.fileaccess;
+package org.apache.apex.malhar.lib.fileaccess;
 
 import java.io.IOException;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/TFileReader.java b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/TFileReader.java
index 4592247..d5c0439 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/TFileReader.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/TFileReader.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.fileaccess;
+package org.apache.apex.malhar.lib.fileaccess;
 
 import java.io.IOException;
 import java.util.TreeMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/TFileWriter.java b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/TFileWriter.java
index fed8447..6bf6669 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/TFileWriter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/TFileWriter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.fileaccess;
+package org.apache.apex.malhar.lib.fileaccess;
 
 import java.io.IOException;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/package-info.java
index 8002459..fc62964 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fileaccess/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.fileaccess;
+package org.apache.apex.malhar.lib.fileaccess;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/filter/FilterOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/filter/FilterOperator.java
index 6fccf1e..ff28902 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/filter/FilterOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/filter/FilterOperator.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.filter;
+package org.apache.apex.malhar.lib.filter;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -26,6 +26,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.expression.Expression;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -40,8 +42,6 @@
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.expression.Expression;
-import com.datatorrent.lib.util.PojoUtils;
 
 /**
  * <b>FilterOperator</b>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/formatter/Formatter.java b/library/src/main/java/org/apache/apex/malhar/lib/formatter/Formatter.java
index ef3c304..4f1f47e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/formatter/Formatter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/formatter/Formatter.java
@@ -16,7 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.formatter;
+package org.apache.apex.malhar.lib.formatter;
+
+import org.apache.apex.malhar.lib.converter.Converter;
 
 import com.google.common.annotations.VisibleForTesting;
 
@@ -28,7 +30,6 @@
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.converter.Converter;
 
 /**
  * Abstract class that implements Converter interface. This is a schema enabled
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/formatter/JsonFormatter.java b/library/src/main/java/org/apache/apex/malhar/lib/formatter/JsonFormatter.java
index a784f89..6217ce9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/formatter/JsonFormatter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/formatter/JsonFormatter.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.formatter;
+package org.apache.apex.malhar.lib.formatter;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/formatter/XmlFormatter.java b/library/src/main/java/org/apache/apex/malhar/lib/formatter/XmlFormatter.java
index 78dc344..833775d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/formatter/XmlFormatter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/formatter/XmlFormatter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.formatter;
+package org.apache.apex.malhar.lib.formatter;
 
 import java.io.StringWriter;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/FSRecordReader.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/FSRecordReader.java
index 2d82ac4..777b5d5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/FSRecordReader.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/FSRecordReader.java
@@ -23,13 +23,13 @@
 
 import javax.validation.constraints.Pattern;
 
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.io.block.FSSliceReader;
+import org.apache.apex.malhar.lib.io.block.ReaderContext;
 import org.apache.hadoop.fs.FSDataInputStream;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.io.block.FSSliceReader;
-import com.datatorrent.lib.io.block.ReaderContext;
 
 /**
  * This operator can be used for reading records/tuples from Filesystem in
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/FSRecordReaderModule.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/FSRecordReaderModule.java
index 65f7e5f..a1df5de 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/FSRecordReaderModule.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/FSRecordReaderModule.java
@@ -25,13 +25,13 @@
 import javax.validation.constraints.Size;
 
 import org.apache.apex.malhar.lib.fs.FSRecordReader.RECORD_READER_MODE;
+import org.apache.apex.malhar.lib.io.fs.FSInputModule.SequentialFileBlockMetadataCodec;
+import org.apache.apex.malhar.lib.io.fs.FileSplitterInput;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Module;
-import com.datatorrent.lib.io.fs.FSInputModule.SequentialFileBlockMetadataCodec;
-import com.datatorrent.lib.io.fs.FileSplitterInput;
 
 /**
  * This module is used for reading records/tuples from FileSystem. Records can
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/GenericFileOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/GenericFileOutputOperator.java
index 111ea7b..ae435bd 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/GenericFileOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/GenericFileOutputOperator.java
@@ -28,11 +28,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.converter.Converter;
+import org.apache.apex.malhar.lib.io.fs.AbstractSingleFileOutputOperator;
+
 import com.datatorrent.api.AutoMetric;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.StreamCodec;
-import com.datatorrent.lib.converter.Converter;
-import com.datatorrent.lib.io.fs.AbstractSingleFileOutputOperator;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/LineByLineFileInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/LineByLineFileInputOperator.java
index e8b8f8b..41e4ed7 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/LineByLineFileInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/LineByLineFileInputOperator.java
@@ -23,12 +23,11 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperator;
 import org.apache.hadoop.fs.Path;
 
 import com.datatorrent.api.DefaultOutputPort;
 
-import com.datatorrent.lib.io.fs.AbstractFileInputOperator;
-
 /**
  * This is an extension of the {@link AbstractFileInputOperator} that outputs the contents of a file line by line.&nbsp;
  * Each line is emitted as a separate tuple in string format.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3BlockUploadOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3BlockUploadOperator.java
index 950ec50..80d9420 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3BlockUploadOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3BlockUploadOperator.java
@@ -31,6 +31,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.block.AbstractBlockReader;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.hadoop.classification.InterfaceStability;
@@ -51,8 +53,6 @@
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
-import com.datatorrent.lib.io.block.AbstractBlockReader;
-import com.datatorrent.lib.io.block.BlockMetadata;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3InitiateFileUploadOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3InitiateFileUploadOperator.java
index fd70b11..08f1aac 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3InitiateFileUploadOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3InitiateFileUploadOperator.java
@@ -24,6 +24,7 @@
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileSplitter;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.commons.lang.StringUtils;
@@ -42,7 +43,6 @@
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
-import com.datatorrent.lib.io.fs.AbstractFileSplitter;
 
 /**
  * This is an S3 Initiate file upload operator which can be used to initiate file upload and emits the upload id.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3OutputModule.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3OutputModule.java
index 2141e69..d3361e1 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3OutputModule.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3OutputModule.java
@@ -21,6 +21,9 @@
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.io.block.AbstractBlockReader;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileSplitter;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.conf.Configuration;
 
@@ -28,9 +31,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Module;
 import com.datatorrent.common.partitioner.StatelessPartitioner;
-import com.datatorrent.lib.io.block.AbstractBlockReader;
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.io.fs.AbstractFileSplitter;
 import com.datatorrent.netlet.util.Slice;
 
 import static com.datatorrent.api.Context.OperatorContext.TIMEOUT_WINDOW_COUNT;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3Reconciler.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3Reconciler.java
index dc76e91..085d45b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3Reconciler.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3Reconciler.java
@@ -28,6 +28,7 @@
 import org.slf4j.LoggerFactory;
 
 import org.apache.apex.malhar.lib.fs.FSRecordCompactionOperator;
+import org.apache.apex.malhar.lib.io.fs.AbstractReconciler;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataInputStream;
 import org.apache.hadoop.fs.FileStatus;
@@ -48,7 +49,6 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.io.fs.AbstractReconciler;
 
 /**
  * This operator uploads files to Amazon S3 after files are finalized and
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3ReconcilerQueuePartitioner.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3ReconcilerQueuePartitioner.java
index 7d3093e..6f4887a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3ReconcilerQueuePartitioner.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3ReconcilerQueuePartitioner.java
@@ -26,9 +26,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.partitioner.StatsAwareStatelessPartitioner;
+
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.Stats;
-import com.datatorrent.lib.partitioner.StatsAwareStatelessPartitioner;
 
 /**
  * This partitioner looks at Reconciler queue size to decide no. of partitions.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3RecordReader.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3RecordReader.java
index 71ca929..66a09a9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3RecordReader.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3RecordReader.java
@@ -23,6 +23,8 @@
 import java.util.Arrays;
 
 import org.apache.apex.malhar.lib.fs.FSRecordReader;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.io.block.ReaderContext;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 import org.apache.hadoop.fs.FSDataInputStream;
 
@@ -36,9 +38,6 @@
 import com.google.common.base.Preconditions;
 import com.google.common.io.ByteStreams;
 
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.io.block.ReaderContext;
-
 /**
  * This operator can be used for reading records/tuples from S3 in parallel
  * (without ordering guarantees between tuples). Records can be delimited (e.g.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3RecordReaderModule.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3RecordReaderModule.java
index b40337e..91fa81f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3RecordReaderModule.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3RecordReaderModule.java
@@ -22,8 +22,7 @@
 import javax.validation.constraints.Min;
 
 import org.apache.apex.malhar.lib.fs.FSRecordReaderModule;
-
-import com.datatorrent.lib.io.fs.S3BlockReader;
+import org.apache.apex.malhar.lib.io.fs.S3BlockReader;
 
 /**
  * This module is used for reading records/tuples from S3. Records can be read
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3TupleOutputModule.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3TupleOutputModule.java
index 4c93631..0ef4f25 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3TupleOutputModule.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3TupleOutputModule.java
@@ -24,9 +24,11 @@
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.converter.Converter;
 import org.apache.apex.malhar.lib.fs.FSRecordCompactionOperator;
 import org.apache.apex.malhar.lib.fs.GenericFileOutputOperator.NoOpConverter;
 import org.apache.apex.malhar.lib.fs.GenericFileOutputOperator.StringToBytesConverter;
+import org.apache.apex.malhar.lib.partitioner.StatelessThroughputBasedPartitioner;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.base.Preconditions;
@@ -35,8 +37,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Module;
 import com.datatorrent.api.StatsListener;
-import com.datatorrent.lib.converter.Converter;
-import com.datatorrent.lib.partitioner.StatelessThroughputBasedPartitioner;
 
 /**
  * S3TupleOutputModule writes incoming tuples into files and uploads these files on Amazon S3.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/function/Function.java b/library/src/main/java/org/apache/apex/malhar/lib/function/Function.java
index 6d2226c..ef8f3c9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/function/Function.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/function/Function.java
@@ -18,11 +18,10 @@
  */
 package org.apache.apex.malhar.lib.function;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.hadoop.classification.InterfaceStability;
 
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * The top level function interface <br>
  * The function is wrapped by {@link FunctionOperator} <br>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractFTPInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractFTPInputOperator.java
index 16d220c..26c19c9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractFTPInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractFTPInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.BufferedReader;
 import java.io.IOException;
@@ -30,13 +30,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperator;
 import org.apache.commons.net.ftp.FTP;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.ftp.FTPFileSystem;
 
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.io.fs.AbstractFileInputOperator;
 
 /**
  * An {@link AbstractFileInputOperator} that scans a remote directory via FTP for new files.<br/>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpGetMultiValuedMapOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpGetMultiValuedMapOperator.java
index e3675a8..a183e83 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpGetMultiValuedMapOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpGetMultiValuedMapOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import javax.ws.rs.core.MultivaluedMap;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpGetOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpGetOperator.java
index a84e5c7..81427db 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpGetOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpGetOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import com.sun.jersey.api.client.ClientResponse;
 import com.sun.jersey.api.client.WebResource;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpInputOperator.java
index 40ce4bc..dd6544a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.IOException;
 import java.net.URI;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpOperator.java
index 60b123b..6b9c3f2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractHttpOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import javax.validation.constraints.NotNull;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractKeyValueStoreOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractKeyValueStoreOutputOperator.java
index 1e14fe1..2e52fcb 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractKeyValueStoreOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractKeyValueStoreOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -24,12 +24,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.Context.DAGContext;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * This is the base implementation of an input operator for a key value store.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractSocketInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractSocketInputOperator.java
index 450cdcb..6fcf3a7 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractSocketInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/AbstractSocketInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.net.InetSocketAddress;
 import java.nio.ByteBuffer;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/ApacheGenRandomLogs.java b/library/src/main/java/org/apache/apex/malhar/lib/io/ApacheGenRandomLogs.java
index 84bcb1d..6ed378a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/ApacheGenRandomLogs.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/ApacheGenRandomLogs.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.text.SimpleDateFormat;
 import java.util.Date;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/CollectionMultiConsoleOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/CollectionMultiConsoleOutputOperator.java
index 36b042f..7c68a26 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/CollectionMultiConsoleOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/CollectionMultiConsoleOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.util.Collection;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/ConsoleOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/ConsoleOutputOperator.java
index 38e15b1..675f75e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/ConsoleOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/ConsoleOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.PrintStream;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/HttpGetMapOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/HttpGetMapOperator.java
index 07e28b8..5feea3c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/HttpGetMapOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/HttpGetMapOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.util.Map;
 import java.util.Map.Entry;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/HttpJsonChunksInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/HttpJsonChunksInputOperator.java
index ad6f7a6..1993b21 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/HttpJsonChunksInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/HttpJsonChunksInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/HttpLinesInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/HttpLinesInputOperator.java
index c355b16..f7db60a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/HttpLinesInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/HttpLinesInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.BufferedReader;
 import java.io.IOException;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/HttpOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/HttpOutputOperator.java
index fcaea70..a0ea5a5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/HttpOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/HttpOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.net.URI;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/HttpPostOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/HttpPostOutputOperator.java
index 57a4d91..5b055c5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/HttpPostOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/HttpPostOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.util.Map;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/IdempotentStorageManager.java b/library/src/main/java/org/apache/apex/malhar/lib/io/IdempotentStorageManager.java
index 11b68a7..e84e8b4 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/IdempotentStorageManager.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/IdempotentStorageManager.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.IOException;
 import java.util.Arrays;
@@ -27,6 +27,7 @@
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperator;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileStatus;
@@ -44,7 +45,6 @@
 import com.datatorrent.api.StorageAgent;
 import com.datatorrent.api.annotation.Stateless;
 import com.datatorrent.common.util.FSStorageAgent;
-import com.datatorrent.lib.io.fs.AbstractFileInputOperator;
 
 /**
  * An idempotent storage manager allows an operator to emit the same tuples in every replayed application window. An idempotent agent
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/MapMultiConsoleOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/MapMultiConsoleOutputOperator.java
index 1e31552..67249ea 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/MapMultiConsoleOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/MapMultiConsoleOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.util.Map;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataQuery.java b/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataQuery.java
index 9b1e0cf..699dec8 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataQuery.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataQuery.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.net.URI;
 import javax.validation.constraints.Min;
@@ -25,6 +25,9 @@
 import org.codehaus.jettison.json.JSONObject;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.appdata.StoreUtils.BufferingOutputPortFlusher;
+import org.apache.apex.malhar.lib.appdata.query.WindowBoundedService;
 import org.apache.apex.malhar.lib.utils.PubSubHelper;
 
 import com.datatorrent.api.Context.OperatorContext;
@@ -33,8 +36,6 @@
 import com.datatorrent.common.experimental.AppData;
 import com.datatorrent.common.experimental.AppData.EmbeddableQueryInfoProvider;
 import com.datatorrent.common.util.PubSubMessage;
-import com.datatorrent.lib.appdata.StoreUtils.BufferingOutputPortFlusher;
-import com.datatorrent.lib.appdata.query.WindowBoundedService;
 
 /**
  * This is an App Data pub sub query operator. This operator is used to receive queries from
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataResult.java b/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataResult.java
index 7800fa4..5c55760 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataResult.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataResult.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.IOException;
 import java.net.URI;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketInputOperator.java
index 4d5fa9a..ffd191a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.IOException;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketOutputOperator.java
index c51c0c9..b26642b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/PubSubWebSocketOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.IOException;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/SimpleSinglePortInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/SimpleSinglePortInputOperator.java
index 12737ba..f3dc70d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/SimpleSinglePortInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/SimpleSinglePortInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.util.Iterator;
 import java.util.concurrent.ArrayBlockingQueue;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/SmtpOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/SmtpOutputOperator.java
index 2d6ef86..f550f1e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/SmtpOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/SmtpOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.util.Arrays;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/WebSocketInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/WebSocketInputOperator.java
index e06d411..35f665a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/WebSocketInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/WebSocketInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.IOException;
 import java.net.URI;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/WebSocketOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/WebSocketOutputOperator.java
index 382be67..34947a1 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/WebSocketOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/WebSocketOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.IOException;
 import java.net.URI;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/WebSocketServerInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/WebSocketServerInputOperator.java
index 2814b49..088fa01 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/WebSocketServerInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/WebSocketServerInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.validation.constraints.Min;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/WidgetOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/WidgetOutputOperator.java
index a9030d4..a495fb0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/WidgetOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/WidgetOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.IOException;
 import java.lang.reflect.Array;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/block/AbstractBlockReader.java b/library/src/main/java/org/apache/apex/malhar/lib/io/block/AbstractBlockReader.java
index 734df38..405a6c5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/block/AbstractBlockReader.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/block/AbstractBlockReader.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.block;
+package org.apache.apex.malhar.lib.io.block;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -32,6 +32,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.counters.BasicCounters;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.commons.lang.mutable.MutableLong;
 import org.apache.hadoop.fs.PositionedReadable;
 
@@ -48,8 +50,6 @@
 import com.datatorrent.api.Stats;
 import com.datatorrent.api.StatsListener;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.counters.BasicCounters;
-import com.datatorrent.lib.util.KryoCloneUtils;
 
 /**
  * AbstractBlockReader processes a block of data from a stream.<br/>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/block/AbstractFSBlockReader.java b/library/src/main/java/org/apache/apex/malhar/lib/io/block/AbstractFSBlockReader.java
index 3eccb3e..5a1daf1 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/block/AbstractFSBlockReader.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/block/AbstractFSBlockReader.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.block;
+package org.apache.apex.malhar.lib.io.block;
 
 import java.io.IOException;
 import java.net.URI;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/block/BlockMetadata.java b/library/src/main/java/org/apache/apex/malhar/lib/io/block/BlockMetadata.java
index 26d19a4..18aef68 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/block/BlockMetadata.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/block/BlockMetadata.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.block;
+package org.apache.apex.malhar.lib.io.block;
 
 import javax.validation.constraints.NotNull;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/block/BlockWriter.java b/library/src/main/java/org/apache/apex/malhar/lib/io/block/BlockWriter.java
index 64c066b..ea939fb 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/block/BlockWriter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/block/BlockWriter.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.io.block;
+package org.apache.apex.malhar.lib.io.block;
 
 import java.io.IOException;
 import java.util.Collection;
@@ -28,6 +28,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.counters.BasicCounters;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperator;
 import org.apache.commons.lang.mutable.MutableLong;
 import org.apache.hadoop.fs.Path;
 
@@ -38,8 +40,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.DefaultPartition;
 import com.datatorrent.api.Partitioner;
-import com.datatorrent.lib.counters.BasicCounters;
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperator;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/block/FSSliceReader.java b/library/src/main/java/org/apache/apex/malhar/lib/io/block/FSSliceReader.java
index 9ac2a61..791f2b9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/block/FSSliceReader.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/block/FSSliceReader.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.block;
+package org.apache.apex.malhar.lib.io.block;
 
 import org.apache.hadoop.fs.Path;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/block/PartFileWriter.java b/library/src/main/java/org/apache/apex/malhar/lib/io/block/PartFileWriter.java
index 99e1ae1..e2f983e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/block/PartFileWriter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/block/PartFileWriter.java
@@ -27,14 +27,12 @@
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileSplitter;
 import org.apache.commons.lang3.tuple.MutablePair;
 
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.Operator;
-import com.datatorrent.lib.io.block.AbstractBlockReader;
-import com.datatorrent.lib.io.block.BlockWriter;
-import com.datatorrent.lib.io.fs.AbstractFileSplitter;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/block/ReaderContext.java b/library/src/main/java/org/apache/apex/malhar/lib/io/block/ReaderContext.java
index d9e8b2e..62120ba 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/block/ReaderContext.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/block/ReaderContext.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.block;
+package org.apache.apex.malhar.lib.io.block;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/block/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/io/block/package-info.java
index bc89b6e..11abcf8 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/block/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/block/package-info.java
@@ -16,4 +16,4 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.block;
+package org.apache.apex.malhar.lib.io.block;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractFileInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractFileInputOperator.java
index 228856d..f3eea89 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractFileInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractFileInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -45,7 +45,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.counters.BasicCounters;
 import org.apache.apex.malhar.lib.fs.LineByLineFileInputOperator;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.commons.lang.mutable.MutableLong;
 import org.apache.hadoop.conf.Configuration;
@@ -66,9 +68,6 @@
 import com.datatorrent.api.Partitioner;
 import com.datatorrent.api.StatsListener;
 
-import com.datatorrent.lib.counters.BasicCounters;
-import com.datatorrent.lib.util.KryoCloneUtils;
-
 /**
  * This is the base implementation of a directory input operator, which scans a directory for files.&nbsp;
  * Files are then read and split into tuples, which are emitted.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractFileOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractFileOutputOperator.java
index 263efea..b85d8be 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractFileOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractFileOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.FilterOutputStream;
 import java.io.IOException;
@@ -36,6 +36,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.counters.BasicCounters;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.mutable.MutableLong;
 import org.apache.commons.lang3.mutable.MutableInt;
@@ -69,7 +70,6 @@
 import com.datatorrent.api.StreamCodec;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.counters.BasicCounters;
 
 /**
  * This base implementation for a fault tolerant HDFS output operator,
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractFileSplitter.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractFileSplitter.java
index 74addf7..04fad53 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractFileSplitter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractFileSplitter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.File;
 import java.io.IOException;
@@ -28,6 +28,8 @@
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.Path;
 
@@ -36,7 +38,6 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.io.block.BlockMetadata;
 
 /**
  * An abstract File Splitter.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractReconciler.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractReconciler.java
index 78f340e..2108796 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractReconciler.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractReconciler.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractSingleFileOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractSingleFileOutputOperator.java
index 99a8fb6..a4af016 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractSingleFileOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractSingleFileOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import javax.validation.constraints.NotNull;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractThroughputFileInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractThroughputFileInputOperator.java
index 0a96418..a043443 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractThroughputFileInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractThroughputFileInputOperator.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.util.Collection;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.counters.BasicCounters;
 import org.apache.commons.lang.mutable.MutableLong;
 
 import com.datatorrent.api.Stats.OperatorStats;
-import com.datatorrent.lib.counters.BasicCounters;
 
 /**
  * This is the base implementation for a file input operator, which scans a directory for files.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractWindowFileOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractWindowFileOutputOperator.java
index a7ad8f9..3e8eec2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractWindowFileOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/AbstractWindowFileOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FSInputModule.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FSInputModule.java
index 34c58d2..f949876 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FSInputModule.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FSInputModule.java
@@ -16,20 +16,21 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import javax.validation.constraints.Min;
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
+
+import org.apache.apex.malhar.lib.codec.KryoSerializableStreamCodec;
+import org.apache.apex.malhar.lib.io.block.AbstractBlockReader;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.io.block.FSSliceReader;
+import org.apache.apex.malhar.lib.io.block.ReaderContext;
 import org.apache.hadoop.conf.Configuration;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Module;
-import com.datatorrent.lib.codec.KryoSerializableStreamCodec;
-import com.datatorrent.lib.io.block.AbstractBlockReader;
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.io.block.FSSliceReader;
-import com.datatorrent.lib.io.block.ReaderContext;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileMerger.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileMerger.java
index db7d7c5..a2befb8 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileMerger.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileMerger.java
@@ -17,15 +17,15 @@
  * under the License.
  */
 
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.IOException;
 import java.io.OutputStream;
 
+import org.apache.apex.malhar.lib.io.fs.Synchronizer.OutputFileMetadata;
 import org.apache.hadoop.fs.Path;
 
 import com.datatorrent.api.AutoMetric;
-import com.datatorrent.lib.io.fs.Synchronizer.OutputFileMetadata;
 
 /**
  * This operator merges the blocks into a file. The list of blocks is obtained
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileSplitter.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileSplitter.java
index 0949aba..80f7a5a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileSplitter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileSplitter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -40,6 +40,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.counters.BasicCounters;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata.FileBlockMetadata;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.commons.lang.mutable.MutableLong;
 import org.apache.hadoop.conf.Configuration;
@@ -61,8 +63,6 @@
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.lib.counters.BasicCounters;
-import com.datatorrent.lib.io.block.BlockMetadata.FileBlockMetadata;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileSplitterBase.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileSplitterBase.java
index 17a3bb6..a048ae5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileSplitterBase.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileSplitterBase.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.IOException;
 import java.util.LinkedList;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileSplitterInput.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileSplitterInput.java
index 985c667..c6ef61b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileSplitterInput.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileSplitterInput.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.IOException;
 import java.net.URI;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileStitcher.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileStitcher.java
index c4ad9d3..1f5a183 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileStitcher.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FileStitcher.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.IOException;
 import java.io.OutputStream;
@@ -28,6 +28,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.block.BlockWriter;
+import org.apache.apex.malhar.lib.io.fs.Synchronizer.StitchBlock;
+import org.apache.apex.malhar.lib.io.fs.Synchronizer.StitchedFileMetaData;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
@@ -40,9 +43,6 @@
 import com.datatorrent.api.Context.DAGContext;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.io.block.BlockWriter;
-import com.datatorrent.lib.io.fs.Synchronizer.StitchBlock;
-import com.datatorrent.lib.io.fs.Synchronizer.StitchedFileMetaData;
 
 /**
  * This is generic File Stitcher which can be used to merge data from one or
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FilterStreamCodec.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FilterStreamCodec.java
index cdef3b6..e7bf376 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FilterStreamCodec.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FilterStreamCodec.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.FilterOutputStream;
 import java.io.IOException;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FilterStreamContext.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FilterStreamContext.java
index dd0393a..a9fd201 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FilterStreamContext.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FilterStreamContext.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.FilterOutputStream;
 import java.io.IOException;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FilterStreamProvider.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FilterStreamProvider.java
index 6debaec..abc4ee9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FilterStreamProvider.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/FilterStreamProvider.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.FilterOutputStream;
 import java.io.IOException;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/HDFSFileCopyModule.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/HDFSFileCopyModule.java
index 5fbc580..b00278b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/HDFSFileCopyModule.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/HDFSFileCopyModule.java
@@ -17,19 +17,19 @@
  * under the License.
  */
 
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.io.block.AbstractBlockReader.ReaderRecord;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.io.block.BlockWriter;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileSplitter.FileMetadata;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context.PortContext;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Module;
-import com.datatorrent.lib.io.block.AbstractBlockReader.ReaderRecord;
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.io.block.BlockWriter;
-import com.datatorrent.lib.io.fs.AbstractFileSplitter.FileMetadata;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/HDFSFileMerger.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/HDFSFileMerger.java
index cd2bee3..90feccc 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/HDFSFileMerger.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/HDFSFileMerger.java
@@ -17,13 +17,14 @@
  * under the License.
  */
 
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.IOException;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.fs.Synchronizer.OutputFileMetadata;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
@@ -31,7 +32,6 @@
 import com.google.common.annotations.VisibleForTesting;
 
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.io.fs.Synchronizer.OutputFileMetadata;
 
 /**
  * HDFS file merger extends file merger to optimize for HDFS file copy usecase.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/S3BlockReader.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/S3BlockReader.java
index e88191c..60b245a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/S3BlockReader.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/S3BlockReader.java
@@ -16,10 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.IOException;
 
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.io.block.FSSliceReader;
+import org.apache.apex.malhar.lib.io.block.ReaderContext;
 import org.apache.hadoop.fs.FSDataInputStream;
 
 import com.amazonaws.auth.BasicAWSCredentials;
@@ -31,9 +34,6 @@
 import com.google.common.io.ByteStreams;
 
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.io.block.FSSliceReader;
-import com.datatorrent.lib.io.block.ReaderContext;
 
 /**
  * S3BlockReader extends from BlockReader and serves the functionality of read objects and
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/S3InputModule.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/S3InputModule.java
index 366eaa5..9766f62 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/S3InputModule.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/S3InputModule.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
-import com.datatorrent.lib.io.block.FSSliceReader;
+import org.apache.apex.malhar.lib.io.block.FSSliceReader;
 
 /**
  * S3InputModule is used to read files/list of files (or directory) from S3 bucket. <br/>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/Synchronizer.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/Synchronizer.java
index a325a2f..547898d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/Synchronizer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/Synchronizer.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -32,6 +32,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata.FileBlockMetadata;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileSplitter.FileMetadata;
+import org.apache.apex.malhar.lib.io.fs.FileStitcher.BlockNotFoundException;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 
@@ -42,10 +46,6 @@
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.io.block.BlockMetadata.FileBlockMetadata;
-import com.datatorrent.lib.io.fs.AbstractFileSplitter.FileMetadata;
-import com.datatorrent.lib.io.fs.FileStitcher.BlockNotFoundException;
 
 /**
  * Synchronizer waits for all data blocks for a file to be written to disk. It
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/TailFsInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/TailFsInputOperator.java
index f2e9a8c..569d8bb 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/TailFsInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/TailFsInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.File;
 import java.io.IOException;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/package-info.java
index 872a618..e010cb1 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/fs/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/fs/package-info.java
@@ -20,4 +20,4 @@
  * Library of input operators for writing into file streams and output operators for reading from file streams.
  * The file I/O operators interact with entities outside of DAG, and at times outside of Hadoop
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/AbstractJMSInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/AbstractJMSInputOperator.java
index 72bf63c..09c2959 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/AbstractJMSInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/AbstractJMSInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.io.IOException;
 import java.util.Map;
@@ -38,6 +38,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.counters.BasicCounters;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.commons.lang.mutable.MutableLong;
@@ -53,7 +54,6 @@
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.Operator.ActivationListener;
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.lib.counters.BasicCounters;
 
 /**
  * This is the base implementation of a JMS input operator.<br/>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/AbstractJMSOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/AbstractJMSOutputOperator.java
index bac0816..16b6311 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/AbstractJMSOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/AbstractJMSOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.io.IOException;
 import java.util.List;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/AbstractJMSSinglePortOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/AbstractJMSSinglePortOutputOperator.java
index f26ecf4..0386057 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/AbstractJMSSinglePortOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/AbstractJMSSinglePortOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/FSPsuedoTransactionableStore.java b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/FSPsuedoTransactionableStore.java
index 31eaf18..0676869 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/FSPsuedoTransactionableStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/FSPsuedoTransactionableStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.io.IOException;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSBase.java b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSBase.java
index 99c2eeb..e532f4f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSBase.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSBase.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.util.Map;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSBaseTransactionableStore.java b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSBaseTransactionableStore.java
index 822f841..a531510 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSBaseTransactionableStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSBaseTransactionableStore.java
@@ -16,9 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
-import com.datatorrent.lib.db.TransactionableStore;
+import org.apache.apex.malhar.lib.db.TransactionableStore;
 
 /**
  * This is a base implementation for a transactionable store.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSMultiPortOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSMultiPortOutputOperator.java
index 3bb8cb9..63ecae0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSMultiPortOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSMultiPortOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.io.Serializable;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSObjectInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSObjectInputOperator.java
index 0bc0c79..c6d6bfb 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSObjectInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSObjectInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.io.Serializable;
 import java.util.Enumeration;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSStringInputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSStringInputOperator.java
index 97c00d8..8255662 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSStringInputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSStringInputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import javax.jms.JMSException;
 import javax.jms.Message;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSTransactionableStore.java b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSTransactionableStore.java
index 996bfd4..848ffdd 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSTransactionableStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/JMSTransactionableStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.io.IOException;
 import java.util.Enumeration;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/package-info.java
index ad4f163..4222587 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/jms/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/jms/package-info.java
@@ -20,4 +20,4 @@
  * Library of input operators for writing into jms broker and output operators for reading from jms broker.
  * The jms operators interact with entities outside of DAG, and at times outside of Hadoop
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/io/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/io/package-info.java
index 061fb23..5b8d3c6 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/io/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/io/package-info.java
@@ -21,4 +21,4 @@
  * The I/O operators interact with entities outside of DAG, and at times outside of Hadoop
  */
 
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/AbstractJoinOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/join/AbstractJoinOperator.java
index d0f722d..99115ca 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/AbstractJoinOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/AbstractJoinOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import java.util.ArrayList;
 import java.util.Calendar;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/AbstractManagedStateInnerJoinOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/join/AbstractManagedStateInnerJoinOperator.java
index 453da80..c014822 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/AbstractManagedStateInnerJoinOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/AbstractManagedStateInnerJoinOperator.java
@@ -25,6 +25,8 @@
 import java.util.concurrent.Future;
 
 import org.joda.time.Duration;
+
+import org.apache.apex.malhar.lib.fileaccess.FileAccessFSImpl;
 import org.apache.apex.malhar.lib.state.managed.ManagedTimeStateImpl;
 import org.apache.apex.malhar.lib.state.managed.ManagedTimeStateMultiValue;
 import org.apache.apex.malhar.lib.state.managed.MovingBoundaryTimeBucketAssigner;
@@ -34,7 +36,6 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Operator;
-import com.datatorrent.lib.fileaccess.FileAccessFSImpl;
 
 /**
  * An abstract implementation of inner join operator over Managed state which extends from
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/AntiJoinOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/join/AntiJoinOperator.java
index 1eb7957..0e17871 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/AntiJoinOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/AntiJoinOperator.java
@@ -16,13 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.index.Index;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
 import com.datatorrent.api.Context.OperatorContext;
@@ -30,8 +32,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.lib.streamquery.condition.Condition;
-import com.datatorrent.lib.streamquery.index.Index;
 
 /**
  * An implementation of Operator that reads table row data from two table data input ports. <br>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/Bucket.java b/library/src/main/java/org/apache/apex/malhar/lib/join/Bucket.java
index fc9dfea..9934d41 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/Bucket.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/Bucket.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import java.util.List;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/InMemoryStore.java b/library/src/main/java/org/apache/apex/malhar/lib/join/InMemoryStore.java
index 346c215..95ba473 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/InMemoryStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/InMemoryStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import java.util.List;
 import org.slf4j.Logger;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/JoinStore.java b/library/src/main/java/org/apache/apex/malhar/lib/join/JoinStore.java
index 5cfb2f1..97407c0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/JoinStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/JoinStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import java.util.List;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/JoinStreamCodec.java b/library/src/main/java/org/apache/apex/malhar/lib/join/JoinStreamCodec.java
index 2bc12d1..f71be59 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/JoinStreamCodec.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/JoinStreamCodec.java
@@ -18,8 +18,8 @@
  */
 package org.apache.apex.malhar.lib.join;
 
-import com.datatorrent.lib.codec.KryoSerializableStreamCodec;
-import com.datatorrent.lib.util.PojoUtils;
+import org.apache.apex.malhar.lib.codec.KryoSerializableStreamCodec;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 
 /**
  * Stream codec based on keyExpression for POJO Inner Join Operator.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/MapJoinOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/join/MapJoinOperator.java
index 3d24a50..8189b62 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/MapJoinOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/MapJoinOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import java.util.Calendar;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/POJOInnerJoinOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/join/POJOInnerJoinOperator.java
index 812271f..8a048bf 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/POJOInnerJoinOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/POJOInnerJoinOperator.java
@@ -22,6 +22,7 @@
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.apex.malhar.lib.window.impl.KeyedWindowedMergeOperatorImpl;
 import org.apache.apex.malhar.lib.window.impl.WindowedMergeOperatorImpl;
 import org.apache.commons.lang3.ClassUtils;
@@ -33,7 +34,6 @@
 import com.datatorrent.api.StreamCodec;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.PojoUtils;
 
 /**
  * Concrete implementation of AbstractManagedStateInnerJoinOperator and receives objects from both streams.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/POJOJoinOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/join/POJOJoinOperator.java
index c327cd9..e92b768 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/POJOJoinOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/POJOJoinOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
@@ -24,11 +24,10 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 
-import com.datatorrent.lib.util.PojoUtils;
-
 /**
  * This class takes a POJO as input from each of the input port. Operator joines the input tuples
  * based on join constraint and emit the result.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/SemiJoinOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/join/SemiJoinOperator.java
index 2ace5c8..e825c3c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/SemiJoinOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/SemiJoinOperator.java
@@ -16,13 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.index.Index;
 import org.apache.hadoop.classification.InterfaceStability.Evolving;
 
 import com.datatorrent.api.Context.OperatorContext;
@@ -30,8 +32,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.lib.streamquery.condition.Condition;
-import com.datatorrent.lib.streamquery.index.Index;
 
 /**
  * An implementation of Operator that reads table row data from two table data input ports. <br>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/TimeBasedStore.java b/library/src/main/java/org/apache/apex/malhar/lib/join/TimeBasedStore.java
index ef6060b..354d191 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/TimeBasedStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/TimeBasedStore.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import java.lang.reflect.Array;
 import java.util.ArrayList;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/TimeEvent.java b/library/src/main/java/org/apache/apex/malhar/lib/join/TimeEvent.java
index c341a02..343ac1d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/TimeEvent.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/TimeEvent.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import org.apache.hadoop.classification.InterfaceStability;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/join/TimeEventImpl.java b/library/src/main/java/org/apache/apex/malhar/lib/join/TimeEventImpl.java
index e579502..9ed2cd2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/join/TimeEventImpl.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/join/TimeEventImpl.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import javax.annotation.Nonnull;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/ApacheLogParseMapOutputOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/ApacheLogParseMapOutputOperator.java
index 33bdbaa..2f0fcd9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/ApacheLogParseMapOutputOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/ApacheLogParseMapOutputOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.text.ParseException;
 import java.util.Arrays;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/ApacheLogParseOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/ApacheLogParseOperator.java
index f1dffe8..2fe78f5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/ApacheLogParseOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/ApacheLogParseOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.text.ParseException;
 import java.util.regex.Matcher;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/ApacheVirtualLogParseOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/ApacheVirtualLogParseOperator.java
index 1ba555e..5553cc5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/ApacheVirtualLogParseOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/ApacheVirtualLogParseOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.io.IOException;
 import java.text.ParseException;
@@ -37,7 +37,7 @@
  * status code (outputStatusCode), bytes (outputBytes), referer (outputReferer),
  * and agent (outputAgent).&nbsp;Each of the fields are emitted to a separate output port.
  * <p>
- * Please refer to docs for {@link com.datatorrent.lib.logs.ApacheLogParseOperator} documentation.
+ * Please refer to docs for {@link org.apache.apex.malhar.lib.logs.ApacheLogParseOperator} documentation.
  * More output ports in this operator.
  * </p>
  * @displayName Apache Virtual Log Parse
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/DimensionAggregationUnifier.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/DimensionAggregationUnifier.java
index 6c56b11..660f982 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/DimensionAggregationUnifier.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/DimensionAggregationUnifier.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/DimensionObject.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/DimensionObject.java
index cba895f..4a2e877 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/DimensionObject.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/DimensionObject.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import org.apache.commons.lang.mutable.MutableDouble;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenArrayList.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenArrayList.java
index de0e1bd..aea3df8 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenArrayList.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenArrayList.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.HashMap;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenHashMap.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenHashMap.java
index c79e884..5d6a1fe 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenHashMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenHashMap.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.HashMap;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/FilteredLineTokenizerKeyVal.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/FilteredLineTokenizerKeyVal.java
index a6acd4c..8487ffc 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/FilteredLineTokenizerKeyVal.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/FilteredLineTokenizerKeyVal.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.HashMap;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/InformationExtractor.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/InformationExtractor.java
index 299ddff..4c524f5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/InformationExtractor.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/InformationExtractor.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.io.Serializable;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/LineToTokenArrayList.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/LineToTokenArrayList.java
index 182078b..46a04f3 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/LineToTokenArrayList.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/LineToTokenArrayList.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.BaseLineTokenizer;
+import org.apache.apex.malhar.lib.util.UnifierArrayList;
+
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
 import com.datatorrent.api.annotation.Stateless;
 
-import com.datatorrent.lib.util.BaseLineTokenizer;
-import com.datatorrent.lib.util.UnifierArrayList;
-
 /**
  * This operator splits string objects into tokens and sub tokens.&nbsp;
  * This operator emits a list of tokens, as well as a map from tokens to sub tokens.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/LineToTokenHashMap.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/LineToTokenHashMap.java
index 0060c74..e2faea2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/LineToTokenHashMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/LineToTokenHashMap.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.BaseLineTokenizer;
+import org.apache.apex.malhar.lib.util.UnifierHashMap;
+
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.Stateless;
 
-import com.datatorrent.lib.util.BaseLineTokenizer;
-import com.datatorrent.lib.util.UnifierHashMap;
-
 /**
  * This operator splits string objects into tokens.&nbsp;
  * A key value pair is emitted where the key is the first token in an input tuple
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/LineTokenizer.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/LineTokenizer.java
index 814d132..66030d2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/LineTokenizer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/LineTokenizer.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
+
+import org.apache.apex.malhar.lib.util.BaseLineTokenizer;
 
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.util.BaseLineTokenizer;
 
 /**
  * This operator splits lines into tokens and emits token strings on the output port.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/LineTokenizerKeyVal.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/LineTokenizerKeyVal.java
index 0d89996..e74fced 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/LineTokenizerKeyVal.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/LineTokenizerKeyVal.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.BaseLineTokenizer;
+import org.apache.apex.malhar.lib.util.UnifierHashMap;
+
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.util.BaseLineTokenizer;
-import com.datatorrent.lib.util.UnifierHashMap;
 
 /**
  * This operator splits lines into tokens, and tokens into sub-tokens.&nbsp;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/MultiWindowDimensionAggregation.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/MultiWindowDimensionAggregation.java
index 3cace73..cef42e7 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/MultiWindowDimensionAggregation.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/MultiWindowDimensionAggregation.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -30,13 +30,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.commons.lang.mutable.MutableDouble;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * This class aggregates the value of given dimension across windows.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/RegexMatchMapOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/RegexMatchMapOperator.java
index e469b0c..3fd33fd 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/RegexMatchMapOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/RegexMatchMapOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/logs/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/logs/package-info.java
index 53c7ce7..775a6c5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/logs/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/logs/package-info.java
@@ -20,4 +20,4 @@
  * Library of log line processing operators.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractAggregateCalc.java b/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractAggregateCalc.java
index e403979..ff43382 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractAggregateCalc.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractAggregateCalc.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.Collection;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractOutput.java b/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractOutput.java
index 9600021..2929b38 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractOutput.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractOutput.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractXmlCartesianProduct.java b/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractXmlCartesianProduct.java
index 10b6c15..9208db7 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractXmlCartesianProduct.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractXmlCartesianProduct.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -32,8 +32,9 @@
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
+import org.apache.apex.malhar.lib.xml.AbstractXmlDOMOperator;
+
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.xml.AbstractXmlDOMOperator;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractXmlKeyValueCartesianProduct.java b/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractXmlKeyValueCartesianProduct.java
index f7283e0..e8c118d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractXmlKeyValueCartesianProduct.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/AbstractXmlKeyValueCartesianProduct.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/Average.java b/library/src/main/java/org/apache/apex/malhar/lib/math/Average.java
index ff7a9d7..643c2f5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/Average.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/Average.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
+
+import org.apache.apex.malhar.lib.util.BaseNumberValueOperator;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.Pair;
-import com.datatorrent.lib.util.BaseNumberValueOperator;
 
 /**
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/AverageKeyVal.java b/library/src/main/java/org/apache/apex/malhar/lib/math/AverageKeyVal.java
index e443780..b97a636 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/AverageKeyVal.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/AverageKeyVal.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseNumberKeyValueOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.commons.lang.mutable.MutableDouble;
 import org.apache.commons.lang.mutable.MutableLong;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.BaseNumberKeyValueOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/Division.java b/library/src/main/java/org/apache/apex/malhar/lib/math/Division.java
index f5a01aa..037505e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/Division.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/Division.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.ArrayList;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/LogicalCompare.java b/library/src/main/java/org/apache/apex/malhar/lib/math/LogicalCompare.java
index 41ce5a0..93f5a5a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/LogicalCompare.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/LogicalCompare.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/LogicalCompareToConstant.java b/library/src/main/java/org/apache/apex/malhar/lib/math/LogicalCompareToConstant.java
index 659a287..076a32b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/LogicalCompareToConstant.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/LogicalCompareToConstant.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/Margin.java b/library/src/main/java/org/apache/apex/malhar/lib/math/Margin.java
index 5d1872e..cd35e2b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/Margin.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/Margin.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
+
+import org.apache.apex.malhar.lib.util.BaseNumberValueOperator;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.lib.util.BaseNumberValueOperator;
 
 /**
  * This operator sums the division of numerator and denominator value arriving at input ports.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/MarginKeyVal.java b/library/src/main/java/org/apache/apex/malhar/lib/math/MarginKeyVal.java
index e3af508..3013b30 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/MarginKeyVal.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/MarginKeyVal.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseNumberKeyValueOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.commons.lang.mutable.MutableDouble;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.StreamCodec;
-import com.datatorrent.lib.util.BaseNumberKeyValueOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/MarginMap.java b/library/src/main/java/org/apache/apex/malhar/lib/math/MarginMap.java
index d1fa33f..3444a41 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/MarginMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/MarginMap.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseNumberKeyValueOperator;
+import org.apache.apex.malhar.lib.util.UnifierHashMap;
 import org.apache.commons.lang.mutable.MutableDouble;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.util.BaseNumberKeyValueOperator;
-import com.datatorrent.lib.util.UnifierHashMap;
 
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/Max.java b/library/src/main/java/org/apache/apex/malhar/lib/math/Max.java
index 8ec8b2f..df89409 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/Max.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/Max.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
+
+import org.apache.apex.malhar.lib.util.BaseNumberValueOperator;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator.Unifier;
-import com.datatorrent.lib.util.BaseNumberValueOperator;
 
 /**
  *<p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/MaxKeyVal.java b/library/src/main/java/org/apache/apex/malhar/lib/math/MaxKeyVal.java
index 95a0a08..22c6138 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/MaxKeyVal.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/MaxKeyVal.java
@@ -16,16 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseNumberKeyValueOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.StreamCodec;
-import com.datatorrent.lib.util.BaseNumberKeyValueOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/Min.java b/library/src/main/java/org/apache/apex/malhar/lib/math/Min.java
index a862f2e..979479c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/Min.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/Min.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
+
+import org.apache.apex.malhar.lib.util.BaseNumberValueOperator;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator.Unifier;
-import com.datatorrent.lib.util.BaseNumberValueOperator;
 
 /**
  * This operator implements Unifier interface and emits at end of window minimum of all values sub-classed from Number in the incoming stream.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/MinKeyVal.java b/library/src/main/java/org/apache/apex/malhar/lib/math/MinKeyVal.java
index 2468239..955ea00 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/MinKeyVal.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/MinKeyVal.java
@@ -16,16 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseNumberKeyValueOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.StreamCodec;
-import com.datatorrent.lib.util.BaseNumberKeyValueOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/MultiplyByConstant.java b/library/src/main/java/org/apache/apex/malhar/lib/math/MultiplyByConstant.java
index 5396768..f175af3 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/MultiplyByConstant.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/MultiplyByConstant.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/Range.java b/library/src/main/java/org/apache/apex/malhar/lib/math/Range.java
index ad54d4d..eede151 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/Range.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/Range.java
@@ -16,13 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
+
+import org.apache.apex.malhar.lib.util.BaseNumberValueOperator;
+import org.apache.apex.malhar.lib.util.HighLow;
+import org.apache.apex.malhar.lib.util.UnifierRange;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.util.BaseNumberValueOperator;
-import com.datatorrent.lib.util.HighLow;
-import com.datatorrent.lib.util.UnifierRange;
 
 /**
  * This operator emits the range of values at the end of window.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/RangeKeyVal.java b/library/src/main/java/org/apache/apex/malhar/lib/math/RangeKeyVal.java
index 241f482..679b81f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/RangeKeyVal.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/RangeKeyVal.java
@@ -16,18 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseNumberKeyValueOperator;
+import org.apache.apex.malhar.lib.util.HighLow;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.UnifierKeyValRange;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.StreamCodec;
-import com.datatorrent.lib.util.BaseNumberKeyValueOperator;
-import com.datatorrent.lib.util.HighLow;
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.UnifierKeyValRange;
 
 /**
  *  This operator emits the range for each key at the end of window.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/RunningAverage.java b/library/src/main/java/org/apache/apex/malhar/lib/math/RunningAverage.java
index 63389ea..069c1d0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/RunningAverage.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/RunningAverage.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/Sigma.java b/library/src/main/java/org/apache/apex/malhar/lib/math/Sigma.java
index 1a9df60..6d3db38 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/Sigma.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/Sigma.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.Collection;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/SingleVariableAbstractCalculus.java b/library/src/main/java/org/apache/apex/malhar/lib/math/SingleVariableAbstractCalculus.java
index 9569074..2392646 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/SingleVariableAbstractCalculus.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/SingleVariableAbstractCalculus.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import com.datatorrent.api.DefaultInputPort;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/SquareCalculus.java b/library/src/main/java/org/apache/apex/malhar/lib/math/SquareCalculus.java
index ae7ed06..7786a0b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/SquareCalculus.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/SquareCalculus.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import com.datatorrent.api.annotation.Stateless;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/Sum.java b/library/src/main/java/org/apache/apex/malhar/lib/math/Sum.java
index 0214268..3e341fb 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/Sum.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/Sum.java
@@ -16,17 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseNumberValueOperator;
+import org.apache.apex.malhar.lib.util.UnifierSumNumber;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator.Unifier;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.BaseNumberValueOperator;
-import com.datatorrent.lib.util.UnifierSumNumber;
 
 /**
  * This operator implements Unifier interface and emits the sum of values at the end of window.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/SumKeyVal.java b/library/src/main/java/org/apache/apex/malhar/lib/math/SumKeyVal.java
index 99e2492..5e720cd 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/SumKeyVal.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/SumKeyVal.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseNumberKeyValueOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.commons.lang.mutable.MutableDouble;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.StreamCodec;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.BaseNumberKeyValueOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Emits the sum of values for each key at the end of window.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/XmlKeyValueStringCartesianProduct.java b/library/src/main/java/org/apache/apex/malhar/lib/math/XmlKeyValueStringCartesianProduct.java
index cc50fe1..2c07b38 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/XmlKeyValueStringCartesianProduct.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/XmlKeyValueStringCartesianProduct.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.io.StringReader;
 import java.util.List;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/math/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/math/package-info.java
index c22309b..e548e28 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/math/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/math/package-info.java
@@ -34,4 +34,4 @@
  * <br>
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/metric/AvgAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/metric/AvgAggregator.java
index ab9a261..aeccbe3 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/metric/AvgAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/metric/AvgAggregator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.metric;
+package org.apache.apex.malhar.lib.metric;
 
 import java.io.Serializable;
 import java.util.Collection;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/metric/max/DoubleMaxAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/metric/max/DoubleMaxAggregator.java
index 13988f9..ee99c62 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/metric/max/DoubleMaxAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/metric/max/DoubleMaxAggregator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.metric.max;
+package org.apache.apex.malhar.lib.metric.max;
 
 import java.io.Serializable;
 import java.util.Collection;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/metric/max/FloatMaxAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/metric/max/FloatMaxAggregator.java
index 6b228e8..590004f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/metric/max/FloatMaxAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/metric/max/FloatMaxAggregator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.metric.max;
+package org.apache.apex.malhar.lib.metric.max;
 
 import java.io.Serializable;
 import java.util.Collection;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/metric/max/IntMaxAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/metric/max/IntMaxAggregator.java
index 2cd0264..78c60e5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/metric/max/IntMaxAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/metric/max/IntMaxAggregator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.metric.max;
+package org.apache.apex.malhar.lib.metric.max;
 
 import java.io.Serializable;
 import java.util.Collection;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/metric/max/LongMaxAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/metric/max/LongMaxAggregator.java
index f0aab73..d70a228 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/metric/max/LongMaxAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/metric/max/LongMaxAggregator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.metric.max;
+package org.apache.apex.malhar.lib.metric.max;
 
 import java.io.Serializable;
 import java.util.Collection;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/metric/min/DoubleMinAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/metric/min/DoubleMinAggregator.java
index 1b1b712..da6fba7 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/metric/min/DoubleMinAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/metric/min/DoubleMinAggregator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.metric.min;
+package org.apache.apex.malhar.lib.metric.min;
 
 import java.io.Serializable;
 import java.util.Collection;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/metric/min/FloatMinAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/metric/min/FloatMinAggregator.java
index 6713911..4de5fe0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/metric/min/FloatMinAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/metric/min/FloatMinAggregator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.metric.min;
+package org.apache.apex.malhar.lib.metric.min;
 
 import java.io.Serializable;
 import java.util.Collection;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/metric/min/IntMinAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/metric/min/IntMinAggregator.java
index 72c610f..49546aa 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/metric/min/IntMinAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/metric/min/IntMinAggregator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.metric.min;
+package org.apache.apex.malhar.lib.metric.min;
 
 import java.io.Serializable;
 import java.util.Collection;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/metric/min/LongMinAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/metric/min/LongMinAggregator.java
index 0deb808..8120996 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/metric/min/LongMinAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/metric/min/LongMinAggregator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.metric.min;
+package org.apache.apex.malhar.lib.metric.min;
 
 import java.io.Serializable;
 import java.util.Collection;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/metric/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/metric/package-info.java
index c2ab8aa..783c03f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/metric/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/metric/package-info.java
@@ -19,4 +19,4 @@
 /**
  * This package contains simple physical metrics aggregators.
  */
-package com.datatorrent.lib.metric;
+package org.apache.apex.malhar.lib.metric;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/AbstractSlidingWindow.java b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/AbstractSlidingWindow.java
index 7217086..bc23aad 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/AbstractSlidingWindow.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/AbstractSlidingWindow.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.multiwindow;
+package org.apache.apex.malhar.lib.multiwindow;
 
 import java.util.ArrayList;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/AbstractSlidingWindowKeyVal.java b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/AbstractSlidingWindowKeyVal.java
index 69e8819..971a82f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/AbstractSlidingWindowKeyVal.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/AbstractSlidingWindowKeyVal.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.multiwindow;
+package org.apache.apex.malhar.lib.multiwindow;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -24,9 +24,10 @@
 
 import javax.validation.constraints.Min;
 
+import org.apache.apex.malhar.lib.util.BaseNumberKeyValueOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.DefaultInputPort;
-import com.datatorrent.lib.util.BaseNumberKeyValueOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowRangeKeyVal.java b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowRangeKeyVal.java
index ad4f8e5..5f66a6a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowRangeKeyVal.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowRangeKeyVal.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.multiwindow;
+package org.apache.apex.malhar.lib.multiwindow;
 
 import java.util.Map;
 
 import javax.validation.constraints.Min;
 
-import com.datatorrent.lib.math.RangeKeyVal;
-import com.datatorrent.lib.util.HighLow;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.math.RangeKeyVal;
+import org.apache.apex.malhar.lib.util.HighLow;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
  * A range operator of KeyValPair schema which calculates range across multiple streaming windows.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowSumKeyVal.java b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowSumKeyVal.java
index 7d5c377..fbdac3e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowSumKeyVal.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowSumKeyVal.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.multiwindow;
+package org.apache.apex.malhar.lib.multiwindow;
 
 import java.util.Map;
 
 import javax.validation.constraints.Min;
 
+import org.apache.apex.malhar.lib.math.SumKeyVal;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.lib.math.SumKeyVal;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * A sum operator of KeyValPair schema which accumulates sum across multiple
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/SimpleMovingAverage.java b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/SimpleMovingAverage.java
index 4d0a2c1..bf0c0e3 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/SimpleMovingAverage.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/SimpleMovingAverage.java
@@ -16,14 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.multiwindow;
+package org.apache.apex.malhar.lib.multiwindow;
 
 import java.util.ArrayList;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Calculates simple moving average (SMA) of last N window. <br>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/SimpleMovingAverageObject.java b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/SimpleMovingAverageObject.java
index 09dc6df..aceb06a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/SimpleMovingAverageObject.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/SimpleMovingAverageObject.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.multiwindow;
+package org.apache.apex.malhar.lib.multiwindow;
 
 
 import org.apache.commons.lang.mutable.MutableDouble;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/SortedMovingWindow.java b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/SortedMovingWindow.java
index 892c822..325d3f5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/SortedMovingWindow.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/SortedMovingWindow.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.multiwindow;
+package org.apache.apex.malhar.lib.multiwindow;
 
 import java.util.Comparator;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/package-info.java
index 78a4466..c6f9047 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/multiwindow/package-info.java
@@ -20,4 +20,4 @@
  * Library of multi-window operators including sliding window.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.multiwindow;
+package org.apache.apex.malhar.lib.multiwindow;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/parser/Parser.java b/library/src/main/java/org/apache/apex/malhar/lib/parser/Parser.java
index 0403dc9..569db3f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/parser/Parser.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/parser/Parser.java
@@ -16,8 +16,9 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.parser;
+package org.apache.apex.malhar.lib.parser;
 
+import org.apache.apex.malhar.lib.converter.Converter;
 import org.apache.hadoop.classification.InterfaceStability;
 
 import com.datatorrent.api.AutoMetric;
@@ -27,7 +28,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.converter.Converter;
 
 /**
  * Abstract class that implements Converter interface. This is a schema enabled
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/parser/XmlParser.java b/library/src/main/java/org/apache/apex/malhar/lib/parser/XmlParser.java
index 3b98ea7..694cfd5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/parser/XmlParser.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/parser/XmlParser.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.parser;
+package org.apache.apex.malhar.lib.parser;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -38,6 +38,8 @@
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
+
+import org.apache.apex.malhar.lib.util.ReusableStringReader;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataInputStream;
@@ -47,7 +49,6 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
-import com.datatorrent.lib.util.ReusableStringReader;
 import com.datatorrent.netlet.util.DTThrowable;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/parser/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/parser/package-info.java
index d737df5..6d821fa 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/parser/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/parser/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.parser;
+package org.apache.apex.malhar.lib.parser;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/partitioner/StatelessThroughputBasedPartitioner.java b/library/src/main/java/org/apache/apex/malhar/lib/partitioner/StatelessThroughputBasedPartitioner.java
index 77f98e8..040a8b9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/partitioner/StatelessThroughputBasedPartitioner.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/partitioner/StatelessThroughputBasedPartitioner.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.partitioner;
+package org.apache.apex.malhar.lib.partitioner;
 
 import com.datatorrent.api.Operator;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/partitioner/StatsAwareStatelessPartitioner.java b/library/src/main/java/org/apache/apex/malhar/lib/partitioner/StatsAwareStatelessPartitioner.java
index bf648c7..4626d65 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/partitioner/StatsAwareStatelessPartitioner.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/partitioner/StatsAwareStatelessPartitioner.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.partitioner;
+package org.apache.apex.malhar.lib.partitioner;
 
 import java.io.IOException;
 import java.io.ObjectInputStream;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/partitioner/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/partitioner/package-info.java
index e4ed414..a336cb5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/partitioner/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/partitioner/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.partitioner;
+package org.apache.apex.malhar.lib.partitioner;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/projection/ProjectionOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/projection/ProjectionOperator.java
index 6c17529..c22dd5a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/projection/ProjectionOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/projection/ProjectionOperator.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.projection;
+package org.apache.apex.malhar.lib.projection;
 
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -26,6 +26,8 @@
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 
@@ -40,7 +42,6 @@
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.PojoUtils;
 
 /**
  * <b>ProjectionOperator</b>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/script/JavaScriptOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/script/JavaScriptOperator.java
index 4e607f1..1919918 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/script/JavaScriptOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/script/JavaScriptOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.script;
+package org.apache.apex.malhar.lib.script;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/script/ScriptOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/script/ScriptOperator.java
index d6589ee..0f8c1b6 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/script/ScriptOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/script/ScriptOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.script;
+package org.apache.apex.malhar.lib.script;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/script/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/script/package-info.java
index 54d4006..8739f78 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/script/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/script/package-info.java
@@ -20,4 +20,4 @@
  * Library of operators for scripting languages, including Bash, JavaScript, and Python.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.script;
+package org.apache.apex.malhar.lib.script;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/AbstractManagedStateImpl.java b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/AbstractManagedStateImpl.java
index f676b84..23a2881 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/AbstractManagedStateImpl.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/AbstractManagedStateImpl.java
@@ -35,6 +35,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccess;
+import org.apache.apex.malhar.lib.fileaccess.TFileImpl;
+import org.apache.apex.malhar.lib.util.comparator.SliceComparator;
+
 import com.esotericsoftware.kryo.serializers.FieldSerializer;
 import com.esotericsoftware.kryo.serializers.JavaSerializer;
 import com.google.common.annotations.VisibleForTesting;
@@ -51,9 +55,6 @@
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.annotation.Stateless;
 import com.datatorrent.common.util.NameableThreadFactory;
-import com.datatorrent.lib.fileaccess.FileAccess;
-import com.datatorrent.lib.fileaccess.TFileImpl;
-import com.datatorrent.lib.util.comparator.SliceComparator;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/Bucket.java b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/Bucket.java
index 8e1112e..bf087d7 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/Bucket.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/Bucket.java
@@ -33,6 +33,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccess;
 import org.apache.apex.malhar.lib.utils.serde.KeyValueByteStreamProvider;
 import org.apache.apex.malhar.lib.utils.serde.SliceUtils;
 import org.apache.apex.malhar.lib.utils.serde.WindowedBlockStream;
@@ -43,7 +44,6 @@
 import com.google.common.collect.Sets;
 import com.google.common.primitives.Longs;
 
-import com.datatorrent.lib.fileaccess.FileAccess;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/BucketsFileSystem.java b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/BucketsFileSystem.java
index 510f3f5..f6ed624 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/BucketsFileSystem.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/BucketsFileSystem.java
@@ -33,6 +33,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccess;
 import org.apache.hadoop.fs.LocatedFileStatus;
 import org.apache.hadoop.fs.RemoteIterator;
 
@@ -42,7 +43,6 @@
 import com.google.common.collect.Table;
 import com.google.common.collect.TreeBasedTable;
 
-import com.datatorrent.lib.fileaccess.FileAccess;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/ManagedStateContext.java b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/ManagedStateContext.java
index b1faac7..897235e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/ManagedStateContext.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/ManagedStateContext.java
@@ -20,8 +20,9 @@
 
 import java.util.Comparator;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccess;
+
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.fileaccess.FileAccess;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeStateMultiValue.java b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeStateMultiValue.java
index 19a6abc..917522f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeStateMultiValue.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeStateMultiValue.java
@@ -31,6 +31,7 @@
 import javax.annotation.Nullable;
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.codec.KryoSerializableStreamCodec;
 import org.apache.apex.malhar.lib.state.spillable.Spillable;
 
 import com.google.common.base.Preconditions;
@@ -38,7 +39,6 @@
 import com.google.common.collect.Multiset;
 
 import com.datatorrent.api.StreamCodec;
-import com.datatorrent.lib.codec.KryoSerializableStreamCodec;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeUnifiedStateImpl.java b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeUnifiedStateImpl.java
index 82d381c..611ee5c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeUnifiedStateImpl.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeUnifiedStateImpl.java
@@ -31,6 +31,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccess;
 import org.apache.apex.malhar.lib.state.BucketedState;
 import org.apache.hadoop.fs.LocatedFileStatus;
 import org.apache.hadoop.fs.RemoteIterator;
@@ -41,7 +42,6 @@
 import com.google.common.util.concurrent.Futures;
 
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.fileaccess.FileAccess;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/statistics/MedianOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/statistics/MedianOperator.java
index 95debb4..d12d49d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/statistics/MedianOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/statistics/MedianOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.statistics;
+package org.apache.apex.malhar.lib.statistics;
 
 import java.util.ArrayList;
 import java.util.Collections;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/statistics/ModeOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/statistics/ModeOperator.java
index f23f7b7..5a031ee 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/statistics/ModeOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/statistics/ModeOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.statistics;
+package org.apache.apex.malhar.lib.statistics;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/statistics/StandardDeviation.java b/library/src/main/java/org/apache/apex/malhar/lib/statistics/StandardDeviation.java
index 8aaf63e..314cd97 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/statistics/StandardDeviation.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/statistics/StandardDeviation.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.statistics;
+package org.apache.apex.malhar.lib.statistics;
 
 import java.util.ArrayList;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/statistics/WeightedMeanOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/statistics/WeightedMeanOperator.java
index 7aa86be..4079a08 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/statistics/WeightedMeanOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/statistics/WeightedMeanOperator.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.statistics;
+package org.apache.apex.malhar.lib.statistics;
+
+import org.apache.apex.malhar.lib.util.BaseNumberValueOperator;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OperatorAnnotation;
 
-import com.datatorrent.lib.util.BaseNumberValueOperator;
-
 /**
  * An implementation of BaseOperator that computes weighted mean of incoming data. <br>
  * <p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/statistics/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/statistics/package-info.java
index f288df8..d7a3de0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/statistics/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/statistics/package-info.java
@@ -17,4 +17,4 @@
  * under the License.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.statistics;
+package org.apache.apex.malhar.lib.statistics;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/AbstractAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/AbstractAggregator.java
index abb6be5..a76a829 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/AbstractAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/AbstractAggregator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.Collection;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/ArrayListAggregator.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/ArrayListAggregator.java
index 7485a36..c4a5105 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/ArrayListAggregator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/ArrayListAggregator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.ArrayList;
 import java.util.Collection;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/ArrayListToItem.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/ArrayListToItem.java
index efd807a..e3f652e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/ArrayListToItem.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/ArrayListToItem.java
@@ -16,14 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.ArrayList;
 
+import org.apache.apex.malhar.lib.util.BaseKeyOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.util.BaseKeyOperator;
 
 /**
  * An implementation of BaseKeyOperator that breaks up an ArrayList tuple into Objects.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/ConsolidatorKeyVal.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/ConsolidatorKeyVal.java
index 6874796..61f62ed 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/ConsolidatorKeyVal.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/ConsolidatorKeyVal.java
@@ -16,18 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.api.annotation.OperatorAnnotation;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * <p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/Counter.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/Counter.java
index d227988..71c1744 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/Counter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/Counter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultInputPort;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/DevNull.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/DevNull.java
index 877b562..816bcbb 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/DevNull.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/DevNull.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.annotation.Stateless;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/DevNullCounter.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/DevNullCounter.java
index 87093fe..f237fdb 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/DevNullCounter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/DevNullCounter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import javax.validation.constraints.Min;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/HashMapToKeyValPair.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/HashMapToKeyValPair.java
index 29ce727..033f0f4 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/HashMapToKeyValPair.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/HashMapToKeyValPair.java
@@ -16,17 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.BaseKeyValueOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.util.BaseKeyValueOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * An implementation of BaseKeyValueOperator that breaks a HashMap tuple into objects.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/JsonByteArrayOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/JsonByteArrayOperator.java
index b33eadc..94a0752 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/JsonByteArrayOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/JsonByteArrayOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.HashMap;
 import java.util.Iterator;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/KeyValPairToHashMap.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/KeyValPairToHashMap.java
index dfa3ba2..2ced6f0 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/KeyValPairToHashMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/KeyValPairToHashMap.java
@@ -16,15 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.BaseKeyValueOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.util.BaseKeyValueOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * An implementation of BaseKeyValueOperator that converts Key Value Pair to a HashMap tuple.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/RoundRobinHashMap.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/RoundRobinHashMap.java
index aee1213..81f171b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/RoundRobinHashMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/RoundRobinHashMap.java
@@ -16,13 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.HashMap;
 
+import org.apache.apex.malhar.lib.util.BaseKeyValueOperator;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.util.BaseKeyValueOperator;
 
 /**
  * <p>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/StreamDuplicater.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/StreamDuplicater.java
index f08b931..fae5cd4 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/StreamDuplicater.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/StreamDuplicater.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
+
+import org.apache.apex.malhar.lib.util.BaseKeyOperator;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.util.BaseKeyOperator;
 
 /**
  * An implementation of BaseKeyValueOperator that duplicates an input stream as is into two output streams.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/StreamMerger.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/StreamMerger.java
index 8678e9f..2591ba9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/StreamMerger.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/StreamMerger.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/stream/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/stream/package-info.java
index 5146eb8..a3ff179 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/stream/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/stream/package-info.java
@@ -20,4 +20,4 @@
  * Library of operators for stream operations
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/streamquery/condition/Condition.java b/library/src/main/java/org/apache/apex/malhar/lib/streamquery/condition/Condition.java
index 86d5581..0132ea3 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/streamquery/condition/Condition.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/streamquery/condition/Condition.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.streamquery.condition;
+package org.apache.apex.malhar.lib.streamquery.condition;
 
 import java.util.Map;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/streamquery/condition/JoinColumnEqualCondition.java b/library/src/main/java/org/apache/apex/malhar/lib/streamquery/condition/JoinColumnEqualCondition.java
index 4d8199e..230efef 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/streamquery/condition/JoinColumnEqualCondition.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/streamquery/condition/JoinColumnEqualCondition.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.streamquery.condition;
+package org.apache.apex.malhar.lib.streamquery.condition;
 
 
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/streamquery/index/ColumnIndex.java b/library/src/main/java/org/apache/apex/malhar/lib/streamquery/index/ColumnIndex.java
index a4ad2b7..b8e42aa 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/streamquery/index/ColumnIndex.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/streamquery/index/ColumnIndex.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.streamquery.index;
+package org.apache.apex.malhar.lib.streamquery.index;
 
 import java.util.Map;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/streamquery/index/Index.java b/library/src/main/java/org/apache/apex/malhar/lib/streamquery/index/Index.java
index 5067d00..30bc239 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/streamquery/index/Index.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/streamquery/index/Index.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.streamquery.index;
+package org.apache.apex.malhar.lib.streamquery.index;
 
 import java.util.Map;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/ArrayListTestSink.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/ArrayListTestSink.java
index 93889be..47745d4 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/ArrayListTestSink.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/ArrayListTestSink.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/CollectorTestSink.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/CollectorTestSink.java
index b9562da..558cb47 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/CollectorTestSink.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/CollectorTestSink.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/CompareFilterTuples.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/CompareFilterTuples.java
index a309b89..487af3f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/CompareFilterTuples.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/CompareFilterTuples.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/CountAndLastTupleTestSink.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/CountAndLastTupleTestSink.java
index 73506ae..e401b7a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/CountAndLastTupleTestSink.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/CountAndLastTupleTestSink.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 /**
  * A sink implementation to collect expected test results.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/CountOccurance.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/CountOccurance.java
index 9f6df10..2c986b8 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/CountOccurance.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/CountOccurance.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.Date;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/CountTestSink.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/CountTestSink.java
index e6a85c9..4f3cefa 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/CountTestSink.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/CountTestSink.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 /**
  * A sink implementation to count expected test results.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventClassifier.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventClassifier.java
index 547340e..b0efa60 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventClassifier.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventClassifier.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventClassifierNumberToHashDouble.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventClassifierNumberToHashDouble.java
index 66ad12e..7aa5a6c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventClassifierNumberToHashDouble.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventClassifierNumberToHashDouble.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.HashMap;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventGenerator.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventGenerator.java
index 6b2ed8f..5865554 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventGenerator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventGenerator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventIncrementer.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventIncrementer.java
index 46b684d..f0cda1f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventIncrementer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/EventIncrementer.java
@@ -16,16 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Creates a random movement by taking in a seed stream and incrementing this data.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/FilterClassifier.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/FilterClassifier.java
index 389cbb3..a2d9950 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/FilterClassifier.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/FilterClassifier.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/FilteredEventClassifier.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/FilteredEventClassifier.java
index 77d3970..2622750 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/FilteredEventClassifier.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/FilteredEventClassifier.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/HashTestSink.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/HashTestSink.java
index 389ecb8..68b7a97 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/HashTestSink.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/HashTestSink.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.HashMap;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/HttpStatusFilter.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/HttpStatusFilter.java
index 08b190e..9a931de 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/HttpStatusFilter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/HttpStatusFilter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/KeyValSum.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/KeyValSum.java
index a6004dc..3d35dc5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/KeyValSum.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/KeyValSum.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/RandomEventGenerator.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/RandomEventGenerator.java
index 55b5c04..c4dfd0e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/RandomEventGenerator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/RandomEventGenerator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.Random;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/RandomWordGenerator.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/RandomWordGenerator.java
index 6d73cab..6e7ff74 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/RandomWordGenerator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/RandomWordGenerator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.Random;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/RedisSumOper.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/RedisSumOper.java
index 8c5a24e..f8bc238 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/RedisSumOper.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/RedisSumOper.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/SeedEventClassifier.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/SeedEventClassifier.java
index efbdca8..7f30e9f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/SeedEventClassifier.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/SeedEventClassifier.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.HashMap;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/SeedEventGenerator.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/SeedEventGenerator.java
index 3d02051..e923226 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/SeedEventGenerator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/SeedEventGenerator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -25,10 +25,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Generates a one time seed load based on the range provided by the keys,
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/SumTestSink.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/SumTestSink.java
index 03f0c42..93ecce3 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/SumTestSink.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/SumTestSink.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import com.datatorrent.api.Sink;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/ThroughputCounter.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/ThroughputCounter.java
index 72a0b1f..9637395 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/ThroughputCounter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/ThroughputCounter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/TopOccurrence.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/TopOccurrence.java
index 3f3da57..f089b1c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/TopOccurrence.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/TopOccurrence.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.ArrayList;
 import java.util.Collections;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/testbench/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/testbench/package-info.java
index 662c508..855bfdc 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/testbench/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/testbench/package-info.java
@@ -20,4 +20,4 @@
  * Library of test bench modules.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/transform/TransformOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/transform/TransformOperator.java
index 6ed8819..b271cea 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/transform/TransformOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/transform/TransformOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.transform;
+package org.apache.apex.malhar.lib.transform;
 
 import java.lang.reflect.Field;
 import java.util.HashMap;
@@ -25,6 +25,8 @@
 import java.util.Map;
 import javax.validation.constraints.NotNull;
 
+import org.apache.apex.malhar.lib.expression.Expression;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.commons.lang3.ClassUtils;
 
 import com.datatorrent.api.Context;
@@ -34,8 +36,6 @@
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
 import com.datatorrent.api.annotation.OutputPortFieldAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.expression.Expression;
-import com.datatorrent.lib.util.PojoUtils;
 
 /**
  * This operator can transform given POJO using provided expressions and
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseFrequentKey.java b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseFrequentKey.java
index 5a4d721..9c85c8d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseFrequentKey.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseFrequentKey.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseFrequentKeyValueMap.java b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseFrequentKeyValueMap.java
index f96b792..6de0b96 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseFrequentKeyValueMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseFrequentKeyValueMap.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseMatchOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseMatchOperator.java
index f7d78db..49b9e81 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseMatchOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseMatchOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Pattern;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseNNonUniqueOperatorMap.java b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseNNonUniqueOperatorMap.java
index 47282b1..87e15b4 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseNNonUniqueOperatorMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseNNonUniqueOperatorMap.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseNOperatorMap.java b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseNOperatorMap.java
index 4f6ab85..f8a2472 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseNOperatorMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseNOperatorMap.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.Map;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseNUniqueOperatorMap.java b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseNUniqueOperatorMap.java
index 34fd332..f2f826f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseNUniqueOperatorMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseNUniqueOperatorMap.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseSortOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseSortOperator.java
index ac7f816..b2c074f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseSortOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractBaseSortOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractDimensionTimeBucketOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractDimensionTimeBucketOperator.java
index 5a52979..e37ef4c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractDimensionTimeBucketOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractDimensionTimeBucketOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.text.NumberFormat;
 import java.text.ParseException;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractKeyValueStorageAgent.java b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractKeyValueStorageAgent.java
index a7f5147..84efbac 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractKeyValueStorageAgent.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/AbstractKeyValueStorageAgent.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.io.IOException;
 import java.io.Serializable;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/ActiveMQMessageListener.java b/library/src/main/java/org/apache/apex/malhar/lib/util/ActiveMQMessageListener.java
index 80cd7b0..d89e887 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/ActiveMQMessageListener.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/ActiveMQMessageListener.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/ActiveMQMultiTypeMessageListener.java b/library/src/main/java/org/apache/apex/malhar/lib/util/ActiveMQMultiTypeMessageListener.java
index 9ab8fb7..ce0c41a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/ActiveMQMultiTypeMessageListener.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/ActiveMQMultiTypeMessageListener.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.Enumeration;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/ArrayHashMapFrequent.java b/library/src/main/java/org/apache/apex/malhar/lib/util/ArrayHashMapFrequent.java
index d5be753..4e3fd60 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/ArrayHashMapFrequent.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/ArrayHashMapFrequent.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseFilteredKeyValueOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseFilteredKeyValueOperator.java
index 43af8d1..0cc2378 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseFilteredKeyValueOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseFilteredKeyValueOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseKeyOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseKeyOperator.java
index 5f855aa..bfad07d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseKeyOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseKeyOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import com.datatorrent.common.util.BaseOperator;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseKeyValueOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseKeyValueOperator.java
index 69c34ca..fa337b7 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseKeyValueOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseKeyValueOperator.java
@@ -16,14 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.io.Serializable;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.codec.JavaSerializationStreamCodec;
+
 import com.datatorrent.api.StreamCodec;
-import com.datatorrent.lib.codec.JavaSerializationStreamCodec;
 
 /**
  * This is an abstract operator that allows cloneKey and cloneValue to allow users to use mutable objects.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseLineTokenizer.java b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseLineTokenizer.java
index 7098af4..2be9856 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseLineTokenizer.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseLineTokenizer.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import javax.validation.constraints.NotNull;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseMatchOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseMatchOperator.java
index 69ad0b5..2a41657 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseMatchOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseMatchOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Pattern;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseNumberKeyValueOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseNumberKeyValueOperator.java
index 10786c4..d08842b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseNumberKeyValueOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseNumberKeyValueOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import javax.validation.constraints.NotNull;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseNumberValueOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseNumberValueOperator.java
index 4dd8a5a..9805827 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseNumberValueOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseNumberValueOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import javax.validation.constraints.NotNull;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseUniqueKeyCounter.java b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseUniqueKeyCounter.java
index 3bc17d9..b11cb3e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseUniqueKeyCounter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseUniqueKeyCounter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import org.apache.commons.lang.mutable.MutableInt;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseUniqueKeyValueCounter.java b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseUniqueKeyValueCounter.java
index 4da4880..de0558a 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/BaseUniqueKeyValueCounter.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/BaseUniqueKeyValueCounter.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import org.apache.commons.lang.mutable.MutableInt;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/DimensionTimeBucketSumOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/DimensionTimeBucketSumOperator.java
index f44b764..9220ae5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/DimensionTimeBucketSumOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/DimensionTimeBucketSumOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/FieldInfo.java b/library/src/main/java/org/apache/apex/malhar/lib/util/FieldInfo.java
index 8153654..bc81e7f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/FieldInfo.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/FieldInfo.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import javax.validation.constraints.NotNull;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/FieldValueGenerator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/FieldValueGenerator.java
index 5c1a241..f92d6ab 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/FieldValueGenerator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/FieldValueGenerator.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import com.datatorrent.lib.util.PojoUtils.Getter;
-import com.datatorrent.lib.util.PojoUtils.Setter;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.PojoUtils.Setter;
 
 /**
  * @since 3.3.0
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/FilterOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/FilterOperator.java
index 772e0b3..796e657 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/FilterOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/FilterOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/HighLow.java b/library/src/main/java/org/apache/apex/malhar/lib/util/HighLow.java
index 7dde0e1..6b042dc 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/HighLow.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/HighLow.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 /**
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/JavaScriptFilterOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/JavaScriptFilterOperator.java
index b0179b9..e7b9143 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/JavaScriptFilterOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/JavaScriptFilterOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.Map;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/KeyHashValPair.java b/library/src/main/java/org/apache/apex/malhar/lib/util/KeyHashValPair.java
index 983d120..b81f018 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/KeyHashValPair.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/KeyHashValPair.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.Map;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/KeyValPair.java b/library/src/main/java/org/apache/apex/malhar/lib/util/KeyValPair.java
index b7b7e5d..24d5607 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/KeyValPair.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/KeyValPair.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.AbstractMap;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/KryoCloneUtils.java b/library/src/main/java/org/apache/apex/malhar/lib/util/KryoCloneUtils.java
index fbe6ce4..7396133 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/KryoCloneUtils.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/KryoCloneUtils.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.io.ByteArrayOutputStream;
 import java.lang.reflect.Array;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/PojoUtils.java b/library/src/main/java/org/apache/apex/malhar/lib/util/PojoUtils.java
index 2bdad86..97811af 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/PojoUtils.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/PojoUtils.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
@@ -31,15 +31,14 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.expression.Expression;
+import org.apache.apex.malhar.lib.expression.JavaExpressionParser;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.expression.Expression;
-import com.datatorrent.lib.expression.JavaExpressionParser;
-
 /**
  * @since 2.1.0
  */
@@ -686,7 +685,7 @@
 
   /**
    * This method takes in expression, compiles the expression to provide a executable form of expression.
-   * This method uses {@link com.datatorrent.lib.expression.JavaExpressionParser} as expression parser.
+   * This method uses {@link org.apache.apex.malhar.lib.expression.JavaExpressionParser} as expression parser.
    *
    * @param inputType  Type of input object
    * @param expr       expression to be compiled.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/ReusableStringReader.java b/library/src/main/java/org/apache/apex/malhar/lib/util/ReusableStringReader.java
index 9be3a2f..d409e89 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/ReusableStringReader.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/ReusableStringReader.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.io.IOException;
 import java.io.Reader;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/ReversibleComparator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/ReversibleComparator.java
index d533111..a2556f8 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/ReversibleComparator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/ReversibleComparator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.Comparator;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/StorageAgentKeyValueStore.java b/library/src/main/java/org/apache/apex/malhar/lib/util/StorageAgentKeyValueStore.java
index 5477f4a..e24ff9e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/StorageAgentKeyValueStore.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/StorageAgentKeyValueStore.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.List;
 
-import com.datatorrent.lib.db.KeyValueStore;
+import org.apache.apex.malhar.lib.db.KeyValueStore;
 
 /**
  * Interface for KeyValue store
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/TableInfo.java b/library/src/main/java/org/apache/apex/malhar/lib/util/TableInfo.java
index 52bf117..f6bffa7 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/TableInfo.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/TableInfo.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.List;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/TimeBucketKey.java b/library/src/main/java/org/apache/apex/malhar/lib/util/TimeBucketKey.java
index 8476a94..5d0237d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/TimeBucketKey.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/TimeBucketKey.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/TopNSort.java b/library/src/main/java/org/apache/apex/malhar/lib/util/TopNSort.java
index 042c75b..374e23b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/TopNSort.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/TopNSort.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 
 import java.util.ArrayList;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/TopNUniqueSort.java b/library/src/main/java/org/apache/apex/malhar/lib/util/TopNUniqueSort.java
index 1171ca3..6a1b7d2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/TopNUniqueSort.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/TopNUniqueSort.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 
 import java.util.ArrayList;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierArrayHashMapFrequent.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierArrayHashMapFrequent.java
index f02a590..c8242a1 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierArrayHashMapFrequent.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierArrayHashMapFrequent.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierArrayList.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierArrayList.java
index cb6c79b..734b929 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierArrayList.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierArrayList.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.ArrayList;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierBooleanAnd.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierBooleanAnd.java
index 13c26cc..8ef7c24 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierBooleanAnd.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierBooleanAnd.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierBooleanOr.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierBooleanOr.java
index 1b900e0..b6ba63c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierBooleanOr.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierBooleanOr.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierCountOccurKey.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierCountOccurKey.java
index 4a9efcf..9b4da94 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierCountOccurKey.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierCountOccurKey.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMap.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMap.java
index 389440a..59c19ec 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMap.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapFrequent.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapFrequent.java
index 046b7e0..c4c1aa2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapFrequent.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapFrequent.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapInteger.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapInteger.java
index 354f18a..361a3e5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapInteger.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapInteger.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapRange.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapRange.java
index 4ba9821..1cb6daf 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapRange.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapRange.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapSumKeys.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapSumKeys.java
index 253e3e2..d72cd39 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapSumKeys.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierHashMapSumKeys.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierKeyValRange.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierKeyValRange.java
index 5e08799..784a0b9 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierKeyValRange.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierKeyValRange.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierMap.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierMap.java
index cc62fd3..78cfa92 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierMap.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierMap.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierRange.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierRange.java
index 103e056..8401b6f 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierRange.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierRange.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierSumNumber.java b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierSumNumber.java
index 9aa817c..ed7da39 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierSumNumber.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/UnifierSumNumber.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DefaultOutputPort;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/comparator/SliceComparator.java b/library/src/main/java/org/apache/apex/malhar/lib/util/comparator/SliceComparator.java
index 3fd1c10..06b2cb6 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/comparator/SliceComparator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/comparator/SliceComparator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util.comparator;
+package org.apache.apex.malhar.lib.util.comparator;
 
 import java.util.Comparator;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/package-info.java b/library/src/main/java/org/apache/apex/malhar/lib/util/package-info.java
index 7b1140c..4daaf0e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/package-info.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/package-info.java
@@ -20,4 +20,4 @@
  * Library of shared operators and utilities.
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/util/time/WindowUtils.java b/library/src/main/java/org/apache/apex/malhar/lib/util/time/WindowUtils.java
index 6d412b5..14473c6 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/util/time/WindowUtils.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/util/time/WindowUtils.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util.time;
+package org.apache.apex.malhar.lib.util.time;
 
 import java.math.BigDecimal;
 
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/wal/FSWindowDataManager.java b/library/src/main/java/org/apache/apex/malhar/lib/wal/FSWindowDataManager.java
index 4db5e17..f8e6f2d 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/wal/FSWindowDataManager.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/wal/FSWindowDataManager.java
@@ -35,7 +35,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperator;
 import org.apache.apex.malhar.lib.state.managed.IncrementalCheckpointManager;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.apex.malhar.lib.utils.FileContextUtils;
 import org.apache.apex.malhar.lib.utils.serde.SerializationBuffer;
 import org.apache.apex.malhar.lib.utils.serde.WindowedBlockStream;
@@ -55,8 +57,6 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.io.fs.AbstractFileInputOperator;
-import com.datatorrent.lib.util.KryoCloneUtils;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/wal/WindowDataManager.java b/library/src/main/java/org/apache/apex/malhar/lib/wal/WindowDataManager.java
index 2622a0d..2d8d5fc 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/wal/WindowDataManager.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/wal/WindowDataManager.java
@@ -24,10 +24,11 @@
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperator;
+
 import com.datatorrent.api.Component;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.io.fs.AbstractFileInputOperator;
 
 /**
  * WindowDataManager manages the state of an operator every application window. It can be used to replay tuples in
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/AbstractPojoJoin.java b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/AbstractPojoJoin.java
index fa63ffd..749ac11 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/AbstractPojoJoin.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/AbstractPojoJoin.java
@@ -25,6 +25,8 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.apex.malhar.lib.window.MergeAccumulation;
 import org.apache.commons.lang3.ClassUtils;
 import org.apache.hadoop.classification.InterfaceStability;
@@ -33,9 +35,6 @@
 import com.google.common.collect.ArrayListMultimap;
 import com.google.common.collect.Multimap;
 
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.PojoUtils;
-
 import static org.apache.apex.malhar.lib.window.accumulation.AbstractPojoJoin.STREAM.LEFT;
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoFullOuterJoin.java b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoFullOuterJoin.java
index 24b8731..9938c59 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoFullOuterJoin.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoFullOuterJoin.java
@@ -22,14 +22,13 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.Multimap;
 
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.PojoUtils;
-
 /**
  * Full outer join Accumulation for Pojo Streams.
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoInnerJoin.java b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoInnerJoin.java
index 1dcc7e5..45c6b84 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoInnerJoin.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoInnerJoin.java
@@ -22,10 +22,10 @@
 import java.util.List;
 import java.util.Map;
 
-import com.google.common.collect.Multimap;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.PojoUtils;
+import com.google.common.collect.Multimap;
 
 /**
  * Inner join Accumulation for Pojo Streams.
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoLeftOuterJoin.java b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoLeftOuterJoin.java
index 8d2f1f0..92444ae 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoLeftOuterJoin.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoLeftOuterJoin.java
@@ -22,14 +22,13 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.Multimap;
 
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.PojoUtils;
-
 /**
  * Left Outer join Accumulation for Pojo Streams.
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoRightOuterJoin.java b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoRightOuterJoin.java
index 3fdcd26..fa7565e 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoRightOuterJoin.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/PojoRightOuterJoin.java
@@ -22,14 +22,13 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 
 import com.google.common.base.Throwables;
 import com.google.common.collect.Multimap;
 
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.PojoUtils;
-
 /**
  * Right outer join Accumulation for Pojo Streams.
  *
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/TopNByKey.java b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/TopNByKey.java
index ea79ed2..ffb748b 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/TopNByKey.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/TopNByKey.java
@@ -24,8 +24,8 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.Accumulation;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Generalized TopNByKey accumulation
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/impl/KeyedWindowedMergeOperatorImpl.java b/library/src/main/java/org/apache/apex/malhar/lib/window/impl/KeyedWindowedMergeOperatorImpl.java
index 9accf25..30c383c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/impl/KeyedWindowedMergeOperatorImpl.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/impl/KeyedWindowedMergeOperatorImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.apex.malhar.lib.window.impl;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.ControlTuple;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.WindowedMergeOperator;
@@ -26,7 +27,6 @@
 
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.annotation.InputPortFieldAnnotation;
-import com.datatorrent.lib.util.KeyValPair;
 
 
 /**
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/impl/KeyedWindowedOperatorImpl.java b/library/src/main/java/org/apache/apex/malhar/lib/window/impl/KeyedWindowedOperatorImpl.java
index 2bfff03..5b992ae 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/impl/KeyedWindowedOperatorImpl.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/impl/KeyedWindowedOperatorImpl.java
@@ -24,6 +24,7 @@
 import java.util.Map;
 
 import org.apache.apex.malhar.lib.state.spillable.SpillableSetMultimapImpl;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.Accumulation;
 import org.apache.apex.malhar.lib.window.SessionWindowedStorage;
 import org.apache.apex.malhar.lib.window.TriggerOption;
@@ -35,7 +36,6 @@
 import org.apache.hadoop.classification.InterfaceStability;
 
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * This is an implementation of WindowedOperator that takes in key value pairs as input and gives out key value pairs
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/impl/WindowedMergeOperatorFeatures.java b/library/src/main/java/org/apache/apex/malhar/lib/window/impl/WindowedMergeOperatorFeatures.java
index 3fceb06..b0113e7 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/impl/WindowedMergeOperatorFeatures.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/impl/WindowedMergeOperatorFeatures.java
@@ -18,14 +18,13 @@
  */
 package org.apache.apex.malhar.lib.window.impl;
 
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.ControlTuple;
 import org.apache.apex.malhar.lib.window.MergeAccumulation;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.Window;
 import org.apache.apex.malhar.lib.window.WindowedStorage;
 
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * This class provides the features in a MergeWindowedOperator and is intended to be used only
  * by the implementation of such operator
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/xml/AbstractXmlDOMOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/xml/AbstractXmlDOMOperator.java
index d74def4..7940c81 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/xml/AbstractXmlDOMOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/xml/AbstractXmlDOMOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.xml;
+package org.apache.apex.malhar.lib.xml;
 
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
diff --git a/library/src/main/java/org/apache/hadoop/io/file/tfile/DTFile.java b/library/src/main/java/org/apache/hadoop/io/file/tfile/DTFile.java
index f1c87ba..48067f3 100644
--- a/library/src/main/java/org/apache/hadoop/io/file/tfile/DTFile.java
+++ b/library/src/main/java/org/apache/hadoop/io/file/tfile/DTFile.java
@@ -43,18 +43,13 @@
 import org.apache.hadoop.io.IOUtils;
 import org.apache.hadoop.io.RawComparator;
 import org.apache.hadoop.io.WritableComparator;
-import org.apache.hadoop.io.file.tfile.ByteArray;
-import org.apache.hadoop.io.file.tfile.MetaBlockAlreadyExists;
-import org.apache.hadoop.io.file.tfile.MetaBlockDoesNotExist;
-import org.apache.hadoop.io.file.tfile.RawComparable;
-import org.apache.hadoop.io.file.tfile.Utils;
 import org.apache.hadoop.io.file.tfile.DTBCFile.Reader.BlockReader;
 import org.apache.hadoop.io.file.tfile.DTBCFile.Writer.BlockAppender;
-import org.apache.hadoop.io.file.tfile.Utils.Version;
 import org.apache.hadoop.io.file.tfile.Chunk.ChunkDecoder;
 import org.apache.hadoop.io.file.tfile.Chunk.ChunkEncoder;
 import org.apache.hadoop.io.file.tfile.CompareUtils.BytesComparator;
 import org.apache.hadoop.io.file.tfile.CompareUtils.MemcmpRawComparator;
+import org.apache.hadoop.io.file.tfile.Utils.Version;
 import org.apache.hadoop.io.serializer.JavaSerializationComparator;
 
 /**
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/BottomNMapTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/BottomNMapTest.java
index c51ee2b..d9ed94b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/BottomNMapTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/BottomNMapTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -28,11 +28,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.algo.BottomNMap}. <p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.BottomNMap}. <p>
  *
  */
 public class BottomNMapTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/BottomNUnifierTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/BottomNUnifierTest.java
index 46222b1..4a33a64 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/BottomNUnifierTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/BottomNUnifierTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 public class BottomNUnifierTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/BottomNUniqueMapTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/BottomNUniqueMapTest.java
index cb3667f..463c2c2 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/BottomNUniqueMapTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/BottomNUniqueMapTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -27,11 +27,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.algo.BottomNUniqueMap}. <p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.BottomNUniqueMap}. <p>
  *
  */
 public class BottomNUniqueMapTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/CompareExceptCountMapTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/CompareExceptCountMapTest.java
index c7c15ff..d143e52 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/CompareExceptCountMapTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/CompareExceptCountMapTest.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.HashMap;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  * @deprecated
- * Functional tests for {@link com.datatorrent.lib.algo.CompareExceptCountMap} <p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.CompareExceptCountMap} <p>
  * (Deprecating inclass) Comment: CompareExceptCountMap is deprecated.
  */
 @Deprecated
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/DistinctTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/DistinctTest.java
index 8e20866..fc8535b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/DistinctTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/DistinctTest.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.HashTestSink;
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.testbench.HashTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.algo.Distinct}
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.Distinct}
  *
  */
 public class DistinctTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/FilterValuesTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/FilterValuesTest.java
index 57b8f19..d99d440 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/FilterValuesTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/FilterValuesTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -25,11 +25,11 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.algo.FilterValues}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.FilterValues}<p>
  *
  */
 public class FilterValuesTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/InsertSortTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/InsertSortTest.java
index 4af8793..fb1a8c9 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/InsertSortTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/InsertSortTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 
@@ -24,11 +24,11 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.algo.InsertSort}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.InsertSort}<p>
  */
 public class InsertSortTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/LeastFrequentKeyTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/LeastFrequentKeyTest.java
index 2911f20..af681f5 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/LeastFrequentKeyTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/LeastFrequentKeyTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -24,11 +24,11 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.algo.LeastFrequentValue}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.LeastFrequentValue}<p>
  *
  */
 public class LeastFrequentKeyTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/MatchAllMapTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/MatchAllMapTest.java
index 047acb6..0f76eca 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/MatchAllMapTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/MatchAllMapTest.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.HashMap;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  * @deprecated
- * Functional tests for {@link com.datatorrent.lib.algo.MatchAllMap}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.MatchAllMap}<p>
  * (Deprecating inclass) Comment: MatchAllMap is deprecated.
  */
 @Deprecated
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/MatchAnyMapTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/MatchAnyMapTest.java
index 12e3c76..c4dd6fb 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/MatchAnyMapTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/MatchAnyMapTest.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.HashMap;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  * @deprecated
- * Functional tests for {@link com.datatorrent.lib.algo.MatchAnyMap}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.MatchAnyMap}<p>
  * (Deprecating inclass) Comment: MatchAnyMap is deprecated.
  */
 @Deprecated
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/MergeSortNumberTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/MergeSortNumberTest.java
index b9991bd..f79c147 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/MergeSortNumberTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/MergeSortNumberTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -24,13 +24,13 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 import static org.junit.Assert.assertTrue;
 
 /**
  * @deprecated
- * Functional tests for {@link com.datatorrent.lib.algo.MergeSort}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.MergeSort}<p>
  *   (Deprecating inclass) Comment: MergeSortNumber is deprecated.
  */
 @Deprecated
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/MostFrequentKeyTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/MostFrequentKeyTest.java
index d2c1cb1..4dcb1fd 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/MostFrequentKeyTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/MostFrequentKeyTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -25,11 +25,11 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.algo.MostFrequentValue}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.MostFrequentValue}<p>
  *
  */
 public class MostFrequentKeyTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/TopNTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/TopNTest.java
index f9b9f30..e1e8c5c 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/TopNTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/TopNTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -27,11 +27,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.algo.TopN}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.TopN}<p>
  *
  */
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/TopNUniqueTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/TopNUniqueTest.java
index 8181b2d..1fe5c99 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/TopNUniqueTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/TopNUniqueTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -27,11 +27,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * @deprecated
- * Functional tests for {@link com.datatorrent.lib.algo.TopNUnique}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.TopNUnique}<p>
  * (Deprecating inclass) Comment: TopNUnique is deprecated.
  */
 @Deprecated
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/UniqueCounterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/UniqueCounterTest.java
index 2502538..d6791bc 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/UniqueCounterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/UniqueCounterTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.HashMap;
 
@@ -24,11 +24,11 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.algo.UniqueCounter}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.algo.UniqueCounter}<p>
  *
  */
 public class UniqueCounterTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/algo/UniqueValueCountTest.java b/library/src/test/java/org/apache/apex/malhar/lib/algo/UniqueValueCountTest.java
index c4afc0e..42fbbf9 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/algo/UniqueValueCountTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/algo/UniqueValueCountTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.algo;
+package org.apache.apex.malhar.lib.algo;
 
 import java.util.Set;
 
@@ -25,14 +25,14 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.google.common.collect.ImmutableMap;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.TestUtils;
-
 /**
- * Test for {@link com.datatorrent.lib.algo.UniqueValueCount} operator
+ * Test for {@link org.apache.apex.malhar.lib.algo.UniqueValueCount} operator
  *
  * @since 0.3.5
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/ThreadUtils.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/ThreadUtils.java
index 49ef166..c0eb9d0 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/ThreadUtils.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/ThreadUtils.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata;
+package org.apache.apex.malhar.lib.appdata;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/datastructs/CacheLRUSynchronousFlushTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/datastructs/CacheLRUSynchronousFlushTest.java
index 74a7b46..4af7bd8 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/datastructs/CacheLRUSynchronousFlushTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/datastructs/CacheLRUSynchronousFlushTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.datastructs;
+package org.apache.apex.malhar.lib.appdata.datastructs;
 
 import java.util.List;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.google.common.collect.Lists;
+import org.apache.apex.malhar.lib.appdata.datastructs.CacheLRUSynchronousFlush.CacheFlushListener;
 
-import com.datatorrent.lib.appdata.datastructs.CacheLRUSynchronousFlush.CacheFlushListener;
+import com.google.common.collect.Lists;
 
 public class CacheLRUSynchronousFlushTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/datastructs/DimensionalTableTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/datastructs/DimensionalTableTest.java
index 57cc0f2..1a8629b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/datastructs/DimensionalTableTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/datastructs/DimensionalTableTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.datastructs;
+package org.apache.apex.malhar.lib.appdata.datastructs;
 
 import java.util.Map;
 import java.util.Set;
@@ -24,12 +24,12 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
+
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
-import com.datatorrent.lib.util.KryoCloneUtils;
-
 public class DimensionalTableTest
 {
   @Test
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/dimensions/CustomTimeBucketRegistryTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/dimensions/CustomTimeBucketRegistryTest.java
index 00a925b..01ba704 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/dimensions/CustomTimeBucketRegistryTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/dimensions/CustomTimeBucketRegistryTest.java
@@ -16,16 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.dimensions;
+package org.apache.apex.malhar.lib.appdata.dimensions;
 
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.appdata.schemas.CustomTimeBucket;
+import org.apache.apex.malhar.lib.appdata.schemas.TimeBucket;
 import org.apache.apex.malhar.lib.dimensions.CustomTimeBucketRegistry;
 
-import com.datatorrent.lib.appdata.schemas.CustomTimeBucket;
-import com.datatorrent.lib.appdata.schemas.TimeBucket;
-
 public class CustomTimeBucketRegistryTest
 {
   @Test
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/dimensions/DimensionsEventTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/dimensions/DimensionsEventTest.java
index fd69676..97ee4a0 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/dimensions/DimensionsEventTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/dimensions/DimensionsEventTest.java
@@ -16,21 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.dimensions;
+package org.apache.apex.malhar.lib.appdata.dimensions;
 
 import java.util.Map;
 
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.apex.malhar.lib.dimensions.DimensionsEvent.EventKey;
 
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
-
 public class DimensionsEventTest
 {
   @Test
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/GPOMutableTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/GPOMutableTest.java
index 1617a75..afa9f3b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/GPOMutableTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/GPOMutableTest.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.util.Map;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.google.common.collect.Maps;
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
+import com.google.common.collect.Maps;
 
 public class GPOMutableTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/GPOUtilsTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/GPOUtilsTest.java
index 4a6fd05..a61bce9 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/GPOUtilsTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/GPOUtilsTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.util.List;
 import java.util.Map;
@@ -28,16 +28,15 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.commons.lang3.mutable.MutableInt;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
-import com.datatorrent.lib.appdata.schemas.Type;
-
 public class GPOUtilsTest
 {
   private static final Logger logger = LoggerFactory.getLogger(GPOUtilsTest.class);
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeFieldsDescriptorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeFieldsDescriptorTest.java
index 2aeb110..e4527f1 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeFieldsDescriptorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeFieldsDescriptorTest.java
@@ -16,20 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.util.Map;
 
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.commons.lang3.mutable.MutableInt;
 
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
-
 public class SerdeFieldsDescriptorTest
 {
   @Test
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListGPOMutableTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListGPOMutableTest.java
index 324e352..966c54b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListGPOMutableTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListGPOMutableTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.util.List;
 import java.util.Map;
@@ -24,14 +24,13 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.appdata.schemas.FieldsDescriptor;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 import org.apache.commons.lang3.mutable.MutableInt;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.appdata.schemas.FieldsDescriptor;
-import com.datatorrent.lib.appdata.schemas.Type;
-
 public class SerdeListGPOMutableTest
 {
   @Test
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListPrimitiveTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListPrimitiveTest.java
index ef6255d..074c5d1 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListPrimitiveTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListPrimitiveTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.util.List;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListStringTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListStringTest.java
index 33d2286..da0fb09 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListStringTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/gpo/SerdeListStringTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.gpo;
+package org.apache.apex.malhar.lib.appdata.gpo;
 
 import java.util.List;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/MockQuery.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/MockQuery.java
index eaa5a88..8694e54 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/MockQuery.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/MockQuery.java
@@ -16,11 +16,11 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import java.util.Map;
 
-import com.datatorrent.lib.appdata.schemas.Query;
+import org.apache.apex.malhar.lib.appdata.schemas.Query;
 
 public class MockQuery extends Query
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/MockResult.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/MockResult.java
index 50358b5..24386ae 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/MockResult.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/MockResult.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
-import com.datatorrent.lib.appdata.query.serde.MessageSerializerInfo;
-import com.datatorrent.lib.appdata.query.serde.MessageType;
-import com.datatorrent.lib.appdata.schemas.Query;
-import com.datatorrent.lib.appdata.schemas.Result;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageSerializerInfo;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageType;
+import org.apache.apex.malhar.lib.appdata.schemas.Query;
+import org.apache.apex.malhar.lib.appdata.schemas.Result;
 
 @MessageType(type = MockResult.TYPE)
 @MessageSerializerInfo(clazz = MockResultSerializer.class)
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/MockResultSerializer.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/MockResultSerializer.java
index b7d62ef..a3aa506 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/MockResultSerializer.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/MockResultSerializer.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import org.codehaus.jettison.json.JSONException;
 import org.codehaus.jettison.json.JSONObject;
 
-import com.datatorrent.lib.appdata.query.serde.CustomMessageSerializer;
-import com.datatorrent.lib.appdata.schemas.Message;
-import com.datatorrent.lib.appdata.schemas.Result;
-import com.datatorrent.lib.appdata.schemas.ResultFormatter;
+import org.apache.apex.malhar.lib.appdata.query.serde.CustomMessageSerializer;
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
+import org.apache.apex.malhar.lib.appdata.schemas.Result;
+import org.apache.apex.malhar.lib.appdata.schemas.ResultFormatter;
 
 public class MockResultSerializer implements CustomMessageSerializer
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerAsynchronousTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerAsynchronousTest.java
index 5b07dd7..14adb61 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerAsynchronousTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerAsynchronousTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import java.util.Random;
 
@@ -28,13 +28,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageSerializerFactory;
+import org.apache.apex.malhar.lib.appdata.schemas.ResultFormatter;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.commons.lang3.mutable.MutableLong;
 
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.appdata.query.serde.MessageSerializerFactory;
-import com.datatorrent.lib.appdata.schemas.ResultFormatter;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
 
 public class QueryManagerAsynchronousTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerSynchronousTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerSynchronousTest.java
index 1c0e06c..31a4fda 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerSynchronousTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/QueryManagerSynchronousTest.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import java.util.List;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.google.common.collect.Lists;
+import org.apache.apex.malhar.lib.appdata.schemas.Query;
+import org.apache.apex.malhar.lib.appdata.schemas.Result;
 
-import com.datatorrent.lib.appdata.schemas.Query;
-import com.datatorrent.lib.appdata.schemas.Result;
+import com.google.common.collect.Lists;
 
 public class QueryManagerSynchronousTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/QueueUtilsTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/QueueUtilsTest.java
index 8202454..7a9f996 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/QueueUtilsTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/QueueUtilsTest.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.google.common.base.Preconditions;
+import org.apache.apex.malhar.lib.appdata.QueueUtils.ConditionBarrier;
 
-import com.datatorrent.lib.appdata.QueueUtils.ConditionBarrier;
+import com.google.common.base.Preconditions;
 
 public class QueueUtilsTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/SimpleDoneQueryQueueManagerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/SimpleDoneQueryQueueManagerTest.java
index ffa7eba..62dfbd5 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/SimpleDoneQueryQueueManagerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/SimpleDoneQueryQueueManagerTest.java
@@ -16,20 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.ThreadUtils.ExceptionSaverExceptionHandler;
+import org.apache.apex.malhar.lib.appdata.schemas.Query;
 import org.apache.commons.lang3.mutable.MutableBoolean;
 
 import com.google.common.base.Preconditions;
 
-import com.datatorrent.lib.appdata.ThreadUtils.ExceptionSaverExceptionHandler;
-import com.datatorrent.lib.appdata.schemas.Query;
-
 public class SimpleDoneQueryQueueManagerTest
 {
   @Test
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/SimpleQueryQueueManagerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/SimpleQueryQueueManagerTest.java
index 7912f9c..4396393 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/SimpleQueryQueueManagerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/SimpleQueryQueueManagerTest.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.appdata.schemas.Query;
+import org.apache.apex.malhar.lib.appdata.schemas.Query;
 
 public class SimpleQueryQueueManagerTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/WEQueryQueueManagerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/WEQueryQueueManagerTest.java
index d275a61..dcb5039 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/WEQueryQueueManagerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/WEQueryQueueManagerTest.java
@@ -16,15 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.appdata.schemas.Query;
 import org.apache.commons.lang3.mutable.MutableLong;
 
-import com.datatorrent.lib.appdata.schemas.Query;
-
 public class WEQueryQueueManagerTest
 {
   @Test
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/WindowBoundedServiceTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/WindowBoundedServiceTest.java
index 63b7692..f363303 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/WindowBoundedServiceTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/WindowBoundedServiceTest.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query;
+package org.apache.apex.malhar.lib.appdata.query;
 
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TestWatcher;
 
-import com.datatorrent.lib.appdata.query.QueryManagerAsynchronousTest.InterruptClear;
+import org.apache.apex.malhar.lib.appdata.query.QueryManagerAsynchronousTest.InterruptClear;
 
 public class WindowBoundedServiceTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageDeserializerFactoryTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageDeserializerFactoryTest.java
index ca89789..03e03cf 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageDeserializerFactoryTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/serde/MessageDeserializerFactoryTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import java.io.IOException;
 
@@ -25,8 +25,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.appdata.schemas.Message;
-import com.datatorrent.lib.appdata.schemas.SchemaQuery;
+import org.apache.apex.malhar.lib.appdata.schemas.Message;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaQuery;
 
 public class MessageDeserializerFactoryTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataValidatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataValidatorTest.java
index 84bef4d..41464f8 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataValidatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/query/serde/SimpleDataValidatorTest.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.query.serde;
+package org.apache.apex.malhar.lib.appdata.query.serde;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.appdata.schemas.Query;
+import org.apache.apex.malhar.lib.appdata.schemas.Query;
 
 public class SimpleDataValidatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/CustomTimeBucketTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/CustomTimeBucketTest.java
index 1a27afa..9a08c57 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/CustomTimeBucketTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/CustomTimeBucketTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DataQuerySnapshotDeserializerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DataQuerySnapshotDeserializerTest.java
index 7f877aa..6e39ccc 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DataQuerySnapshotDeserializerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DataQuerySnapshotDeserializerTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.io.IOException;
 import java.util.Map;
@@ -27,12 +27,12 @@
 import org.junit.Test;
 import org.junit.rules.TestWatcher;
 
+import org.apache.apex.malhar.lib.appdata.query.serde.DataQuerySnapshotDeserializer;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageDeserializerFactory;
+
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
-import com.datatorrent.lib.appdata.query.serde.DataQuerySnapshotDeserializer;
-import com.datatorrent.lib.appdata.query.serde.MessageDeserializerFactory;
-
 public class DataQuerySnapshotDeserializerTest
 {
   @Rule
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DataQuerySnapshotTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DataQuerySnapshotTest.java
index 8e827e0..7a77e46 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DataQuerySnapshotTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DataQuerySnapshotTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DataResultSnapshotSerializerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DataResultSnapshotSerializerTest.java
index 488f2bf..53c0196 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DataResultSnapshotSerializerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DataResultSnapshotSerializerTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.List;
 import java.util.Map;
@@ -28,13 +28,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.query.serde.DataResultSnapshotSerializer;
+
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.query.serde.DataResultSnapshotSerializer;
-
 public class DataResultSnapshotSerializerTest
 {
   private static final Logger logger = LoggerFactory.getLogger(DataResultSnapshotSerializerTest.class);
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalConfigurationSchemaTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalConfigurationSchemaTest.java
index 2306ae0..0a8ae74 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalConfigurationSchemaTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalConfigurationSchemaTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.Collections;
 import java.util.HashSet;
@@ -31,6 +31,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.schemas.DimensionalConfigurationSchema.DimensionsCombination;
+import org.apache.apex.malhar.lib.appdata.schemas.DimensionalConfigurationSchema.Key;
+import org.apache.apex.malhar.lib.appdata.schemas.DimensionalConfigurationSchema.Value;
 import org.apache.apex.malhar.lib.dimensions.DimensionsDescriptor;
 import org.apache.apex.malhar.lib.dimensions.aggregator.AggregatorIncrementalType;
 import org.apache.apex.malhar.lib.dimensions.aggregator.AggregatorRegistry;
@@ -39,10 +42,6 @@
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
-import com.datatorrent.lib.appdata.schemas.DimensionalConfigurationSchema.DimensionsCombination;
-import com.datatorrent.lib.appdata.schemas.DimensionalConfigurationSchema.Key;
-import com.datatorrent.lib.appdata.schemas.DimensionalConfigurationSchema.Value;
-
 public class DimensionalConfigurationSchemaTest
 {
   private static final Logger logger = LoggerFactory.getLogger(DimensionalConfigurationSchemaTest.class);
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalSchemaTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalSchemaTest.java
index 8fe740b..5c2ed5a 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalSchemaTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/DimensionalSchemaTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -32,14 +32,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageSerializerFactory;
 import org.apache.apex.malhar.lib.dimensions.aggregator.AggregatorRegistry;
 
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
-import com.datatorrent.lib.appdata.query.serde.MessageSerializerFactory;
-
 public class DimensionalSchemaTest
 {
   private static final String FIELD_TAGS = "tags";
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/FieldsDescriptorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/FieldsDescriptorTest.java
index 843fb8d..4d4354f 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/FieldsDescriptorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/FieldsDescriptorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.Collections;
 import java.util.List;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/ResultFormatterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/ResultFormatterTest.java
index 10a5e56..f8a7344 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/ResultFormatterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/ResultFormatterTest.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.util.KryoCloneUtils;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 
 public class ResultFormatterTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaQueryTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaQueryTest.java
index 307cab0..0a9f150 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaQueryTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaQueryTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.Map;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.google.common.collect.Maps;
+import org.apache.apex.malhar.lib.appdata.query.serde.MessageDeserializerFactory;
 
-import com.datatorrent.lib.appdata.query.serde.MessageDeserializerFactory;
+import com.google.common.collect.Maps;
 
 public class SchemaQueryTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistryMultipleTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistryMultipleTest.java
index 5504dda..175b547 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistryMultipleTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistryMultipleTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.Collections;
 import java.util.Map;
@@ -24,11 +24,11 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
+
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.util.KryoCloneUtils;
-
 public class SchemaRegistryMultipleTest
 {
   private static final Map<String, String> SCHEMA_ADS_KEYS;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistrySingleTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistrySingleTest.java
index 9db9bd1..b3cbfc5 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistrySingleTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaRegistrySingleTest.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.appdata.schemas.SchemaRegistryMultipleTest.MockSchema;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaRegistryMultipleTest.MockSchema;
 
 public class SchemaRegistrySingleTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaTestUtils.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaTestUtils.java
index 26320ca..c89c816 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaTestUtils.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaTestUtils.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 public class SchemaTestUtils
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaUtilsTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaUtilsTest.java
index 5ae712f..edf1b76 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaUtilsTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SchemaUtilsTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.List;
 import java.util.Map;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SnapshotSchemaTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SnapshotSchemaTest.java
index 5fc5f4b..5fcbe87 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SnapshotSchemaTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/SnapshotSchemaTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import java.util.Map;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/TimeBucketTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/TimeBucketTest.java
index 8678b7c..704a722 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/TimeBucketTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/schemas/TimeBucketTest.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.schemas;
+package org.apache.apex.malhar.lib.appdata.schemas;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.appdata.schemas.TimeBucket.TimeBucketComparator;
+import org.apache.apex.malhar.lib.appdata.schemas.TimeBucket.TimeBucketComparator;
 
 public class TimeBucketTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerMapTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerMapTest.java
index 86ccb92..9042066 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerMapTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerMapTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.snapshot;
+package org.apache.apex.malhar.lib.appdata.snapshot;
 
 import java.util.List;
 import java.util.Map;
@@ -27,12 +27,12 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
+
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KryoCloneUtils;
-
 public class AppDataSnapshotServerMapTest
 {
   public static final String SIMPLE_RESULT = "{\"id\":\"1\"," +
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerPojoTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerPojoTest.java
index 6e8b0da..7e7ee57 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerPojoTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerPojoTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.snapshot;
+package org.apache.apex.malhar.lib.appdata.snapshot;
 
 import java.util.List;
 import java.util.Map;
@@ -27,15 +27,15 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.appdata.schemas.DataQuerySnapshot;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestObjAllTypes;
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.appdata.schemas.DataQuerySnapshot;
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestObjAllTypes;
-import com.datatorrent.lib.util.TestUtils;
-
 public class AppDataSnapshotServerPojoTest
 {
   @Test
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerTagsSupportTest.java b/library/src/test/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerTagsSupportTest.java
index 5ae882c..4fbf535 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerTagsSupportTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/appdata/snapshot/AppDataSnapshotServerTagsSupportTest.java
@@ -16,19 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.appdata.snapshot;
+package org.apache.apex.malhar.lib.appdata.snapshot;
 
 import org.codehaus.jettison.json.JSONArray;
 import org.codehaus.jettison.json.JSONObject;
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.google.common.collect.Sets;
+import org.apache.apex.malhar.lib.appdata.gpo.GPOMutable;
+import org.apache.apex.malhar.lib.appdata.schemas.Schema;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaResult;
+import org.apache.apex.malhar.lib.appdata.schemas.SchemaUtils;
 
-import com.datatorrent.lib.appdata.gpo.GPOMutable;
-import com.datatorrent.lib.appdata.schemas.Schema;
-import com.datatorrent.lib.appdata.schemas.SchemaResult;
-import com.datatorrent.lib.appdata.schemas.SchemaUtils;
+import com.google.common.collect.Sets;
 
 public class AppDataSnapshotServerTagsSupportTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/bandwidth/BandwidthManagerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/bandwidth/BandwidthManagerTest.java
index 507914e..32c1e7e 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/bandwidth/BandwidthManagerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/bandwidth/BandwidthManagerTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.bandwidth;
+package org.apache.apex.malhar.lib.bandwidth;
 
 import java.io.File;
 import java.io.IOException;
@@ -36,13 +36,14 @@
 import org.junit.Test;
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
+
 import org.apache.commons.io.FileUtils;
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class BandwidthManagerTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/bandwidth/BandwidthPartitionerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/bandwidth/BandwidthPartitionerTest.java
index e852d98..d008028 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/bandwidth/BandwidthPartitionerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/bandwidth/BandwidthPartitionerTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.bandwidth;
+package org.apache.apex.malhar.lib.bandwidth;
 
 import java.util.Collection;
 import java.util.Iterator;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/codec/JavaSerializationStreamCodecTest.java b/library/src/test/java/org/apache/apex/malhar/lib/codec/JavaSerializationStreamCodecTest.java
index a67e116..1f93002 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/codec/JavaSerializationStreamCodecTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/codec/JavaSerializationStreamCodecTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.codec;
+package org.apache.apex.malhar.lib.codec;
 
 import java.io.IOException;
 import java.io.Serializable;
@@ -27,7 +27,7 @@
 import com.datatorrent.netlet.util.Slice;
 
 /**
- * functional test for {@link com.datatorrent.lib.util.JavaSerializationStreamCodec}.
+ * functional test for {@link org.apache.apex.malhar.lib.util.JavaSerializationStreamCodec}.
  */
 public class JavaSerializationStreamCodecTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/codec/KryoStreamCodecTest.java b/library/src/test/java/org/apache/apex/malhar/lib/codec/KryoStreamCodecTest.java
index 4affef7..d662137 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/codec/KryoStreamCodecTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/codec/KryoStreamCodecTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.codec;
+package org.apache.apex.malhar.lib.codec;
 
 import java.io.IOException;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/converter/ByteArrayToStringConverterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/converter/ByteArrayToStringConverterTest.java
index 12f5d83..fc149c2 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/converter/ByteArrayToStringConverterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/converter/ByteArrayToStringConverterTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.converter;
+package org.apache.apex.malhar.lib.converter;
 
 import java.io.UnsupportedEncodingException;
 
@@ -25,8 +25,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 public class ByteArrayToStringConverterTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/converter/MapToKeyValuePairConverterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/converter/MapToKeyValuePairConverterTest.java
index 0c45542..23ec3a1 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/converter/MapToKeyValuePairConverterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/converter/MapToKeyValuePairConverterTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.converter;
+package org.apache.apex.malhar.lib.converter;
 
 import java.util.HashMap;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 public class MapToKeyValuePairConverterTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/converter/StringValueToNumberConverterForMapTest.java b/library/src/test/java/org/apache/apex/malhar/lib/converter/StringValueToNumberConverterForMapTest.java
index 22e9f72..0cacb50 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/converter/StringValueToNumberConverterForMapTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/converter/StringValueToNumberConverterForMapTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.converter;
+package org.apache.apex.malhar.lib.converter;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -24,8 +24,8 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 public class StringValueToNumberConverterForMapTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/counters/BasicCountersTest.java b/library/src/test/java/org/apache/apex/malhar/lib/counters/BasicCountersTest.java
index b3c76d1..e144f25 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/counters/BasicCountersTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/counters/BasicCountersTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.counters;
+package org.apache.apex.malhar.lib.counters;
 
 import java.util.List;
 import java.util.Map;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/KeyValueStoreOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/KeyValueStoreOperatorTest.java
index 846519f..e69c1cd 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/KeyValueStoreOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/KeyValueStoreOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 import java.io.IOException;
 import java.util.HashMap;
@@ -29,7 +29,7 @@
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.common.util.BaseOperator;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * @param <S>
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/TransactionableKeyValueStoreOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/TransactionableKeyValueStoreOperatorTest.java
index c2e961a..6699447 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/TransactionableKeyValueStoreOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/TransactionableKeyValueStoreOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db;
+package org.apache.apex.malhar.lib.db;
 
 import java.io.IOException;
 import java.util.HashMap;
@@ -26,7 +26,7 @@
 
 import com.datatorrent.api.DAG;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * @param <S>
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/cache/CacheManagerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/cache/CacheManagerTest.java
index 0bbc021..0ed6ede 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/cache/CacheManagerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/cache/CacheManagerTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.cache;
+package org.apache.apex.malhar.lib.db.cache;
 
 import java.io.IOException;
 import java.util.HashMap;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/cache/CacheStoreTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/cache/CacheStoreTest.java
index 61464dd..2ba10bc 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/cache/CacheStoreTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/cache/CacheStoreTest.java
@@ -16,12 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.cache;
+package org.apache.apex.malhar.lib.db.cache;
 
 import java.io.IOException;
 import java.util.Map;
 import org.junit.Assert;
 import org.junit.Test;
+
 import com.google.common.collect.Maps;
 
 /**
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JDBCLookupCacheBackedOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JDBCLookupCacheBackedOperatorTest.java
index 0a65f30..27bc253 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JDBCLookupCacheBackedOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JDBCLookupCacheBackedOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
@@ -38,12 +38,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
 import com.google.common.collect.Maps;
 
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Test for {@link JDBCLookupCacheBackedOperator}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcIOApp.java b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcIOApp.java
index dc695eb..a86ba38 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcIOApp.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcIOApp.java
@@ -16,11 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.Types;
 import java.util.List;
 
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.FieldInfo.SupportType;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.collect.Lists;
@@ -30,8 +32,6 @@
 import com.datatorrent.api.DAG.Locality;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.FieldInfo.SupportType;
 
 @ApplicationAnnotation(name = "JdbcToJdbcApp")
 public class JdbcIOApp implements StreamingApplication
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcIOAppTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcIOAppTest.java
index 5c398d2..a480e76 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcIOAppTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcIOAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcInputOperatorApplicationTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcInputOperatorApplicationTest.java
index c59978a..c903b9e 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcInputOperatorApplicationTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcInputOperatorApplicationTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
@@ -30,6 +30,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.util.FieldInfo;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
@@ -38,7 +39,6 @@
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.util.FieldInfo;
 import com.datatorrent.stram.StramLocalCluster;
 
 /**
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalBatchOutputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalBatchOutputOperatorTest.java
index 5e1a2b8..e1f7970 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalBatchOutputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalBatchOutputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
@@ -33,18 +33,19 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.TestEvent;
+
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Operator.ProcessingMode;
-import com.datatorrent.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.TestEvent;
 import com.datatorrent.netlet.util.DTThrowable;
 
-import static com.datatorrent.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.APP_ID;
-import static com.datatorrent.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.OPERATOR_ID;
-import static com.datatorrent.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.TABLE_NAME;
-import static com.datatorrent.lib.db.jdbc.JdbcOperatorTest.DB_DRIVER;
-import static com.datatorrent.lib.db.jdbc.JdbcOperatorTest.URL;
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.APP_ID;
+import static org.apache.apex.malhar.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.OPERATOR_ID;
+import static org.apache.apex.malhar.lib.db.jdbc.JdbcNonTransactionalOutputOperatorTest.TABLE_NAME;
+import static org.apache.apex.malhar.lib.db.jdbc.JdbcOperatorTest.DB_DRIVER;
+import static org.apache.apex.malhar.lib.db.jdbc.JdbcOperatorTest.URL;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Test for {@link AbstractJdbcNonTransactionableBatchOutputOperator}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalOutputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalOutputOperatorTest.java
index f41698c..0378dd1 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalOutputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalOutputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
@@ -36,7 +36,7 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.netlet.util.DTThrowable;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Test for {@link AbstractJdbcNonTransactionableOutputOperator Operator}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalStoreTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalStoreTest.java
index ef8f9a0..2c2a830 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalStoreTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcNonTransactionalStoreTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcOperatorTest.java
index ac17c2f..45247cc 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.Connection;
 import java.sql.Date;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPojoOperatorApplicationTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPojoOperatorApplicationTest.java
index f852577..9ca1d4f 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPojoOperatorApplicationTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPojoOperatorApplicationTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.Connection;
 import java.sql.DriverManager;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPojoOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPojoOperatorTest.java
index 6a21c16..74f5470 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPojoOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPojoOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.sql.Connection;
 import java.sql.Date;
@@ -35,18 +35,20 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.helper.TestPortContext;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.google.common.collect.Lists;
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.lib.helper.TestPortContext;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.TestUtils;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
+import com.datatorrent.api.DAG;
 
 /**
  * Tests for {@link AbstractJdbcTransactionableOutputOperator} and
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPojoPollableOpeartorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPojoPollableOpeartorTest.java
index 972dacb..e071b14 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPojoPollableOpeartorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcPojoPollableOpeartorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.io.File;
 import java.io.IOException;
@@ -36,6 +36,11 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import org.apache.apex.malhar.lib.db.jdbc.AbstractJdbcPollInputOperator.WindowData;
+import org.apache.apex.malhar.lib.helper.TestPortContext;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.FieldInfo;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.wal.WindowDataManager;
 import org.apache.commons.io.FileUtils;
 
@@ -46,13 +51,8 @@
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Partitioner;
-import com.datatorrent.lib.db.jdbc.AbstractJdbcPollInputOperator.WindowData;
-import com.datatorrent.lib.helper.TestPortContext;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.FieldInfo;
-import com.datatorrent.lib.util.KeyValPair;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyLong;
 import static org.mockito.Mockito.times;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcStoreTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcStoreTest.java
index 97e3e57..7d46778 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcStoreTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/jdbc/JdbcStoreTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.db.jdbc;
+package org.apache.apex.malhar.lib.db.jdbc;
 
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/db/redshift/RedshiftJdbcTransactionalOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/db/redshift/RedshiftJdbcTransactionalOperatorTest.java
index 3d4496c..e6799a4 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/db/redshift/RedshiftJdbcTransactionalOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/db/redshift/RedshiftJdbcTransactionalOperatorTest.java
@@ -35,13 +35,13 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import org.apache.apex.malhar.lib.db.jdbc.JdbcTransactionalStore;
 import org.apache.apex.malhar.lib.fs.FSRecordCompactionOperator;
 import org.apache.commons.io.FileUtils;
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.db.jdbc.JdbcTransactionalStore;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 import static org.mockito.Mockito.when;
 
 public class RedshiftJdbcTransactionalOperatorTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperBoundedPOJOImplTest.java b/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperBoundedPOJOImplTest.java
index a1fb71b..0f08ebe 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperBoundedPOJOImplTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperBoundedPOJOImplTest.java
@@ -27,18 +27,18 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.helper.OperatorContextTestHelper;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.helper.OperatorContextTestHelper;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
 import com.datatorrent.stram.engine.PortContext;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class DeduperBoundedPOJOImplTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperOrderingTest.java b/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperOrderingTest.java
index 157f505..2826c14 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperOrderingTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperOrderingTest.java
@@ -25,6 +25,8 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccessFSImpl;
+import org.apache.apex.malhar.lib.fileaccess.TFileImpl;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.AutoMetric;
@@ -38,8 +40,6 @@
 import com.datatorrent.api.StatsListener;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.fileaccess.FileAccessFSImpl;
-import com.datatorrent.lib.fileaccess.TFileImpl;
 
 public class DeduperOrderingTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperPartitioningTest.java b/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperPartitioningTest.java
index fb03f2e..eef844d 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperPartitioningTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperPartitioningTest.java
@@ -26,6 +26,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.collect.Maps;
@@ -41,7 +42,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.common.partitioner.StatelessPartitioner;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 /**
  * Tests whether the operator functions correctly when partitioned
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperTimeBasedPOJOImplTest.java b/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperTimeBasedPOJOImplTest.java
index 3878e2c..8def036 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperTimeBasedPOJOImplTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/dedup/DeduperTimeBasedPOJOImplTest.java
@@ -26,20 +26,20 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccessFSImpl;
+import org.apache.apex.malhar.lib.fileaccess.TFileImpl;
+import org.apache.apex.malhar.lib.helper.OperatorContextTestHelper;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.fileaccess.FileAccessFSImpl;
-import com.datatorrent.lib.fileaccess.TFileImpl;
-import com.datatorrent.lib.helper.OperatorContextTestHelper;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
 import com.datatorrent.stram.engine.PortContext;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class DeduperTimeBasedPOJOImplTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/dimensions/CustomTimeBucketRegistryTest.java b/library/src/test/java/org/apache/apex/malhar/lib/dimensions/CustomTimeBucketRegistryTest.java
index c448b72..ff57894 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/dimensions/CustomTimeBucketRegistryTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/dimensions/CustomTimeBucketRegistryTest.java
@@ -21,8 +21,8 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.appdata.schemas.CustomTimeBucket;
-import com.datatorrent.lib.appdata.schemas.TimeBucket;
+import org.apache.apex.malhar.lib.appdata.schemas.CustomTimeBucket;
+import org.apache.apex.malhar.lib.appdata.schemas.TimeBucket;
 
 public class CustomTimeBucketRegistryTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/dimensions/DimensionsDescriptorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/dimensions/DimensionsDescriptorTest.java
index 1514cd5..ae7028c 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/dimensions/DimensionsDescriptorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/dimensions/DimensionsDescriptorTest.java
@@ -24,12 +24,12 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.google.common.collect.Sets;
+import org.apache.apex.malhar.lib.appdata.schemas.CustomTimeBucket;
+import org.apache.apex.malhar.lib.appdata.schemas.Fields;
+import org.apache.apex.malhar.lib.appdata.schemas.TimeBucket;
+import org.apache.apex.malhar.lib.appdata.schemas.Type;
 
-import com.datatorrent.lib.appdata.schemas.CustomTimeBucket;
-import com.datatorrent.lib.appdata.schemas.Fields;
-import com.datatorrent.lib.appdata.schemas.TimeBucket;
-import com.datatorrent.lib.appdata.schemas.Type;
+import com.google.common.collect.Sets;
 
 public class DimensionsDescriptorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/filter/FilterAppTest.java b/library/src/test/java/org/apache/apex/malhar/lib/filter/FilterAppTest.java
index 3feb899..ea52666 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/filter/FilterAppTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/filter/FilterAppTest.java
@@ -16,13 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.filter;
+package org.apache.apex.malhar.lib.filter;
 
 import java.util.Random;
 import javax.validation.ConstraintViolationException;
 
 import org.junit.Assert;
 import org.junit.Test;
+
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
@@ -31,7 +33,6 @@
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 /**
  * Application Test for Filter Operator.
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/filter/FilterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/filter/FilterTest.java
index 567e27a..65f4926 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/filter/FilterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/filter/FilterTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.filter;
+package org.apache.apex.malhar.lib.filter;
 
 import java.util.Arrays;
 
@@ -25,9 +25,10 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CountTestSink;
+
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.testbench.CountTestSink;
 import com.datatorrent.stram.engine.PortContext;
 
 /**
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/formatter/JsonFormatterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/formatter/JsonFormatterTest.java
index 9929d74..4d82738 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/formatter/JsonFormatterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/formatter/JsonFormatterTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.formatter;
+package org.apache.apex.malhar.lib.formatter;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -32,18 +32,17 @@
 import org.junit.Test;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperatorTest.FSTestWatcher;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
+import org.apache.apex.malhar.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.util.TestUtils.TestInfo;
 import org.apache.commons.io.FileUtils;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import com.google.common.collect.Lists;
 
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperatorTest.FSTestWatcher;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KryoCloneUtils;
-import com.datatorrent.lib.util.TestUtils;
-import com.datatorrent.lib.util.TestUtils.TestInfo;
-
 public class JsonFormatterTest
 {
   JsonFormatter operator;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/formatter/XmlFormatterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/formatter/XmlFormatterTest.java
index c3e2cde..4750a85 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/formatter/XmlFormatterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/formatter/XmlFormatterTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.formatter;
+package org.apache.apex.malhar.lib.formatter;
 
 import java.io.ByteArrayOutputStream;
 import java.text.SimpleDateFormat;
@@ -36,13 +36,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
-
 public class XmlFormatterTest
 {
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/fs/FSRecordCompactionOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/fs/FSRecordCompactionOperatorTest.java
index 56ac07c..2253400 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/fs/FSRecordCompactionOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/fs/FSRecordCompactionOperatorTest.java
@@ -28,15 +28,15 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.fs.Path;
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class FSRecordCompactionOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/fs/GenericFileOutputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/fs/GenericFileOutputOperatorTest.java
index 6bbbd3a..b15123b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/fs/GenericFileOutputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/fs/GenericFileOutputOperatorTest.java
@@ -28,13 +28,13 @@
 
 import org.apache.apex.malhar.lib.fs.GenericFileOutputOperator.BytesFileOutputOperator;
 import org.apache.apex.malhar.lib.fs.GenericFileOutputOperator.StringFileOutputOperator;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperatorTest;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperatorTest;
 import com.datatorrent.netlet.util.DTThrowable;
 
 public class GenericFileOutputOperatorTest extends AbstractFileOutputOperatorTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3DelimitedRecordReaderTest.java b/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3DelimitedRecordReaderTest.java
index a861d9f..500e7c1 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3DelimitedRecordReaderTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3DelimitedRecordReaderTest.java
@@ -39,6 +39,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.block.AbstractFSBlockReader;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
 import com.amazonaws.auth.BasicAWSCredentials;
 import com.amazonaws.services.s3.AmazonS3;
 import com.amazonaws.services.s3.AmazonS3Client;
@@ -50,12 +54,9 @@
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.io.block.AbstractFSBlockReader;
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 import com.datatorrent.netlet.util.Slice;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 @Ignore
 public class S3DelimitedRecordReaderTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3FixedWidthRecordReaderTest.java b/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3FixedWidthRecordReaderTest.java
index f69b018..25b72ec 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3FixedWidthRecordReaderTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3FixedWidthRecordReaderTest.java
@@ -39,6 +39,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.block.AbstractFSBlockReader;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
 import com.amazonaws.auth.BasicAWSCredentials;
 import com.amazonaws.services.s3.AmazonS3;
 import com.amazonaws.services.s3.AmazonS3Client;
@@ -50,12 +54,9 @@
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.io.block.AbstractFSBlockReader;
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 import com.datatorrent.netlet.util.Slice;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 @Ignore
 public class S3FixedWidthRecordReaderTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3InitiateFileUploadOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3InitiateFileUploadOperatorTest.java
index e9111b8..708d93d 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3InitiateFileUploadOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3InitiateFileUploadOperatorTest.java
@@ -27,6 +27,9 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import org.apache.apex.malhar.lib.helper.OperatorContextTestHelper;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileSplitter;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
@@ -38,11 +41,8 @@
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.helper.OperatorContextTestHelper;
-import com.datatorrent.lib.io.fs.AbstractFileSplitter;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.when;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3OutputModuleMockTest.java b/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3OutputModuleMockTest.java
index 8fe5ef9..eeb2824 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3OutputModuleMockTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3OutputModuleMockTest.java
@@ -29,6 +29,8 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import org.apache.apex.malhar.lib.helper.OperatorContextTestHelper;
+import org.apache.apex.malhar.lib.io.fs.FSInputModule;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
@@ -47,8 +49,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.helper.OperatorContextTestHelper;
-import com.datatorrent.lib.io.fs.FSInputModule;
 import com.datatorrent.stram.StramLocalCluster;
 
 import static org.mockito.Matchers.any;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3ReconcilerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3ReconcilerTest.java
index d138b53..911b122 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3ReconcilerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3ReconcilerTest.java
@@ -32,6 +32,7 @@
 import org.mockito.MockitoAnnotations;
 
 import org.apache.apex.malhar.lib.fs.FSRecordCompactionOperator;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.fs.Path;
 
@@ -42,9 +43,8 @@
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.when;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3RecordReaderMockTest.java b/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3RecordReaderMockTest.java
index bca3f33..407ed0b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3RecordReaderMockTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/fs/s3/S3RecordReaderMockTest.java
@@ -36,6 +36,9 @@
 import org.apache.apex.malhar.lib.fs.FSRecordReaderModule;
 import org.apache.apex.malhar.lib.fs.FSRecordReaderTest.DelimitedValidator;
 import org.apache.apex.malhar.lib.fs.FSRecordReaderTest.FixedWidthValidator;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata.FileBlockMetadata;
+import org.apache.apex.malhar.lib.io.block.ReaderContext;
+import org.apache.apex.malhar.lib.io.fs.S3BlockReader;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataInputStream;
@@ -47,9 +50,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.io.block.BlockMetadata.FileBlockMetadata;
-import com.datatorrent.lib.io.block.ReaderContext;
-import com.datatorrent.lib.io.fs.S3BlockReader;
 
 import static org.mockito.Mockito.mock;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/helper/OperatorContextTestHelper.java b/library/src/test/java/org/apache/apex/malhar/lib/helper/OperatorContextTestHelper.java
index 5998ce9..c2b05ed 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/helper/OperatorContextTestHelper.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/helper/OperatorContextTestHelper.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.helper;
+package org.apache.apex.malhar.lib.helper;
 
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/helper/SamplePubSubWebSocketServlet.java b/library/src/test/java/org/apache/apex/malhar/lib/helper/SamplePubSubWebSocketServlet.java
index 9d501aa..1003af9 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/helper/SamplePubSubWebSocketServlet.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/helper/SamplePubSubWebSocketServlet.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.helper;
+package org.apache.apex.malhar.lib.helper;
 
 import java.io.IOException;
 import java.util.HashMap;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/helper/TestPortContext.java b/library/src/test/java/org/apache/apex/malhar/lib/helper/TestPortContext.java
index c2394df..e1f1bab 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/helper/TestPortContext.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/helper/TestPortContext.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.helper;
+package org.apache.apex.malhar.lib.helper;
 
 import java.util.Collection;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/ApacheRandomLogsTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/ApacheRandomLogsTest.java
index a2c021e..5458f74 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/ApacheRandomLogsTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/ApacheRandomLogsTest.java
@@ -16,12 +16,12 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Unit test for emit tuples.
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/FTPStringInputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/FTPStringInputOperatorTest.java
index 4650dbb..226fae6 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/FTPStringInputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/FTPStringInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import org.junit.Assert;
 import org.junit.Rule;
@@ -29,12 +29,12 @@
 import org.mockftpserver.fake.filesystem.FileEntry;
 import org.mockftpserver.fake.filesystem.UnixFakeFileSystem;
 
+import org.apache.apex.malhar.lib.io.AbstractFTPInputOperator.FTPStringInputOperator;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
 import com.datatorrent.api.Attribute;
 
-import com.datatorrent.lib.io.AbstractFTPInputOperator.FTPStringInputOperator;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Tests for {@link FTPStringInputOperator}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/HttpGetMapOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/HttpGetMapOperatorTest.java
index 8f0d21d..862696c 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/HttpGetMapOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/HttpGetMapOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -35,8 +35,8 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 /**
  * Tests the {@link HttpGetMapOperator} for sending get requests to specified url
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/HttpJsonChunksInputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/HttpJsonChunksInputOperatorTest.java
index 959e25e..88303b7 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/HttpJsonChunksInputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/HttpJsonChunksInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -38,10 +38,9 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.io.IOUtils;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
 /**
  * Functional test for {@linkcom.datatorrent.lib.io.HttpJsonChunksInputOperator }.
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/HttpLinesInputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/HttpLinesInputOperatorTest.java
index be405ab..d3fd981 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/HttpLinesInputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/HttpLinesInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -35,11 +35,10 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.commons.io.IOUtils;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
-
 /**
  * Functional test for {
  *
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/HttpMultiValuedMapGetOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/HttpMultiValuedMapGetOperatorTest.java
index 927317e..28cfe21 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/HttpMultiValuedMapGetOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/HttpMultiValuedMapGetOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -35,12 +35,12 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.sun.jersey.api.client.ClientResponse;
 import com.sun.jersey.core.util.MultivaluedMapImpl;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
-
 /**
  * Tests {@link AbstractHttpGetMultiValuedMapOperator} for sending get requests to specified url
  * and processing responses if output port is connected
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/HttpPostOutputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/HttpPostOutputOperatorTest.java
index afe518b..33dcb07 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/HttpPostOutputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/HttpPostOutputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -42,7 +42,7 @@
 import org.apache.commons.io.IOUtils;
 
 /**
- * Functional test for {@link com.datatorrent.lib.io.HttpPostOutputOperator}.
+ * Functional test for {@link org.apache.apex.malhar.lib.io.HttpPostOutputOperator}.
  */
 public class HttpPostOutputOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/IdempotentStorageManagerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/IdempotentStorageManagerTest.java
index 086431a..a3743d0 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/IdempotentStorageManagerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/IdempotentStorageManagerTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.File;
 import java.io.IOException;
@@ -45,7 +45,7 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.annotation.Stateless;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Tests for {@link IdempotentStorageManager}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataOperatorTest.java
index fc49bea..9cc1b43 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.lang.reflect.Method;
 import java.net.URI;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataQueryTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataQueryTest.java
index a5fc45d..a86b65a 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataQueryTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataQueryTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import org.junit.Assert;
 import org.junit.BeforeClass;
@@ -27,7 +27,7 @@
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.common.experimental.AppData.ConnectionInfoProvider;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class PubSubWebSocketAppDataQueryTest extends PubSubWebSocketAppDataOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataResultTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataResultTest.java
index 553c89c..f41a3c2 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataResultTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketAppDataResultTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import com.datatorrent.common.experimental.AppData.ConnectionInfoProvider;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketOperatorTest.java
index 7f1e4dd..277f48e 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/PubSubWebSocketOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.net.URI;
 import java.util.HashMap;
@@ -30,13 +30,12 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.helper.SamplePubSubWebSocketServlet;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.apex.malhar.lib.utils.PubSubHelper;
 
-import com.datatorrent.lib.helper.SamplePubSubWebSocketServlet;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
 /**
- * Tests for {@link com.datatorrent.lib.io.PubSubWebSocketOutputOperator}
+ * Tests for {@link org.apache.apex.malhar.lib.io.PubSubWebSocketOutputOperator}
  */
 public class PubSubWebSocketOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/SmtpOutputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/SmtpOutputOperatorTest.java
index 6bd839d..dc634a7 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/SmtpOutputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/SmtpOutputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.util.HashMap;
 import java.util.Map;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/SocketInputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/SocketInputOperatorTest.java
index a79ace7..daae1f2 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/SocketInputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/SocketInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.io.BufferedReader;
 import java.io.FileInputStream;
@@ -32,10 +32,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
- * Functional test for {@link com.datatorrent.lib.io.AbstractSocketInputOperator}.
+ * Functional test for {@link org.apache.apex.malhar.lib.io.AbstractSocketInputOperator}.
  */
 public class SocketInputOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/WebSocketServerInputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/WebSocketServerInputOperatorTest.java
index 5ce5276..dadd48d 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/WebSocketServerInputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/WebSocketServerInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io;
+package org.apache.apex.malhar.lib.io;
 
 import java.net.URI;
 import java.util.List;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/block/AbstractBlockReaderTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/block/AbstractBlockReaderTest.java
index b2b99e6..48f4038 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/block/AbstractBlockReaderTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/block/AbstractBlockReaderTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.block;
+package org.apache.apex.malhar.lib.io.block;
 
 import java.util.Collection;
 import java.util.List;
@@ -24,6 +24,8 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.counters.BasicCounters;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.commons.lang.mutable.MutableLong;
 import org.apache.hadoop.fs.FSDataInputStream;
 
@@ -33,8 +35,6 @@
 import com.datatorrent.api.Partitioner;
 import com.datatorrent.api.Stats;
 import com.datatorrent.api.StatsListener;
-import com.datatorrent.lib.counters.BasicCounters;
-import com.datatorrent.lib.util.TestUtils;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/block/FSLineReaderTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/block/FSLineReaderTest.java
index 3003336..9315db9 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/block/FSLineReaderTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/block/FSLineReaderTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.block;
+package org.apache.apex.malhar.lib.io.block;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -37,14 +37,15 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
 import com.google.common.collect.Lists;
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class FSLineReaderTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/block/FSSliceReaderTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/block/FSSliceReaderTest.java
index 00c4bfd..245dd38 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/block/FSSliceReaderTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/block/FSSliceReaderTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.block;
+package org.apache.apex.malhar.lib.io.block;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -32,6 +32,7 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
@@ -39,10 +40,9 @@
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 import com.datatorrent.netlet.util.Slice;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 import static org.mockito.Mockito.when;
 
 /**
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/block/PartFileWriterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/block/PartFileWriterTest.java
index 784ab39..3c456f3 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/block/PartFileWriterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/block/PartFileWriterTest.java
@@ -30,17 +30,16 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileSplitter;
 import org.apache.commons.io.FileUtils;
 import com.google.common.collect.Maps;
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.io.block.AbstractBlockReader;
-import com.datatorrent.lib.io.fs.AbstractFileSplitter;
 import com.datatorrent.netlet.util.Slice;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class PartFileWriterTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/block/ReadAheadLineReaderTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/block/ReadAheadLineReaderTest.java
index 5e0aa22..0eba8b5 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/block/ReadAheadLineReaderTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/block/ReadAheadLineReaderTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.block;
+package org.apache.apex.malhar.lib.io.block;
 
 public class ReadAheadLineReaderTest extends FSLineReaderTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractFileInputOperatorFailureHandlingTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractFileInputOperatorFailureHandlingTest.java
index 15b7a36..76663ba 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractFileInputOperatorFailureHandlingTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractFileInputOperatorFailureHandlingTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -29,6 +29,9 @@
 import org.junit.Rule;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.util.TestUtils.TestInfo;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.fs.FileContext;
@@ -38,11 +41,8 @@
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
-import com.datatorrent.lib.util.TestUtils.TestInfo;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class AbstractFileInputOperatorFailureHandlingTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractFileInputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractFileInputOperatorTest.java
index 1e69a89..55d41b2 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractFileInputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractFileInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.ByteArrayOutputStream;
 import java.io.File;
@@ -39,6 +39,10 @@
 import org.junit.runner.Description;
 
 import org.apache.apex.malhar.lib.fs.LineByLineFileInputOperator;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperator.DirectoryScanner;
+import org.apache.apex.malhar.lib.partitioner.StatelessPartitionerTest.PartitioningContextImpl;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -59,14 +63,11 @@
 import com.datatorrent.api.DefaultPartition;
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.Partitioner.Partition;
+
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
 import com.datatorrent.api.Sink;
 import com.datatorrent.api.StatsListener;
-import com.datatorrent.lib.io.fs.AbstractFileInputOperator.DirectoryScanner;
-import com.datatorrent.lib.partitioner.StatelessPartitionerTest.PartitioningContextImpl;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
-
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class AbstractFileInputOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractFileOutputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractFileOutputOperatorTest.java
index ceb1e7d..bc031e6 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractFileOutputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractFileOutputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.BufferedOutputStream;
 import java.io.BufferedReader;
@@ -54,6 +54,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.RandomWordGenerator;
+import org.apache.apex.malhar.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.util.TestUtils.TestInfo;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
@@ -74,12 +77,9 @@
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.testbench.RandomWordGenerator;
-import com.datatorrent.lib.util.TestUtils;
-import com.datatorrent.lib.util.TestUtils.TestInfo;
 import com.datatorrent.netlet.util.DTThrowable;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 import static org.junit.Assert.assertEquals;
 
 public class AbstractFileOutputOperatorTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractReconcilerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractReconcilerTest.java
index 4913e17..aa64ccf 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractReconcilerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractReconcilerTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -24,6 +24,8 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.RandomWordGenerator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.collect.Lists;
@@ -32,8 +34,6 @@
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.testbench.RandomWordGenerator;
 
 /**
  * Test class to test {@link AbstractReconciler}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractSingleFileOutputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractSingleFileOutputOperatorTest.java
index 23bf8b0..46691a6 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractSingleFileOutputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractSingleFileOutputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.File;
 import java.io.IOException;
@@ -25,6 +25,8 @@
 import org.junit.Test;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperatorTest.FSTestWatcher;
+import org.apache.apex.malhar.lib.util.TestUtils.TestInfo;
 import org.apache.commons.lang.mutable.MutableLong;
 import org.apache.commons.lang3.mutable.MutableInt;
 import org.apache.hadoop.conf.Configuration;
@@ -33,10 +35,8 @@
 import com.google.common.collect.Maps;
 
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperatorTest.FSTestWatcher;
-import com.datatorrent.lib.util.TestUtils.TestInfo;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class AbstractSingleFileOutputOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractThroughputFileInputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractThroughputFileInputOperatorTest.java
index f02bff1..aef3405 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractThroughputFileInputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractThroughputFileInputOperatorTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.IOException;
 import java.util.Collections;
@@ -28,15 +28,15 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import org.apache.apex.malhar.lib.counters.BasicCounters;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperator.FailedFile;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperator.FileCounters;
 import org.apache.commons.lang.mutable.MutableLong;
 
 import com.datatorrent.api.Partitioner.Partition;
 import com.datatorrent.api.Stats.OperatorStats;
 import com.datatorrent.api.StatsListener.BatchedOperatorStats;
 import com.datatorrent.api.StatsListener.Response;
-import com.datatorrent.lib.counters.BasicCounters;
-import com.datatorrent.lib.io.fs.AbstractFileInputOperator.FailedFile;
-import com.datatorrent.lib.io.fs.AbstractFileInputOperator.FileCounters;
 
 import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.when;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractWindowFileOutputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractWindowFileOutputOperatorTest.java
index d27f27a..8c22547 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractWindowFileOutputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/AbstractWindowFileOutputOperatorTest.java
@@ -16,18 +16,19 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileOutputOperatorTest.FSTestWatcher;
+import org.apache.apex.malhar.lib.util.TestUtils.TestInfo;
+
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.annotation.Stateless;
-import com.datatorrent.lib.io.fs.AbstractFileOutputOperatorTest.FSTestWatcher;
-import com.datatorrent.lib.util.TestUtils.TestInfo;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Functional Test for {@link AbstractWindowFileOutputOperator}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/BlockWriterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/BlockWriterTest.java
index 440abf7..db1c67d 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/BlockWriterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/BlockWriterTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.File;
 import java.io.IOException;
@@ -30,6 +30,8 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.io.block.AbstractBlockReader.ReaderRecord;
+import org.apache.apex.malhar.lib.io.block.BlockWriter;
 import org.apache.commons.io.FileUtils;
 
 import com.google.common.collect.Lists;
@@ -38,11 +40,9 @@
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.io.block.AbstractBlockReader.ReaderRecord;
-import com.datatorrent.lib.io.block.BlockWriter;
 import com.datatorrent.netlet.util.Slice;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Unit tests for {@link BlockWriter}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FSInputModuleAppTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FSInputModuleAppTest.java
index 4042d3c..08bf171 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FSInputModuleAppTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FSInputModuleAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.File;
 import java.io.FileFilter;
@@ -30,6 +30,11 @@
 import org.junit.rules.TestWatcher;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import org.apache.apex.malhar.lib.io.block.AbstractBlockReader.ReaderRecord;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata.FileBlockMetadata;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileSplitter.FileMetadata;
+import org.apache.apex.malhar.lib.stream.DevNull;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.filefilter.WildcardFileFilter;
 import org.apache.hadoop.conf.Configuration;
@@ -39,10 +44,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.io.block.AbstractBlockReader.ReaderRecord;
-import com.datatorrent.lib.io.block.BlockMetadata.FileBlockMetadata;
-import com.datatorrent.lib.io.fs.AbstractFileSplitter.FileMetadata;
-import com.datatorrent.lib.stream.DevNull;
 import com.datatorrent.netlet.util.Slice;
 
 public class FSInputModuleAppTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FSInputModuleTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FSInputModuleTest.java
index 12301f6..555f0b7 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FSInputModuleTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FSInputModuleTest.java
@@ -17,15 +17,15 @@
  * under the License.
  */
 
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.io.fs.FSInputModule.SequentialFileBlockMetadataCodec;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.io.fs.FSInputModule.SequentialFileBlockMetadataCodec;
 
 import static org.mockito.Mockito.when;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FastMergerDecisionMakerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FastMergerDecisionMakerTest.java
index e0ca9b6..c933388 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FastMergerDecisionMakerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FastMergerDecisionMakerTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.IOException;
 
@@ -28,14 +28,13 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import org.apache.apex.malhar.lib.io.fs.FileStitcher.BlockNotFoundException;
+import org.apache.apex.malhar.lib.io.fs.HDFSFileMerger.FastMergerDecisionMaker;
+import org.apache.apex.malhar.lib.io.fs.Synchronizer.OutputFileMetadata;
 import org.apache.hadoop.fs.FileStatus;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 
-import com.datatorrent.lib.io.fs.FileStitcher.BlockNotFoundException;
-import com.datatorrent.lib.io.fs.HDFSFileMerger.FastMergerDecisionMaker;
-import com.datatorrent.lib.io.fs.Synchronizer.OutputFileMetadata;
-
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.when;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileMergerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileMergerTest.java
index f31e3d1..47bd675 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileMergerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileMergerTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.File;
 import java.io.IOException;
@@ -32,6 +32,12 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import org.apache.apex.malhar.lib.io.block.BlockMetadata.FileBlockMetadata;
+import org.apache.apex.malhar.lib.io.block.BlockWriter;
+import org.apache.apex.malhar.lib.io.fs.FileStitcher.BlockNotFoundException;
+import org.apache.apex.malhar.lib.io.fs.Synchronizer.OutputFileMetadata;
+import org.apache.apex.malhar.lib.io.fs.Synchronizer.StitchBlock;
+import org.apache.apex.malhar.lib.io.fs.Synchronizer.StitchBlockMetaData;
 import org.apache.commons.io.FileUtils;
 import org.apache.hadoop.fs.FileContext;
 import org.apache.hadoop.fs.FileStatus;
@@ -43,14 +49,8 @@
 import com.datatorrent.api.Context.DAGContext;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.io.block.BlockMetadata.FileBlockMetadata;
-import com.datatorrent.lib.io.block.BlockWriter;
-import com.datatorrent.lib.io.fs.FileStitcher.BlockNotFoundException;
-import com.datatorrent.lib.io.fs.Synchronizer.OutputFileMetadata;
-import com.datatorrent.lib.io.fs.Synchronizer.StitchBlock;
-import com.datatorrent.lib.io.fs.Synchronizer.StitchBlockMetaData;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 import static org.junit.Assert.fail;
 import static org.mockito.Mockito.when;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileSplitterBaseTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileSplitterBaseTest.java
index 9ec709e..380045f 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileSplitterBaseTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileSplitterBaseTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.File;
 import java.io.IOException;
@@ -31,6 +31,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Attribute;
@@ -46,11 +49,8 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Tests for {@link FileSplitterBase}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileSplitterInputTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileSplitterInputTest.java
index 2a48605..1f29ba4 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileSplitterInputTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileSplitterInputTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.File;
 import java.io.FileWriter;
@@ -36,6 +36,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -45,12 +49,8 @@
 import com.google.common.collect.Sets;
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KryoCloneUtils;
-import com.datatorrent.lib.util.TestUtils;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Tests for {@link FileSplitterInput}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileSplitterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileSplitterTest.java
index 5c90ff2..8ceb020 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileSplitterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileSplitterTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.File;
 import java.io.IOException;
@@ -35,6 +35,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.apex.malhar.lib.wal.FSWindowDataManager;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.StringUtils;
@@ -45,11 +48,8 @@
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class FileSplitterTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileStitcherTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileStitcherTest.java
index 0744774..6d29d8c 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileStitcherTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/FileStitcherTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.File;
 import java.io.IOException;
@@ -29,6 +29,12 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.io.block.BlockMetadata.FileBlockMetadata;
+import org.apache.apex.malhar.lib.io.block.BlockWriter;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileSplitter.FileMetadata;
+import org.apache.apex.malhar.lib.io.fs.Synchronizer.OutputFileMetadata;
+import org.apache.apex.malhar.lib.io.fs.Synchronizer.StitchBlock;
+import org.apache.apex.malhar.lib.io.fs.Synchronizer.StitchBlockMetaData;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.hadoop.fs.Path;
@@ -38,14 +44,8 @@
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.io.block.BlockMetadata.FileBlockMetadata;
-import com.datatorrent.lib.io.block.BlockWriter;
-import com.datatorrent.lib.io.fs.AbstractFileSplitter.FileMetadata;
-import com.datatorrent.lib.io.fs.Synchronizer.OutputFileMetadata;
-import com.datatorrent.lib.io.fs.Synchronizer.StitchBlock;
-import com.datatorrent.lib.io.fs.Synchronizer.StitchBlockMetaData;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Unit tests for {@link FileStitcher}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/S3InputModuleAppTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/S3InputModuleAppTest.java
index 3d7aef0..7926358 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/S3InputModuleAppTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/S3InputModuleAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.File;
 import java.io.FileFilter;
@@ -32,6 +32,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.io.block.AbstractBlockReader;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata;
+import org.apache.apex.malhar.lib.stream.DevNull;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.filefilter.WildcardFileFilter;
 import org.apache.hadoop.conf.Configuration;
@@ -48,9 +51,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.io.block.AbstractBlockReader;
-import com.datatorrent.lib.io.block.BlockMetadata;
-import com.datatorrent.lib.stream.DevNull;
 import com.datatorrent.netlet.util.Slice;
 
 @org.apache.hadoop.classification.InterfaceStability.Evolving
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/SynchronizerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/SynchronizerTest.java
index 7bdee4f..47def77 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/SynchronizerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/SynchronizerTest.java
@@ -17,19 +17,19 @@
  * under the License.
  */
 
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.util.List;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.google.common.collect.Lists;
+import org.apache.apex.malhar.lib.io.block.BlockMetadata.FileBlockMetadata;
+import org.apache.apex.malhar.lib.io.fs.AbstractFileSplitter.FileMetadata;
+import org.apache.apex.malhar.lib.io.fs.Synchronizer.OutputFileMetadata;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
-import com.datatorrent.lib.io.block.BlockMetadata.FileBlockMetadata;
-import com.datatorrent.lib.io.fs.AbstractFileSplitter.FileMetadata;
-import com.datatorrent.lib.io.fs.Synchronizer.OutputFileMetadata;
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import com.google.common.collect.Lists;
 
 /**
  * Unit tests for {@link Synchronizer}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/TailFsInputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/TailFsInputOperatorTest.java
index f273e4d..00c931b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/fs/TailFsInputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/fs/TailFsInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.fs;
+package org.apache.apex.malhar.lib.io.fs;
 
 import java.io.BufferedWriter;
 import java.io.File;
@@ -25,10 +25,10 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.io.fs.TailFsInputOperator}
+ * Functional tests for {@link org.apache.apex.malhar.lib.io.fs.TailFsInputOperator}
  * <p>
  */
 public class TailFsInputOperatorTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/FSPsuedoTransactionableStoreTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/FSPsuedoTransactionableStoreTest.java
index e49e0ba..aef609e 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/FSPsuedoTransactionableStoreTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/FSPsuedoTransactionableStoreTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 public class FSPsuedoTransactionableStoreTest extends JMSTransactionableStoreTestBase
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSMultiPortOutputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSMultiPortOutputOperatorTest.java
index 680368b..1c04a8d 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSMultiPortOutputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSMultiPortOutputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.io.File;
 import java.io.IOException;
@@ -31,14 +31,15 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.ActiveMQMultiTypeMessageListener;
 import org.apache.commons.io.FileUtils;
 
 import com.datatorrent.api.Attribute.AttributeMap.DefaultAttributeMap;
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.lib.util.ActiveMQMultiTypeMessageListener;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
+import com.datatorrent.api.DAG;
 
 /**
  * Test to verify JMS output operator adapter.
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSObjectInputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSObjectInputOperatorTest.java
index dd3ce9b..9c8df21 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSObjectInputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSObjectInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.io.File;
 
@@ -40,16 +40,15 @@
 
 import org.apache.activemq.ActiveMQConnectionFactory;
 import org.apache.activemq.command.ActiveMQQueue;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.io.FileUtils;
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
-
-import com.datatorrent.lib.testbench.CollectorTestSink;
 import com.datatorrent.netlet.util.DTThrowable;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class JMSObjectInputOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSOutputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSOutputOperatorTest.java
index d5ec13a..77e8815 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSOutputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSOutputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.io.File;
 import java.io.IOException;
@@ -32,6 +32,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.ActiveMQMultiTypeMessageListener;
 import org.apache.commons.io.FileUtils;
 
 import com.datatorrent.api.Attribute.AttributeMap.DefaultAttributeMap;
@@ -39,9 +40,8 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.Operator.ProcessingMode;
-import com.datatorrent.lib.util.ActiveMQMultiTypeMessageListener;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Test to verify JMS output operator adapter.
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSStringInputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSStringInputOperatorTest.java
index 2fdddbb..ffda36a 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSStringInputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSStringInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.io.File;
 
@@ -36,13 +36,13 @@
 import org.slf4j.LoggerFactory;
 
 import org.apache.activemq.ActiveMQConnectionFactory;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.io.FileUtils;
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Tests for {@link JMSStringInputOperator}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSTestBase.java b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSTestBase.java
index a59ca6e..6384315 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSTestBase.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSTestBase.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.io.File;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSTransactionableStoreTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSTransactionableStoreTest.java
index a58a46d..5fb79cd 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSTransactionableStoreTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSTransactionableStoreTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 public class JMSTransactionableStoreTest extends JMSTransactionableStoreTestBase
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSTransactionableStoreTestBase.java b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSTransactionableStoreTestBase.java
index 1b8dae0..3acfc41 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSTransactionableStoreTestBase.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/JMSTransactionableStoreTestBase.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.io.File;
 
@@ -27,15 +27,16 @@
 import org.junit.Test;
 import org.junit.rules.TestWatcher;
 
+import org.apache.apex.malhar.lib.io.jms.JMSOutputOperatorTest.JMSStringSinglePortOutputOperator;
+import org.apache.apex.malhar.lib.util.ActiveMQMultiTypeMessageListener;
 import org.apache.commons.io.FileUtils;
 
 import com.datatorrent.api.Attribute.AttributeMap.DefaultAttributeMap;
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.lib.io.jms.JMSOutputOperatorTest.JMSStringSinglePortOutputOperator;
-import com.datatorrent.lib.util.ActiveMQMultiTypeMessageListener;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
+import com.datatorrent.api.DAG;
 
 /**
  * Base testing class for testing transactionable store implementations.
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/SQSStringInputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/SQSStringInputOperatorTest.java
index 4eb0b80..daff612 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/SQSStringInputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/SQSStringInputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import java.io.File;
 
@@ -31,6 +31,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.io.FileUtils;
 
 import com.amazon.sqs.javamessaging.SQSConnectionFactory;
@@ -39,9 +40,8 @@
 import com.amazonaws.regions.Regions;
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Tests for {@link JMSStringInputOperator} for AMZ SQS.
@@ -54,14 +54,14 @@
      * which in-turn will impact the time on consumer close."
  *
  * Because of the above this test takes a long time due to consumer.close() in
- * com.datatorrent.lib.io.jms.AbstractJMSInputOperator.cleanup()
+ * org.apache.apex.malhar.lib.io.jms.AbstractJMSInputOperator.cleanup()
  *
  * NOTE: tests are automatically skipped if the secret key in sqstestCreds.properties
  * is missing or blank.
  *
  * NOTE: each test creates its own uniquely named queue in SQS and then deletes it afterwards.
  * Also we try to scrub any leftover queues from the previous runs just in case tests were
- * aborted (check com.datatorrent.lib.io.jms.SQSTestBase.generateCurrentQueueName(String))
+ * aborted (check org.apache.apex.malhar.lib.io.jms.SQSTestBase.generateCurrentQueueName(String))
  *
  */
 public class SQSStringInputOperatorTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/SQSTestBase.java b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/SQSTestBase.java
index 4dc63c3..b7cf03b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/io/jms/SQSTestBase.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/io/jms/SQSTestBase.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.io.jms;
+package org.apache.apex.malhar.lib.io.jms;
 
 import org.junit.After;
 import org.junit.Assume;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/join/AntiJoinOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/join/AntiJoinOperatorTest.java
index e71074e..2ae5bb0 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/join/AntiJoinOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/join/AntiJoinOperatorTest.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import java.util.HashMap;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.streamquery.condition.Condition;
-import com.datatorrent.lib.streamquery.condition.JoinColumnEqualCondition;
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.condition.JoinColumnEqualCondition;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 /**
  *
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/join/MapTimeBasedJoinOperator.java b/library/src/test/java/org/apache/apex/malhar/lib/join/MapTimeBasedJoinOperator.java
index f6a2b2f..e062cdb 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/join/MapTimeBasedJoinOperator.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/join/MapTimeBasedJoinOperator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import java.io.IOException;
 import java.util.List;
@@ -28,14 +28,15 @@
 import org.junit.Rule;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.google.common.collect.Maps;
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class MapTimeBasedJoinOperator
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/join/POJOInnerJoinOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/join/POJOInnerJoinOperatorTest.java
index 857db6d..b09de5d 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/join/POJOInnerJoinOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/join/POJOInnerJoinOperatorTest.java
@@ -26,6 +26,9 @@
 import org.junit.Rule;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.helper.OperatorContextTestHelper;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
@@ -33,12 +36,9 @@
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.helper.OperatorContextTestHelper;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
 import com.datatorrent.stram.engine.PortContext;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 @Ignore
 public class POJOInnerJoinOperatorTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/join/POJOPartitionJoinOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/join/POJOPartitionJoinOperatorTest.java
index 9833093..967f56a 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/join/POJOPartitionJoinOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/join/POJOPartitionJoinOperatorTest.java
@@ -27,6 +27,7 @@
 import org.junit.Ignore;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.google.common.collect.Maps;
@@ -42,7 +43,6 @@
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.common.partitioner.StatelessPartitioner;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 @Ignore
 public class POJOPartitionJoinOperatorTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/join/POJOTimeBasedJoinOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/join/POJOTimeBasedJoinOperatorTest.java
index 8ec722e..b76d02c 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/join/POJOTimeBasedJoinOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/join/POJOTimeBasedJoinOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import java.io.IOException;
 import java.util.Iterator;
@@ -28,10 +28,10 @@
 import org.junit.Rule;
 import org.junit.Test;
 
-import com.esotericsoftware.kryo.Kryo;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
+import com.esotericsoftware.kryo.Kryo;
 
 public class POJOTimeBasedJoinOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/join/SemiJoinOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/join/SemiJoinOperatorTest.java
index 413f05f..9e7936a 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/join/SemiJoinOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/join/SemiJoinOperatorTest.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.join;
+package org.apache.apex.malhar.lib.join;
 
 import java.util.HashMap;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.streamquery.condition.Condition;
-import com.datatorrent.lib.streamquery.condition.JoinColumnEqualCondition;
-import com.datatorrent.lib.streamquery.index.ColumnIndex;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.streamquery.condition.Condition;
+import org.apache.apex.malhar.lib.streamquery.condition.JoinColumnEqualCondition;
+import org.apache.apex.malhar.lib.streamquery.index.ColumnIndex;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 /**
  *
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/logs/ApacheLogParseMapOutputOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/logs/ApacheLogParseMapOutputOperatorTest.java
index 7136e4e..14df343 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/logs/ApacheLogParseMapOutputOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/logs/ApacheLogParseMapOutputOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.Map;
 
@@ -25,10 +25,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.logs.ApacheLogParseMapOutputOperator}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.logs.ApacheLogParseMapOutputOperator}.
  */
 public class ApacheLogParseMapOutputOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/logs/ApacheLogParseOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/logs/ApacheLogParseOperatorTest.java
index 7b44751..dbe4529 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/logs/ApacheLogParseOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/logs/ApacheLogParseOperatorTest.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.logs.ApacheLogParseOperator}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.logs.ApacheLogParseOperator}.
  */
 public class ApacheLogParseOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenArrayListTest.java b/library/src/test/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenArrayListTest.java
index 1350218..69e9aee 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenArrayListTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenArrayListTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -25,11 +25,11 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.ArrayListTestSink;
+import org.apache.apex.malhar.lib.testbench.ArrayListTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.logs.FilteredLineToTokenArrayList}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.logs.FilteredLineToTokenArrayList}<p>
  *
  */
 public class FilteredLineToTokenArrayListTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenHashMapTest.java b/library/src/test/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenHashMapTest.java
index dfd9627..cb26d0e 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenHashMapTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/logs/FilteredLineToTokenHashMapTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -25,12 +25,12 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.HashTestSink;
+import org.apache.apex.malhar.lib.testbench.HashTestSink;
 
 /**
  *
  * Functional tests for
- * {@link com.datatorrent.lib.logs.FilteredLineToTokenHashMap}
+ * {@link org.apache.apex.malhar.lib.logs.FilteredLineToTokenHashMap}
  */
 public class FilteredLineToTokenHashMapTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/logs/FilteredLineTokenizerKeyValTest.java b/library/src/test/java/org/apache/apex/malhar/lib/logs/FilteredLineTokenizerKeyValTest.java
index b8e5b7d..5fb4112 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/logs/FilteredLineTokenizerKeyValTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/logs/FilteredLineTokenizerKeyValTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -24,11 +24,11 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.HashTestSink;
+import org.apache.apex.malhar.lib.testbench.HashTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.logs.FilteredLineTokenizerKeyVal}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.logs.FilteredLineTokenizerKeyVal}<p>
  *
  */
 public class FilteredLineTokenizerKeyValTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/logs/LineToTokenArrayListTest.java b/library/src/test/java/org/apache/apex/malhar/lib/logs/LineToTokenArrayListTest.java
index ef38f51..06d3058 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/logs/LineToTokenArrayListTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/logs/LineToTokenArrayListTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -26,11 +26,11 @@
 
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.ArrayListTestSink;
+import org.apache.apex.malhar.lib.testbench.ArrayListTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.logs.LineToTokenArrayList}
+ * Functional tests for {@link org.apache.apex.malhar.lib.logs.LineToTokenArrayList}
  * <p>
  *
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/logs/LineToTokenHashMapTest.java b/library/src/test/java/org/apache/apex/malhar/lib/logs/LineToTokenHashMapTest.java
index e9ab8fb..143d7bf 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/logs/LineToTokenHashMapTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/logs/LineToTokenHashMapTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -25,11 +25,11 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.HashTestSink;
+import org.apache.apex.malhar.lib.testbench.HashTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.logs.LineToTokenHashMap}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.logs.LineToTokenHashMap}.
  */
 public class LineToTokenHashMapTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/logs/LineTokenizerKeyValTest.java b/library/src/test/java/org/apache/apex/malhar/lib/logs/LineTokenizerKeyValTest.java
index 1382c55..d4fd99a 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/logs/LineTokenizerKeyValTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/logs/LineTokenizerKeyValTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -24,11 +24,11 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.HashTestSink;
+import org.apache.apex.malhar.lib.testbench.HashTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.logs.LineTokenizerKeyVal}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.logs.LineTokenizerKeyVal}.
  */
 public class LineTokenizerKeyValTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/logs/LineTokenizerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/logs/LineTokenizerTest.java
index 8db135d..704e15b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/logs/LineTokenizerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/logs/LineTokenizerTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.HashTestSink;
+import org.apache.apex.malhar.lib.testbench.HashTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.logs.LineTokenizer}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.logs.LineTokenizer}<p>
  *
  */
 public class LineTokenizerTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/logs/MultiWindowDimensionAggregationTest.java b/library/src/test/java/org/apache/apex/malhar/lib/logs/MultiWindowDimensionAggregationTest.java
index 11d5622..92bafbc 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/logs/MultiWindowDimensionAggregationTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/logs/MultiWindowDimensionAggregationTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -28,11 +28,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.logs.MultiWindowDimensionAggregation.AggregateOperation;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.lang.mutable.MutableDouble;
 
-import com.datatorrent.lib.logs.MultiWindowDimensionAggregation.AggregateOperation;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
 /**
  * <p>
  * MultiWindowDimensionAggregationTest class.
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/logs/RegexMatchMapOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/logs/RegexMatchMapOperatorTest.java
index 76a22d5..9927093 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/logs/RegexMatchMapOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/logs/RegexMatchMapOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -27,10 +27,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.logs.RegexMatchMapOperator}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.logs.RegexMatchMapOperator}.
  */
 public class RegexMatchMapOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/logs/TopNUniqueSiteStatsTest.java b/library/src/test/java/org/apache/apex/malhar/lib/logs/TopNUniqueSiteStatsTest.java
index 4faf32f..31edb3e 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/logs/TopNUniqueSiteStatsTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/logs/TopNUniqueSiteStatsTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.logs;
+package org.apache.apex.malhar.lib.logs;
 
 import java.util.HashMap;
 
@@ -25,11 +25,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.algo.TopNUnique;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.lang.mutable.MutableDouble;
 
-import com.datatorrent.lib.algo.TopNUnique;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
 /**
  * <p>TopNUniqueSiteStatsTest class.</p>
  * This tests the integration between MultiWindowDimensionAggregationOperator and TopNUnique Operator
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/AverageKeyValTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/AverageKeyValTest.java
index 0f81106..3fa598c 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/AverageKeyValTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/AverageKeyValTest.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.math.AverageKeyVal}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.AverageKeyVal}.
  * <p>
  *
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/AverageTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/AverageTest.java
index 712bcdc..25cbb48 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/AverageTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/AverageTest.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.common.util.Pair;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import com.datatorrent.common.util.Pair;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.math.Average}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.Average}.
  * <p> Sample values are processed after operator begin window.
  * Result is collected on output sink and compared.
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/CountOccuranceTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/CountOccuranceTest.java
index 57b79d7..e5a4da7 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/CountOccuranceTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/CountOccuranceTest.java
@@ -16,13 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.testbench.CountOccurance;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CountOccurance;
 
 /**
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/DivisionTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/DivisionTest.java
index c7e7c65..7e6cef5 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/DivisionTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/DivisionTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.math.Division}
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.Division}
  * <p>
  *
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/LogicalCompareTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/LogicalCompareTest.java
index 9fd2526..f365e78 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/LogicalCompareTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/LogicalCompareTest.java
@@ -16,16 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
 import com.datatorrent.common.util.Pair;
-import com.datatorrent.lib.testbench.CollectorTestSink;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.math.LogicalCompare}
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.LogicalCompare}
  */
 public class LogicalCompareTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/LogicalCompareToConstantTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/LogicalCompareToConstantTest.java
index df7ef2d..116c816 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/LogicalCompareToConstantTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/LogicalCompareToConstantTest.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 
 /**
  *
  * Functional tests for
- * {@link com.datatorrent.lib.math.LogicalCompareToConstant}
+ * {@link org.apache.apex.malhar.lib.math.LogicalCompareToConstant}
  *
  */
 public class LogicalCompareToConstantTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/MarginKeyValTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/MarginKeyValTest.java
index 365df7a..34e3480 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/MarginKeyValTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/MarginKeyValTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.math.MarginKeyVal}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.MarginKeyVal}.
  */
 public class MarginKeyValTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/MarginMapTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/MarginMapTest.java
index 28866a8..e6abbcd 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/MarginMapTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/MarginMapTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -26,11 +26,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.math.MarginMap}
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.MarginMap}
  * <p>
  *
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/MarginTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/MarginTest.java
index 4ae6fe8..2512158 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/MarginTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/MarginTest.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.math.Margin}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.Margin}<p>
  *
  */
 public class MarginTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/MaxKeyValTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/MaxKeyValTest.java
index 55cf5b4..7d998cb 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/MaxKeyValTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/MaxKeyValTest.java
@@ -16,23 +16,24 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.ArrayList;
 
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.math.MaxKeyVal}. <p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.MaxKeyVal}. <p>
  *
  */
 public class MaxKeyValTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/MaxTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/MaxTest.java
index a294c26..e78cf08 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/MaxTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/MaxTest.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.math.Max}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.Max}.
  */
 public class MaxTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/MinKeyValTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/MinKeyValTest.java
index 6d9371c..097787c 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/MinKeyValTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/MinKeyValTest.java
@@ -16,22 +16,23 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.ArrayList;
 
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.DefaultInputPort;
 import com.datatorrent.api.DefaultOutputPort;
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.math.MinKeyVal}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.MinKeyVal}.
  */
 public class MinKeyValTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/MinTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/MinTest.java
index dfffae3..0172b7f 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/MinTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/MinTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.math.Min}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.Min}<p>
  *
  */
 public class MinTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/MultiplyByConstantTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/MultiplyByConstantTest.java
index 4eb6a1b..b94006c 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/MultiplyByConstantTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/MultiplyByConstantTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.SumTestSink;
+import org.apache.apex.malhar.lib.testbench.SumTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.math.MultiplyByConstant}
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.MultiplyByConstant}
  */
 
 public class MultiplyByConstantTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/RangeKeyValTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/RangeKeyValTest.java
index 57727b4..2c7bd2f 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/RangeKeyValTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/RangeKeyValTest.java
@@ -16,20 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.HighLow;
+import org.apache.apex.malhar.lib.util.KeyValPair;
+
 import com.datatorrent.api.Sink;
 
-import com.datatorrent.lib.util.HighLow;
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
- * Functional tests for {@link com.datatorrent.lib.math.RangeKeyVal}<p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.RangeKeyVal}<p>
  */
 public class RangeKeyValTest<V extends Number>
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/RangeTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/RangeTest.java
index c708c2a..8aec963 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/RangeTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/RangeTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -24,12 +24,12 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.util.HighLow;
+
 import com.datatorrent.api.Sink;
 
-import com.datatorrent.lib.util.HighLow;
-
 /**
- * Functional tests for {@link com.datatorrent.lib.math.Range}
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.Range}
  */
 public class RangeTest<V extends Number>
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/RunningAverageTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/RunningAverageTest.java
index 3c5e026..43572a3 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/RunningAverageTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/RunningAverageTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -25,7 +25,7 @@
 import static org.junit.Assert.assertEquals;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.math.RunningAverage}
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.RunningAverage}
  */
 public class RunningAverageTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/SigmaTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/SigmaTest.java
index 8608a96..ed8be0f 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/SigmaTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/SigmaTest.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.util.ArrayList;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.SumTestSink;
+import org.apache.apex.malhar.lib.testbench.SumTestSink;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.math.Sigma}
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.Sigma}
  * <p>
  *
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/SquareCalculusTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/SquareCalculusTest.java
index 7f5ab53..26f8afe 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/SquareCalculusTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/SquareCalculusTest.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.SumTestSink;
+import org.apache.apex.malhar.lib.testbench.SumTestSink;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.math.SquareCalculus}
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.SquareCalculus}
  */
 public class SquareCalculusTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/SumKeyValTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/SumKeyValTest.java
index 336ddcb..22b60f3 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/SumKeyValTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/SumKeyValTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.math.SumKeyVal}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.SumKeyVal}.
  */
 public class SumKeyValTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/SumTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/SumTest.java
index e9962f0..47d8852 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/SumTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/SumTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 
 /**
- * Functional tests for {@link com.datatorrent.lib.math.Sum}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.math.Sum}.
  */
 public class SumTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/math/XmlKeyValueStringCartesianProductTest.java b/library/src/test/java/org/apache/apex/malhar/lib/math/XmlKeyValueStringCartesianProductTest.java
index dae96e4..bbf8f85 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/math/XmlKeyValueStringCartesianProductTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/math/XmlKeyValueStringCartesianProductTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.math;
+package org.apache.apex.malhar.lib.math;
 
 import java.io.IOException;
 import java.util.ArrayList;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowRangeKeyValTest.java b/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowRangeKeyValTest.java
index cad0e8c..ba00342 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowRangeKeyValTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowRangeKeyValTest.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.multiwindow;
+package org.apache.apex.malhar.lib.multiwindow;
 
 import org.junit.Assert;
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.multiwindow.AbstractSlidingWindow}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.multiwindow.AbstractSlidingWindow}.
  */
 public class MultiWindowRangeKeyValTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowSumKeyValTest.java b/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowSumKeyValTest.java
index 0f9ccbd..c705dd6 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowSumKeyValTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/MultiWindowSumKeyValTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.multiwindow;
+package org.apache.apex.malhar.lib.multiwindow;
 
 
 import org.junit.Assert;
@@ -24,11 +24,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.multiwindow.AbstractSlidingWindow}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.multiwindow.AbstractSlidingWindow}.
  */
 public class MultiWindowSumKeyValTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/SimpleMovingAverageTest.java b/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/SimpleMovingAverageTest.java
index 0d6a006..dfa7277 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/SimpleMovingAverageTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/SimpleMovingAverageTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.multiwindow;
+package org.apache.apex.malhar.lib.multiwindow;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
- * Functional test for {@link com.datatorrent.lib.multiwindow.SimpleMovingAverage}. <p>
+ * Functional test for {@link org.apache.apex.malhar.lib.multiwindow.SimpleMovingAverage}. <p>
  */
 public class SimpleMovingAverageTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/SlidingWindowTest.java b/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/SlidingWindowTest.java
index 1a59b97..4d4d762 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/SlidingWindowTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/SlidingWindowTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.multiwindow;
+package org.apache.apex.malhar.lib.multiwindow;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -24,15 +24,15 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+
 import com.google.common.collect.Lists;
 
 import com.datatorrent.api.DefaultOutputPort;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
 /**
  * Unit tests for
- * {@link com.datatorrent.lib.multiwindow.AbstractSlidingWindow}.
+ * {@link org.apache.apex.malhar.lib.multiwindow.AbstractSlidingWindow}.
  */
 public class SlidingWindowTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/SortedMovingWindowTest.java b/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/SortedMovingWindowTest.java
index 8030d97..ab6d613 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/SortedMovingWindowTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/multiwindow/SortedMovingWindowTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.multiwindow;
+package org.apache.apex.malhar.lib.multiwindow;
 
 import java.util.Arrays;
 import java.util.Comparator;
@@ -26,13 +26,12 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.lang.ObjectUtils.Null;
 
 import com.google.common.base.Function;
 import com.google.common.collect.Lists;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
 /**
  * A unit test to test SortedMovingWindow operator can either:
  * 1. sort simple comparable tuples
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/parser/XmlParserApplicationTest.java b/library/src/test/java/org/apache/apex/malhar/lib/parser/XmlParserApplicationTest.java
index e35d6b0..c856433 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/parser/XmlParserApplicationTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/parser/XmlParserApplicationTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.parser;
+package org.apache.apex.malhar.lib.parser;
 
 import java.util.concurrent.Callable;
 
@@ -25,6 +25,8 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.DefaultInputPort;
@@ -32,7 +34,6 @@
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 import com.datatorrent.stram.StramLocalCluster;
 
 /**
@@ -41,8 +42,9 @@
  */
 public class XmlParserApplicationTest
 {
-  public static volatile int TupleCount;
-  public static com.datatorrent.lib.parser.XmlParserTest.EmployeeBean obj;
+  public static int TupleCount;
+  public static org.apache.apex.malhar.lib.parser.XmlParserTest.EmployeeBean obj;
+
   @Test
   public void testApplication()
   {
@@ -52,7 +54,7 @@
       XmlDataEmitterOperator input = dag.addOperator("data", new XmlDataEmitterOperator());
       XmlParser parser = dag.addOperator("xmlparser", new XmlParser());
       ResultCollector rc = dag.addOperator("rc", new ResultCollector());
-      dag.getMeta(parser).getMeta(parser.out).getAttributes().put(Context.PortContext.TUPLE_CLASS, com.datatorrent.lib.parser.XmlParserTest.EmployeeBean.class);
+      dag.getMeta(parser).getMeta(parser.out).getAttributes().put(Context.PortContext.TUPLE_CLASS, org.apache.apex.malhar.lib.parser.XmlParserTest.EmployeeBean.class);
       ConsoleOutputOperator xmlObjectOp = dag.addOperator("xmlObjectOp", new ConsoleOutputOperator());
       xmlObjectOp.setDebug(true);
       dag.addStream("input", input.output, parser.in);
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/parser/XmlParserTest.java b/library/src/test/java/org/apache/apex/malhar/lib/parser/XmlParserTest.java
index 685b383..ff5c9f7 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/parser/XmlParserTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/parser/XmlParserTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.parser;
+package org.apache.apex.malhar.lib.parser;
 
 import java.io.ByteArrayOutputStream;
 import java.text.SimpleDateFormat;
@@ -32,13 +32,13 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.esotericsoftware.kryo.Kryo;
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
-
 public class XmlParserTest
 {
   XmlParser operator;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/partitioner/StatelessPartitionerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/partitioner/StatelessPartitionerTest.java
index 8d52f7e..3339653 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/partitioner/StatelessPartitionerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/partitioner/StatelessPartitionerTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.partitioner;
+package org.apache.apex.malhar.lib.partitioner;
 
 import java.util.Collection;
 import java.util.List;
@@ -24,6 +24,8 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.google.common.collect.Lists;
 
 import com.datatorrent.api.Context.OperatorContext;
@@ -35,7 +37,6 @@
 import com.datatorrent.api.Partitioner.Partition;
 import com.datatorrent.api.StringCodec.Object2String;
 import com.datatorrent.common.partitioner.StatelessPartitioner;
-import com.datatorrent.lib.util.TestUtils;
 
 public class StatelessPartitionerTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/partitioner/StatelessThroughputBasedPartitionerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/partitioner/StatelessThroughputBasedPartitionerTest.java
index 6eaebc3..8c3c3cf 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/partitioner/StatelessThroughputBasedPartitionerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/partitioner/StatelessThroughputBasedPartitionerTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.partitioner;
+package org.apache.apex.malhar.lib.partitioner;
 
 import java.util.Collection;
 import java.util.List;
@@ -25,6 +25,8 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 
@@ -35,7 +37,6 @@
 import com.datatorrent.api.Operator;
 import com.datatorrent.api.Partitioner;
 import com.datatorrent.api.StatsListener;
-import com.datatorrent.lib.util.TestUtils;
 
 /**
  * Test for {@link StatelessThroughputBasedPartitioner}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/projection/ActivateTest.java b/library/src/test/java/org/apache/apex/malhar/lib/projection/ActivateTest.java
index cab0330..a06c5cb 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/projection/ActivateTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/projection/ActivateTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.projection;
+package org.apache.apex.malhar.lib.projection;
 
 import java.util.ArrayList;
 import java.util.Date;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/projection/ProjectionTest.java b/library/src/test/java/org/apache/apex/malhar/lib/projection/ProjectionTest.java
index e873768..7dd9897 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/projection/ProjectionTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/projection/ProjectionTest.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-package com.datatorrent.lib.projection;
+package org.apache.apex.malhar.lib.projection;
 
 import java.lang.reflect.Field;
 import java.util.ArrayList;
@@ -31,7 +31,7 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Tests for ProjectionOperator
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/script/JavaScriptOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/script/JavaScriptOperatorTest.java
index 3ad30df..a0f4925 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/script/JavaScriptOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/script/JavaScriptOperatorTest.java
@@ -16,18 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.script;
+package org.apache.apex.malhar.lib.script;
 
 import java.util.HashMap;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.script.JavaScriptOperator}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.script.JavaScriptOperator}.
  */
 public class JavaScriptOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/BucketsFileSystemTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/BucketsFileSystemTest.java
index 28b3824..4c0bf18 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/BucketsFileSystemTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/BucketsFileSystemTest.java
@@ -30,8 +30,9 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
-import com.datatorrent.lib.fileaccess.FileAccessFSImpl;
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.fileaccess.FileAccessFSImpl;
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.datatorrent.netlet.util.Slice;
 
 public class BucketsFileSystemTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/DefaultBucketTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/DefaultBucketTest.java
index 8bbc3dc..0f9346b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/DefaultBucketTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/DefaultBucketTest.java
@@ -28,17 +28,17 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccess;
+import org.apache.apex.malhar.lib.fileaccess.FileAccessFSImpl;
 import org.apache.apex.malhar.lib.state.managed.Bucket.DefaultBucket;
 import org.apache.apex.malhar.lib.state.managed.Bucket.ReadSource;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.apex.malhar.lib.utils.serde.AffixSerde;
 import org.apache.apex.malhar.lib.utils.serde.SerializationBuffer;
 import org.apache.apex.malhar.lib.utils.serde.StringSerde;
 
 import com.google.common.primitives.Longs;
 
-import com.datatorrent.lib.fileaccess.FileAccess;
-import com.datatorrent.lib.fileaccess.FileAccessFSImpl;
-import com.datatorrent.lib.util.TestUtils;
 import com.datatorrent.netlet.util.Slice;
 
 public class DefaultBucketTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/IncrementalCheckpointManagerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/IncrementalCheckpointManagerTest.java
index fe4c20d..fc3c4c2 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/IncrementalCheckpointManagerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/IncrementalCheckpointManagerTest.java
@@ -34,6 +34,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccessFSImpl;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.LocatedFileStatus;
@@ -44,9 +47,6 @@
 import com.google.common.collect.Maps;
 
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.fileaccess.FileAccessFSImpl;
-import com.datatorrent.lib.util.KryoCloneUtils;
-import com.datatorrent.lib.util.TestUtils;
 import com.datatorrent.netlet.util.Slice;
 
 public class IncrementalCheckpointManagerTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedStateImplTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedStateImplTest.java
index dab3925..2a4e7d8 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedStateImplTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedStateImplTest.java
@@ -32,10 +32,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccessFSImpl;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.fileaccess.FileAccessFSImpl;
-import com.datatorrent.lib.util.KryoCloneUtils;
-import com.datatorrent.lib.util.TestUtils;
 import com.datatorrent.netlet.util.Slice;
 
 public class ManagedStateImplTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedStateTestUtils.java b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedStateTestUtils.java
index 393a3a8..830835c 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedStateTestUtils.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedStateTestUtils.java
@@ -28,6 +28,8 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccess;
+import org.apache.apex.malhar.lib.util.comparator.SliceComparator;
 import org.apache.apex.malhar.lib.utils.serde.BufferSlice;
 import org.apache.hadoop.fs.LocatedFileStatus;
 import org.apache.hadoop.fs.RemoteIterator;
@@ -38,11 +40,9 @@
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.fileaccess.FileAccess;
-import com.datatorrent.lib.util.comparator.SliceComparator;
 import com.datatorrent.netlet.util.Slice;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class ManagedStateTestUtils
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeStateImplTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeStateImplTest.java
index d5f4856..b0f896a 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeStateImplTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeStateImplTest.java
@@ -30,18 +30,18 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccessFSImpl;
 import org.apache.apex.malhar.lib.state.managed.Bucket.DefaultBucket;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.fileaccess.FileAccessFSImpl;
-import com.datatorrent.lib.util.KryoCloneUtils;
-import com.datatorrent.lib.util.TestUtils;
 import com.datatorrent.netlet.util.Slice;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class ManagedTimeStateImplTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeUnifiedStateImplTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeUnifiedStateImplTest.java
index faa6f71..199bc36 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeUnifiedStateImplTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/ManagedTimeUnifiedStateImplTest.java
@@ -30,11 +30,11 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccessFSImpl;
 import org.apache.apex.malhar.lib.state.managed.Bucket.DefaultBucket;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.fileaccess.FileAccessFSImpl;
-import com.datatorrent.lib.util.TestUtils;
 import com.datatorrent.netlet.util.Slice;
 
 public class ManagedTimeUnifiedStateImplTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/MockManagedStateContext.java b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/MockManagedStateContext.java
index ef67b94..dc2fa6c 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/MockManagedStateContext.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/MockManagedStateContext.java
@@ -20,10 +20,11 @@
 
 import java.util.Comparator;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccess;
+import org.apache.apex.malhar.lib.fileaccess.TFileImpl;
+import org.apache.apex.malhar.lib.util.comparator.SliceComparator;
+
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.fileaccess.FileAccess;
-import com.datatorrent.lib.fileaccess.TFileImpl;
-import com.datatorrent.lib.util.comparator.SliceComparator;
 import com.datatorrent.netlet.util.Slice;
 
 class MockManagedStateContext implements ManagedStateContext
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/MovingBoundaryTimeBucketAssignerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/MovingBoundaryTimeBucketAssignerTest.java
index 97f6c20..766b30c 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/MovingBoundaryTimeBucketAssignerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/MovingBoundaryTimeBucketAssignerTest.java
@@ -28,10 +28,9 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.commons.lang3.mutable.MutableLong;
 
-import com.datatorrent.lib.util.KryoCloneUtils;
-
 public class MovingBoundaryTimeBucketAssignerTest
 {
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/StateTrackerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/StateTrackerTest.java
index ca78186..02c4897 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/managed/StateTrackerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/managed/StateTrackerTest.java
@@ -30,11 +30,12 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccessFSImpl;
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.google.common.collect.Sets;
 
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.fileaccess.FileAccessFSImpl;
-import com.datatorrent.lib.util.TestUtils;
 import com.datatorrent.netlet.util.Slice;
 
 public class StateTrackerTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SequentialSpillableIdentifierGeneratorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SequentialSpillableIdentifierGeneratorTest.java
index f40ae87..5d7b9fd 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SequentialSpillableIdentifierGeneratorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SequentialSpillableIdentifierGeneratorTest.java
@@ -21,7 +21,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 public class SequentialSpillableIdentifierGeneratorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableArrayListImplTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableArrayListImplTest.java
index 225fd23..45ce95e 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableArrayListImplTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableArrayListImplTest.java
@@ -23,6 +23,7 @@
 import org.junit.Test;
 
 import org.apache.apex.malhar.lib.state.spillable.inmem.InMemSpillableStateStore;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.apex.malhar.lib.utils.serde.StringSerde;
 
 import com.google.common.collect.Lists;
@@ -30,10 +31,10 @@
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.lib.util.KryoCloneUtils;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
+import com.datatorrent.api.DAG;
 
 public class SpillableArrayListImplTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableArrayListMultimapImplTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableArrayListMultimapImplTest.java
index a10cc68..975f11e 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableArrayListMultimapImplTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableArrayListMultimapImplTest.java
@@ -26,6 +26,7 @@
 import org.junit.Test;
 
 import org.apache.apex.malhar.lib.state.spillable.inmem.InMemSpillableStateStore;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.apex.malhar.lib.utils.serde.IntSerde;
 import org.apache.apex.malhar.lib.utils.serde.SerializationBuffer;
 import org.apache.apex.malhar.lib.utils.serde.SliceUtils;
@@ -38,10 +39,9 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.util.KryoCloneUtils;
 import com.datatorrent.netlet.util.Slice;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class SpillableArrayListMultimapImplTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableMapImplTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableMapImplTest.java
index 26d0900..cfaabd1 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableMapImplTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableMapImplTest.java
@@ -25,6 +25,7 @@
 
 import org.apache.apex.malhar.lib.state.managed.TimeExtractor;
 import org.apache.apex.malhar.lib.state.spillable.inmem.InMemSpillableStateStore;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.apex.malhar.lib.utils.serde.AffixKeyValueSerdeManager;
 import org.apache.apex.malhar.lib.utils.serde.Serde;
 import org.apache.apex.malhar.lib.utils.serde.SerializationBuffer;
@@ -36,12 +37,11 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
 import com.datatorrent.api.DAG;
-import com.datatorrent.lib.util.KryoCloneUtils;
 
 import junitparams.JUnitParamsRunner;
 import junitparams.Parameters;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 @RunWith(JUnitParamsRunner.class)
 public class SpillableMapImplTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableSetMultimapImplTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableSetMultimapImplTest.java
index c1f9ad9..610d5b0 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableSetMultimapImplTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableSetMultimapImplTest.java
@@ -28,6 +28,7 @@
 
 import org.apache.apex.malhar.lib.state.managed.TimeExtractor;
 import org.apache.apex.malhar.lib.state.spillable.inmem.InMemSpillableStateStore;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.apex.malhar.lib.utils.serde.Serde;
 import org.apache.apex.malhar.lib.utils.serde.StringSerde;
 
@@ -37,10 +38,10 @@
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
 import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.lib.util.KryoCloneUtils;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+
+import com.datatorrent.api.DAG;
 
 public class SpillableSetMultimapImplTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableTestUtils.java b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableTestUtils.java
index a312f04..1139520 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableTestUtils.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/SpillableTestUtils.java
@@ -25,9 +25,11 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.fileaccess.FileAccessFSImpl;
 import org.apache.apex.malhar.lib.state.managed.ManagedStateTestUtils;
 import org.apache.apex.malhar.lib.state.spillable.managed.ManagedStateSpillableStateStore;
 import org.apache.apex.malhar.lib.state.spillable.managed.ManagedTimeUnifiedStateSpillableStateStore;
+import org.apache.apex.malhar.lib.util.TestUtils;
 import org.apache.apex.malhar.lib.utils.serde.CollectionSerde;
 import org.apache.apex.malhar.lib.utils.serde.Serde;
 import org.apache.apex.malhar.lib.utils.serde.SerializationBuffer;
@@ -37,8 +39,6 @@
 import com.esotericsoftware.kryo.io.Input;
 
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.fileaccess.FileAccessFSImpl;
-import com.datatorrent.lib.util.TestUtils;
 import com.datatorrent.netlet.util.Slice;
 
 /**
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/inmem/InMemorySpillableStateStoreTest.java b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/inmem/InMemorySpillableStateStoreTest.java
index 769bc0d..295a317 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/inmem/InMemorySpillableStateStoreTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/state/spillable/inmem/InMemorySpillableStateStoreTest.java
@@ -21,7 +21,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 public class InMemorySpillableStateStoreTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/statistics/MeridianOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/statistics/MeridianOperatorTest.java
index b7979c6..c740058 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/statistics/MeridianOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/statistics/MeridianOperatorTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.statistics;
+package org.apache.apex.malhar.lib.statistics;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 /**
- * Functional Test for {@link com.datatorrent.lib.statistics.WeightedMeanOperator}. <br>
+ * Functional Test for {@link org.apache.apex.malhar.lib.statistics.WeightedMeanOperator}. <br>
  */
 public class MeridianOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/statistics/ModeOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/statistics/ModeOperatorTest.java
index d38766e..4e59152 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/statistics/ModeOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/statistics/ModeOperatorTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.statistics;
+package org.apache.apex.malhar.lib.statistics;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 /**
- * Functional Test for {@link com.datatorrent.lib.statistics.WeightedMeanOperator}. <br>
+ * Functional Test for {@link org.apache.apex.malhar.lib.statistics.WeightedMeanOperator}. <br>
  */
 public class ModeOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/statistics/StandardDeviationOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/statistics/StandardDeviationOperatorTest.java
index b32f202..da0da41 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/statistics/StandardDeviationOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/statistics/StandardDeviationOperatorTest.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.statistics;
+package org.apache.apex.malhar.lib.statistics;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
- * Functional Test for {@link com.datatorrent.lib.statistics.WeightedMeanOperator}. <br>
+ * Functional Test for {@link org.apache.apex.malhar.lib.statistics.WeightedMeanOperator}. <br>
  */
 public class StandardDeviationOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/statistics/WeightedMeanOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/statistics/WeightedMeanOperatorTest.java
index 90066a6..5019817 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/statistics/WeightedMeanOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/statistics/WeightedMeanOperatorTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.statistics;
+package org.apache.apex.malhar.lib.statistics;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
 
 /**
- * Functional Test for {@link com.datatorrent.lib.statistics.WeightedMeanOperator}. <br>
+ * Functional Test for {@link org.apache.apex.malhar.lib.statistics.WeightedMeanOperator}. <br>
  */
 public class WeightedMeanOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/stream/ArrayListAggregatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/stream/ArrayListAggregatorTest.java
index 13d6097..7f0c42c 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/stream/ArrayListAggregatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/stream/ArrayListAggregatorTest.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.ArrayList;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
- * Functional test for {@link com.datatorrent.lib.stream.ArrayListAggregator}
+ * Functional test for {@link org.apache.apex.malhar.lib.stream.ArrayListAggregator}
  */
 public class ArrayListAggregatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/stream/ArrayListToItemTest.java b/library/src/test/java/org/apache/apex/malhar/lib/stream/ArrayListToItemTest.java
index 6f1504d..d70b772 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/stream/ArrayListToItemTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/stream/ArrayListToItemTest.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.ArrayList;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountTestSink;
+import org.apache.apex.malhar.lib.testbench.CountTestSink;
 
 /**
- * Performance test for {@link com.datatorrent.lib.stream.StreamDuplicater}<p>
+ * Performance test for {@link org.apache.apex.malhar.lib.stream.StreamDuplicater}<p>
  * Benchmarks: Currently does about ?? Million tuples/sec in debugging environment. Need to test on larger nodes<br>
  * <br>
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/stream/ConsolidatorKeyValTest.java b/library/src/test/java/org/apache/apex/malhar/lib/stream/ConsolidatorKeyValTest.java
index de419fd..01ac678 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/stream/ConsolidatorKeyValTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/stream/ConsolidatorKeyValTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -24,11 +24,11 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
- * Functional test for {@link com.datatorrent.lib.stream.ArrayListAggregator}
+ * Functional test for {@link org.apache.apex.malhar.lib.stream.ArrayListAggregator}
  */
 public class ConsolidatorKeyValTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/stream/CounterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/stream/CounterTest.java
index dc73a75..3bb5ba7 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/stream/CounterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/stream/CounterTest.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountTestSink;
+import org.apache.apex.malhar.lib.testbench.CountTestSink;
 
 /**
- * Functional test for {@link com.datatorrent.lib.stream.Counter}<p>
+ * Functional test for {@link org.apache.apex.malhar.lib.stream.Counter}<p>
  * <br>
  */
 public class CounterTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/stream/DevNullCounterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/stream/DevNullCounterTest.java
index c027a21..bd3ac98 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/stream/DevNullCounterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/stream/DevNullCounterTest.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.EventGenerator;
+import org.apache.apex.malhar.lib.testbench.EventGenerator;
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.testbench.DevNullCounter}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.testbench.DevNullCounter}.
  * <p>
  * <br>
  * oper.process is called a billion times<br>
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/stream/DevNullTest.java b/library/src/test/java/org/apache/apex/malhar/lib/stream/DevNullTest.java
index a9563ca..8fc6694 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/stream/DevNullTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/stream/DevNullTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import org.junit.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.EventGenerator;
+import org.apache.apex.malhar.lib.testbench.EventGenerator;
 
 /**
- * Functional tests for {@link com.datatorrent.lib.testbench.DevNull}.
+ * Functional tests for {@link org.apache.apex.malhar.lib.testbench.DevNull}.
  */
 public class DevNullTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/stream/HashMapToKeyValPairTest.java b/library/src/test/java/org/apache/apex/malhar/lib/stream/HashMapToKeyValPairTest.java
index 314eb01..c1ba10d 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/stream/HashMapToKeyValPairTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/stream/HashMapToKeyValPairTest.java
@@ -16,17 +16,17 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.HashMap;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountTestSink;
+import org.apache.apex.malhar.lib.testbench.CountTestSink;
 
 /**
- * Functional test for {@link com.datatorrent.lib.stream.HashMapToKeyValPair}
+ * Functional test for {@link org.apache.apex.malhar.lib.stream.HashMapToKeyValPair}
  */
 public class HashMapToKeyValPairTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/stream/JsonByteArrayOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/stream/JsonByteArrayOperatorTest.java
index e376c95..084eaeb 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/stream/JsonByteArrayOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/stream/JsonByteArrayOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.Map;
 
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
  * Tests JsonByteArrayOperator operator
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/stream/KeyPairToHashMapTest.java b/library/src/test/java/org/apache/apex/malhar/lib/stream/KeyPairToHashMapTest.java
index 2d0595f..6e22e96 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/stream/KeyPairToHashMapTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/stream/KeyPairToHashMapTest.java
@@ -16,16 +16,16 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountTestSink;
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.testbench.CountTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
- * Functional test for {@link com.datatorrent.lib.stream.KeyValPairToHashMap}
+ * Functional test for {@link org.apache.apex.malhar.lib.stream.KeyValPairToHashMap}
  * <p>
  * <br>
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/stream/RoundRobinHashMapTest.java b/library/src/test/java/org/apache/apex/malhar/lib/stream/RoundRobinHashMapTest.java
index d78e369..04a1ace 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/stream/RoundRobinHashMapTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/stream/RoundRobinHashMapTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import java.util.HashMap;
 
@@ -25,10 +25,10 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 
 /**
- * Functional test for {@link com.datatorrent.lib.stream.RoundRobinHashMap}.
+ * Functional test for {@link org.apache.apex.malhar.lib.stream.RoundRobinHashMap}.
  */
 public class RoundRobinHashMapTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/stream/StreamDuplicaterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/stream/StreamDuplicaterTest.java
index 7586c70..bd24d63 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/stream/StreamDuplicaterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/stream/StreamDuplicaterTest.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountTestSink;
+import org.apache.apex.malhar.lib.testbench.CountTestSink;
 
 /**
- * Performance test for {@link com.datatorrent.lib.stream.StreamDuplicater}<p>
+ * Performance test for {@link org.apache.apex.malhar.lib.stream.StreamDuplicater}<p>
  * Benchmarks: Currently does about ?? Million tuples/sec in debugging environment. Need to test on larger nodes<br>
  * <br>
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/stream/StreamMergerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/stream/StreamMergerTest.java
index 995dc6f..e93934b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/stream/StreamMergerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/stream/StreamMergerTest.java
@@ -16,15 +16,15 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.stream;
+package org.apache.apex.malhar.lib.stream;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountTestSink;
+import org.apache.apex.malhar.lib.testbench.CountTestSink;
 
 /**
- * Performance test for {@link com.datatorrent.lib.stream.StreamMerger}<p>
+ * Performance test for {@link org.apache.apex.malhar.lib.stream.StreamMerger}<p>
  * Benchmarks: Currently does about 3 Million tuples/sec in debugging environment. Need to test on larger nodes<br>
  * <br>
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/testbench/ActiveMQMessageGenerator.java b/library/src/test/java/org/apache/apex/malhar/lib/testbench/ActiveMQMessageGenerator.java
index c569bf8..7255b48 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/testbench/ActiveMQMessageGenerator.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/testbench/ActiveMQMessageGenerator.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.HashMap;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/testbench/EventClassifierTest.java b/library/src/test/java/org/apache/apex/malhar/lib/testbench/EventClassifierTest.java
index e9b4873..802c67e 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/testbench/EventClassifierTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/testbench/EventClassifierTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -30,7 +30,7 @@
 import com.datatorrent.api.Sink;
 
 /**
- * Functional test for {@link com.datatorrent.lib.testbench.EventClassifier} for three configuration><p>
+ * Functional test for {@link org.apache.apex.malhar.lib.testbench.EventClassifier} for three configuration><p>
  * <br>
  * Configuration 1: Provide values and weights<br>
  * Configuration 2: Provide values but no weights (even weights)<br>
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/testbench/EventGeneratorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/testbench/EventGeneratorTest.java
index 47e209c..ba7a2db 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/testbench/EventGeneratorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/testbench/EventGeneratorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -32,7 +32,7 @@
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.testbench.EventGenerator}. <p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.testbench.EventGenerator}. <p>
  * <br>
  * Load is generated and the tuples are outputted to ensure that the numbers are roughly in line with the weights<br>
  * <br>
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/testbench/EventIncrementerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/testbench/EventIncrementerTest.java
index 0e9fc4d..45ac873 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/testbench/EventIncrementerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/testbench/EventIncrementerTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -29,7 +29,7 @@
 import com.datatorrent.api.Sink;
 
 /**
- * Functional test for {@link com.datatorrent.lib.testbench.EventIncrementer}<p>
+ * Functional test for {@link org.apache.apex.malhar.lib.testbench.EventIncrementer}<p>
  * <br>
  * Benchmarks: The benchmark was done in local/inline mode<br>
  * Processing tuples on seed port are at 3.5 Million tuples/sec<br>
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/testbench/FilteredEventClassifierTest.java b/library/src/test/java/org/apache/apex/malhar/lib/testbench/FilteredEventClassifierTest.java
index 57c8829..5b4454a 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/testbench/FilteredEventClassifierTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/testbench/FilteredEventClassifierTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -30,7 +30,7 @@
 
 
 /**
- * Functional test for {@link com.datatorrent.lib.testbench.FilteredEventClassifier} for three configuration><p>
+ * Functional test for {@link org.apache.apex.malhar.lib.testbench.FilteredEventClassifier} for three configuration><p>
  * <br>
  * Configuration 1: Provide values and weights<br>
  * Configuration 2: Provide values but no weights (even weights)<br>
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/testbench/RandomEventGeneratorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/testbench/RandomEventGeneratorTest.java
index b9210f7..f68a3f9 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/testbench/RandomEventGeneratorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/testbench/RandomEventGeneratorTest.java
@@ -16,14 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import org.junit.Test;
 
 import static org.junit.Assert.assertTrue;
 
 /**
- * Functional test for {@link com.datatorrent.lib.testbench.RandomEventGenerator}<p>
+ * Functional test for {@link org.apache.apex.malhar.lib.testbench.RandomEventGenerator}<p>
  * <br>
  * Tests both string and integer. Sets range to 0 to 999 and generates random numbers. With millions
  * of tuple all the values are covered<br>
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/testbench/RandomWordGeneratorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/testbench/RandomWordGeneratorTest.java
index 25839e9..e577060 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/testbench/RandomWordGeneratorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/testbench/RandomWordGeneratorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import org.junit.Assert;
 import org.junit.Test;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/testbench/SeedEventClassifierTest.java b/library/src/test/java/org/apache/apex/malhar/lib/testbench/SeedEventClassifierTest.java
index dd8d346..59031db 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/testbench/SeedEventClassifierTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/testbench/SeedEventClassifierTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.HashMap;
 
@@ -28,7 +28,7 @@
 import com.datatorrent.api.Sink;
 
 /**
- * Functional test for {@link com.datatorrent.lib.testbench.SeedEventClassifier}<br>
+ * Functional test for {@link org.apache.apex.malhar.lib.testbench.SeedEventClassifier}<br>
  */
 public class SeedEventClassifierTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/testbench/SeedEventGeneratorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/testbench/SeedEventGeneratorTest.java
index cdafecf..166bb4a 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/testbench/SeedEventGeneratorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/testbench/SeedEventGeneratorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import org.junit.Test;
 
@@ -26,7 +26,7 @@
 
 /**
  *
- * Functional test for {@link com.datatorrent.lib.testbench.SeedEventGenerator}<p>
+ * Functional test for {@link org.apache.apex.malhar.lib.testbench.SeedEventGenerator}<p>
  * <br>
  * Four keys are sent in at a high throughput rate and the classification is expected to be cover all combinations<br>
  * <br>
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/testbench/ThroughputCounterTest.java b/library/src/test/java/org/apache/apex/malhar/lib/testbench/ThroughputCounterTest.java
index 2becda7..8d0732e 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/testbench/ThroughputCounterTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/testbench/ThroughputCounterTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.testbench;
+package org.apache.apex.malhar.lib.testbench;
 
 import java.util.HashMap;
 
@@ -28,7 +28,7 @@
 
 /**
  *
- * Functional tests for {@link com.datatorrent.lib.testbench.ThroughputCounter}. <p>
+ * Functional tests for {@link org.apache.apex.malhar.lib.testbench.ThroughputCounter}. <p>
  * <br>
  * Load is generated and the tuples are outputted to ensure that the numbers are roughly in line with the weights<br>
  * <br>
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/transform/TransformOperatorAppTest.java b/library/src/test/java/org/apache/apex/malhar/lib/transform/TransformOperatorAppTest.java
index 643fb04..cca4be6 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/transform/TransformOperatorAppTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/transform/TransformOperatorAppTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.transform;
+package org.apache.apex.malhar.lib.transform;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -24,6 +24,8 @@
 
 import org.junit.Assert;
 import org.junit.Test;
+
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.hadoop.conf.Configuration;
 
 import com.datatorrent.api.Context;
@@ -32,7 +34,6 @@
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 /**
  * Application Test for Transform Operator.
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/transform/TransformOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/transform/TransformOperatorTest.java
index 1fd8344..7b50ca2 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/transform/TransformOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/transform/TransformOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.transform;
+package org.apache.apex.malhar.lib.transform;
 
 
 import java.util.HashMap;
@@ -27,10 +27,11 @@
 import org.junit.Test;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.datatorrent.api.Attribute;
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.TestUtils;
 import com.datatorrent.stram.engine.PortContext;
 
 /**
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/util/DimensionTimeBucketSumOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/util/DimensionTimeBucketSumOperatorTest.java
index 52d27b8..5ac8fee 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/util/DimensionTimeBucketSumOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/util/DimensionTimeBucketSumOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import java.util.HashSet;
@@ -28,12 +28,11 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
 import org.apache.commons.lang.mutable.MutableDouble;
 
 import com.google.common.collect.Maps;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-
 @SuppressWarnings({"rawtypes", "unchecked"})
 public class DimensionTimeBucketSumOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/util/JavaScriptFilterOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/util/JavaScriptFilterOperatorTest.java
index 6164104..5562229 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/util/JavaScriptFilterOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/util/JavaScriptFilterOperatorTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -24,11 +24,11 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.testbench.CountAndLastTupleTestSink;
+import org.apache.apex.malhar.lib.testbench.CountAndLastTupleTestSink;
 
 /**
  *
- * functional test for {@link com.datatorrent.lib.util.JavaScriptFilterOperator}.
+ * functional test for {@link org.apache.apex.malhar.lib.util.JavaScriptFilterOperator}.
  */
 public class JavaScriptFilterOperatorTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/util/KryoCloneUtilsTest.java b/library/src/test/java/org/apache/apex/malhar/lib/util/KryoCloneUtilsTest.java
index 5f284a9..2f13b3d 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/util/KryoCloneUtilsTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/util/KryoCloneUtilsTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.util.Objects;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/util/PojoUtilsTest.java b/library/src/test/java/org/apache/apex/malhar/lib/util/PojoUtilsTest.java
index 04fef88..6cf9f09 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/util/PojoUtilsTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/util/PojoUtilsTest.java
@@ -16,49 +16,49 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.expression.Expression;
-import com.datatorrent.lib.util.PojoUtils.Getter;
-import com.datatorrent.lib.util.PojoUtils.GetterBoolean;
-import com.datatorrent.lib.util.PojoUtils.GetterByte;
-import com.datatorrent.lib.util.PojoUtils.GetterChar;
-import com.datatorrent.lib.util.PojoUtils.GetterDouble;
-import com.datatorrent.lib.util.PojoUtils.GetterFloat;
-import com.datatorrent.lib.util.PojoUtils.GetterInt;
-import com.datatorrent.lib.util.PojoUtils.GetterLong;
-import com.datatorrent.lib.util.PojoUtils.GetterShort;
-import com.datatorrent.lib.util.PojoUtils.Setter;
-import com.datatorrent.lib.util.PojoUtils.SetterBoolean;
-import com.datatorrent.lib.util.PojoUtils.SetterByte;
-import com.datatorrent.lib.util.PojoUtils.SetterInt;
-import com.datatorrent.lib.util.PojoUtils.SetterLong;
-import com.datatorrent.lib.util.PojoUtils.SetterShort;
+import org.apache.apex.malhar.lib.expression.Expression;
+import org.apache.apex.malhar.lib.util.PojoUtils.Getter;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterBoolean;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterByte;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterChar;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterDouble;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterFloat;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterInt;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterLong;
+import org.apache.apex.malhar.lib.util.PojoUtils.GetterShort;
+import org.apache.apex.malhar.lib.util.PojoUtils.Setter;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterBoolean;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterByte;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterInt;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterLong;
+import org.apache.apex.malhar.lib.util.PojoUtils.SetterShort;
 
-import static com.datatorrent.lib.util.PojoUtils.constructGetter;
-import static com.datatorrent.lib.util.PojoUtils.constructSetter;
-import static com.datatorrent.lib.util.PojoUtils.createExpression;
-import static com.datatorrent.lib.util.PojoUtils.createGetter;
-import static com.datatorrent.lib.util.PojoUtils.createGetterBoolean;
-import static com.datatorrent.lib.util.PojoUtils.createGetterByte;
-import static com.datatorrent.lib.util.PojoUtils.createGetterChar;
-import static com.datatorrent.lib.util.PojoUtils.createGetterDouble;
-import static com.datatorrent.lib.util.PojoUtils.createGetterFloat;
-import static com.datatorrent.lib.util.PojoUtils.createGetterInt;
-import static com.datatorrent.lib.util.PojoUtils.createGetterLong;
-import static com.datatorrent.lib.util.PojoUtils.createGetterShort;
-import static com.datatorrent.lib.util.PojoUtils.createSetter;
-import static com.datatorrent.lib.util.PojoUtils.createSetterBoolean;
-import static com.datatorrent.lib.util.PojoUtils.createSetterByte;
-import static com.datatorrent.lib.util.PojoUtils.createSetterChar;
-import static com.datatorrent.lib.util.PojoUtils.createSetterDouble;
-import static com.datatorrent.lib.util.PojoUtils.createSetterFloat;
-import static com.datatorrent.lib.util.PojoUtils.createSetterInt;
-import static com.datatorrent.lib.util.PojoUtils.createSetterLong;
-import static com.datatorrent.lib.util.PojoUtils.createSetterShort;
+import static org.apache.apex.malhar.lib.util.PojoUtils.constructGetter;
+import static org.apache.apex.malhar.lib.util.PojoUtils.constructSetter;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createExpression;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createGetter;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createGetterBoolean;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createGetterByte;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createGetterChar;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createGetterDouble;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createGetterFloat;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createGetterInt;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createGetterLong;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createGetterShort;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createSetter;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createSetterBoolean;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createSetterByte;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createSetterChar;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createSetterDouble;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createSetterFloat;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createSetterInt;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createSetterLong;
+import static org.apache.apex.malhar.lib.util.PojoUtils.createSetterShort;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertSame;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/util/TestObjAllTypes.java b/library/src/test/java/org/apache/apex/malhar/lib/util/TestObjAllTypes.java
index 053fe78..45d0a1b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/util/TestObjAllTypes.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/util/TestObjAllTypes.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import com.google.common.collect.Lists;
 
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/util/TestUtils.java b/library/src/test/java/org/apache/apex/malhar/lib/util/TestUtils.java
index 92937a9..1404c1b 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/util/TestUtils.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/util/TestUtils.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util;
+package org.apache.apex.malhar.lib.util;
 
 import java.io.File;
 import java.util.List;
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/util/time/WindowUtilsTest.java b/library/src/test/java/org/apache/apex/malhar/lib/util/time/WindowUtilsTest.java
index 31632b3..392d878 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/util/time/WindowUtilsTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/util/time/WindowUtilsTest.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package com.datatorrent.lib.util.time;
+package org.apache.apex.malhar.lib.util.time;
 
 import java.math.BigDecimal;
 
@@ -27,7 +27,7 @@
 import com.datatorrent.api.Context.DAGContext;
 import com.datatorrent.api.Context.OperatorContext;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 public class WindowUtilsTest
 {
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/wal/FSWindowDataManagerTest.java b/library/src/test/java/org/apache/apex/malhar/lib/wal/FSWindowDataManagerTest.java
index beff458..0f614a8 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/wal/FSWindowDataManagerTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/wal/FSWindowDataManagerTest.java
@@ -29,6 +29,8 @@
 import org.junit.rules.TestWatcher;
 import org.junit.runner.Description;
 
+import org.apache.apex.malhar.lib.util.TestUtils;
+
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 
@@ -38,9 +40,8 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.annotation.Stateless;
 import com.datatorrent.common.util.Pair;
-import com.datatorrent.lib.util.TestUtils;
 
-import static com.datatorrent.lib.helper.OperatorContextTestHelper.mockOperatorContext;
+import static org.apache.apex.malhar.lib.helper.OperatorContextTestHelper.mockOperatorContext;
 
 /**
  * Tests for {@link WindowDataManager}
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/wal/FileSystemWALTest.java b/library/src/test/java/org/apache/apex/malhar/lib/wal/FileSystemWALTest.java
index 697d5fd..c2adce0 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/wal/FileSystemWALTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/wal/FileSystemWALTest.java
@@ -31,13 +31,13 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.apex.malhar.lib.utils.FileContextUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FileContext;
 import org.apache.hadoop.fs.FileSystem;
 import org.apache.hadoop.fs.Path;
 
-import com.datatorrent.lib.util.KryoCloneUtils;
 import com.datatorrent.netlet.util.Slice;
 
 public class FileSystemWALTest
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/window/SpillableWindowedStorageTest.java b/library/src/test/java/org/apache/apex/malhar/lib/window/SpillableWindowedStorageTest.java
index afc5227..ef5384c 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/window/SpillableWindowedStorageTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/window/SpillableWindowedStorageTest.java
@@ -24,11 +24,11 @@
 
 import org.apache.apex.malhar.lib.state.spillable.SpillableComplexComponentImpl;
 import org.apache.apex.malhar.lib.state.spillable.SpillableTestUtils;
+import org.apache.apex.malhar.lib.util.KryoCloneUtils;
 import org.apache.apex.malhar.lib.window.impl.SpillableWindowedKeyedStorage;
 import org.apache.apex.malhar.lib.window.impl.SpillableWindowedPlainStorage;
 
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.util.KryoCloneUtils;
 
 /**
  * Unit tests for Spillable Windowed Storage
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/window/WindowedOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/window/WindowedOperatorTest.java
index 39f4b6e..905d965 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/window/WindowedOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/window/WindowedOperatorTest.java
@@ -36,6 +36,8 @@
 
 import org.apache.apex.malhar.lib.state.spillable.SpillableComplexComponentImpl;
 import org.apache.apex.malhar.lib.state.spillable.SpillableTestUtils;
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.impl.FixedDiffEventTimeWatermarkGen;
 import org.apache.apex.malhar.lib.window.impl.InMemorySessionWindowedStorage;
 import org.apache.apex.malhar.lib.window.impl.InMemoryWindowedKeyedStorage;
@@ -49,8 +51,6 @@
 import org.apache.commons.lang3.mutable.MutableLong;
 
 import com.datatorrent.api.Sink;
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Unit tests for WindowedOperator
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/window/accumulation/PojoInnerJoinTest.java b/library/src/test/java/org/apache/apex/malhar/lib/window/accumulation/PojoInnerJoinTest.java
index 0861ca6..12a8507 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/window/accumulation/PojoInnerJoinTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/window/accumulation/PojoInnerJoinTest.java
@@ -25,9 +25,9 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.google.common.collect.Multimap;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
-import com.datatorrent.lib.util.KeyValPair;
+import com.google.common.collect.Multimap;
 
 /**
  * Test for {@link PojoInnerJoin}.
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/window/accumulation/PojoOuterJoinTest.java b/library/src/test/java/org/apache/apex/malhar/lib/window/accumulation/PojoOuterJoinTest.java
index 06d1f2d..5b42d17 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/window/accumulation/PojoOuterJoinTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/window/accumulation/PojoOuterJoinTest.java
@@ -27,9 +27,9 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.google.common.collect.Multimap;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
-import com.datatorrent.lib.util.KeyValPair;
+import com.google.common.collect.Multimap;
 
 /**
  * Test for POJO outer join accumulations
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/window/accumulation/TopNByKeyTest.java b/library/src/test/java/org/apache/apex/malhar/lib/window/accumulation/TopNByKeyTest.java
index eec86e0..6487b41 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/window/accumulation/TopNByKeyTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/window/accumulation/TopNByKeyTest.java
@@ -24,7 +24,7 @@
 import org.junit.Assert;
 import org.junit.Test;
 
-import com.datatorrent.lib.util.KeyValPair;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 
 /**
  * Unit test for TopNByKey accumulation
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/window/impl/KeyedWindowedMergeOperatorTestApplication.java b/library/src/test/java/org/apache/apex/malhar/lib/window/impl/KeyedWindowedMergeOperatorTestApplication.java
index 15e3d4e..8ca2c8e 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/window/impl/KeyedWindowedMergeOperatorTestApplication.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/window/impl/KeyedWindowedMergeOperatorTestApplication.java
@@ -25,6 +25,8 @@
 
 import org.joda.time.Duration;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.ControlTuple;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
@@ -44,8 +46,6 @@
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Example application using {@link KeyedWindowedMergeOperatorImpl}. Generators send streams of key-value pairs of
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/window/impl/WindowedMergeOperatorTest.java b/library/src/test/java/org/apache/apex/malhar/lib/window/impl/WindowedMergeOperatorTest.java
index 8c37d57..d2bc572 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/window/impl/WindowedMergeOperatorTest.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/window/impl/WindowedMergeOperatorTest.java
@@ -24,6 +24,8 @@
 import org.junit.Assert;
 import org.junit.Test;
 
+import org.apache.apex.malhar.lib.testbench.CollectorTestSink;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.Window;
 import org.apache.apex.malhar.lib.window.WindowOption;
@@ -32,9 +34,6 @@
 
 import com.google.common.base.Function;
 
-import com.datatorrent.lib.testbench.CollectorTestSink;
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * Unit tests for Windowed Join Operator
  */
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/window/impl/WindowedMergeOperatorTestApplication.java b/library/src/test/java/org/apache/apex/malhar/lib/window/impl/WindowedMergeOperatorTestApplication.java
index 5d80388..281bfa0 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/window/impl/WindowedMergeOperatorTestApplication.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/window/impl/WindowedMergeOperatorTestApplication.java
@@ -24,6 +24,7 @@
 
 import org.joda.time.Duration;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.apex.malhar.lib.window.ControlTuple;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
@@ -43,7 +44,6 @@
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 /**
  * Example application to show usage of Windowed Merge Operator. Two generators send out two streams of integers,
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/window/sample/pi/Application.java b/library/src/test/java/org/apache/apex/malhar/lib/window/sample/pi/Application.java
index f70ac64..0b692a7 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/window/sample/pi/Application.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/window/sample/pi/Application.java
@@ -20,6 +20,7 @@
 
 import org.joda.time.Duration;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.apex.malhar.lib.window.Accumulation;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
@@ -37,7 +38,6 @@
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 /**
  * This is an example of using the WindowedOperator concepts to calculate the value of pi.
diff --git a/library/src/test/java/org/apache/apex/malhar/lib/window/sample/wordcount/Application.java b/library/src/test/java/org/apache/apex/malhar/lib/window/sample/wordcount/Application.java
index 83dc277..da0e773 100644
--- a/library/src/test/java/org/apache/apex/malhar/lib/window/sample/wordcount/Application.java
+++ b/library/src/test/java/org/apache/apex/malhar/lib/window/sample/wordcount/Application.java
@@ -27,6 +27,8 @@
 
 import org.joda.time.Duration;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.Accumulation;
 import org.apache.apex.malhar.lib.window.ControlTuple;
 import org.apache.apex.malhar.lib.window.SumAccumulation;
@@ -52,8 +54,6 @@
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.common.util.BaseOperator;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * This is an example of using the WindowedOperator concepts to do streaming word count.
diff --git a/pom.xml b/pom.xml
index f46ead7..c8925c4 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,7 +30,7 @@
 
   <groupId>org.apache.apex</groupId>
   <artifactId>malhar</artifactId>
-  <version>3.9.0-SNAPSHOT</version>
+  <version>4.0.0-SNAPSHOT</version>
   <packaging>pom</packaging>
   <name>Apache Apex Malhar</name>
   <url>http://apex.apache.org</url>
@@ -139,7 +139,6 @@
               <excludes>
                 <exclude>@org.apache.hadoop.classification.InterfaceStability$Evolving</exclude>
                 <exclude>@org.apache.hadoop.classification.InterfaceStability$Unstable</exclude>
-                <exclude>com.datatorrent.contrib.parquet</exclude>
               </excludes>
             </parameter>
             <skip>${semver.plugin.skip}</skip>
@@ -206,7 +205,6 @@
         <module>stream</module>
         <module>benchmark</module>
         <module>apps</module>
-        <module>samples</module>
         <module>sql</module>
         <module>flume</module>
       </modules>
diff --git a/samples/pom.xml b/samples/pom.xml
deleted file mode 100644
index 4e3022a..0000000
--- a/samples/pom.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-<!--
-
-    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.
-
--->
-
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.apache.apex</groupId>
-    <artifactId>malhar</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>malhar-samples</artifactId>
-  <packaging>jar</packaging>
-
-  <name>Apache Apex Malhar Samples</name>
-  <properties>
-    <maven.deploy.skip>true</maven.deploy.skip>
-    <checkstyle.skip>true</checkstyle.skip>
-  </properties>
-
-  <dependencies>
-    <dependency>
-      <groupId>org.apache.apex</groupId>
-      <artifactId>malhar-contrib</artifactId>
-      <version>${project.version}</version>
-    </dependency>
-    <dependency>
-      <groupId>${project.groupId}</groupId>
-      <artifactId>apex-engine</artifactId>
-      <version>${apex.core.version}</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-</project>
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/algo/AllAfterMatchMapSample.java b/samples/src/main/java/com/datatorrent/samples/lib/algo/AllAfterMatchMapSample.java
deleted file mode 100644
index 78f479c..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/algo/AllAfterMatchMapSample.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.algo;
-
-import org.apache.apex.malhar.contrib.misc.algo.AllAfterMatchMap;
-import org.apache.hadoop.conf.Configuration;
-
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.samples.lib.math.RandomKeyValMap;
-
-/**
- * This sample application code for showing sample usage of malhar operator(s). <br>
- * <b>Operator : </b> AverageMap <br>
- * <bClass : </b> com.datatorrent.lib.math.AverageMap
- *
- * @since 0.3.2
- */
-public class AllAfterMatchMapSample implements StreamingApplication
-{
-	@SuppressWarnings("unchecked")
-	@Override
-	public void populateDAG(DAG dag, Configuration conf)
-	{
-		// Create application dag.
-		dag.setAttribute(DAG.APPLICATION_NAME, "AllAfterMatchMapApplication");
-		//dag.setAttribute(DAG.DEBUG, true);
-
-		// Add random integer generator operator
-		RandomKeyValMap rand = dag.addOperator("rand", RandomKeyValMap.class);
-
-		AllAfterMatchMap<String, Integer> allafter = dag.addOperator("average",
-				AllAfterMatchMap.class);
-		allafter.setValue(50);
-		allafter.setTypeLTE();
-		dag.addStream("stream1", rand.outport, allafter.data);
-		dag.getMeta(allafter).getAttributes()
-				.put(OperatorContext.APPLICATION_WINDOW_COUNT, 20);
-
-		// Connect to output console operator
-		ConsoleOutputOperator console = dag.addOperator("console",
-				new ConsoleOutputOperator());
-		dag.addStream("consolestream", allafter.allafter, console.input);
-
-		// done
-	}
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/algo/BottomNMapSample.java b/samples/src/main/java/com/datatorrent/samples/lib/algo/BottomNMapSample.java
deleted file mode 100644
index 4273d76..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/algo/BottomNMapSample.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.algo;
-
-
-import org.apache.hadoop.conf.Configuration;
-
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.api.StreamingApplication;
-
-import com.datatorrent.lib.algo.BottomNMap;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.samples.lib.math.RandomKeyValMap;
-
-/**
- * This sample application code for showing sample usage of malhar operator(s). <br>
- * <b>Operator : </b> AverageMap <br>
- * <bClass : </b> com.datatorrent.lib.math.AverageMap
- *
- * @since 0.3.2
- */
-public class BottomNMapSample implements StreamingApplication
-{
-	@SuppressWarnings("unchecked")
-	@Override
-	public void populateDAG(DAG dag, Configuration conf)
-	{
-		// Create application dag.
-		dag.setAttribute(DAG.APPLICATION_NAME, "BottomNMapSampleApplication");
-		//dag.setAttribute(DAG.DEBUG, true);
-
-		// Add random integer generator operator
-		RandomKeyValMap rand = dag.addOperator("rand", RandomKeyValMap.class);
-
-		BottomNMap<String, Integer> bottomn = dag.addOperator("average",	BottomNMap.class);
-		bottomn.setN(5);
-		dag.addStream("stream1", rand.outport, bottomn.data);
-		dag.getMeta(bottomn).getAttributes()
-				.put(OperatorContext.APPLICATION_WINDOW_COUNT, 100);
-
-		// Connect to output console operator
-		ConsoleOutputOperator console = dag.addOperator("console",
-				new ConsoleOutputOperator());
-		dag.addStream("consolestream", bottomn.bottom, console.input);
-
-		// done
-	}
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/algo/package-info.java b/samples/src/main/java/com/datatorrent/samples/lib/algo/package-info.java
deleted file mode 100644
index 7154929..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/algo/package-info.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * 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.
- */
-/**
- * <b>com.datatorrent.lib.samplecode.algo</b> is a library of examples of usage of algorithmic operators<p>
- * <br>
- * <br>
- */
-
-package com.datatorrent.samples.lib.algo;
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/io/HttpInputOperatorSample.java b/samples/src/main/java/com/datatorrent/samples/lib/io/HttpInputOperatorSample.java
deleted file mode 100644
index 827efbd..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/io/HttpInputOperatorSample.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.io;
-
-import com.datatorrent.api.Context.DAGContext;
-import java.net.URI;
-
-import org.apache.hadoop.conf.Configuration;
-
-import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.api.DAG;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.io.HttpJsonChunksInputOperator;
-
-/**
- * * This sample application code for showing sample usage of malhar
- * operator(s). <br>
- * <b>Operator : </b> HttpInputOperator <br>
- * <bClass : </b> com.datatorrent.lib.io.HttpJsonChunksInputOperator
- *
- * this application connects to yahoo news and relays raw content to output console.
- *
- * @since 0.3.2
- */
-public class HttpInputOperatorSample implements StreamingApplication
-{
-	@Override
-	public void populateDAG(DAG dag, Configuration conf)
-	{
-		// Create application dag.
-		dag.setAttribute(DAGContext.APPLICATION_NAME, "HttpInputOperatorApplication");
-		dag.setAttribute(DAGContext.DEBUG, true);
-
-		// Add random integer generator operator
-		HttpJsonChunksInputOperator reader = dag.addOperator("reader",
-				HttpJsonChunksInputOperator.class);
-		reader.setUrl(URI.create("http://news.yahoo.com"));
-		reader.readTimeoutMillis = 10000;
-
-		// Connect to output console operator
-		ConsoleOutputOperator console = dag.addOperator("console",
-				new ConsoleOutputOperator());
-		dag.addStream("consoleout", reader.rawOutput, console.input);
-
-		// done
-	}
-
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/io/package-info.java b/samples/src/main/java/com/datatorrent/samples/lib/io/package-info.java
deleted file mode 100644
index e0daa52..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/io/package-info.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * 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.
- */
-/**
- * <b>com.datatorrent.lib.samplecode.io</b> is a library samples of usages of operators from io library<p>
- * <br>
- */
-
-package com.datatorrent.samples.lib.io;
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/AverageKeyValSample.java b/samples/src/main/java/com/datatorrent/samples/lib/math/AverageKeyValSample.java
deleted file mode 100644
index fda2b80..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/AverageKeyValSample.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-
-import org.apache.hadoop.conf.Configuration;
-
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.api.StreamingApplication;
-
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.math.AverageKeyVal;
-
-/**
- * This sample application code for showing sample usage of malhar operator(s). <br>
- * <b>Operator : </b> AverageKeyVal <br>
- * <bClass : </b> com.datatorrent.lib.math.AverageKeyVal
- *
- * @since 0.3.2
- */
-public class AverageKeyValSample implements StreamingApplication
-{
-	@SuppressWarnings("unchecked")
-	@Override
-	public void populateDAG(DAG dag, Configuration conf)
-	{
-		// Create application dag.
-		dag.setAttribute(DAG.APPLICATION_NAME, "AverageKeyValApplication");
-		dag.setAttribute(DAG.DEBUG, true);
-
-		// Add random integer generator operator
-		RandomKeyValues rand = dag.addOperator("rand", RandomKeyValues.class);
-
-		AverageKeyVal<String> average = dag.addOperator("average",
-				AverageKeyVal.class);
-		dag.addStream("stream1", rand.outport, average.data);
-		dag.getMeta(average).getAttributes()
-				.put(OperatorContext.APPLICATION_WINDOW_COUNT, 20);
-
-		// Connect to output console operator
-		ConsoleOutputOperator console = dag.addOperator("console",
-				new ConsoleOutputOperator());
-		dag.addStream("consolestream", average.doubleAverage, console.input);
-
-		// done
-	}
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/AverageSample.java b/samples/src/main/java/com/datatorrent/samples/lib/math/AverageSample.java
deleted file mode 100644
index 608d8b3..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/AverageSample.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-
-import org.apache.hadoop.conf.Configuration;
-
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.api.StreamingApplication;
-
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.math.Average;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
-
-/**
- * This sample application code for showing sample usage of malhar operator(s). <br>
- * <b>Operator : </b> Average <br>
- * <bClass : </b> com.datatorrent.lib.math.Average
- *
- * @since 0.3.2
- */
-public class AverageSample implements StreamingApplication
-{
-	@SuppressWarnings("unchecked")
-	@Override
-	public void populateDAG(DAG dag, Configuration conf)
-	{
-		// Create application dag.
-		dag.setAttribute(DAG.APPLICATION_NAME, "AverageSampleApplication");
-		dag.setAttribute(DAG.DEBUG, true);
-
-		// Add random integer generator operator
-		RandomEventGenerator rand = dag.addOperator("rand",
-				RandomEventGenerator.class);
-		rand.setMaxvalue(1000);
-		rand.setTuplesBlast(10);
-		rand.setTuplesBlastIntervalMillis(1000);
-
-		Average<Integer> average = dag.addOperator("average",
-				Average.class);
-		dag.addStream("stream1", rand.integer_data, average.data);
-		dag.getMeta(average).getAttributes()
-				.put(OperatorContext.APPLICATION_WINDOW_COUNT, 20);
-
-		// Connect to output console operator
-		ConsoleOutputOperator console = dag.addOperator("console",
-				new ConsoleOutputOperator());
-		dag.addStream("stream2", average.average, console.input);
-
-		// done
-	}
-
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/ChangeSample.java b/samples/src/main/java/com/datatorrent/samples/lib/math/ChangeSample.java
deleted file mode 100644
index e9b8dec..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/ChangeSample.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-import org.apache.apex.malhar.contrib.misc.math.Change;
-import org.apache.hadoop.conf.Configuration;
-
-import com.datatorrent.api.DAG;
-import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
-
-/**
- *  This sample application code for showing sample usage of malhar operator(s). <br>
- * <b>Operator : </b> Change <br>
- * <bClass : </b> com.datatorrent.lib.math.Change
- *
- * @since 0.3.2
- */
-public class ChangeSample implements StreamingApplication
-{
-	@SuppressWarnings("unchecked")
-	@Override
-	public void populateDAG(DAG dag, Configuration conf)
-	{
-		// Create application dag.
-		dag.setAttribute(DAG.APPLICATION_NAME, "ChangeSampleApplication");
-		dag.setAttribute(DAG.DEBUG, true);
-
-		// Add random integer generator operator
-		RandomEventGenerator rand = dag.addOperator("rand",
-				RandomEventGenerator.class);
-		rand.setMaxvalue(999999999);
-		rand.setTuplesBlast(10);
-		rand.setTuplesBlastIntervalMillis(1000);
-		RandomEventGenerator rand1 = dag.addOperator("rand1",
-				RandomEventGenerator.class);
-		rand.setTuplesBlast(1);
-		rand.setTuplesBlastIntervalMillis(5000);
-
-		// append change operator
-		Change<Integer> change = dag.addOperator("change", Change.class);
-		dag.addStream("stream", rand1.integer_data, change.base);
-		dag.addStream("stream1", rand.integer_data, change.data);
-
-		// Connect to output console operator
-		ConsoleOutputOperator console = dag.addOperator("console",
-				new ConsoleOutputOperator());
-		dag.addStream("consoleout", change.percent, console.input);
-
-		// done
-	}
-
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/CompreMapSample.java b/samples/src/main/java/com/datatorrent/samples/lib/math/CompreMapSample.java
deleted file mode 100644
index abf4d4b..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/CompreMapSample.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-import org.apache.apex.malhar.contrib.misc.math.CompareMap;
-import org.apache.hadoop.conf.Configuration;
-
-import com.datatorrent.api.DAG;
-import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-
-
-/**
- * This sample application code for showing sample usage of malhar operator(s). <br>
- * <b>Operator : </b> CompareMap <br>
- * <bClass : </b> com.datatorrent.lib.math.CompareMap
- *
- * @since 0.3.2
- */
-public class CompreMapSample implements StreamingApplication
-{
-	@SuppressWarnings("unchecked")
-	@Override
-	public void populateDAG(DAG dag, Configuration conf)
-	{
-		// Create application dag.
-		dag.setAttribute(DAG.APPLICATION_NAME, "CompareMapApplication");
-		dag.setAttribute(DAG.DEBUG, true);
-
-		// Add random integer generator operator
-		RandomKeyValues rand = dag.addOperator("rand", RandomKeyValues.class);
-
-		CompareMap<String, Integer> compare = dag.addOperator("compare",
-				CompareMap.class);
-		compare.setTypeLTE();
-		compare.setValue(50);
-
-		// Connect to output console operator
-		ConsoleOutputOperator console = dag.addOperator("console",
-				new ConsoleOutputOperator());
-		dag.addStream("consolestream", compare.compare, console.input);
-
-		// done
-	}
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/CountKeyValSample.java b/samples/src/main/java/com/datatorrent/samples/lib/math/CountKeyValSample.java
deleted file mode 100644
index e7460ea..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/CountKeyValSample.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-import org.apache.apex.malhar.contrib.misc.math.CountKeyVal;
-import org.apache.hadoop.conf.Configuration;
-
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-
-/**
- * This sample application code for showing sample usage of malhar operator(s). <br>
- * <b>Operator : </b> CountKeyVal <br>
- * <bClass : </b> com.datatorrent.lib.math.CountKeyVal
- *
- * @since 0.3.2
- */
-public class CountKeyValSample implements StreamingApplication
-{
-	@SuppressWarnings("unchecked")
-	@Override
-	public void populateDAG(DAG dag, Configuration conf)
-	{
-		// Create application dag.
-		dag.setAttribute(DAG.APPLICATION_NAME, "CountKeyValApplication");
-		dag.setAttribute(DAG.DEBUG, true);
-
-		// Add random integer generator operator
-		CountKeyValues rand = dag.addOperator("rand", CountKeyValues.class);
-
-		CountKeyVal<String, Integer> count = dag.addOperator("count",
-				CountKeyVal.class);
-		dag.addStream("stream1", rand.outport, count.data);
-		dag.getMeta(count).getAttributes()
-				.put(OperatorContext.APPLICATION_WINDOW_COUNT, 50);
-
-		// Connect to output console operator
-		ConsoleOutputOperator console = dag.addOperator("console",
-				new ConsoleOutputOperator());
-		dag.addStream("consolestream", count.count, console.input);
-
-		// done
-	}
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/CountKeyValues.java b/samples/src/main/java/com/datatorrent/samples/lib/math/CountKeyValues.java
deleted file mode 100644
index 4126186..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/CountKeyValues.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-import java.util.Random;
-
-import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.api.InputOperator;
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.util.KeyValPair;
-/**
- * Input port operator for generating random values on keys. <br>
- * Key(s) : key1, key2, key3, key4, key5. <br>
- *
- * @since 0.3.2
- */
-public class CountKeyValues implements InputOperator
-{
-
-	public final transient DefaultOutputPort<KeyValPair<String, Integer>> outport = new DefaultOutputPort<KeyValPair<String, Integer>>();
-	private Random random = new Random(11111);
-
-	@Override
-	public void beginWindow(long windowId)
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void endWindow()
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setup(OperatorContext context)
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void teardown()
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void emitTuples()
-	{
-		outport.emit(new KeyValPair<String, Integer>("key1", getNextInt()));
-		outport.emit(new KeyValPair<String, Integer>("key2", getNextInt()));
-		outport.emit(new KeyValPair<String, Integer>("key3", getNextInt()));
-		outport.emit(new KeyValPair<String, Integer>("key4", getNextInt()));
-		outport.emit(new KeyValPair<String, Integer>("key5", getNextInt()));
-		try
-		{
-			Thread.sleep(500);
-		} catch (Exception e)
-		{
-		}
-	}
-
-	private int getNextInt()
-	{
-		int value = Math.abs(random.nextInt()) % 100;
-		return value;
-	}
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/LogicalCompareSample.java b/samples/src/main/java/com/datatorrent/samples/lib/math/LogicalCompareSample.java
deleted file mode 100644
index 36ede44..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/LogicalCompareSample.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-import org.apache.hadoop.conf.Configuration;
-
-import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.api.DAG;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.math.LogicalCompareToConstant;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
-
-/**
- * This sample application code for showing sample usage of malhar operator(s). <br>
- * <b>Operator : </b> LogicalCompareToConstant <br>
- * <bClass : </b> com.datatorrent.lib.math.LogicalCompareToConstant
- *
- * @since 0.3.2
- */
-public class LogicalCompareSample implements StreamingApplication
-{
-	@SuppressWarnings("unchecked")
-	@Override
-	public void populateDAG(DAG dag, Configuration conf)
-	{
-		// Create application dag.
-		dag.setAttribute(DAG.APPLICATION_NAME, "LogicalCompareApplication");
-		dag.setAttribute(DAG.DEBUG, true);
-
-		// Add random integer generator operator
-		RandomEventGenerator rand = dag.addOperator("rand",
-				RandomEventGenerator.class);
-
-		LogicalCompareToConstant<Integer> compare = dag.addOperator("compare",
-				LogicalCompareToConstant.class);
-		compare.setConstant(50);
-		dag.addStream("stream1", rand.integer_data, compare.input);
-
-		// Connect to output console operator
-		ConsoleOutputOperator console = dag.addOperator("console",
-				new ConsoleOutputOperator());
-		dag.addStream("consolestream", compare.lessThan, console.input);
-
-		// done
-	}
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/PartitionMathSumSample.java b/samples/src/main/java/com/datatorrent/samples/lib/math/PartitionMathSumSample.java
deleted file mode 100644
index 9bb4535..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/PartitionMathSumSample.java
+++ /dev/null
@@ -1,71 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.api.DAG;
-import com.datatorrent.api.StreamingApplication;
-
-import com.datatorrent.common.partitioner.StatelessPartitioner;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
-import com.datatorrent.lib.math.Sum;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
-import org.apache.hadoop.conf.Configuration;
-
-/**
- *  * This sample application code for showing sample usage of malhar operator(s). <br>
- * <b>Operator : </b> Sum <br>
- * <bClass : </b> com.datatorrent.lib.math.Sum
- * Sum operator is partitioned into 4 operator, partitioning is allowed on this operator. <br>
- *
- * @since 0.3.2
- */
-public class PartitionMathSumSample implements StreamingApplication
-{
-	@SuppressWarnings("unchecked")
-	@Override
-	public void populateDAG(DAG dag, Configuration conf)
-	{
-		// Create application dag.
-		dag.setAttribute(DAG.APPLICATION_NAME, "PartitionMathSumApplication");
-		dag.setAttribute(DAG.DEBUG, true);
-
-		// Add random integer generator operator
-		RandomEventGenerator rand = dag.addOperator("rand",
-				RandomEventGenerator.class);
-		rand.setMaxvalue(1000);
-		rand.setTuplesBlast(10);
-		rand.setTuplesBlastIntervalMillis(500);
-
-		Sum<Integer> sum = dag.addOperator("sum", Sum.class);
-		dag.addStream("stream1", rand.integer_data, sum.data);
-		dag.getMeta(sum).getAttributes().put(OperatorContext.PARTITIONER, new StatelessPartitioner<Sum<Integer>>(4));
-		dag.getMeta(sum).getAttributes()
-				.put(OperatorContext.APPLICATION_WINDOW_COUNT, 20);
-
-		// Connect to output console operator
-		ConsoleOutputOperator console = dag.addOperator("console",
-				new ConsoleOutputOperator());
-		dag.addStream("stream2", sum.sum, console.input);
-
-		// done
-	}
-
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/RandomEvenetGeneratorSample.java b/samples/src/main/java/com/datatorrent/samples/lib/math/RandomEvenetGeneratorSample.java
deleted file mode 100644
index b35d5f5..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/RandomEvenetGeneratorSample.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.api.DAG;
-import com.datatorrent.lib.io.*;
-import com.datatorrent.lib.testbench.RandomEventGenerator;
-import org.apache.hadoop.conf.Configuration;
-
-/**
- * <b> Usage Operator : </b> com.datatorrent.lib.testbench.RandomEventGenerator <br>
- * This sample usage for predefined operator <b>RandomEventGenerator</b>. <br>
- * Random generator output is printed to output console(can be any downstream operator).
- *
- * @since 0.3.2
- */
-public class RandomEvenetGeneratorSample implements StreamingApplication
-{
-	@Override
-	public void populateDAG(DAG dag, Configuration conf)
-	{
-		// Create application dag.
-	    dag.setAttribute(DAG.APPLICATION_NAME, "RandomEventGeneratorApplication");
-	    dag.setAttribute(DAG.DEBUG, true);
-
-	    // Add random integer generator operator
-	    RandomEventGenerator rand = dag.addOperator("rand", RandomEventGenerator.class);
-	    rand.setMaxvalue(999999999);
-	    rand.setTuplesBlast(10);
-	    rand.setTuplesBlastIntervalMillis(1000);
-
-	    // Connect to output console operator
-	    ConsoleOutputOperator console = dag.addOperator("console", new ConsoleOutputOperator());
-	    dag.addStream("rand_console",rand.integer_data , console.input);
-
-	    // done
-	}
-
-
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/RandomKeyValMap.java b/samples/src/main/java/com/datatorrent/samples/lib/math/RandomKeyValMap.java
deleted file mode 100644
index 146df1c..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/RandomKeyValMap.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-
-import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.api.InputOperator;
-import com.datatorrent.api.Context.OperatorContext;
-
-/**
- * Input port operator for generating random values on key, tuples are HashMap for key/values.<br>
- * Key(s) : key1, key2, key3, key4, key5. <br>
- *
- * @since 0.3.2
- */
-public class RandomKeyValMap implements InputOperator
-{
-
-	public final transient DefaultOutputPort<Map<String, Integer>> outport = new DefaultOutputPort<Map<String, Integer>>();
-	private Random random = new Random(11111);
-
-	@Override
-	public void beginWindow(long windowId)
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void endWindow()
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setup(OperatorContext context)
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void teardown()
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void emitTuples()
-	{
-		HashMap<String, Integer> map = new HashMap<String, Integer>();
-		Integer val = new Integer(Math.abs(random.nextInt()) % 100);
-		Integer val1 = new Integer(Math.abs(random.nextInt()) % 100);
-		map.put(val.toString(), val1);
-		outport.emit(map);
-		try
-		{
-			Thread.sleep(500);
-		} catch(Exception e) {
-		}
-	}
-
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/RandomKeyValues.java b/samples/src/main/java/com/datatorrent/samples/lib/math/RandomKeyValues.java
deleted file mode 100644
index 5ca3f76..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/RandomKeyValues.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-import java.util.Random;
-
-import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.api.InputOperator;
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.lib.util.KeyValPair;
-
-/**
- * Input port operator for generating random values on keys. <br>
- * Key(s) : key1, key2, key3, key4, key5. <br>
- *
- * @since 0.3.2
- */
-public class RandomKeyValues implements InputOperator
-{
-
-	public final transient DefaultOutputPort<KeyValPair<String, Integer>> outport = new DefaultOutputPort<KeyValPair<String, Integer>>();
-	private Random random = new Random(11111);
-
-	@Override
-	public void beginWindow(long windowId)
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void endWindow()
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setup(OperatorContext context)
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void teardown()
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void emitTuples()
-	{
-		outport.emit(new KeyValPair<String, Integer>("key1", random.nextInt()));
-		outport.emit(new KeyValPair<String, Integer>("key2", random.nextInt()));
-		outport.emit(new KeyValPair<String, Integer>("key3", random.nextInt()));
-		outport.emit(new KeyValPair<String, Integer>("key4", random.nextInt()));
-		outport.emit(new KeyValPair<String, Integer>("key5", random.nextInt()));
-		try
-		{
-			Thread.sleep(500);
-		} catch (Exception e)
-		{
-		}
-	}
-
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/RandomPairIntegers.java b/samples/src/main/java/com/datatorrent/samples/lib/math/RandomPairIntegers.java
deleted file mode 100644
index 2d95385..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/RandomPairIntegers.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-import java.util.Random;
-
-import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.api.InputOperator;
-import com.datatorrent.api.Context.OperatorContext;
-import com.datatorrent.common.util.Pair;
-
-/**
- * Input port operator for generating random values Pair for sample application.
- *
- * @since 0.3.2
- */
-public class RandomPairIntegers implements InputOperator
-{
-
-	public final transient DefaultOutputPort<Pair<Integer, Integer>> outport = new DefaultOutputPort<Pair<Integer, Integer>>();
-	private Random random = new Random(11111);
-	private boolean equal = false;
-
-	@Override
-	public void beginWindow(long windowId)
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void endWindow()
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setup(OperatorContext context)
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void teardown()
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void emitTuples()
-	{
-		if (equal)
-		{
-			int val = random.nextInt();
-			outport.emit(new Pair<Integer, Integer>(new Integer(val),
-					new Integer(val)));
-		} else
-		{
-			outport.emit(new Pair<Integer, Integer>(new Integer(random.nextInt()),
-					new Integer(random.nextInt())));
-		}
-		equal = !equal;
-	}
-
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/ScriptSample.java b/samples/src/main/java/com/datatorrent/samples/lib/math/ScriptSample.java
deleted file mode 100644
index 8ec4764..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/ScriptSample.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.api.DAG;
-import com.datatorrent.lib.io.*;
-import com.datatorrent.lib.script.JavaScriptOperator;
-import org.apache.hadoop.conf.Configuration;
-
-/**
- * This sample application code for showing sample usage of malhar operator(s). <br>
- * <b>Operator : </b> Script <br>
- * <bClass : </b> com.datatorrent.lib.math.Script
- * Java script returns square of variable 'val'.
- *
- * @since 0.3.2
- */
-public class ScriptSample implements StreamingApplication
-{
-	@Override
-	public void populateDAG(DAG dag, Configuration conf)
-	{
-		// Create application dag.
-	    dag.setAttribute(DAG.APPLICATION_NAME, "MobileDevApplication");
-	    dag.setAttribute(DAG.DEBUG, true);
-
-	    // Add random integer generator operator
-	    SingleKeyValMap rand = dag.addOperator("rand", SingleKeyValMap.class);
-
-	    JavaScriptOperator script = dag.addOperator("script", JavaScriptOperator.class);
-	    //script.setEval("val = val*val;");
-	    script.addSetupScript("function square() { return val*val;}");
-	    script.setInvoke("square");
-	    dag.addStream("evalstream", rand.outport, script.inBindings);
-
-	    // Connect to output console operator
-	    ConsoleOutputOperator console = dag.addOperator("console", new ConsoleOutputOperator());
-	    dag.addStream("rand_console",script.result , console.input);
-
-	    // done
-	}
-
-
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/SingleKeyValMap.java b/samples/src/main/java/com/datatorrent/samples/lib/math/SingleKeyValMap.java
deleted file mode 100644
index 49f3245..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/SingleKeyValMap.java
+++ /dev/null
@@ -1,82 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-
-import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.api.InputOperator;
-import com.datatorrent.api.Context.OperatorContext;
-
-/**
- * Input operator to generate hash map on single value, required for sample Script operator application.
- *
- * @since 0.3.2
- */
-public class SingleKeyValMap implements InputOperator
-{
-
-	public final transient DefaultOutputPort<Map<String, Object>> outport = new DefaultOutputPort<Map<String, Object>>();
-	private Random random = new Random(11111);
-
-	@Override
-	public void beginWindow(long windowId)
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void endWindow()
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void setup(OperatorContext context)
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void teardown()
-	{
-		// TODO Auto-generated method stub
-
-	}
-
-	@Override
-	public void emitTuples()
-	{
-		HashMap<String, Object> map = new HashMap<String, Object>();
-		map.put("val", random.nextInt());
-		outport.emit(map);
-		try
-		{
-			Thread.sleep(500);
-		} catch (Exception e)
-		{
-		}
-	}
-
-}
diff --git a/samples/src/main/java/com/datatorrent/samples/lib/math/package-info.java b/samples/src/main/java/com/datatorrent/samples/lib/math/package-info.java
deleted file mode 100644
index 41d4075..0000000
--- a/samples/src/main/java/com/datatorrent/samples/lib/math/package-info.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/**
- * 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.
- */
-/**
- * <b>com.datatorrent.lib.samplecode.math</b> is a library examples of usages of operators from math library<p>
- * <br>
- * <br>
- */
-
-package com.datatorrent.samples.lib.math;
diff --git a/samples/src/test/java/com/datatorrent/samples/lib/math/PartitionMathSumSampleTest.java b/samples/src/test/java/com/datatorrent/samples/lib/math/PartitionMathSumSampleTest.java
deleted file mode 100644
index e446d98..0000000
--- a/samples/src/test/java/com/datatorrent/samples/lib/math/PartitionMathSumSampleTest.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/**
- * 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 com.datatorrent.samples.lib.math;
-
-import com.datatorrent.api.LocalMode;
-import org.apache.hadoop.conf.Configuration;
-import org.junit.Test;
-
-public class PartitionMathSumSampleTest
-{
-  @Test
-  public void testApp()
-  {
-    LocalMode lma = LocalMode.newInstance();
-    Configuration conf = new Configuration();
-
-    try {
-      lma.prepareDAG(new PartitionMathSumSample(), conf);
-    }
-    catch (Exception ex) {
-      throw new RuntimeException(ex);
-    }
-
-    LocalMode.Controller lc = lma.getController();
-    lc.setHeartbeatMonitoringEnabled(false);
-    lc.run(50);
-  }
-}
diff --git a/samples/src/test/resources/log4j.properties b/samples/src/test/resources/log4j.properties
deleted file mode 100644
index cf0d19e..0000000
--- a/samples/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# 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.
-#
-
-log4j.rootLogger=DEBUG,CONSOLE
-
-log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
-log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
-log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c{2} %M - %m%n
-log4j.appender.CONSOLE.threshold=${test.log.console.threshold}
-test.log.console.threshold=DEBUG
-
-log4j.appender.RFA=org.apache.log4j.RollingFileAppender
-log4j.appender.RFA.layout=org.apache.log4j.PatternLayout
-log4j.appender.RFA.layout.ConversionPattern=%d{ISO8601} [%t] %-5p %c{2} %M - %m%n
-log4j.appender.RFA.File=/tmp/app.log
-
-# to enable, add SYSLOG to rootLogger
-log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
-log4j.appender.SYSLOG.syslogHost=127.0.0.1
-log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
-log4j.appender.SYSLOG.layout.conversionPattern=${dt.cid} %-5p [%t] %c{2} %x - %m%n
-log4j.appender.SYSLOG.Facility=LOCAL1
-
-log4j.logger.org=info
-#log4j.logger.org.apache.commons.beanutils=warn
-log4j.logger.com.datatorrent=debug
-log4j.logger.org.apache.apex=debug
diff --git a/sql/pom.xml b/sql/pom.xml
index d189df1..a0648de 100644
--- a/sql/pom.xml
+++ b/sql/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-sql</artifactId>
diff --git a/sql/src/main/java/org/apache/apex/malhar/sql/codegen/ExpressionCompiler.java b/sql/src/main/java/org/apache/apex/malhar/sql/codegen/ExpressionCompiler.java
index 542d27f..34dd1d6 100644
--- a/sql/src/main/java/org/apache/apex/malhar/sql/codegen/ExpressionCompiler.java
+++ b/sql/src/main/java/org/apache/apex/malhar/sql/codegen/ExpressionCompiler.java
@@ -46,7 +46,7 @@
 
 /**
  * Converts calcite expression of type {@link RexNode} to quasi-Java expression which can be used
- * with {@link com.datatorrent.lib.util.PojoUtils}
+ * with {@link org.apache.apex.malhar.lib.util.PojoUtils}
  *
  * @since 3.6.0
  */
diff --git a/sql/src/main/java/org/apache/apex/malhar/sql/operators/FilterTransformOperator.java b/sql/src/main/java/org/apache/apex/malhar/sql/operators/FilterTransformOperator.java
index 586a3fc..c0fba0d 100644
--- a/sql/src/main/java/org/apache/apex/malhar/sql/operators/FilterTransformOperator.java
+++ b/sql/src/main/java/org/apache/apex/malhar/sql/operators/FilterTransformOperator.java
@@ -18,12 +18,12 @@
  */
 package org.apache.apex.malhar.sql.operators;
 
+import org.apache.apex.malhar.lib.expression.Expression;
+import org.apache.apex.malhar.lib.transform.TransformOperator;
+import org.apache.apex.malhar.lib.util.PojoUtils;
 import org.apache.hadoop.classification.InterfaceStability;
 
 import com.datatorrent.api.Context;
-import com.datatorrent.lib.expression.Expression;
-import com.datatorrent.lib.transform.TransformOperator;
-import com.datatorrent.lib.util.PojoUtils;
 
 /**
  * This is an extension of {@link TransformOperator} which also takes care of filtering tuples.
diff --git a/sql/src/main/java/org/apache/apex/malhar/sql/operators/LineReader.java b/sql/src/main/java/org/apache/apex/malhar/sql/operators/LineReader.java
index 6c0cbfd..9ea23de 100644
--- a/sql/src/main/java/org/apache/apex/malhar/sql/operators/LineReader.java
+++ b/sql/src/main/java/org/apache/apex/malhar/sql/operators/LineReader.java
@@ -23,11 +23,11 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 
+import org.apache.apex.malhar.lib.io.fs.AbstractFileInputOperator;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.fs.Path;
 
 import com.datatorrent.api.DefaultOutputPort;
-import com.datatorrent.lib.io.fs.AbstractFileInputOperator;
 
 /**
  * This operator reads data from given file/folder in line by line fashion.
diff --git a/sql/src/main/java/org/apache/apex/malhar/sql/planner/ApexRelNode.java b/sql/src/main/java/org/apache/apex/malhar/sql/planner/ApexRelNode.java
index 9d92f98..d67a5cc 100644
--- a/sql/src/main/java/org/apache/apex/malhar/sql/planner/ApexRelNode.java
+++ b/sql/src/main/java/org/apache/apex/malhar/sql/planner/ApexRelNode.java
@@ -23,6 +23,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.apex.malhar.sql.codegen.ExpressionCompiler;
 import org.apache.apex.malhar.sql.operators.FilterTransformOperator;
 import org.apache.apex.malhar.sql.operators.InnerJoinOperator;
@@ -60,7 +61,6 @@
 import com.datatorrent.api.Context;
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Operator;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 /**
  * This class defines how to populate DAG of Apex for the relational nodes of SQL Calcite
diff --git a/sql/src/main/java/org/apache/apex/malhar/sql/table/CSVMessageFormat.java b/sql/src/main/java/org/apache/apex/malhar/sql/table/CSVMessageFormat.java
index 533e55d..1d93d53 100644
--- a/sql/src/main/java/org/apache/apex/malhar/sql/table/CSVMessageFormat.java
+++ b/sql/src/main/java/org/apache/apex/malhar/sql/table/CSVMessageFormat.java
@@ -20,6 +20,9 @@
 
 import java.util.Map;
 
+import org.apache.apex.malhar.contrib.formatter.CsvFormatter;
+import org.apache.apex.malhar.contrib.parser.CsvParser;
+import org.apache.apex.malhar.contrib.parser.DelimitedSchema;
 import org.apache.apex.malhar.sql.operators.OperatorUtils;
 import org.apache.apex.malhar.sql.planner.RelInfo;
 import org.apache.calcite.adapter.java.JavaTypeFactory;
@@ -33,9 +36,6 @@
 
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.Operator;
-import com.datatorrent.contrib.formatter.CsvFormatter;
-import com.datatorrent.contrib.parser.CsvParser;
-import com.datatorrent.contrib.parser.DelimitedSchema;
 
 @InterfaceStability.Evolving
 /**
diff --git a/sql/src/test/java/org/apache/apex/malhar/sql/KafkaEndpointTest.java b/sql/src/test/java/org/apache/apex/malhar/sql/KafkaEndpointTest.java
index 8c816b3..0106296 100644
--- a/sql/src/test/java/org/apache/apex/malhar/sql/KafkaEndpointTest.java
+++ b/sql/src/test/java/org/apache/apex/malhar/sql/KafkaEndpointTest.java
@@ -30,6 +30,8 @@
 import org.junit.Ignore;
 import org.junit.Test;
 
+import org.apache.apex.malhar.contrib.formatter.CsvFormatter;
+import org.apache.apex.malhar.contrib.parser.CsvParser;
 import org.apache.apex.malhar.kafka.EmbeddedKafka;
 import org.apache.apex.malhar.kafka.KafkaSinglePortInputOperator;
 import org.apache.apex.malhar.kafka.KafkaSinglePortOutputOperator;
@@ -45,8 +47,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.contrib.formatter.CsvFormatter;
-import com.datatorrent.contrib.parser.CsvParser;
 
 public class KafkaEndpointTest
 {
diff --git a/sql/src/test/java/org/apache/apex/malhar/sql/SerDeTest.java b/sql/src/test/java/org/apache/apex/malhar/sql/SerDeTest.java
index 62d2a4d..bf2c155 100644
--- a/sql/src/test/java/org/apache/apex/malhar/sql/SerDeTest.java
+++ b/sql/src/test/java/org/apache/apex/malhar/sql/SerDeTest.java
@@ -24,6 +24,8 @@
 
 import org.junit.Test;
 
+import org.apache.apex.malhar.contrib.formatter.CsvFormatter;
+import org.apache.apex.malhar.contrib.parser.CsvParser;
 import org.apache.apex.malhar.kafka.KafkaSinglePortInputOperator;
 import org.apache.apex.malhar.kafka.KafkaSinglePortOutputOperator;
 import org.apache.apex.malhar.sql.table.CSVMessageFormat;
@@ -37,8 +39,6 @@
 import org.apache.kafka.clients.consumer.ConsumerConfig;
 import org.apache.kafka.clients.producer.ProducerConfig;
 
-import com.datatorrent.contrib.formatter.CsvFormatter;
-import com.datatorrent.contrib.parser.CsvParser;
 import com.datatorrent.stram.plan.logical.LogicalPlan;
 
 public class SerDeTest
diff --git a/sql/src/test/java/org/apache/apex/malhar/sql/StreamEndpointTest.java b/sql/src/test/java/org/apache/apex/malhar/sql/StreamEndpointTest.java
index 1e9a1f8..8a708bc 100644
--- a/sql/src/test/java/org/apache/apex/malhar/sql/StreamEndpointTest.java
+++ b/sql/src/test/java/org/apache/apex/malhar/sql/StreamEndpointTest.java
@@ -32,6 +32,8 @@
 import org.junit.Before;
 import org.junit.Test;
 
+import org.apache.apex.malhar.contrib.formatter.CsvFormatter;
+import org.apache.apex.malhar.contrib.parser.CsvParser;
 import org.apache.apex.malhar.kafka.EmbeddedKafka;
 import org.apache.apex.malhar.kafka.KafkaSinglePortInputOperator;
 import org.apache.apex.malhar.kafka.KafkaSinglePortOutputOperator;
@@ -48,8 +50,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.StreamingApplication;
-import com.datatorrent.contrib.formatter.CsvFormatter;
-import com.datatorrent.contrib.parser.CsvParser;
 
 public class StreamEndpointTest
 {
diff --git a/stream/pom.xml b/stream/pom.xml
index 888b56f..509bfed 100755
--- a/stream/pom.xml
+++ b/stream/pom.xml
@@ -25,7 +25,7 @@
   <parent>
     <groupId>org.apache.apex</groupId>
     <artifactId>malhar</artifactId>
-    <version>3.9.0-SNAPSHOT</version>
+    <version>4.0.0-SNAPSHOT</version>
   </parent>
 
   <artifactId>malhar-stream</artifactId>
diff --git a/stream/src/main/java/org/apache/apex/malhar/stream/api/WindowedStream.java b/stream/src/main/java/org/apache/apex/malhar/stream/api/WindowedStream.java
index 554f5d6..34bce3e 100644
--- a/stream/src/main/java/org/apache/apex/malhar/stream/api/WindowedStream.java
+++ b/stream/src/main/java/org/apache/apex/malhar/stream/api/WindowedStream.java
@@ -23,6 +23,7 @@
 import org.joda.time.Duration;
 
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.Accumulation;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
@@ -32,8 +33,6 @@
 import org.apache.apex.malhar.lib.window.impl.WindowedOperatorImpl;
 import org.apache.hadoop.classification.InterfaceStability;
 
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * <p>
  * A stream with windowed transformation
diff --git a/stream/src/main/java/org/apache/apex/malhar/stream/api/impl/ApexStreamImpl.java b/stream/src/main/java/org/apache/apex/malhar/stream/api/impl/ApexStreamImpl.java
index bb0f781..691d714 100644
--- a/stream/src/main/java/org/apache/apex/malhar/stream/api/impl/ApexStreamImpl.java
+++ b/stream/src/main/java/org/apache/apex/malhar/stream/api/impl/ApexStreamImpl.java
@@ -32,6 +32,7 @@
 import org.apache.apex.malhar.lib.function.Function;
 import org.apache.apex.malhar.lib.function.Function.FlatMapFunction;
 import org.apache.apex.malhar.lib.function.FunctionOperator;
+import org.apache.apex.malhar.lib.io.ConsoleOutputOperator;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.WindowOption;
 
@@ -48,7 +49,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.LocalMode;
 import com.datatorrent.api.Operator;
-import com.datatorrent.lib.io.ConsoleOutputOperator;
 import com.datatorrent.stram.StramLocalCluster;
 import com.datatorrent.stram.plan.logical.LogicalPlan;
 
diff --git a/stream/src/main/java/org/apache/apex/malhar/stream/api/impl/ApexWindowedStreamImpl.java b/stream/src/main/java/org/apache/apex/malhar/stream/api/impl/ApexWindowedStreamImpl.java
index feaf968..762fbc2 100644
--- a/stream/src/main/java/org/apache/apex/malhar/stream/api/impl/ApexWindowedStreamImpl.java
+++ b/stream/src/main/java/org/apache/apex/malhar/stream/api/impl/ApexWindowedStreamImpl.java
@@ -23,6 +23,7 @@
 import org.joda.time.Duration;
 
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.Accumulation;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
@@ -45,8 +46,6 @@
 import org.apache.commons.lang3.mutable.MutableLong;
 import org.apache.hadoop.classification.InterfaceStability;
 
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * Default windowed stream implementation for WindowedStream interface.
  * It adds more windowed transform for Stream interface
diff --git a/stream/src/main/java/org/apache/apex/malhar/stream/api/impl/StreamFactory.java b/stream/src/main/java/org/apache/apex/malhar/stream/api/impl/StreamFactory.java
index d6201ad..b76c2b3 100644
--- a/stream/src/main/java/org/apache/apex/malhar/stream/api/impl/StreamFactory.java
+++ b/stream/src/main/java/org/apache/apex/malhar/stream/api/impl/StreamFactory.java
@@ -18,6 +18,7 @@
  */
 package org.apache.apex.malhar.stream.api.impl;
 
+import org.apache.apex.malhar.contrib.kafka.KafkaSinglePortStringInputOperator;
 import org.apache.apex.malhar.kafka.KafkaSinglePortInputOperator;
 import org.apache.apex.malhar.kafka.PartitionStrategy;
 import org.apache.apex.malhar.lib.fs.LineByLineFileInputOperator;
@@ -27,7 +28,6 @@
 
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.api.Operator;
-import com.datatorrent.contrib.kafka.KafkaSinglePortStringInputOperator;
 
 import static org.apache.apex.malhar.stream.api.Option.Options.name;
 
diff --git a/stream/src/test/java/org/apache/apex/malhar/stream/sample/ApplicationWithStreamAPI.java b/stream/src/test/java/org/apache/apex/malhar/stream/sample/ApplicationWithStreamAPI.java
index c64126c..f2e1b9a 100644
--- a/stream/src/test/java/org/apache/apex/malhar/stream/sample/ApplicationWithStreamAPI.java
+++ b/stream/src/test/java/org/apache/apex/malhar/stream/sample/ApplicationWithStreamAPI.java
@@ -23,6 +23,7 @@
 import org.joda.time.Duration;
 
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.WindowOption;
@@ -33,7 +34,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.util.KeyValPair;
 
 import static org.apache.apex.malhar.stream.api.Option.Options.name;
 
diff --git a/stream/src/test/java/org/apache/apex/malhar/stream/sample/LocalTestWithoutStreamApplication.java b/stream/src/test/java/org/apache/apex/malhar/stream/sample/LocalTestWithoutStreamApplication.java
index 45a2363..c971dc3 100644
--- a/stream/src/test/java/org/apache/apex/malhar/stream/sample/LocalTestWithoutStreamApplication.java
+++ b/stream/src/test/java/org/apache/apex/malhar/stream/sample/LocalTestWithoutStreamApplication.java
@@ -28,13 +28,12 @@
 import org.junit.Test;
 
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.WindowOption;
 import org.apache.apex.malhar.stream.api.impl.StreamFactory;
 
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * A embedded application test without creating Streaming Application
  */
diff --git a/stream/src/test/java/org/apache/apex/malhar/stream/sample/MyStreamTest.java b/stream/src/test/java/org/apache/apex/malhar/stream/sample/MyStreamTest.java
index 893f546..ca618ae 100644
--- a/stream/src/test/java/org/apache/apex/malhar/stream/sample/MyStreamTest.java
+++ b/stream/src/test/java/org/apache/apex/malhar/stream/sample/MyStreamTest.java
@@ -29,14 +29,13 @@
 import org.junit.Test;
 
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.WindowOption;
 import org.apache.apex.malhar.stream.api.impl.ApexStreamImpl;
 import org.apache.apex.malhar.stream.api.impl.StreamFactory;
 
-import com.datatorrent.lib.util.KeyValPair;
-
 /**
  * A test class which test your own stream implementation build on default one
  */
diff --git a/stream/src/test/java/org/apache/apex/malhar/stream/sample/WordCountWithStreamAPI.java b/stream/src/test/java/org/apache/apex/malhar/stream/sample/WordCountWithStreamAPI.java
index c476055..99292cf 100644
--- a/stream/src/test/java/org/apache/apex/malhar/stream/sample/WordCountWithStreamAPI.java
+++ b/stream/src/test/java/org/apache/apex/malhar/stream/sample/WordCountWithStreamAPI.java
@@ -23,6 +23,7 @@
 import org.joda.time.Duration;
 
 import org.apache.apex.malhar.lib.function.Function;
+import org.apache.apex.malhar.lib.util.KeyValPair;
 import org.apache.apex.malhar.lib.window.TriggerOption;
 import org.apache.apex.malhar.lib.window.Tuple;
 import org.apache.apex.malhar.lib.window.WindowOption;
@@ -33,7 +34,6 @@
 import com.datatorrent.api.DAG;
 import com.datatorrent.api.StreamingApplication;
 import com.datatorrent.api.annotation.ApplicationAnnotation;
-import com.datatorrent.lib.util.KeyValPair;
 
 /**
  * Word count with streaming API
