diff --git a/hpvm/projects/onnx/frontend/config.py b/hpvm/projects/onnx/frontend/config.py
new file mode 100644
index 0000000000000000000000000000000000000000..b86adfa1ce7e7f5cbf6bebb62efdd3826d05fcf7
--- /dev/null
+++ b/hpvm/projects/onnx/frontend/config.py
@@ -0,0 +1,3 @@
+onnx_file_dir = "../models/keras/alexnet.onnx"
+src_emit_dir = "./test_src"
+opset_version_default = 11
\ No newline at end of file
diff --git a/hpvm/projects/onnx/frontend/graph_builder.py b/hpvm/projects/onnx/frontend/graph_builder.py
index 0659fe3fcd5fbae5a3cee124235916fa9692ca0e..063c8d83e3c3b87f42fc7874a5afb2d4532b1133 100644
--- a/hpvm/projects/onnx/frontend/graph_builder.py
+++ b/hpvm/projects/onnx/frontend/graph_builder.py
@@ -2,20 +2,7 @@ import sys
 from onnx import numpy_helper
 from tensor import InputTensor, WeightTensor
 from graph_ir import *
-
-support_onnx_ops = {#"DepthwiseConv" : [2],
-               "Conv" : [2], # only 2d supported here
-               "MatMul" : None,
-               "MaxPool": [2], # only 2d supported here
-               "BatchNormalization" : None,
-               "Flatten" : None,
-               "Add" : None,
-               "Relu" : None,
-               "Softmax" : None,
-               "Identity": None,
-               "Pad": None,
-               "AveragePool": None,
-               "Tanh": None}
+from utils import support_onnx_ops
 
 class GraphBuilder(object):
     def __init__(self, model, shape, dtype, weight_dir):
@@ -151,14 +138,11 @@ class GraphBuilder(object):
         # Dump weights
         for tensor in self.tensors.values():
             if isinstance(tensor, WeightTensor):
-                print("Dump weight: {0}".format(weight_tensor.name))
-                #tensor.dump_weight(self.weight_dir + "/" + tensor.get_mapped_name() + "_path.bin")
+                print("Dump weight: {0}".format(tensor.name))
+                tensor.dump_weight(self.weight_dir + "/" + tensor.get_mapped_name() + "_path.bin")
         return DFG(self.graph, self.tensors)
 
 class DFG(object):
-
-    root_set = False
-
     def __init__(self, graph, tensors):
         self.graph = graph
         self.tensors = tensors
diff --git a/hpvm/projects/onnx/frontend/graph_codegen.py b/hpvm/projects/onnx/frontend/graph_codegen.py
index f985ae810f9efa4744fa68760a4f0b490c7f55f0..b32132959ce956673e2161c676005fa7fc1ae2b9 100644
--- a/hpvm/projects/onnx/frontend/graph_codegen.py
+++ b/hpvm/projects/onnx/frontend/graph_codegen.py
@@ -2,18 +2,15 @@ import sys
 import numpy as np
 import os
 
-from graph_builder import *
-#from graph_ir import *
-from tensor import *
-
-skip_layer = ["Identity", "Flatten", "Pad"]
+from tensor import WeightTensor
+from utils import skip_layer
 
 class GraphCodeGen(object):
-    def __init__(self, DFG, weights_dir, test_data=None, test_labels=None):
+    def __init__(self, dfg, weights_dir, test_data=None, test_labels=None):
         self.program_str = ""
-        self.graph = DFG.graph
-        self.tensors = DFG.tensors
-        self.nodes = DFG.nodes
+        self.graph = dfg.graph
+        self.tensors = dfg.tensors
+        self.nodes = dfg.nodes
         self.var_cnt = 0
         self.weights_dir = weights_dir
         self.test_data = test_data
diff --git a/hpvm/projects/onnx/frontend/graph_ir.py b/hpvm/projects/onnx/frontend/graph_ir.py
index 64796514bc644da0ecb708aa70256bd67e2dceba..745e5d0429fc7d8c6c11c8efb426160f5a6ccabd 100644
--- a/hpvm/projects/onnx/frontend/graph_ir.py
+++ b/hpvm/projects/onnx/frontend/graph_ir.py
@@ -42,8 +42,6 @@ class LogicalOpNode(DFGNode):
 
 
 class AddNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
 
     def codegen(self, tensors):
         cur_node = self.onnx_node
@@ -56,8 +54,6 @@ class AddNode(DFGNode):
 
 
 class MatMulNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
 
     def codegen(self, tensors):
         cur_node = self.onnx_node
@@ -71,8 +67,6 @@ class MatMulNode(DFGNode):
 
 
 class SoftMaxNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
 
     def codegen(self, tensors):
         cur_node = self.onnx_node
@@ -84,8 +78,6 @@ class SoftMaxNode(DFGNode):
 
 
 class Conv2DNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
 
     def codegen(self, tensors):
         cur_node = self.onnx_node
