diff --git a/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/TableGenerator.java b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/TableGenerator.java
new file mode 100644
index 0000000..644d16b
--- /dev/null
+++ b/ovsdb/rfc/src/main/java/org/onosproject/ovsdb/rfc/table/TableGenerator.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.ovsdb.rfc.table;
+
+import org.onosproject.ovsdb.rfc.notation.Row;
+import org.onosproject.ovsdb.rfc.schema.DatabaseSchema;
+
+/**
+ * Table generator.
+ */
+public final class TableGenerator {
+
+    /**
+     * Constructs a TableGenerator object. Utility classes should not have a
+     * public or default constructor, otherwise it will compile failed. This
+     * class should not be instantiated.
+     */
+    private TableGenerator() {
+    }
+
+    /**
+     * Create table.
+     * @param dbSchema DatabaseSchema entity
+     * @param tableName table name
+     * @return Object table entity
+     */
+    public static Object createTable(DatabaseSchema dbSchema,
+                                     OvsdbTable tableName) {
+        Row row = new Row();
+        return generateTable(dbSchema, row, tableName);
+    }
+
+    /**
+     * Get table from Row.
+     * @param dbSchema DatabaseSchema entity
+     * @param row Row entity
+     * @param tableName table name
+     * @return Object table entity
+     */
+    public static Object getTable(DatabaseSchema dbSchema, Row row,
+                                  OvsdbTable tableName) {
+        return generateTable(dbSchema, row, tableName);
+    }
+
+    /**
+     * Generate the table by table name.
+     * @param dbSchema DatabaseSchema entity
+     * @param row Row entity
+     * @param tableName table name
+     * @return Object Table entity
+     */
+    private static Object generateTable(DatabaseSchema dbSchema, Row row,
+                                        OvsdbTable tableName) {
+        switch (tableName) {
+        case INTERFACE:
+            return new Interface(dbSchema, row);
+        case BRIDGE:
+            return new Bridge(dbSchema, row);
+        case CONTROLLER:
+            return new Controller(dbSchema, row);
+        case OPENVSWITCH:
+            return new OpenVSwitch(dbSchema, row);
+        case PORT:
+            return new Port(dbSchema, row);
+        default:
+            return null;
+        }
+    }
+}
