Add @since tags and update change log for release 3.7.0
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f9f5354..163c7ea 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,90 @@
 Apex Malhar Changelog
 ========================================================================================================================
 
+Version 3.7.0 - 2017-03-31
+------------------------------------------------------------------------------------------------------------------------
+
+### Sub-task
+* [APEXMALHAR-2001] - Fix all the checkstyle violations in kafka module
+* [APEXMALHAR-2221] - Fix checkstyle violations in benchmark module
+* [APEXMALHAR-2298] - Kafka ExactlyOnce (0.9) output operator fixes
+* [APEXMALHAR-2301] - Implement another TimeBucketAssigner to work with any time
+* [APEXMALHAR-2345] - Purge the time buckets from managed state for all time buckets that fall beyond the lateness horizon
+* [APEXMALHAR-2389] - Add User Documentation for Calcite Integration
+* [APEXMALHAR-2407] - Time buckets are not purging after expiry
+* [APEXMALHAR-2408] - Issues in correctness of get() for key search in ManagedTimeStateImpl
+* [APEXMALHAR-2409] - Improve PojoInnerJoin accumulation to emit a POJO instead of Map
+* [APEXMALHAR-2414] - Improve performance of PojoInnerJoin accum by using PojoUtils
+* [APEXMALHAR-2415] - Enable PojoInnerJoin accum to allow multiple keys for join purpose
+* [APEXMALHAR-2439] - In apex-malhar, renaming "demos" to "examples"
+* [APEXMALHAR-2440] - Identify and group examples based on type
+* [APEXMALHAR-2441] - Move Non-Ingestion Examples from [datatorrent/examples] to [apex-malhar/examples]
+
+### Bug
+* [APEXMALHAR-2303] - S3 Line By Line Module
+* [APEXMALHAR-2306] - Tests should allow for additions to OperatorContext interface
+* [APEXMALHAR-2316] - Cannot register tuple class in XmlParser Operator
+* [APEXMALHAR-2330] - JdbcPOJOPollInputOperator fails with NullPointerException when PostgreSQL driver
+* [APEXMALHAR-2343] - Count Accumulation should only increase one for each tuple
+* [APEXMALHAR-2346] - DocumentBuilder.parse() should take InputSource as an argument instead of String
+* [APEXMALHAR-2350] - The key and value stream should match with the bucket
+* [APEXMALHAR-2357] - JdbcPojoOperatorApplicationTest failing intermittently 
+* [APEXMALHAR-2368] - JDBCPollInput operator reads extra records when 1.5M records are added to a blank input table
+* [APEXMALHAR-2371] - Importing 'Apache Apex Malhar Iteration Demo' throws error for 'property' tag in properties.xml
+* [APEXMALHAR-2379] - AbstractFileInputOperator bug fixes for regex, negative values
+* [APEXMALHAR-2399] - In PojoInnerJoin accumulation default constructor is directly throwing an exception which messes up in default serialization.
+* [APEXMALHAR-2400] - In PojoInnerJoin accumulation same field names are emitted as single field 
+* [APEXMALHAR-2406] - ManagedState incorrect results for get()
+* [APEXMALHAR-2418] - Update the twitter library to 4.0.6 
+* [APEXMALHAR-2419] - KafkaSinglePortExactlyOnceOutputOperator fails on recovery
+* [APEXMALHAR-2422] - WindowDataManager not recovering as expected on HDFS
+* [APEXMALHAR-2424] - NullPointerException in JDBCPojoPollInputOperator with additional columns
+* [APEXMALHAR-2450] - UniqueCounter emits empty maps even when there is no input
+* [APEXMALHAR-2454] - CsvParser documentation xml formatting and rendering issue.
+
+### Dependency upgrade
+* [APEXMALHAR-2398] - commons-beanutils upgrade
+
+### Documentation
+* [APEXMALHAR-2183] - Add user document for CsvFormatter operator
+* [APEXMALHAR-2364] - Add user documentation for S3OutputModule
+* [APEXMALHAR-2370] - Add user documenation for Xml Parser
+* [APEXMALHAR-2390] - Operator list in doc is not sorted
+* [APEXMALHAR-2391] - JDBC Poller Input Operator exist but not listed 
+* [APEXMALHAR-2432] - javadoc for cassandra operator is improperly formatted
+* [APEXMALHAR-2433] - Add readme for Windowing Benchmark
+
+### Improvement
+* [APEXMALHAR-2220] - Move the FunctionOperator to Malhar library
+* [APEXMALHAR-2344] - Initialize the list of FieldInfo in JDBCPollInput operator from properties.xml
+* [APEXMALHAR-2354] - Add support for heuristic watermarks in WindowedOperator
+* [APEXMALHAR-2358] - Optimise GenericSerde to use specific serde to improve the performance
+* [APEXMALHAR-2359] - Optimise fire trigger to avoid go through all data
+* [APEXMALHAR-2365] - LogParser - Operator to parse byte array using log format and emit a POJO
+* [APEXMALHAR-2372] - Change the order of checks of table name in populateColumnDataTypes
+* [APEXMALHAR-2374] - Recursive support for AbstractFileInputOperator
+* [APEXMALHAR-2376] - Add Common Log support in LogParser operator
+* [APEXMALHAR-2377] - Move LogParser operator to org.apache.apex.malhar.contrib.parser
+* [APEXMALHAR-2380] - Add MutablePair for Kinensis Operator for Recovery State
+* [APEXMALHAR-2381] - Change FSWindowManager for performance issues in Kinesis Input Operator
+* [APEXMALHAR-2394] - AbstractFileOutputOperator.rotate(...) does not check if file has already been rotated before computing next rotation
+* [APEXMALHAR-2411] - Avoid isreplaystate variable, incorporate logic in activate() and replay() for Kinesis Input Operator
+* [APEXMALHAR-2412] - Provide emitTuple overriding functionality for user in kinesis Input operator
+* [APEXMALHAR-2413] - Improve PojoInnerJoin Accumulation
+* [APEXMALHAR-2429] - Ambiguity in passing "key" parameter to Join accumulation
+* [APEXMALHAR-2430] - Optimize Join accumulation by changing the data structure in accumulation method
+* [APEXMALHAR-2445] - KafkaExactlyOnce should not write to WAL during recovery
+
+### New Feature
+* [APEXMALHAR-2022] - S3 Output Module for file copy
+* [APEXMALHAR-2130] - Scalable windowed storage
+* [APEXMALHAR-2218] - RegexParser- Operator to parse byte stream using Regex pattern and emit a POJO
+* [APEXMALHAR-2259] - Create Fixed Length Parser Operator
+* [APEXMALHAR-2369] - S3 output module for tuple based output
+* [APEXMALHAR-2416] - Development of Redshift Output Module
+* [APEXMALHAR-2417] - Add PojoOuterJoin (left, right and full) accumulation
+* [APEXMALHAR-2428] - CompositeAccumulation for windowed operator
+
 Version 3.6.0 - 2016-11-30
 ------------------------------------------------------------------------------------------------------------------------
 
