diff --git a/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPFactories.java b/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPFactories.java
new file mode 100755
index 0000000..71b9cbf
--- /dev/null
+++ b/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPFactories.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.bgpio.protocol;
+
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.onosproject.bgpio.exceptions.BGPParseException;
+import org.onosproject.bgpio.protocol.ver4.BGPFactoryVer4;
+import org.onosproject.bgpio.types.BGPHeader;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Abstraction to provide the version for BGP.
+ */
+public final class BGPFactories {
+
+    protected static final Logger log = LoggerFactory.getLogger(BGPFactories.class);
+
+    private static final GenericReader GENERIC_READER = new GenericReader();
+
+    private BGPFactories() {
+    }
+
+    /**
+     * Returns the instance of BGP Version.
+     *
+     * @param version BGP version
+     * @return BGP version
+     */
+    public static BGPFactory getFactory(BGPVersion version) {
+        switch (version) {
+        case BGP_4:
+            return BGPFactoryVer4.INSTANCE;
+        default:
+            throw new IllegalArgumentException("[BGPFactory:]Unknown version: " + version);
+        }
+    }
+
+    /**
+     * Reader class for reading BGP messages from channel buffer.
+     *
+     */
+    private static class GenericReader implements BGPMessageReader<BGPMessage> {
+
+        @Override
+        public BGPMessage readFrom(ChannelBuffer bb, BGPHeader bgpHeader)
+                throws BGPParseException {
+            BGPFactory factory;
+
+            if (!bb.readable()) {
+                log.error("Empty message received");
+                throw new BGPParseException("Empty message received");
+            }
+            // TODO: Currently only BGP version 4 is supported
+            factory = org.onosproject.bgpio.protocol.ver4.BGPFactoryVer4.INSTANCE;
+            return factory.getReader().readFrom(bb, bgpHeader);
+        }
+    }
+
+    /**
+     * Returns BGP messsage generic reader.
+     *
+     * @return bgp message generic reader
+     */
+    public static BGPMessageReader<BGPMessage> getGenericReader() {
+        return GENERIC_READER;
+    }
+}
