refined the API, add more docs
diff --git a/avro/src/main/java/org/apache/mina/avro/codec/AvroDecoder.java b/avro/src/main/java/org/apache/mina/avro/codec/AvroDecoder.java
index 25ce582..5fbe738 100644
--- a/avro/src/main/java/org/apache/mina/avro/codec/AvroDecoder.java
+++ b/avro/src/main/java/org/apache/mina/avro/codec/AvroDecoder.java
@@ -28,14 +28,26 @@
 import org.apache.mina.codec.delimited.ints.VarInt;
 
 /**
- *
+ * Avro Decoder
  */
 public class AvroDecoder<T extends GenericContainer> extends SizePrefixedDecoder<T> {
 
-    private Schema schema;
+    /**
+     * Construct an Avro Decoder
+     *
+     * @param sizeDecoder       Size decoder to decode size prefix
+     * @param payloadDecoder    Avro Message decoder to decode Avro message received
+     */
+    public AvroDecoder(IoBufferDecoder<Integer> sizeDecoder, IoBufferDecoder<T> payloadDecoder) {
+        super(sizeDecoder, payloadDecoder);
+    }
 
-    public AvroDecoder(IoBufferDecoder<Integer> sizeDecoder, IoBufferDecoder<T> payloadDecoder, Schema schema) {
+    /**
+     * Construct an Avro Decoder
+     *
+     * @param schema            Avro Schema to be used
+     */
+    public AvroDecoder(Schema schema) {
         super(new VarInt().getDecoder(), new AvroMessageDecoder<T>(schema));
-        this.schema = schema;
     }
 }
diff --git a/avro/src/main/java/org/apache/mina/avro/codec/AvroEncoder.java b/avro/src/main/java/org/apache/mina/avro/codec/AvroEncoder.java
index 22c9467..597d22e 100644
--- a/avro/src/main/java/org/apache/mina/avro/codec/AvroEncoder.java
+++ b/avro/src/main/java/org/apache/mina/avro/codec/AvroEncoder.java
@@ -27,10 +27,29 @@
 import org.apache.mina.codec.delimited.ints.VarInt;
 
 /**
+ * Avro Encoder
  *
+ * It used GenericContainer, parent class for Avro's GenericRecord and SpecificRecord
+ * User need to specify the type while creating the instance of the Encoder. The default
+ * Size encoder is {@code VarInt} encoder
  */
 public class AvroEncoder<T extends GenericContainer> extends SizePrefixedEncoder<T> {
+
+    /**
+     * Intializes the Avro Encoder
+     *
+     * @param sizeEncoder       Size Prefix encoder
+     * @param payloadEncoder    Avro Encoder to encode message into Avro format
+     */
     public AvroEncoder(ByteBufferEncoder<Integer> sizeEncoder, ByteBufferEncoder<T> payloadEncoder) {
+        super(sizeEncoder, payloadEncoder);
+    }
+
+    /**
+     * Intializes the Avro Encoder
+     * Default Encoder are VarInt encoder for Size and {@link AvroEncoder} for Avro encoding
+     */
+    public AvroEncoder() {
         super(new VarInt().getEncoder(), new AvroMessageEncoder<T>());
     }
 }
diff --git a/avro/src/main/java/org/apache/mina/avro/codec/serialization/AvroMessageDecoder.java b/avro/src/main/java/org/apache/mina/avro/codec/serialization/AvroMessageDecoder.java
index 013fea1..69944a8 100644
--- a/avro/src/main/java/org/apache/mina/avro/codec/serialization/AvroMessageDecoder.java
+++ b/avro/src/main/java/org/apache/mina/avro/codec/serialization/AvroMessageDecoder.java
@@ -45,15 +45,16 @@
     // Logger
     public static final Logger LOG = LoggerFactory.getLogger(AvroMessageDecoder.class);
 
+    // Avro Schema used for decoding
     private Schema schema;
 
     /**
      * Default Constructor
-     * @param schema
+     * @param schema    Avro Schema to be used for decoding the messages
      */
     public AvroMessageDecoder(Schema schema) {
         if(schema == null) {
-            LOG.error("Avro Schema passed cannot be null");
+            LOG.error("Avro Schema cannot be null");
             throw new IllegalArgumentException("Avro Schema cannot be null");
         }
         this.schema = schema;