diff --git a/benchmark/src/main/java/com/datatorrent/benchmark/window/AbstractGenerator.java b/benchmark/src/main/java/com/datatorrent/benchmark/window/AbstractGenerator.java
index c5b1594..bfdc0ec 100644
--- a/benchmark/src/main/java/com/datatorrent/benchmark/window/AbstractGenerator.java
+++ b/benchmark/src/main/java/com/datatorrent/benchmark/window/AbstractGenerator.java
@@ -25,6 +25,9 @@
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.common.util.BaseOperator;
 
+/**
+ * @since 3.7.0
+ */
 public abstract class AbstractGenerator<T> extends BaseOperator implements InputOperator
 {
   public final transient DefaultOutputPort<T> data = new DefaultOutputPort<T>();
diff --git a/benchmark/src/main/java/com/datatorrent/benchmark/window/AbstractWindowedOperatorBenchmarkApp.java b/benchmark/src/main/java/com/datatorrent/benchmark/window/AbstractWindowedOperatorBenchmarkApp.java
index 4b9b423..7a345fe 100644
--- a/benchmark/src/main/java/com/datatorrent/benchmark/window/AbstractWindowedOperatorBenchmarkApp.java
+++ b/benchmark/src/main/java/com/datatorrent/benchmark/window/AbstractWindowedOperatorBenchmarkApp.java
@@ -51,6 +51,9 @@
 import com.datatorrent.lib.fileaccess.TFileImpl;
 import com.datatorrent.lib.stream.DevNull;
 
+/**
+ * @since 3.7.0
+ */
 public abstract class AbstractWindowedOperatorBenchmarkApp<G extends Operator, O extends AbstractWindowedOperator>
     implements StreamingApplication
 {
diff --git a/benchmark/src/main/java/com/datatorrent/benchmark/window/KeyedWindowedOperatorBenchmarkApp.java b/benchmark/src/main/java/com/datatorrent/benchmark/window/KeyedWindowedOperatorBenchmarkApp.java
index 19df8fd..fccc67a 100644
--- a/benchmark/src/main/java/com/datatorrent/benchmark/window/KeyedWindowedOperatorBenchmarkApp.java
+++ b/benchmark/src/main/java/com/datatorrent/benchmark/window/KeyedWindowedOperatorBenchmarkApp.java
@@ -41,6 +41,9 @@
 import com.datatorrent.lib.fileaccess.TFileImpl;
 import com.datatorrent.lib.util.KeyValPair;
 
+/**
+ * @since 3.7.0
+ */
 public class KeyedWindowedOperatorBenchmarkApp extends AbstractWindowedOperatorBenchmarkApp<
     KeyedWindowedOperatorBenchmarkApp.KeyedWindowedGenerator, KeyedWindowedOperatorBenchmarkApp.MyKeyedWindowedOperator>
 {
diff --git a/benchmark/src/main/java/com/datatorrent/benchmark/window/WindowedOperatorBenchmarkApp.java b/benchmark/src/main/java/com/datatorrent/benchmark/window/WindowedOperatorBenchmarkApp.java
index d96b453..7e402fc 100644
--- a/benchmark/src/main/java/com/datatorrent/benchmark/window/WindowedOperatorBenchmarkApp.java
+++ b/benchmark/src/main/java/com/datatorrent/benchmark/window/WindowedOperatorBenchmarkApp.java
@@ -35,6 +35,9 @@
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 
 @ApplicationAnnotation(name = "WindowedOperatorBenchmark")
+/**
+ * @since 3.7.0
+ */
 public class WindowedOperatorBenchmarkApp extends AbstractWindowedOperatorBenchmarkApp<
     WindowedOperatorBenchmarkApp.WindowedGenerator, WindowedOperatorBenchmarkApp.MyWindowedOperator>
 {
diff --git a/contrib/src/main/java/com/datatorrent/contrib/parser/DelimitedSchema.java b/contrib/src/main/java/com/datatorrent/contrib/parser/DelimitedSchema.java
index a47e138..1285b33 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/parser/DelimitedSchema.java
+++ b/contrib/src/main/java/com/datatorrent/contrib/parser/DelimitedSchema.java
@@ -52,6 +52,8 @@
  * "dd/MM/yyyy" } }, { "name": "securityCode", "type": "Long", "constraints": {
  * "minValue": "10", "maxValue": "30" } }, { "name": "active", "type":
  * "Boolean", "constraints": { "required": "true" } } ] }}
