diff --git a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/impl/YangCompilerManager.java b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/impl/YangCompilerManager.java
index 357abfe..a0f7b98 100644
--- a/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/impl/YangCompilerManager.java
+++ b/compiler/base/tool/src/main/java/org/onosproject/yang/compiler/tool/impl/YangCompilerManager.java
@@ -16,12 +16,6 @@
 
 package org.onosproject.yang.compiler.tool.impl;
 
-import org.onosproject.yang.model.DefaultYangModel;
-import org.onosproject.yang.model.DefaultYangModule;
-import org.onosproject.yang.model.DefaultYangModuleId;
-import org.onosproject.yang.model.YangModel;
-import org.onosproject.yang.model.YangModule;
-import org.onosproject.yang.model.YangModuleId;
 import org.onosproject.yang.compiler.api.YangCompilationParam;
 import org.onosproject.yang.compiler.api.YangCompiledOutput;
 import org.onosproject.yang.compiler.api.YangCompilerException;
@@ -38,6 +32,12 @@
 import org.onosproject.yang.compiler.parser.impl.YangUtilsParserManager;
 import org.onosproject.yang.compiler.tool.YangFileInfo;
 import org.onosproject.yang.compiler.utils.io.YangPluginConfig;
+import org.onosproject.yang.model.DefaultYangModel;
+import org.onosproject.yang.model.DefaultYangModule;
+import org.onosproject.yang.model.DefaultYangModuleId;
+import org.onosproject.yang.model.YangModel;
+import org.onosproject.yang.model.YangModule;
+import org.onosproject.yang.model.YangModuleId;
 import org.slf4j.Logger;
 
 import java.io.File;
@@ -112,15 +112,15 @@
      * @return YANG model
      */
     private YangModel processYangModel(String path) {
-        DefaultYangModel model = new DefaultYangModel();
+        YangModel.Builder b = DefaultYangModel.builder();
         YangModuleId id;
         for (YangNode node : yangNodeSet) {
             id = processModuleId(node);
             YangModule module =
                     new DefaultYangModule(id, get(node.getFileName()), get(path));
-            model.addModule(id, module);
+            b.addModule(id, module);
         }
-        return model;
+        return b.build();
     }
 
     /**
@@ -160,22 +160,6 @@
     }
 
     /**
-     * Provides a list of files from list of strings.
-     *
-     * @param yangFileInfo set of yang file information
-     * @return list of files
-     */
-    private static List<File> getListOfFile(Set<YangFileInfo> yangFileInfo) {
-        List<File> files = new ArrayList<>();
-        for (YangFileInfo yangFile : yangFileInfo) {
-            if (yangFile.isForTranslator()) {
-                files.add(new File(yangFile.getYangFileName()));
-            }
-        }
-        return files;
-    }
-
-    /**
      * Creates a YANG file info set.
      *
      * @param yangFileList YANG files list
@@ -481,4 +465,20 @@
     public void setYangFileInfoSet(Set<YangFileInfo> yangFileInfoSet) {
         this.yangFileInfoSet = yangFileInfoSet;
     }
+
+    /**
+     * Provides a list of files from list of strings.
+     *
+     * @param yangFileInfo set of yang file information
+     * @return list of files
+     */
+    private static List<File> getListOfFile(Set<YangFileInfo> yangFileInfo) {
+        List<File> files = new ArrayList<>();
+        for (YangFileInfo yangFile : yangFileInfo) {
+            if (yangFile.isForTranslator()) {
+                files.add(new File(yangFile.getYangFileName()));
+            }
+        }
+        return files;
+    }
 }
diff --git a/model/src/main/java/org/onosproject/yang/model/DefaultYangModel.java b/model/src/main/java/org/onosproject/yang/model/DefaultYangModel.java
index b1bb8f6..974a71d 100644
--- a/model/src/main/java/org/onosproject/yang/model/DefaultYangModel.java
+++ b/model/src/main/java/org/onosproject/yang/model/DefaultYangModel.java
@@ -33,7 +33,17 @@
 
     /**
      * Creates an instance of YANG model.
+     *
+     * @param b YANG model builder
      */
+    private DefaultYangModel(Builder b) {
+        moduleMap = b.moduleMap;
+    }
+
+    /**
+     * Creates an instance of YANG model.
+     */
+    @Deprecated
     public DefaultYangModel() {
         moduleMap = new LinkedHashMap<>();
     }
@@ -62,6 +72,7 @@
     }
 
     @Override
+    @Deprecated
     public void addModule(YangModuleId id, YangModule module) {
         moduleMap.put(id, module);
     }
@@ -97,4 +108,38 @@
                 .add("model", moduleMap)
                 .toString();
     }
+
+    /**
+     * Retrieves a new YANG model builder.
+     *
+     * @return YANG model builder
+     */
+    public static Builder builder() {
+        return new Builder();
+    }
+
+    /**
+     * Represents implementation of YANG model builder.
+     */
+    public static class Builder implements YangModel.Builder {
+        private final Map<YangModuleId, YangModule> moduleMap;
+
+        /**
+         * Creates an instance of YANG model builder.
+         */
+        public Builder() {
+            moduleMap = new LinkedHashMap<>();
+        }
+
+        @Override
+        public Builder addModule(YangModuleId id, YangModule module) {
+            moduleMap.put(id, module);
+            return this;
+        }
+
+        @Override
+        public YangModel build() {
+            return new DefaultYangModel(this);
+        }
+    }
 }
diff --git a/model/src/main/java/org/onosproject/yang/model/YangModel.java b/model/src/main/java/org/onosproject/yang/model/YangModel.java
index 74dd0cb..e4cca01 100644
--- a/model/src/main/java/org/onosproject/yang/model/YangModel.java
+++ b/model/src/main/java/org/onosproject/yang/model/YangModel.java
@@ -52,5 +52,28 @@
      * @param id     module identifier
      * @param module YANG module information
      */
+    @Deprecated
     void addModule(YangModuleId id, YangModule module);
+
+    /**
+     * Abstraction of an entity that represents builder of YANG model.
+     */
+    interface Builder {
+
+        /**
+         * Adds YANG module information for a given module identifier.
+         *
+         * @param id     module identifier
+         * @param module YANG module information
+         * @return builder
+         */
+        Builder addModule(YangModuleId id, YangModule module);
+
+        /**
+         * Builds an instance of YANG model.
+         *
+         * @return YANG model
+         */
+        YangModel build();
+    }
 }
diff --git a/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/YangApacheUtils.java b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/YangApacheUtils.java
index 521d266..3514ab9 100644
--- a/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/YangApacheUtils.java
+++ b/runtime/src/main/java/org/onosproject/yang/runtime/helperutils/YangApacheUtils.java
@@ -95,7 +95,7 @@
      */
     public static YangModel processYangModel(String path,
                                              List<YangNode> curNodes) {
-        DefaultYangModel model = new DefaultYangModel();
+        YangModel.Builder b = DefaultYangModel.builder();
         YangModuleId id;
         Iterator<YangNode> it = curNodes.iterator();
         while (it.hasNext()) {
@@ -103,9 +103,9 @@
             id = processModuleId((YangNode) node);
             YangModule module =
                     new DefaultYangModule(id, get(node.getFileName()), get(path));
-            model.addModule(id, module);
+            b.addModule(id, module);
         }
-        return model;
+        return b.build();
     }
 
     /**