@@ -122,8 +114,6 @@ class Conv2DNode(DFGNode):
 
 
 class MaxPool2DNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
 
     def codegen(self, tensors):
         cur_node = self.onnx_node
@@ -152,8 +142,6 @@ class MaxPool2DNode(DFGNode):
 
 
 class AveragePool2DNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
 
     def codegen(self, tensors):
         cur_node = self.onnx_node
@@ -182,8 +170,6 @@ class AveragePool2DNode(DFGNode):
 
 
 class ReluNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
 
     def codegen(self, tensors):
         cur_node = self.onnx_node
@@ -194,8 +180,6 @@ class ReluNode(DFGNode):
         return self.inst_str
 
 class TanhNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
 
     def codegen(self, tensors):
         cur_node = self.onnx_node
@@ -207,8 +191,6 @@ class TanhNode(DFGNode):
 
 
 class BatchNormalizationNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
 
     def codegen(self, tensors):
         cur_node = self.onnx_node
@@ -230,25 +212,19 @@ class BatchNormalizationNode(DFGNode):
 
 
 class PadNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
+    pass
 
 class IdentityNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
+    pass
 
 class FlattenNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
+    pass
 
 class ZeroPadding2DNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
+    pass
 
 class DepthwiseConv2DNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
+    pass
 
 class DenseNode(DFGNode):
-    def __init__(self, layer):
-        DFGNode.__init__(self, layer)
+    pass
diff --git a/hpvm/projects/onnx/frontend/main.py b/hpvm/projects/onnx/frontend/main.py
index b9fefdecd7b04bbc94bf1d898e3d05a8c0bc04f8..16bf8868b09a6a5316480a1d3e5f49fd63898a76 100644
--- a/hpvm/projects/onnx/frontend/main.py
+++ b/hpvm/projects/onnx/frontend/main.py
@@ -3,24 +3,15 @@ import sys
 import numpy as np
 import onnx
 import glob
-#from onnxruntime.backend.backend import OnnxRuntimeBackend as backend
-
-onnx_file_dir = "../models/keras/alexnet.onnx"
-src_emit_dir = "./test_src"
-opset_version_default = 10
 
 def check_version(model, new_version):
     try:
-        opset = model.opset_import[0].version if model.opset_import else 1
+        opset = model.opset_import[0].version + 1 if model.opset_import else 1
     except AttributeError:
         opset = 1  # default opset version set to 1 if not specified
     print("opset version: ", opset)
     if opset != new_version:
         #print('The model before conversion:\n{}'.format(model))
-
-        # A full list of supported adapters can be found here:
-        # https://github.com/onnx/onnx/blob/master/onnx/version_converter.py#L21
-        # Apply the version conversion on the original model
         from onnx import version_converter
         try:
             converted_model = version_converter.convert_version(model, new_version)
@@ -33,19 +24,21 @@ def check_version(model, new_version):
     return model
 
 def compile(model):
+    from config import opset_version_default, src_emit_dir
     weights_dir = src_emit_dir
     model = check_version(model, opset_version_default)
     from graph_builder import GraphBuilder
     from graph_codegen import GraphCodeGen
     from hpvm_codegen import HpvmCodeGen
     graphBuilder = GraphBuilder(model, None, "float32", weights_dir)
-    #graphCodeGen = GraphCodeGen(gBuilder.build_graph(), weights_dir)
-    #graphCodeGen.compile()
-    hpvmCodeGen = HpvmCodeGen(graphBuilder.build_graph(), weights_dir)
-    hpvmCodeGen.compile()
+    graphCodeGen = GraphCodeGen(graphBuilder.build_graph(), weights_dir)
+    graphCodeGen.compile()
+    #hpvmCodeGen = HpvmCodeGen(graphBuilder.build_graph(), weights_dir)
+    #hpvmCodeGen.compile()
 
 def main():
     # TODO: Put it in args
+    from config import onnx_file_dir
     model = onnx.load(onnx_file_dir)
     compile(model)
 
diff --git a/hpvm/projects/onnx/frontend/utils.py b/hpvm/projects/onnx/frontend/utils.py
index c05abe77a1bbcc63a1444a173be830a69964ba71..ef8aab545c62dc935e32eba3faac33074c636307 100644
--- a/hpvm/projects/onnx/frontend/utils.py
+++ b/hpvm/projects/onnx/frontend/utils.py
@@ -2,6 +2,21 @@ import numpy as np
 import struct
 import random
 
+support_onnx_ops = {#"DepthwiseConv" : [2],
+               "Conv" : [2], # only 2d supported here
+               "MatMul" : None,
+               "MaxPool": [2], # only 2d supported here
+               "BatchNormalization" : None,
+               "Flatten" : None,
+               "Add" : None,
+               "Relu" : None,
+               "Softmax" : None,
+               "Identity": None,
+               "Pad": None,
+               "AveragePool": None,
+               "Tanh": None}
+
+skip_layer = ["Identity", "Flatten", "Pad"]
 
 def dumpLabels(file_name, Y_test):