+ *
+ * @since 3.7.0
  */
 public class DelimitedSchema extends Schema
 {
diff --git a/contrib/src/main/java/com/datatorrent/contrib/parser/FixedWidthParser.java b/contrib/src/main/java/com/datatorrent/contrib/parser/FixedWidthParser.java
index 9ee556e..716d3f6 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/parser/FixedWidthParser.java
+++ b/contrib/src/main/java/com/datatorrent/contrib/parser/FixedWidthParser.java
@@ -72,6 +72,8 @@
  * @displayName FixedWidthParser
  * @category Parsers
  * @tags fixedwidth pojo parser
+ *
+ * @since 3.7.0
  */
 public class FixedWidthParser extends Parser<byte[], KeyValPair<String, String>> implements Operator.ActivationListener<Context>
 {
diff --git a/contrib/src/main/java/com/datatorrent/contrib/parser/FixedWidthSchema.java b/contrib/src/main/java/com/datatorrent/contrib/parser/FixedWidthSchema.java
index e64125b..bd26f06 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/parser/FixedWidthSchema.java
+++ b/contrib/src/main/java/com/datatorrent/contrib/parser/FixedWidthSchema.java
@@ -47,6 +47,8 @@
  * "Double", "length": 5}, { "name": "startDate", "type": "Date", "length": 10,
  * "format":"dd/MM/yyyy" }, { "name": "securityCode", "type": "Long","length": 10 },
  * { "name": "active", "type":"Boolean","length": 2} ] }}
+ *
+ * @since 3.7.0
  */
 public class FixedWidthSchema extends Schema
 {
diff --git a/contrib/src/main/java/com/datatorrent/contrib/parser/Schema.java b/contrib/src/main/java/com/datatorrent/contrib/parser/Schema.java
index c09ff92..727db7f 100644
--- a/contrib/src/main/java/com/datatorrent/contrib/parser/Schema.java
+++ b/contrib/src/main/java/com/datatorrent/contrib/parser/Schema.java
@@ -29,6 +29,8 @@
  * The operators use this information to validate the incoming tuples.
  * Information from JSON schema is saved in this object and is used by the
  * operators
+ *
+ * @since 3.7.0
  */
 public class Schema
 {
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 ec20810..7490166 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
@@ -40,6 +40,8 @@
  * <b>err</b>:tuples that do not confine to log format are emitted on this port as
  * KeyValPair<String,String><br>
  * Key being the tuple and Val being the reason.
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 public class CommonLogParser extends LogParser
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 7a4e906..c9e06ba 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
@@ -47,6 +47,8 @@
  * <b>err</b>:tuples that do not confine to log format are emitted on this port as
  * KeyValPair<String,String><br>
  * Key being the tuple and Val being the reason.
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Unstable
 public class LogParser extends Parser<byte[], KeyValPair<String, String>>
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 8120e00..1bf2ec4 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
@@ -45,6 +45,8 @@
  * {"field": "request","regex": "\"((?:[^\"]|\")+)\""},
  * {"field": "statusCode","regex": "(\\d{3})"},
  * {"field": "bytes","regex": "(\\d+|-)"}]}
+ *
+ * @since 3.7.0
  */
 public class LogSchemaDetails
 {
diff --git a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/log/CommonLog.java b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/log/CommonLog.java
index aa44a76..e042781 100644
--- a/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/log/CommonLog.java
+++ b/contrib/src/main/java/org/apache/apex/malhar/contrib/parser/log/CommonLog.java
@@ -24,6 +24,8 @@
 /**
  * This is default log format parser for <a href="https://en.wikipedia.org/wiki/Common_Log_Format">Common log </a>
  * To use this format with {@link LogParser} operator just mention the property "logFileFormat" as "COMMON"
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 public class CommonLog
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 6dbb977..e57004a 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
@@ -30,6 +30,9 @@
 import com.datatorrent.lib.appdata.schemas.SchemaUtils;
 
 @ApplicationAnnotation(name = "CustomOutputFormatter")
+/**
+ * @since 3.7.0
+ */
 public class Application implements StreamingApplication
 {
   //Set the delimiters and schema structure  for the custom output in schema.json
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 90fcc3d..c833e48 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
@@ -28,6 +28,8 @@
  * HDFSoutput operator with implementation to write Objects to HDFS
  *
  * @param <T>
+ *
+ * @since 3.7.0
  */
 public class HDFSOutputOperator<T> extends AbstractFileOutputOperator<T>
 {
diff --git a/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/JsonGenerator.java b/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/JsonGenerator.java
index 628171b..77aae63 100644
--- a/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/JsonGenerator.java
+++ b/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/JsonGenerator.java
@@ -32,6 +32,9 @@
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.common.util.BaseOperator;
 
+/**
+ * @since 3.7.0
+ */
 public class JsonGenerator extends BaseOperator implements InputOperator
 {
 
diff --git a/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/PojoEvent.java b/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/PojoEvent.java
index 8a71496..5b17373 100644
--- a/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/PojoEvent.java
+++ b/examples/csvformatter/src/main/java/org/apache/apex/examples/csvformatter/PojoEvent.java
@@ -21,6 +21,9 @@
 
 import java.util.Date;
 
+/**
+ * @since 3.7.0
+ */
 public class PojoEvent
 {
 
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 077e52c..d56b3ce 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
@@ -34,6 +34,9 @@
 import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 @ApplicationAnnotation(name = "DedupExample")
+/**
+ * @since 3.7.0
+ */
 public class Application implements StreamingApplication
 {
 
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 60862ac..44c32a3 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
@@ -28,6 +28,9 @@
 import com.datatorrent.lib.stream.DevNull;
 
 @ApplicationAnnotation(name = "Dyn")
+/**
+ * @since 3.7.0
+ */
 public class App implements StreamingApplication
 {
 
diff --git a/examples/dynamic-partition/src/main/java/org/apache/apex/examples/dynamic/Gen.java b/examples/dynamic-partition/src/main/java/org/apache/apex/examples/dynamic/Gen.java
index bb3f202..2827c96 100644
--- a/examples/dynamic-partition/src/main/java/org/apache/apex/examples/dynamic/Gen.java
+++ b/examples/dynamic-partition/src/main/java/org/apache/apex/examples/dynamic/Gen.java
@@ -45,6 +45,8 @@
 
 /**
  * Operator that dynamically partitions itself after 500 tuples have been emitted
+ *
+ * @since 3.7.0
  */
 public class Gen extends BaseOperator implements InputOperator, Partitioner<Gen>, StatsListener
 {
diff --git a/examples/enricher/src/main/java/org/apache/apex/examples/enricher/DataGenerator.java b/examples/enricher/src/main/java/org/apache/apex/examples/enricher/DataGenerator.java
index 50f5c26..b10d12c 100644
--- a/examples/enricher/src/main/java/org/apache/apex/examples/enricher/DataGenerator.java
+++ b/examples/enricher/src/main/java/org/apache/apex/examples/enricher/DataGenerator.java
@@ -32,6 +32,8 @@
  *    A Party IMEI
  *    A Party IMSI
  *    Circle Id
+ *
+ * @since 3.7.0
  */
 public class DataGenerator extends BaseOperator implements InputOperator
 {
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 6894830..10024c8 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
@@ -32,6 +32,9 @@
 import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 @ApplicationAnnotation(name = "EnricherAppWithJSONFile")
+/**
+ * @since 3.7.0
+ */
 public class EnricherAppWithJSONFile implements StreamingApplication
 {
   @Override
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 6e0c742..d609202 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
@@ -28,6 +28,8 @@
 
 /**
  * Converts each tuple to a string and writes it as a new line to the output file
+ *
+ * @since 3.7.0
  */
 public class LineOutputOperator extends AbstractFileOutputOperator<Object>
 {
diff --git a/examples/enricher/src/main/java/org/apache/apex/examples/enricher/POJO.java b/examples/enricher/src/main/java/org/apache/apex/examples/enricher/POJO.java
index 2a61c59..f6ef450 100644
--- a/examples/enricher/src/main/java/org/apache/apex/examples/enricher/POJO.java
+++ b/examples/enricher/src/main/java/org/apache/apex/examples/enricher/POJO.java
@@ -19,6 +19,9 @@
 
 package org.apache.apex.examples.enricher;
 
+/**
+ * @since 3.7.0
+ */
 public class POJO
 {
   private String phone;
diff --git a/examples/enricher/src/main/java/org/apache/apex/examples/enricher/POJOEnriched.java b/examples/enricher/src/main/java/org/apache/apex/examples/enricher/POJOEnriched.java
index 55566c9..d89986a 100644
--- a/examples/enricher/src/main/java/org/apache/apex/examples/enricher/POJOEnriched.java
+++ b/examples/enricher/src/main/java/org/apache/apex/examples/enricher/POJOEnriched.java
@@ -19,6 +19,9 @@
 
 package org.apache.apex.examples.enricher;
 
+/**
+ * @since 3.7.0
+ */
 public class POJOEnriched
 {
   private String phone;
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 ce832e6..65ec0c8 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
@@ -33,6 +33,8 @@
 
 /**
  * Simple application illustrating filter operator
+ *
+ * @since 3.7.0
  */
 @ApplicationAnnotation(name = "FilterExample")
 public class Application implements StreamingApplication
diff --git a/examples/filter/src/main/java/org/apache/apex/examples/filter/TransactionPOJO.java b/examples/filter/src/main/java/org/apache/apex/examples/filter/TransactionPOJO.java
index 528d8b1..5a3cb0c 100644
--- a/examples/filter/src/main/java/org/apache/apex/examples/filter/TransactionPOJO.java
+++ b/examples/filter/src/main/java/org/apache/apex/examples/filter/TransactionPOJO.java
@@ -20,6 +20,9 @@
 
 package org.apache.apex.examples.filter;
 
+/**
+ * @since 3.7.0
+ */
 public class TransactionPOJO
 {
 
diff --git a/examples/innerjoin/src/main/java/org/apache/apex/examples/innerjoin/InnerJoinApplication.java b/examples/innerjoin/src/main/java/org/apache/apex/examples/innerjoin/InnerJoinApplication.java
index ae62016..809e115 100644
--- a/examples/innerjoin/src/main/java/org/apache/apex/examples/innerjoin/InnerJoinApplication.java
+++ b/examples/innerjoin/src/main/java/org/apache/apex/examples/innerjoin/InnerJoinApplication.java
@@ -29,6 +29,9 @@
 import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 @ApplicationAnnotation(name = "InnerJoinExample")
+/**
+ * @since 3.7.0
+ */
 public class InnerJoinApplication implements StreamingApplication
 {
   @Override
diff --git a/examples/innerjoin/src/main/java/org/apache/apex/examples/innerjoin/POJOGenerator.java b/examples/innerjoin/src/main/java/org/apache/apex/examples/innerjoin/POJOGenerator.java
index 0b57c07..7a4344b 100644
--- a/examples/innerjoin/src/main/java/org/apache/apex/examples/innerjoin/POJOGenerator.java
+++ b/examples/innerjoin/src/main/java/org/apache/apex/examples/innerjoin/POJOGenerator.java
@@ -29,6 +29,8 @@
 
 /**
  * Generates and emits the SalesEvent/ProductEvent based on isSalesEvent.
+ *
+ * @since 3.7.0
  */
 public class POJOGenerator implements InputOperator
 {
diff --git a/examples/parser/src/main/java/org/apache/apex/examples/parser/jsonparser/Application.java b/examples/parser/src/main/java/org/apache/apex/examples/parser/jsonparser/Application.java
index cacfadc..89853a3 100644
--- a/examples/parser/src/main/java/org/apache/apex/examples/parser/jsonparser/Application.java
+++ b/examples/parser/src/main/java/org/apache/apex/examples/parser/jsonparser/Application.java
@@ -30,6 +30,9 @@
 import com.datatorrent.lib.io.ConsoleOutputOperator;
 
 @ApplicationAnnotation(name = "JsonProcessor")
+/**
+ * @since 3.7.0
+ */
 public class Application implements StreamingApplication
 {
 
diff --git a/examples/parser/src/main/java/org/apache/apex/examples/parser/jsonparser/Campaign.java b/examples/parser/src/main/java/org/apache/apex/examples/parser/jsonparser/Campaign.java
index f31e56d..0510630 100644
--- a/examples/parser/src/main/java/org/apache/apex/examples/parser/jsonparser/Campaign.java
+++ b/examples/parser/src/main/java/org/apache/apex/examples/parser/jsonparser/Campaign.java
@@ -24,6 +24,9 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import com.fasterxml.jackson.annotation.JsonProperty;
 
+/**
+ * @since 3.7.0
+ */
 public class Campaign
 {
   private int adId;
diff --git a/examples/parser/src/main/java/org/apache/apex/examples/parser/jsonparser/JsonGenerator.java b/examples/parser/src/main/java/org/apache/apex/examples/parser/jsonparser/JsonGenerator.java
index 27416c3..8f4558e 100644
--- a/examples/parser/src/main/java/org/apache/apex/examples/parser/jsonparser/JsonGenerator.java
+++ b/examples/parser/src/main/java/org/apache/apex/examples/parser/jsonparser/JsonGenerator.java
@@ -34,6 +34,9 @@
 import com.datatorrent.api.InputOperator;
 import com.datatorrent.common.util.BaseOperator;
 
+/**
+ * @since 3.7.0
+ */
 public class JsonGenerator extends BaseOperator implements InputOperator
 {
 
diff --git a/examples/partition/src/main/java/org/apache/apex/examples/partition/Application.java b/examples/partition/src/main/java/org/apache/apex/examples/partition/Application.java
index 8d1b3bf..59a480d 100644
--- a/examples/partition/src/main/java/org/apache/apex/examples/partition/Application.java
+++ b/examples/partition/src/main/java/org/apache/apex/examples/partition/Application.java
@@ -27,6 +27,9 @@
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 
 @ApplicationAnnotation(name = "TestStuff")
+/**
+ * @since 3.7.0
+ */
 public class Application implements StreamingApplication
 {
 
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 b48cd83..6115747 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
@@ -21,6 +21,9 @@
 
 import com.datatorrent.lib.codec.KryoSerializableStreamCodec;
 
+/**
+ * @since 3.7.0
+ */
 public class Codec3 extends KryoSerializableStreamCodec<Integer>
 {
   @Override
diff --git a/examples/partition/src/main/java/org/apache/apex/examples/partition/RandomNumberGenerator.java b/examples/partition/src/main/java/org/apache/apex/examples/partition/RandomNumberGenerator.java
index 40eb041..7fda0b9 100644
--- a/examples/partition/src/main/java/org/apache/apex/examples/partition/RandomNumberGenerator.java
+++ b/examples/partition/src/main/java/org/apache/apex/examples/partition/RandomNumberGenerator.java
@@ -33,6 +33,8 @@
 
 /**
  * This is a simple operator that emits random integer.
+ *
+ * @since 3.7.0
  */
 public class RandomNumberGenerator extends BaseOperator implements InputOperator
 {
diff --git a/examples/partition/src/main/java/org/apache/apex/examples/partition/TestPartition.java b/examples/partition/src/main/java/org/apache/apex/examples/partition/TestPartition.java
index 60eb69e..deb9ceb 100644
--- a/examples/partition/src/main/java/org/apache/apex/examples/partition/TestPartition.java
+++ b/examples/partition/src/main/java/org/apache/apex/examples/partition/TestPartition.java
@@ -40,6 +40,8 @@
 
 /**
  * Simple operator to test partitioning
+ *
+ * @since 3.7.0
  */
 public class TestPartition extends BaseOperator implements Partitioner<TestPartition>
 {
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 ed78c17..f56217f 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
@@ -29,6 +29,9 @@
 import com.datatorrent.contrib.parser.CsvParser;
 
 @ApplicationAnnotation(name = "RecordReaderExample")
+/**
+ * @since 3.7.0
+ */
 public class Application implements StreamingApplication
 {
 
diff --git a/examples/recordReader/src/main/java/org/apache/apex/examples/recordReader/TransactionsSchema.java b/examples/recordReader/src/main/java/org/apache/apex/examples/recordReader/TransactionsSchema.java
index 11437df..1c13d95 100644
--- a/examples/recordReader/src/main/java/org/apache/apex/examples/recordReader/TransactionsSchema.java
+++ b/examples/recordReader/src/main/java/org/apache/apex/examples/recordReader/TransactionsSchema.java
@@ -21,6 +21,9 @@
 
 import java.util.Date;
 
+/**
+ * @since 3.7.0
+ */
 public class TransactionsSchema
 {
   private String customerName;
diff --git a/examples/throttle/src/main/java/org/apache/apex/examples/throttle/Application.java b/examples/throttle/src/main/java/org/apache/apex/examples/throttle/Application.java
index 9571456..b35f2d1 100644
--- a/examples/throttle/src/main/java/org/apache/apex/examples/throttle/Application.java
+++ b/examples/throttle/src/main/java/org/apache/apex/examples/throttle/Application.java
@@ -32,6 +32,9 @@
 import com.datatorrent.api.annotation.ApplicationAnnotation;
 
 @ApplicationAnnotation(name = "ThrottleApplication")
+/**
+ * @since 3.7.0
+ */
 public class Application implements StreamingApplication
 {
 
diff --git a/examples/throttle/src/main/java/org/apache/apex/examples/throttle/PassThroughOperator.java b/examples/throttle/src/main/java/org/apache/apex/examples/throttle/PassThroughOperator.java
index 52d3b1b..8ff3925 100644
--- a/examples/throttle/src/main/java/org/apache/apex/examples/throttle/PassThroughOperator.java
+++ b/examples/throttle/src/main/java/org/apache/apex/examples/throttle/PassThroughOperator.java
@@ -25,6 +25,8 @@
 
 /**
  * Created by pramod on 9/27/16.
+ *
+ * @since 3.7.0
  */
 public class PassThroughOperator<T> extends BaseOperator
 {
diff --git a/examples/throttle/src/main/java/org/apache/apex/examples/throttle/RandomNumberGenerator.java b/examples/throttle/src/main/java/org/apache/apex/examples/throttle/RandomNumberGenerator.java
index e24b63e..89e252b 100644
--- a/examples/throttle/src/main/java/org/apache/apex/examples/throttle/RandomNumberGenerator.java
+++ b/examples/throttle/src/main/java/org/apache/apex/examples/throttle/RandomNumberGenerator.java
@@ -28,6 +28,8 @@
 
 /**
  * This is a simple operator that emits random number.
+ *
+ * @since 3.7.0
  */
 public class RandomNumberGenerator extends BaseOperator implements InputOperator
 {
diff --git a/examples/throttle/src/main/java/org/apache/apex/examples/throttle/SlowDevNullOperator.java b/examples/throttle/src/main/java/org/apache/apex/examples/throttle/SlowDevNullOperator.java
index e830013..572194b 100644
--- a/examples/throttle/src/main/java/org/apache/apex/examples/throttle/SlowDevNullOperator.java
+++ b/examples/throttle/src/main/java/org/apache/apex/examples/throttle/SlowDevNullOperator.java
@@ -26,6 +26,8 @@
 
 /**
  * Created by pramod on 9/27/16.
+ *
+ * @since 3.7.0
  */
 public class SlowDevNullOperator<T> extends BaseOperator
 {
diff --git a/examples/throttle/src/main/java/org/apache/apex/examples/throttle/ThrottlingStatsListener.java b/examples/throttle/src/main/java/org/apache/apex/examples/throttle/ThrottlingStatsListener.java
index 5504332..acb840a 100644
--- a/examples/throttle/src/main/java/org/apache/apex/examples/throttle/ThrottlingStatsListener.java
+++ b/examples/throttle/src/main/java/org/apache/apex/examples/throttle/ThrottlingStatsListener.java
@@ -35,6 +35,8 @@
 
 /**
  * Created by pramod on 9/27/16.
+ *
+ * @since 3.7.0
  */
 public class ThrottlingStatsListener implements StatsListener, Serializable
 {
diff --git a/examples/transform/src/main/java/org/apache/apex/examples/transform/Application.java b/examples/transform/src/main/java/org/apache/apex/examples/transform/Application.java
index f35a591..0df31f4 100644
--- a/examples/transform/src/main/java/org/apache/apex/examples/transform/Application.java
+++ b/examples/transform/src/main/java/org/apache/apex/examples/transform/Application.java
@@ -33,6 +33,9 @@
 import com.datatorrent.lib.transform.TransformOperator;
 
 @ApplicationAnnotation(name = "TransformExample")
+/**
+ * @since 3.7.0
+ */
 public class Application implements StreamingApplication
 {
   @Override
diff --git a/examples/transform/src/main/java/org/apache/apex/examples/transform/CustomerEvent.java b/examples/transform/src/main/java/org/apache/apex/examples/transform/CustomerEvent.java
index bfc9660..9d23999 100644
--- a/examples/transform/src/main/java/org/apache/apex/examples/transform/CustomerEvent.java
+++ b/examples/transform/src/main/java/org/apache/apex/examples/transform/CustomerEvent.java
@@ -21,6 +21,9 @@
 
 import java.util.Date;
 
+/**
+ * @since 3.7.0
+ */
 public class CustomerEvent
 {
   private int customerId;
diff --git a/examples/transform/src/main/java/org/apache/apex/examples/transform/CustomerInfo.java b/examples/transform/src/main/java/org/apache/apex/examples/transform/CustomerInfo.java
index 1dc347b..add1c68 100644
--- a/examples/transform/src/main/java/org/apache/apex/examples/transform/CustomerInfo.java
+++ b/examples/transform/src/main/java/org/apache/apex/examples/transform/CustomerInfo.java
@@ -19,6 +19,9 @@
 
 package org.apache.apex.examples.transform;
 
+/**
+ * @since 3.7.0
+ */
 public class CustomerInfo
 {
   private int customerId;
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 4063cce..95fb6c8 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
@@ -35,6 +35,9 @@
 import com.datatorrent.lib.transform.TransformOperator;
 
 @ApplicationAnnotation(name = "DynamicTransformApp")
+/**
+ * @since 3.7.0
+ */
 public class DynamicTransformApplication implements StreamingApplication
 {
   private static String COOL_DOWN_MILLIS = "dt.cooldown";
diff --git a/examples/transform/src/main/java/org/apache/apex/examples/transform/POJOGenerator.java b/examples/transform/src/main/java/org/apache/apex/examples/transform/POJOGenerator.java
index 1b4f3ef..251f8ee 100644
--- a/examples/transform/src/main/java/org/apache/apex/examples/transform/POJOGenerator.java
+++ b/examples/transform/src/main/java/org/apache/apex/examples/transform/POJOGenerator.java
@@ -32,6 +32,8 @@
 
 /**
  * Generates and emits the CustomerEvent
+ *
+ * @since 3.7.0
  */
 public class POJOGenerator implements InputOperator
 {
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 fa11fc7..1ab1893 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
@@ -47,6 +47,8 @@
  * @displayName Redshift Output Operator
  * @category Output
  * @tags database, jdbc, redshift
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 @OperatorAnnotation(partitionable = false)
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 7d24ef9..56b7f70 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
@@ -41,6 +41,8 @@
  * rolling files will load into Redshift table using copy command.
  * By default, it load files from S3 into Redshfit table. If the file is located in EMR, then specify "readFromS3" parameter to false.
  *
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 public class RedshiftOutputModule implements Module
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/FSRecordCompactionOperator.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/FSRecordCompactionOperator.java
index 1dd12c4..dc214d5 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/FSRecordCompactionOperator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/FSRecordCompactionOperator.java
@@ -41,6 +41,8 @@
  *          Type for incoming tuples. Converter needs to be defined which
  *          converts these tuples to byte[]. Default converters for String,
  *          byte[] tuples are provided in S3TupleOutputModule.
+ *
+ * @since 3.7.0
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
 public class FSRecordCompactionOperator<INPUT> extends GenericFileOutputOperator<INPUT>
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 aafa3a7..950ec50 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
@@ -59,6 +59,8 @@
  * This operator can be used to upload the block into S3 bucket using multi-part feature or putObject API.
  * Upload the block into S3 using multi-part feature only if the number of blocks of a file is > 1.
  * This operator is useful in context of S3 Output Module.
+ *
+ * @since 3.7.0
  */
 
 @InterfaceStability.Evolving
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3FileMerger.java b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3FileMerger.java
index 96fbc29..9c4bc33 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3FileMerger.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/fs/s3/S3FileMerger.java
@@ -50,6 +50,8 @@
  * This operator can be used to merge the S3 blocks into a file. This operator will request for
  * S3 CompleteMultipartUploadRequest once all the blocks are uploaded using multi-part feature.
  * This operator is useful in context of S3 Output Module.
+ *
+ * @since 3.7.0
  */
 
 @InterfaceStability.Evolving
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 3a38265..fd70b11 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
@@ -48,6 +48,8 @@
  * This is an S3 Initiate file upload operator which can be used to initiate file upload and emits the upload id.
  * Initiate the given file for upload only if the file contains more than one block.
  * This operator is useful in context of S3 Output Module.
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 public class S3InitiateFileUploadOperator implements Operator, Operator.CheckpointNotificationListener
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 6c3d8be..2141e69 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
@@ -59,6 +59,8 @@
  *
  *  @displayName S3 Output Module
  *  @tags S3, Output
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 public class S3OutputModule implements Module
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 0c47e26..1e7b68c 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
@@ -55,6 +55,8 @@
  * frozen by the committed callback.
  *
  * S3TupleOutputModule uses this operator in conjunction with S3CompactionOperator
+ *
+ * @since 3.7.0
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
 public class S3Reconciler extends AbstractReconciler<FSRecordCompactionOperator.OutputMetaData, FSRecordCompactionOperator.OutputMetaData>
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 edd0054..7d3093e 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
@@ -34,6 +34,8 @@
  * This partitioner looks at Reconciler queue size to decide no. of partitions.
  * This partitioner is used for S3Reconciler Operator.
  * @param <T>
+ *
+ * @since 3.7.0
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
 public class S3ReconcilerQueuePartitioner<T extends Operator> extends StatsAwareStatelessPartitioner<T>
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 9de2896..71ca929 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
@@ -46,6 +46,8 @@
  *
  * Typically, this operator will be connected to output of FileSplitterInput to
  * read records in parallel.
+ *
+ * @since 3.7.0
  */
 @Evolving
 public class S3RecordReader extends FSRecordReader
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 884073c..b40337e 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
@@ -61,6 +61,8 @@
  * partitioning<br/>
  * different file. <br/>
  * 12. s3EndPoint: Optional parameter used to specify S3 endpoint to use
+ *
+ * @since 3.7.0
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
 public class S3RecordReaderModule extends FSRecordReaderModule
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 7e907b1..4c93631 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
@@ -47,6 +47,8 @@
  *
  * @displayName S3 Tuple Output Module
  * @tags S3, Output
+ *
+ * @since 3.7.0
  */
 @org.apache.hadoop.classification.InterfaceStability.Evolving
 public abstract class S3TupleOutputModule<INPUT> implements Module
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/MovingBoundaryTimeBucketAssigner.java b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/MovingBoundaryTimeBucketAssigner.java
index f3b40e1..cb1f8a2 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/MovingBoundaryTimeBucketAssigner.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/MovingBoundaryTimeBucketAssigner.java
@@ -48,6 +48,8 @@
  * argument to this method can be ahead of <code>end</code>. This means that the corresponding event is a future event
  * (wrt TimeBucketAssigner) and cannot be ignored. Therefore it is accounted by sliding boundaries further.
  *
+ *
+ * @since 3.7.0
  */
 public class MovingBoundaryTimeBucketAssigner extends TimeBucketAssigner
 {
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/TimeBucketAssigner.java b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/TimeBucketAssigner.java
index 2cae914..8510452 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/TimeBucketAssigner.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/TimeBucketAssigner.java
@@ -32,6 +32,8 @@
 
 /**
  * Abstract class to extract a bucket for a given time
+ *
+ * @since 3.7.0
  */
 public abstract class TimeBucketAssigner implements ManagedStateComponent, WindowListener
 {
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/UnboundedTimeBucketAssigner.java b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/UnboundedTimeBucketAssigner.java
index 2027249..77f870c 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/state/managed/UnboundedTimeBucketAssigner.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/state/managed/UnboundedTimeBucketAssigner.java
@@ -29,6 +29,8 @@
  * All times 1001, 1002 ... 1999 will be assigned to time bucket 1000 <br>
  *
  *
+ *
+ * @since 3.7.0
  */
 public class UnboundedTimeBucketAssigner extends TimeBucketAssigner
 {
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/utils/serde/ImmutablePairSerde.java b/library/src/main/java/org/apache/apex/malhar/lib/utils/serde/ImmutablePairSerde.java
index 98ced16..6bce6ca 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/utils/serde/ImmutablePairSerde.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/utils/serde/ImmutablePairSerde.java
@@ -27,6 +27,8 @@
 /**
  * An implementation of {@link Serde} which serializes and deserializes {@link ImmtablePair}s.
  *
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 public class ImmutablePairSerde<L, R> implements Serde<ImmutablePair<L, R>>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/utils/serde/TimeWindowSerde.java b/library/src/main/java/org/apache/apex/malhar/lib/utils/serde/TimeWindowSerde.java
index 268a7ce..5546342 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/utils/serde/TimeWindowSerde.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/utils/serde/TimeWindowSerde.java
@@ -24,6 +24,9 @@
 import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
 
+/**
+ * @since 3.7.0
+ */
 public class TimeWindowSerde implements Serde<Window.TimeWindow>
 {
   @Override
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/ImplicitWatermarkGenerator.java b/library/src/main/java/org/apache/apex/malhar/lib/window/ImplicitWatermarkGenerator.java
index c7e91a1..c154744 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/ImplicitWatermarkGenerator.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/ImplicitWatermarkGenerator.java
@@ -26,6 +26,8 @@
  * Interface for generators for implicit watermarks.
  * An operator which does not want to rely on explicit watermarks (generated from upstream),
  * can use implementations of this interface to get implicit watermarks.
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 public interface ImplicitWatermarkGenerator extends Component
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 8fe7df3..fa63ffd 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
@@ -41,6 +41,8 @@
 /**
  * Join Accumulation for Pojo Streams.
  *
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 public abstract class AbstractPojoJoin<InputT1, InputT2>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/CompositeAccumulation.java b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/CompositeAccumulation.java
index 2184388..6928435 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/CompositeAccumulation.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/accumulation/CompositeAccumulation.java
@@ -28,6 +28,8 @@
 /**
  * The CompositeAccumulation is an Accumulation which delegate task to sub accumulations.
  *
+ *
+ * @since 3.7.0
  */
 @SuppressWarnings("rawtypes")
 @Evolving
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 c74ded3..24b8731 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
@@ -33,6 +33,8 @@
 /**
  * Full outer join Accumulation for Pojo Streams.
  *
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 public class PojoFullOuterJoin<InputT1, InputT2>
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 5405ca5..8d2f1f0 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
@@ -33,6 +33,8 @@
 /**
  * Left Outer join Accumulation for Pojo Streams.
  *
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 public class PojoLeftOuterJoin<InputT1, InputT2>
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 9d22229..3fdcd26 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
@@ -33,6 +33,8 @@
 /**
  * Right outer join Accumulation for Pojo Streams.
  *
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 public class PojoRightOuterJoin<InputT1, InputT2>
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/impl/FixedDiffEventTimeWatermarkGen.java b/library/src/main/java/org/apache/apex/malhar/lib/window/impl/FixedDiffEventTimeWatermarkGen.java
index 1e61a29..a244cb4 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/impl/FixedDiffEventTimeWatermarkGen.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/impl/FixedDiffEventTimeWatermarkGen.java
@@ -32,6 +32,8 @@
  * based on event time.
  *
  * Generates a watermark tuple with a fixed difference from the latest event time.
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 public class FixedDiffEventTimeWatermarkGen implements ImplicitWatermarkGenerator
diff --git a/library/src/main/java/org/apache/apex/malhar/lib/window/impl/FixedDiffProcessingTimeWatermarkGen.java b/library/src/main/java/org/apache/apex/malhar/lib/window/impl/FixedDiffProcessingTimeWatermarkGen.java
index a4d9e1a..af7b6dd 100644
--- a/library/src/main/java/org/apache/apex/malhar/lib/window/impl/FixedDiffProcessingTimeWatermarkGen.java
+++ b/library/src/main/java/org/apache/apex/malhar/lib/window/impl/FixedDiffProcessingTimeWatermarkGen.java
@@ -30,6 +30,8 @@
  * based on processing time.
  *
  * Generates a watermark tuple with a fixed difference from the current processing time.
+ *
+ * @since 3.7.0
  */
 @InterfaceStability.Evolving
 public class FixedDiffProcessingTimeWatermarkGen implements ImplicitWatermarkGenerator