diff --git a/app/app.xml b/app/app.xml
index e32e962..d9b062f 100644
--- a/app/app.xml
+++ b/app/app.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  ~ Copyright 2016-present Open Networking Laboratory
+  ~ Copyright 2016-present Open Networking Foundation
   ~
   ~ Licensed under the Apache License, Version 2.0 (the "License");
   ~ you may not use this file except in compliance with the License.
diff --git a/app/features.xml b/app/features.xml
index f1b7401..bb4e0ab 100644
--- a/app/features.xml
+++ b/app/features.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <!--
-  ~ Copyright 2016-present Open Networking Laboratory
+  ~ Copyright 2016-present Open Networking Foundation
   ~
   ~ Licensed under the Apache License, Version 2.0 (the "License");
   ~ you may not use this file except in compliance with the License.
diff --git a/app/pom.xml b/app/pom.xml
index 5da940a..00ef17b 100644
--- a/app/pom.xml
+++ b/app/pom.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  ~ Copyright 2016-present Open Networking Laboratory
+  ~ Copyright 2016-present Open Networking Foundation
   ~
   ~ Licensed under the Apache License, Version 2.0 (the "License");
   ~ you may not use this file except in compliance with the License.
diff --git a/nemoengine/pom.xml b/nemoengine/pom.xml
index e7bd1c0..16d616b 100644
--- a/nemoengine/pom.xml
+++ b/nemoengine/pom.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  ~ Copyright 2016-present Open Networking Laboratory
+  ~ Copyright 2016-present Open Networking Foundation
   ~
   ~ Licensed under the Apache License, Version 2.0 (the "License");
   ~ you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ActionName.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ActionName.java
index f188c3f..2884d5f 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ActionName.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ActionName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConditionParameterName.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConditionParameterName.java
index ebcb370..2e2805b 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConditionParameterName.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConditionParameterName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConditionSegmentId.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConditionSegmentId.java
index 114f7d4..d0f6dc3 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConditionSegmentId.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConditionSegmentId.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConnectionId.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConnectionId.java
index 9eb3c60..8be817f 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConnectionId.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConnectionId.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConnectionName.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConnectionName.java
index 6f5aaba..fab0316 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConnectionName.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConnectionName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConnectionType.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConnectionType.java
index b9e5c36..e21557f 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConnectionType.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConnectionType.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConstraintParameterName.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConstraintParameterName.java
index 7ee271f..c4d7396 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConstraintParameterName.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConstraintParameterName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConstraintSegmentId.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConstraintSegmentId.java
index d200d45..7076018 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConstraintSegmentId.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ConstraintSegmentId.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/Description.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/Description.java
index af8e4e6..3e27a9a 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/Description.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/Description.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/FlowId.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/FlowId.java
index e00ee2e..8cb7f08 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/FlowId.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/FlowId.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/FlowName.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/FlowName.java
index cf4f4ba..522989f 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/FlowName.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/FlowName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/FlowType.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/FlowType.java
index b891f93..df658fb 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/FlowType.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/FlowType.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/IntentId.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/IntentId.java
index 27de433..9959dcb 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/IntentId.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/IntentId.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/MatchItemName.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/MatchItemName.java
index 4848908..a8aa65f 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/MatchItemName.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/MatchItemName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/Name.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/Name.java
index 4727a82..867c8fc 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/Name.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/Name.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/NodeId.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/NodeId.java
index b3cc279..6a4b06f 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/NodeId.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/NodeId.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/NodeName.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/NodeName.java
index a6963e7..183efd0 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/NodeName.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/NodeName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/NodeType.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/NodeType.java
index 2eaef57..2768a8a 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/NodeType.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/NodeType.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ObjectId.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ObjectId.java
index 664fdd9..0164531 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ObjectId.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ObjectId.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ObjectName.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ObjectName.java
index f252c27..c00dfc2 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ObjectName.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ObjectName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/OperationId.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/OperationId.java
index 9005b25..1a02b4a 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/OperationId.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/OperationId.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/OperationName.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/OperationName.java
index 9587c48..e39f96c 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/OperationName.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/OperationName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ParameterName.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ParameterName.java
index 0ec1212..31cdb5e 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/ParameterName.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/ParameterName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/PropertyName.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/PropertyName.java
index dbb3b13..5bbc1bf 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/PropertyName.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/PropertyName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/UniqueId.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/UniqueId.java
index 47c3226..d7e63f1 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/UniqueId.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/UniqueId.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserId.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserId.java
index bb0594b..443d764 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserId.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserId.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserName.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserName.java
index 8066ee8..9898b7f 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserName.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserPassword.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserPassword.java
index 0022cf3..c5edd0f 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserPassword.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserPassword.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserRoleDescription.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserRoleDescription.java
index b44c689..429d377 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserRoleDescription.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserRoleDescription.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserRoleName.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserRoleName.java
index 39348d7..f646b36 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserRoleName.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/UserRoleName.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/Uuid.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/Uuid.java
index 69df13f..1c07511 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/Uuid.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/Uuid.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/common/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/common/package-info.java
index bade066..f8f506d 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/common/package-info.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/common/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionInput.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionInput.java
index fe4d1a4..941b168 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionInput.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionInput.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionInputBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionInputBuilder.java
index 3686429..fccfecb 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionInputBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionInputBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionOutput.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionOutput.java
index 47cbc8b..d5945b8 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionOutput.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionOutput.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionOutputBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionOutputBuilder.java
index fe2948f..b1cd1a5 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionOutputBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/BeginTransactionOutputBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/CommonRpcResult.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/CommonRpcResult.java
index fe4d95f..2e18798 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/CommonRpcResult.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/CommonRpcResult.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/DefaultOutput.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/DefaultOutput.java
index 64ee555..57a57c8 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/DefaultOutput.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/DefaultOutput.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/DefaultOutputBuilderBase.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/DefaultOutputBuilderBase.java
index fe19437..fc85108 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/DefaultOutputBuilderBase.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/DefaultOutputBuilderBase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/DefaultOutputImplBase.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/DefaultOutputImplBase.java
index 1a816ba..388efde 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/DefaultOutputImplBase.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/DefaultOutputImplBase.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionInput.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionInput.java
index 4d138dd..b8436a3 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionInput.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionInput.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionInputBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionInputBuilder.java
index c88ed0e..9c9456d 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionInputBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionInputBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionOutput.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionOutput.java
index fe7ac22..62bf18e 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionOutput.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionOutput.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionOutputBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionOutputBuilder.java
index 5692c73..58a7a5a 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionOutputBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/EndTransactionOutputBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestInput.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestInput.java
index d0be471..7cc2315 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestInput.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestInput.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestInputBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestInputBuilder.java
index 705d750..491d49c 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestInputBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestInputBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestOutput.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestOutput.java
index e571974..3ae18c4 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestOutput.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestOutput.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestOutputBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestOutputBuilder.java
index bf96be6..a7d3f26 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestOutputBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestOutputBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/RegisterUserInput.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/RegisterUserInput.java
index 76631d8..2bda0de 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/RegisterUserInput.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/RegisterUserInput.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/RegisterUserOutput.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/RegisterUserOutput.java
index 6652dbd..7971b9d 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/RegisterUserOutput.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/RegisterUserOutput.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/RegisterUserOutputBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/RegisterUserOutputBuilder.java
index 58ca040..b0cb4d7 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/RegisterUserOutputBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/RegisterUserOutputBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoDeleteOutput.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoDeleteOutput.java
index a406d3d..5cef07f 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoDeleteOutput.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoDeleteOutput.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoDeleteOutputBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoDeleteOutputBuilder.java
index 0feb8ec..d2b94ee 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoDeleteOutputBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoDeleteOutputBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoUpdateOutput.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoUpdateOutput.java
index a47cfb8..9c1abcf 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoUpdateOutput.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoUpdateOutput.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoUpdateOutputBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoUpdateOutputBuilder.java
index 49c3449..623eac2 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoUpdateOutputBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/StructureStyleNemoUpdateOutputBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/package-info.java
index 763e922..bb88439 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/package-info.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/Objects.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/Objects.java
index a418882..9d49f08 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/Objects.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/Objects.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/ObjectsBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/ObjectsBuilder.java
index 493552f..91e2eb9 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/ObjectsBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/ObjectsBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/Operations.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/Operations.java
index 6d90a98..26556db 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/Operations.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/Operations.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/OperationsBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/OperationsBuilder.java
index 09a6e68..49663b5 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/OperationsBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/OperationsBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/package-info.java
index a2e0ee9..851139a 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/package-info.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/PropertyDefinitions.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/PropertyDefinitions.java
new file mode 100755
index 0000000..6830742
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/PropertyDefinitions.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object;
+
+import org.onosproject.nemo.model.object.property.definitions.PropertyDefinition;
+
+import java.util.List;
+
+/**
+ * Single property definitions information.
+ */
+public interface PropertyDefinitions {
+
+    /**
+     * Returns a description of the characteristic, responsibility
+     * and purpose for a kind of property definitions.
+     *
+     * @return a description of the property
+     */
+    List<PropertyDefinition> getPropertyDefinitions();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/PropertyInstance.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/PropertyInstance.java
new file mode 100755
index 0000000..48bd522
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/PropertyInstance.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object;
+
+import org.onosproject.nemo.model.common.PropertyName;
+import org.onosproject.nemo.model.object.property.instance.PropertyValues;
+
+/**
+ * Single property instance's information.
+ */
+public interface PropertyInstance {
+
+    /**
+     * Returns a user-visible and unique name for a kind of property.
+     *
+     * @return a user-visible and unique name
+     */
+    PropertyName getPropertyName();
+
+    /**
+     * Returns the value of YANG list type.
+     *
+     * @return the value
+     */
+    PropertyValues getPropertyValues();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/definitions/MatchItemDefinition.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/definitions/MatchItemDefinition.java
new file mode 100644
index 0000000..8aeffcb
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/definitions/MatchItemDefinition.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.match.item.definitions;
+
+import org.onosproject.nemo.model.common.MatchItemName;
+
+import static com.google.common.collect.ImmutableMap.builder;
+
+import java.util.Map;
+
+import com.google.common.collect.ImmutableMap.Builder;
+
+public interface MatchItemDefinition {
+
+
+    /**
+     * Returns the name of an match item.
+     * 
+     * @return the match item name
+     */
+    MatchItemName getMatchItemName();
+
+    /**
+     * Returns the type of a parameter value.
+     * 
+     * @return the type
+     */
+    MatchItemValueType getMatchItemValueType();
+
+    /**
+     * Returns the primary key of YANG type list.
+     * 
+     * @return the match item definition key
+     */
+    MatchItemDefinitionKey getKey();
+
+    /**
+     * Types of match item value.
+     */
+    enum MatchItemValueType {
+        /** A string-valued match item. */
+        STRING(0),
+
+        /** An integer-valued match item. */
+        INT(1),
+
+        /** An integer-range match item. */
+        RANGE(2);
+
+        private static final Map<Integer, MatchItemValueType> VALUE_MAP;
+
+        int code;
+
+        MatchItemValueType(int value) {
+            this.code = value;
+        }
+
+        /**
+         * Returns the code of this action definition.
+         *
+         * @return the code
+         */
+        public int codeValue() {
+            return code;
+        }
+
+        static {
+            Builder<Integer, MatchItemValueType> b = builder();
+            for (MatchItemValueType enumItem : MatchItemValueType.values()) {
+                b.put(enumItem.code, enumItem);
+            }
+            VALUE_MAP = b.build();
+        }
+
+        /**
+         * Returns the type from the given match item code.
+         *
+         * @param code the given code
+         * @return corresponding type constant
+         * @throws IllegalArgumentException if there is no mapping
+         */
+        public static MatchItemValueType forValue(int code) {
+            MatchItemValueType type = VALUE_MAP.get(code);
+            if (type == null) {
+                throw new IllegalArgumentException(
+                        "No MatchItemType for value: " + code);
+            }
+            return type;
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/definitions/MatchItemDefinitionBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/definitions/MatchItemDefinitionBuilder.java
new file mode 100644
index 0000000..873ab9d
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/definitions/MatchItemDefinitionBuilder.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright 2017-present 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.nemo.model.object.match.item.definitions;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import org.onosproject.nemo.model.common.MatchItemName;
+
+import com.google.common.collect.Maps;
+
+/**
+ * The builder of match item definition.
+ */
+public class MatchItemDefinitionBuilder {
+
+    private Map<Class<? extends MatchItemDefinition>, MatchItemDefinition>
+        augmentation = Maps.newHashMap();
+    private MatchItemDefinitionKey key;
+    private MatchItemName matchItemName;
+    private MatchItemDefinition.MatchItemValueType matchItemValueType;
+
+    /**
+     * Creates a default match item definition builder.
+     */
+    public MatchItemDefinitionBuilder() {
+    }
+
+    /**
+     * Creates an match item definition builder from a given match item
+     *  definition.
+     *
+     * @param base the match item definition
+     */
+    public MatchItemDefinitionBuilder(MatchItemDefinition base) {
+        if (base.getKey() == null) {
+            key = new MatchItemDefinitionKey(base.getMatchItemName());
+            matchItemName = base.getMatchItemName();
+        } else {
+            key = base.getKey();
+            matchItemName = key.getMatchItemName();
+        }
+        matchItemValueType = base.getMatchItemValueType();
+        MatchItemDefinitionImpl impl = (MatchItemDefinitionImpl) base;
+        if (!impl.augmentation.isEmpty()) {
+            augmentation = new HashMap<>(impl.augmentation);
+        }
+    }
+
+    /**
+     * Sets the match item definition key to be used by the builder.
+     *
+     * @param value the match item definition key value
+     * @return self
+     */
+    public MatchItemDefinitionBuilder Key(MatchItemDefinitionKey value) {
+        key = value;
+        return this;
+    }
+
+    /**
+     * Sets the match item name to be used by the builder.
+     *
+     * @param value the match item value
+     * @return self
+     */
+    public MatchItemDefinitionBuilder MatchItemName(MatchItemName value) {
+        matchItemName = value;
+        return this;
+    }
+
+    /**
+     * Sets the match item value type to be used by the builder.
+     *
+     * @param value match item definition value type
+     * @return self
+     */
+    public MatchItemDefinitionBuilder MatchItemValueType(MatchItemDefinition.MatchItemValueType value) {
+        matchItemValueType = value;
+        return this;
+    }
+
+    /**
+     * Adds an augmentation to the augmentation list. If the given augmentation
+     * is null, then removes the augmentation type from the map.
+     *
+     * @param augmentationType the type of argumentation
+     * @param augmentation the augmentation
+     * @return self
+     */
+    public MatchItemDefinitionBuilder addAugmentation(
+            Class<? extends MatchItemDefinition> augmentationType,
+            MatchItemDefinition augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Deletes an augmentation from the augmentation list.
+     *
+     * @param augmentationType the type of argumentation
+     * @return self
+     */
+    public MatchItemDefinitionBuilder removeAugmentation(
+            Class<? extends MatchItemDefinition> augmentationType) {
+        augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds an match item definition from this builder instance.
+     *
+     * @return match item definition
+     */
+    public MatchItemDefinition build() {
+        return new MatchItemDefinitionImpl(this);
+    }
+
+    /**
+     * The implementation of match item definition.
+     */
+    private static final class MatchItemDefinitionImpl
+            implements MatchItemDefinition {
+
+        private final MatchItemDefinitionKey key;
+        private final MatchItemName matchItemName;
+        private final MatchItemValueType matchItemValueType;
+        private final Map<Class<? extends MatchItemDefinition>,
+                MatchItemDefinition> augmentation;
+
+        private MatchItemDefinitionImpl(MatchItemDefinitionBuilder base) {
+            if (base.key == null) {
+                key = new MatchItemDefinitionKey(base.matchItemName);
+                matchItemName = base.matchItemName;
+            } else {
+                key = base.key;
+                matchItemName = key.getMatchItemName();
+            }
+            matchItemValueType = base.matchItemValueType;
+            augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public MatchItemDefinitionKey getKey() {
+            return key;
+        }
+
+        @Override
+        public MatchItemName getMatchItemName() {
+            return matchItemName;
+        }
+
+        @Override
+        public MatchItemValueType getMatchItemValueType() {
+            return matchItemValueType;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(key, matchItemName, matchItemValueType,
+                    augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            MatchItemDefinition other = (MatchItemDefinition) obj;
+            if (!Objects.equals(key, other.getKey())) {
+                return false;
+            }
+            if (!Objects.equals(matchItemName, other.getMatchItemName())) {
+                return false;
+            }
+            if (!Objects.equals(matchItemValueType, other.getMatchItemValueType())) {
+                return false;
+            }
+            MatchItemDefinitionImpl otherImpl = (MatchItemDefinitionImpl) obj;
+            return Objects.equals(augmentation, otherImpl.augmentation);
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("key", key)
+                    .add("matchItemName", matchItemName)
+                    .add("matchItemValueType", matchItemValueType)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/definitions/MatchItemDefinitionKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/definitions/MatchItemDefinitionKey.java
new file mode 100644
index 0000000..ee6e367
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/definitions/MatchItemDefinitionKey.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.match.item.definitions;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.Objects;
+
+import org.onosproject.nemo.model.common.MatchItemName;
+
+/**
+ * The key to match item definition.
+ */
+public class MatchItemDefinitionKey {
+    private final MatchItemName matchItemName;
+
+    /**
+     * Creates a match item name from a given match item name.
+     *
+     * @param matchItemName the match item name
+     */
+    public MatchItemDefinitionKey(MatchItemName matchItemName) {
+        this.matchItemName = matchItemName;
+    }
+
+    /**
+     * Creates a copy from source object.
+     *
+     * @param source the source object
+     */
+    public MatchItemDefinitionKey(MatchItemDefinitionKey source) {
+        matchItemName = source.matchItemName;
+    }
+
+    /**
+     * Returns the match item name of this instance.
+     *
+     * @return the match item name
+     */
+    public MatchItemName getMatchItemName() {
+        return matchItemName;
+    }
+
+    @Override
+    public int hashCode() {
+        return matchItemName.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        MatchItemDefinitionKey other = (MatchItemDefinitionKey) obj;
+        return Objects.equals(matchItemName, other.matchItemName);
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("matchItemName", matchItemName)
+                .toString();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/definitions/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/definitions/package-info.java
new file mode 100644
index 0000000..6571c45
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/definitions/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present 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.
+ */
+
+/**
+ * Definitions classes for NEMO model.
+ */
+package org.onosproject.nemo.model.object.match.item.definitions;
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/MatchItemValue.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/MatchItemValue.java
new file mode 100644
index 0000000..9117f29
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/MatchItemValue.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.match.item.instance;
+
+import org.onosproject.nemo.model.object.match.item.instance.match.item.value.RangeValue;
+
+/**
+ * Single match item value's information.
+ */
+public interface MatchItemValue {
+
+    /**
+     * Returns the primary string value of YANG list type.
+     *
+     * @return the value
+     */
+    String getStringValue();
+
+    /**
+     * Returns the primary integer value of YANG list type.
+     *
+     * @return the value
+     */
+    Long getIntValue();
+
+    /**
+     * Returns the primary range value of YANG list type.
+     *
+     * @return the value
+     */
+    RangeValue getRangeValue();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/MatchItemValueBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/MatchItemValueBuilder.java
new file mode 100644
index 0000000..118d72d
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/MatchItemValueBuilder.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.match.item.instance;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import org.onosproject.nemo.model.object.match.item.instance.match.item.value.RangeValue;
+
+import com.google.common.collect.Maps;
+
+
+public class MatchItemValueBuilder {
+
+    Map<Class<? extends MatchItemValue>, MatchItemValue>
+            augmentation = Maps.newHashMap();
+    private Long intValue;
+    private RangeValue rangeValue;
+    private String stringValue;
+
+    /**
+     * Creates a default match item value builder.
+     */
+    public MatchItemValueBuilder() {
+    }
+
+    /**
+     * Creates an match item value builder from a given match item value.
+     *
+     * @param base the action definition
+     */
+    public MatchItemValueBuilder(MatchItemValue base) {
+        intValue = base.getIntValue();
+        rangeValue = base.getRangeValue();
+        stringValue = base.getStringValue();
+        MatchItemValueImpl impl = (MatchItemValueImpl) base;
+        if (!impl.augmentation.isEmpty()) {
+            this.augmentation = new HashMap<>(impl.augmentation);
+        }
+    }
+
+    /**
+     * Sets the value to be used by the builder.
+     *
+     * @param value the value
+     * @return self
+     */
+    public MatchItemValueBuilder IntValue(Long value) {
+        intValue = value;
+        return this;
+    }
+
+    /**
+     * Sets the range value to be used by the builder.
+     *
+     * @param value the range value
+     * @return self
+     */
+    public MatchItemValueBuilder RangeValue(RangeValue value) {
+        rangeValue = value;
+        return this;
+    }
+
+    /**
+     * Sets the string value to be used by the builder.
+     *
+     * @param value the string value
+     * @return self
+     */
+    public MatchItemValueBuilder StringValue(String value) {
+        stringValue = value;
+        return this;
+    }
+
+    /**
+     * Adds an augmentation to the augmentation list. If the given augmentation
+     * is null, then removes the augmentation type from the map.
+     *
+     * @param augmentationType the type of argumentation
+     * @param augmentation the augmentation
+     * @return self
+     */
+    public MatchItemValueBuilder addAugmentation(
+            Class<? extends MatchItemValue> augmentationType,
+            MatchItemValue augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Deletes an augmentation from the augmentation list.
+     *
+     * @param augmentationType the type of argumentation
+     * @return self
+     */
+    public MatchItemValueBuilder removeAugmentation(
+            Class<? extends MatchItemValue> augmentationType) {
+        augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds an match item value from this builder instance.
+     *
+     * @return match item value
+     */
+    public MatchItemValue build() {
+        return new MatchItemValueImpl(this);
+    }
+
+    /**
+     * The implementation of match item value.
+     */
+    private static final class MatchItemValueImpl implements MatchItemValue {
+
+        private final Long intValue;
+        private final RangeValue rangeValue;
+        private final String stringValue;
+        private final Map<Class<? extends MatchItemValue>, MatchItemValue>
+                augmentation;
+
+        private MatchItemValueImpl(MatchItemValueBuilder base) {
+            intValue = base.intValue;
+            rangeValue = base.rangeValue;
+            stringValue = base.stringValue;
+            augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public Long getIntValue() {
+            return intValue;
+        }
+
+        @Override
+        public RangeValue getRangeValue() {
+            return rangeValue;
+        }
+
+        @Override
+        public String getStringValue() {
+            return stringValue;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(
+                    intValue, rangeValue, stringValue, augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            MatchItemValue other = (MatchItemValue) obj;
+            if (!Objects.equals(intValue, other.getIntValue())) {
+                return false;
+            }
+            if (!Objects.equals(rangeValue, other.getRangeValue())) {
+                return false;
+            }
+            if (!Objects.equals(stringValue, other.getStringValue())) {
+                return false;
+            }
+            MatchItemValueImpl otherImpl = (MatchItemValueImpl) obj;
+            return Objects.equals(augmentation, otherImpl.augmentation);
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("intValue", intValue)
+                    .add("rangeValue", rangeValue)
+                    .add("stringValue", stringValue)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/match/item/value/RangeValue.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/match/item/value/RangeValue.java
new file mode 100644
index 0000000..cc825c3
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/match/item/value/RangeValue.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.match.item.instance.match.item.value;
+
+/**
+ * Single range value's information.
+ */
+public interface RangeValue {
+
+    /**
+     * Returns the minimum value of YANG list type.
+     *
+     * @return the value
+     */
+    Long getMin();
+
+    /**
+     * Returns the maximum value of YANG list type.
+     *
+     * @return the value
+     */
+    Long getMax();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/match/item/value/RangeValueBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/match/item/value/RangeValueBuilder.java
new file mode 100644
index 0000000..ceb9a92
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/match/item/value/RangeValueBuilder.java
@@ -0,0 +1,173 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.match.item.instance.match.item.value;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import com.google.common.collect.Maps;
+
+/**
+ * Representation of building a range value.
+ */
+public class RangeValueBuilder {
+
+    private Map<Class<? extends RangeValue>, RangeValue>
+            augmentation = Maps.newHashMap();
+    private Long max;
+    private Long min;
+
+    /**
+     * Creates a default range value builder.
+     */
+    public RangeValueBuilder() {
+    }
+
+    /**
+     * Creates an range value builder from a given range value.
+     *
+     * @param base the range value
+     */
+    public RangeValueBuilder(RangeValue base) {
+        max = base.getMax();
+        min = base.getMin();
+        RangeValueImpl impl = (RangeValueImpl) base;
+        if (!impl.augmentation.isEmpty()) {
+            this.augmentation = new HashMap<>(impl.augmentation);
+        }
+    }
+
+    /**
+     * Sets the maximum range value to be used by the builder.
+     *
+     * @param value range value
+     * @return self
+     */
+    public RangeValueBuilder Max(Long value) {
+        max = value;
+        return this;
+    }
+
+    /**
+     * Sets the minimum range value to be used by the builder.
+     *
+     * @param value range value
+     * @return self
+     */
+    public RangeValueBuilder Min(Long value) {
+        min = value;
+        return this;
+    }
+
+    /**
+     * Adds an augmentation to the augmentation list. If the given augmentation
+     * is null, then removes the augmentation type from the map.
+     *
+     * @param augmentationType the type of argumentation
+     * @param augmentation the augmentation
+     * @return self
+     */
+    public RangeValueBuilder addAugmentation(
+            Class<? extends RangeValue> augmentationType,
+            RangeValue augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Deletes an augmentation from the augmentation list.
+     *
+     * @param augmentationType the type of argumentation
+     * @return self
+     */
+    public RangeValueBuilder removeAugmentation(
+            Class<? extends RangeValue> augmentationType) {
+        this.augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds an range value from this builder instance.
+     *
+     * @return range value
+     */
+    public RangeValue build() {
+        return new RangeValueImpl(this);
+    }
+
+    /**
+     * The implementation of range value.
+     */
+    private static final class RangeValueImpl implements RangeValue {
+
+        private final Long max;
+        private final Long min;
+        private final Map<Class<? extends RangeValue>, RangeValue>
+                augmentation;
+
+        private RangeValueImpl(RangeValueBuilder base) {
+            max = base.max;
+            min = base.min;
+            this.augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public Long getMax() {
+            return max;
+        }
+
+        @Override
+        public Long getMin() {
+            return min;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(max, max, augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            RangeValue other = (RangeValue) obj;
+            if (!Objects.equals(max, other.getMax())) {
+                return false;
+            }
+            if (!Objects.equals(min, other.getMin())) {
+                return false;
+            }
+            RangeValueImpl otherImpl = (RangeValueImpl) obj;
+            return Objects.equals(augmentation, otherImpl.augmentation);
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("max", max)
+                    .add("min", min)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/match/item/value/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/match/item/value/package-info.java
new file mode 100644
index 0000000..d51b408
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/match/item/value/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present 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.
+ */
+
+/**
+ * Value classes for NEMO model.
+ */
+package org.onosproject.nemo.model.object.match.item.instance.match.item.value;
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/package-info.java
new file mode 100644
index 0000000..2190105
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/instance/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present 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.
+ */
+
+/**
+ * Instance classes for NEMO model.
+ */
+package org.onosproject.nemo.model.object.match.item.instance;
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/package-info.java
new file mode 100644
index 0000000..56d5808
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/match/item/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present 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.
+ */
+
+/**
+ * Item classes for NEMO model.
+ */
+package org.onosproject.nemo.model.object.match.item;
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinition.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinition.java
new file mode 100755
index 0000000..d146481
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinition.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.node.definitions;
+
+import org.onosproject.nemo.model.common.NodeType;
+import org.onosproject.nemo.model.object.property.definitions.PropertyDefinition;
+
+import java.util.List;
+
+/**
+ * Single Node definition's information.
+ */
+public interface NodeDefinition {
+
+    /**
+     * Returns a unique node type for a kind of node.
+     *
+     * @return a unique node type
+     */
+    NodeType getNodeType();
+
+    /**
+     * Returns the primary key of YANG list type.
+     *
+     * @return the key
+     */
+    NodeDefinitionKey getKey();
+
+    /**
+     * Returns a description of the characteristic,
+     * responsibility and purpose for a kind of property.
+     *
+     * @return a description of property
+     */
+    List<PropertyDefinition> getPropertyDefinitions();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinitionBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinitionBuilder.java
new file mode 100755
index 0000000..c45372b
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinitionBuilder.java
@@ -0,0 +1,223 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.node.definitions;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import com.google.common.collect.Maps;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import org.onosproject.nemo.model.common.NodeType;
+import org.onosproject.nemo.model.object.PropertyDefinitions;
+import org.onosproject.nemo.model.object.property.definitions.PropertyDefinition;
+
+/**
+ * The builder of node definition.
+ */
+public class NodeDefinitionBuilder {
+    private Map<Class<? extends NodeDefinition>, NodeDefinition>
+            augmentation = Maps.newHashMap();
+    private NodeDefinitionKey key;
+    private NodeType nodeType;
+    private List<PropertyDefinition> propDefs;
+
+    /**
+     * Creates a default node definition builder.
+     */
+    public NodeDefinitionBuilder() {
+    }
+
+    /**
+     * Creates a node definition builder from a given definitions.
+     *
+     * @param definitions the property definitions
+     */
+    public NodeDefinitionBuilder(PropertyDefinitions definitions) {
+        propDefs = definitions.getPropertyDefinitions();
+    }
+
+    /**
+     * Creates a node definition builder from a given node definition.
+     *
+     * @param base the node definition object
+     */
+    public NodeDefinitionBuilder(NodeDefinition base) {
+        if (base.getKey() == null) {
+            key = new NodeDefinitionKey(base.getNodeType());
+            nodeType = base.getNodeType();
+        } else {
+            key = base.getKey();
+            nodeType = key.getNodeType();
+        }
+        propDefs = base.getPropertyDefinitions();
+    }
+
+    /**
+     * Sets the key to be used by the builder.
+     *
+     * @param key key value
+     * @return self
+     */
+    public NodeDefinitionBuilder key(NodeDefinitionKey key) {
+        this.key = key;
+        return this;
+    }
+
+    /**
+     * Sets the node type to be used by the builder.
+     *
+     * @param type node type
+     * @return self
+     */
+    public NodeDefinitionBuilder nodeType(NodeType type) {
+        nodeType = type;
+        return this;
+    }
+
+    /**
+     * Sets the property definitions to be used by the builder.
+     *
+     * @param definition property definition
+     * @return self
+     */
+    public NodeDefinitionBuilder propertyDefinition(
+            List<PropertyDefinition> definition) {
+        propDefs = definition;
+        return this;
+    }
+
+    /**
+     * Adds an augmentation to the augmentation list. If the given augmentation
+     * is null, then removes the augmentation type from the map.
+     *
+     * @param augmentationType the type of argumentation
+     * @param augmentation the augmentation
+     * @return self
+     */
+    public NodeDefinitionBuilder addAugmentation(
+            Class<NodeDefinition> augmentationType,
+            NodeDefinition augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Deletes an augmentation from the augmentation list.
+     *
+     * @param augmentationType the type of argumentation
+     * @return self
+     */
+    public NodeDefinitionBuilder removeAugmentation(
+        Class<NodeDefinition> augmentationType) {
+        augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds a node definition from this builder instance.
+     *
+     * @return node definition
+     */
+    public NodeDefinition build() {
+        return new NodeDefinitionImpl(this);
+    }
+
+    /**
+     * The implementation of node definition interface.
+     */
+    private static final class NodeDefinitionImpl implements NodeDefinition {
+
+        private final NodeDefinitionKey key;
+        private final NodeType nodeType;
+        private final List<PropertyDefinition> propertyDefinitions;
+        private final Map<Class<? extends NodeDefinition>, NodeDefinition>
+                augmentation;
+
+        private NodeDefinitionImpl(NodeDefinitionBuilder base) {
+            if (base.key == null) {
+                key = new NodeDefinitionKey(base.nodeType);
+                nodeType = base.nodeType;
+            } else {
+                key = base.key;
+                nodeType = key.getNodeType();
+            }
+            propertyDefinitions = base.propDefs;
+            augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public NodeDefinitionKey getKey() {
+            return key;
+        }
+
+        @Override
+        public NodeType getNodeType() {
+            return nodeType;
+        }
+
+        @Override
+        public List<PropertyDefinition> getPropertyDefinitions() {
+            return propertyDefinitions;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(key, nodeType, propertyDefinitions,
+                    augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            NodeDefinition other = (NodeDefinition) obj;
+            if (!Objects.equals(key, other.getKey())) {
+                return false;
+            }
+            if (!Objects.equals(nodeType, other.getNodeType())) {
+                return false;
+            }
+            if (!Objects.equals(propertyDefinitions, other.
+                    getPropertyDefinitions())) {
+                return false;
+            }
+            NodeDefinitionImpl otherImpl = (NodeDefinitionImpl) obj;
+            return Objects.equals(augmentation, otherImpl.augmentation);
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("key", key)
+                    .add("nodeType", nodeType)
+                    .add("propertyDefinition", propertyDefinitions)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinitionKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinitionKey.java
new file mode 100755
index 0000000..1cb3544
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinitionKey.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.node.definitions;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.Objects;
+
+import org.onosproject.nemo.model.common.NodeType;
+
+/**
+ * The key to differentiate node definition.
+ */
+public class NodeDefinitionKey {
+    private final NodeType nodeType;
+
+    /**
+     * Creates a node definition key from a given node type.
+     *
+     * @param nodeType the node type
+     */
+    public NodeDefinitionKey(NodeType nodeType) {
+        this.nodeType = nodeType;
+    }
+
+    /**
+     * Creates a copy from a given node definition key instance.
+     *
+     * @param key the node definition key
+     */
+    public NodeDefinitionKey(NodeDefinitionKey key) {
+        nodeType = key.nodeType;
+    }
+
+    /**
+     * Returns the node type of this instance.
+     *
+     * @return node type
+     */
+    public NodeType getNodeType() {
+        return nodeType;
+    }
+
+    @Override
+    public int hashCode() {
+        return nodeType.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        NodeDefinitionKey other = (NodeDefinitionKey) obj;
+        return Objects.equals(nodeType, other.nodeType);
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this).add("nodeType", nodeType).toString();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/definitions/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/definitions/package-info.java
new file mode 100755
index 0000000..7a9b279
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/definitions/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present 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.
+ */
+
+/**
+ * Node definitions classes for NEMO model.
+ */
+package org.onosproject.nemo.model.object.node.definitions;
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/Property.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/Property.java
new file mode 100755
index 0000000..f2783bb
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/Property.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.node.instance;
+
+import org.onosproject.nemo.model.common.PropertyName;
+import org.onosproject.nemo.model.object.property.instance.PropertyValues;
+
+/**
+ * Single property's information.
+ */
+public interface Property {
+
+    /**
+     * Returns the primary key of YANG list type.
+     *
+     * @return the key
+     */
+    PropertyKey getKey();
+
+    /**
+     * Returns a unique name for a kind of property.
+     *
+     * @return a unique name
+     */
+    PropertyName getPropertyName();
+
+    /**
+     * Returns a value for a kind of property.
+     *
+     * @return a value of the property
+     */
+    PropertyValues getPropertyValues();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/PropertyBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/PropertyBuilder.java
new file mode 100755
index 0000000..2be9fa6
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/PropertyBuilder.java
@@ -0,0 +1,215 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.node.instance;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import org.onosproject.nemo.model.common.PropertyName;
+import org.onosproject.nemo.model.object.PropertyInstance;
+import org.onosproject.nemo.model.object.property.instance.PropertyValues;
+
+import com.google.common.collect.Maps;
+
+/**
+ * The builder of property.
+ */
+public class PropertyBuilder {
+
+    private Map<Class<? extends Property>, Property> augmentation =
+            Maps.newHashMap();
+    private PropertyKey key;
+    private PropertyName propertyName;
+    private PropertyValues propertyValues;
+
+    /**
+     * Creates a default user role builder.
+     */
+    public PropertyBuilder() {
+    }
+
+    /**
+     * Creates a property builder from a property.
+     *
+     * @param instance the property instance
+     */
+    public PropertyBuilder(PropertyInstance instance) {
+        propertyName = instance.getPropertyName();
+        propertyValues = instance.getPropertyValues();
+    }
+
+    /**
+     * Creates a property builder from a property.
+     *
+     * @param base the property instance
+     */
+    public PropertyBuilder(Property base) {
+        if (base.getKey() == null) {
+            key = new PropertyKey(base.getPropertyName());
+            propertyName = base.getPropertyName();
+        } else {
+            key = base.getKey();
+            propertyName = key.getPropertyName();
+        }
+        propertyValues = base.getPropertyValues();
+    }
+
+    /**
+     * Sets the key to be used by the builder.
+     *
+     * @param key key value
+     * @return self
+     */
+    public PropertyBuilder key(PropertyKey key) {
+        this.key = key;
+        return this;
+    }
+
+    /**
+     * Sets the property name to be used by the builder.
+     *
+     * @param name property name value
+     * @return self
+     */
+    public PropertyBuilder propertyName(PropertyName name) {
+        propertyName = name;
+        return this;
+    }
+
+    /**
+     * Sets the property value to be used by the builder.
+     *
+     * @param values property values
+     * @return self
+     */
+    public PropertyBuilder propertyValues(PropertyValues values) {
+        propertyValues = values;
+        return this;
+    }
+
+    /**
+     * Adds an augmentation to the augmentation list. If the given augmentation
+     * is null, then removes the augmentation type from the map.
+     *
+     * @param augmentationType the type of argumentation
+     * @param augmentation the augmentation
+     * @return self
+     */
+    public PropertyBuilder addAugmentation(Class<Property> augmentationType,
+            Property augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Deletes an augmentation from the augmentation list.
+     *
+     * @param augmentationType the type of argumentation
+     * @return self
+     */
+    public PropertyBuilder removeAugmentation(Class<Property>
+            augmentationType) {
+            augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds a property from this builder instance.
+     *
+     * @return property
+     */
+    public Property build() {
+        return new PropertyImpl(this);
+    }
+
+    /**
+     * The implementation of property interface.
+     */
+    private static final class PropertyImpl implements Property {
+
+        private final PropertyKey key;
+        private final PropertyName propertyName;
+        private final PropertyValues propertyValues;
+        private final Map<Class<? extends Property>, Property> augmentation;
+
+        private PropertyImpl(PropertyBuilder base) {
+            if (base.key == null) {
+                key = new PropertyKey(base.propertyName);
+                propertyName = base.propertyName;
+            } else {
+                key = base.key;
+                propertyName = key.getPropertyName();
+            }
+            this.propertyValues = base.propertyValues;
+                augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public PropertyKey getKey() {
+            return key;
+        }
+
+        @Override
+        public PropertyName getPropertyName() {
+            return propertyName;
+        }
+
+        @Override
+        public PropertyValues getPropertyValues() {
+            return propertyValues;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(key, propertyName, propertyValues,
+                    augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            PropertyImpl o = (PropertyImpl) obj;
+            return Objects.equals(key, o.key) &&
+                    Objects.equals(propertyName, o.propertyName) &&
+                    Objects.equals(propertyValues, o.propertyValues) &&
+                    Objects.equals(augmentation, o.augmentation);
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("key", key)
+                    .add("propertyName", propertyName)
+                    .add("propertyValues", propertyValues)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/PropertyKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/PropertyKey.java
new file mode 100755
index 0000000..3197a48
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/PropertyKey.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.node.instance;
+
+import org.onosproject.nemo.model.common.PropertyName;
+
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * The key to differentiate user roles.
+ */
+public class PropertyKey {
+    private final PropertyName propertyName;
+
+    /**
+     * Creates a property key from a given property name.
+     *
+     * @param name the property name
+     */
+    public PropertyKey(PropertyName name) {
+        propertyName = name;
+    }
+
+    /**
+     * Creates a copy from a given property key instance.
+     *
+     * @param key the property key
+     */
+    public PropertyKey(PropertyKey key) {
+        propertyName = key.propertyName;
+    }
+
+    /**
+     * Returns the property name of this instance.
+     *
+     * @return property name
+     */
+    public PropertyName getPropertyName() {
+        return propertyName;
+    }
+
+    @Override
+    public int hashCode() {
+        return propertyName.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        PropertyKey other = (PropertyKey) obj;
+        return Objects.equals(propertyName, other.propertyName);
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this).add("propertyName", propertyName)
+                .toString();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/SubNode.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/SubNode.java
new file mode 100755
index 0000000..92ca8bf
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/SubNode.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.node.instance;
+
+import org.onosproject.nemo.model.common.NodeId;
+
+/**
+ * Single subnode's information.
+ */
+public interface SubNode {
+
+    /**
+     * Returns a unique identifier for a kind of node.
+     *
+     * @return a unique identifier of node
+     */
+    NodeId getNodeId();
+
+    /**
+     * Returns the order of YANG list type.
+     *
+     * @return the order
+     */
+    long getOrder();
+
+    /**
+     * Returns primary key of YANG List Type.
+     *
+     * @return the key
+     */
+    SubNodeKey getKey();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/SubNodeBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/SubNodeBuilder.java
new file mode 100755
index 0000000..6692bab
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/SubNodeBuilder.java
@@ -0,0 +1,214 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.node.instance;
+
+import org.onosproject.nemo.model.common.NodeId;
+
+import com.google.common.collect.Maps;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+/**
+ * Representation of build sub node.
+ */
+public class SubNodeBuilder {
+
+    private static final long MAX_LENGTH =  4294967295L;
+    private static final long MIN_LENGTH =  0L;
+    private static final String ERROR_LEN_MSG = "Invalid range:" +
+            " %s, expected: [[" + MIN_LENGTH + "‥" + MAX_LENGTH + "]].";
+
+    private Map<Class<? extends SubNode>, SubNode> augmentation =
+            Maps.newHashMap();
+    private SubNodeKey key;
+    private long order;
+    private NodeId nodeId;
+
+    /**
+     * Creates a new instance with default parameter.
+     */
+    public SubNodeBuilder() {
+    }
+
+    /**
+     * Creates a new instance from a given base object.
+     *
+     * @param base sub node base
+     */
+    public SubNodeBuilder(SubNode base) {
+        if (base.getKey() == null) {
+            key = new SubNodeKey(base.getNodeId());
+            base.getNodeId();
+        } else {
+            key = base.getKey();
+            key.getNodeId();
+        }
+        order = base.getOrder();
+    }
+
+    /**
+     * Sets the key to be used by the builder.
+     *
+     * @param key sub node key
+     * @return self
+     */
+    public SubNodeBuilder key(SubNodeKey key) {
+        this.key = key;
+        return this;
+    }
+
+    /**
+     * Sets the node id to be used by the builder.
+     *
+     * @param id node id
+     * @return self
+     */
+    public SubNodeBuilder nodeId(NodeId id) {
+        nodeId = id;
+        return this;
+    }
+
+    /**
+     * Sets the order id to be used by the builder.
+     *
+     * @param order the order
+     * @return self
+     */
+    public SubNodeBuilder order(long order) {
+        checkOrderRange(order);
+        this.order = order;
+        return this;
+    }
+
+    /**
+     * Adds an augmentation to the augmentation list. If the given augmentation
+     * is null, then removes the augmentation type from the map.
+     *
+     * @param augmentationType the type of argumentation
+     * @param augmentation the augmentation
+     * @return self
+     */
+    public SubNodeBuilder addAugmentation(
+            Class<SubNode> augmentationType, SubNode augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Deletes an augmentation from the augmentation list.
+     *
+     * @param augmentationType the type of argumentation
+     * @return self
+     */
+    public SubNodeBuilder removeAugmentation(Class<SubNode> augmentationType) {
+        augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds an sub node from this builder instance.
+     *
+     * @return the sub node
+     */
+    public SubNode build() {
+        return new SubNodeImpl(this);
+    }
+
+    private static void checkOrderRange(long value) {
+        if (value < MIN_LENGTH || value > MAX_LENGTH) {
+            throw new IllegalArgumentException(
+                    String.format(ERROR_LEN_MSG, value));
+        }
+    }
+
+    /**
+     * The implementation of sub node.
+     */
+    private static final class SubNodeImpl implements SubNode {
+
+        private final SubNodeKey key;
+        private final long order;
+        private final NodeId nodeId;
+        private final Map<Class<? extends SubNode>, SubNode> augmentation;
+
+        private SubNodeImpl(SubNodeBuilder base) {
+            if (base.key == null) {
+                key = new SubNodeKey(base.nodeId);
+                nodeId = base.nodeId;
+            } else {
+                key = base.key;
+                nodeId = key.getNodeId();
+            }
+            order = base.order;
+            augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public NodeId getNodeId() {
+            return nodeId;
+        }
+
+        @Override
+        public long getOrder() {
+            return order;
+        }
+
+        @Override
+        public SubNodeKey getKey() {
+            return key;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(key, nodeId, order, augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            SubNodeImpl o = (SubNodeImpl) obj;
+            return Objects.equals(key, o.key) &&
+                    Objects.equals(nodeId, o.nodeId) &&
+                    Objects.equals(order, o.order) &&
+                    Objects.equals(augmentation, o.augmentation);
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("key", key)
+                    .add("nodeId", nodeId)
+                    .add("order", order)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/SubNodeKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/SubNodeKey.java
new file mode 100755
index 0000000..5020db5
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/SubNodeKey.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.node.instance;
+
+import org.onosproject.nemo.model.common.NodeId;
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.Objects;
+
+/**
+ * Representation of sub node key.
+ */
+public class SubNodeKey {
+    private final NodeId nodeId;
+
+    /**
+     * Creates a sub node key from a given node id.
+     *
+     * @param nodeId the node id
+     */
+    public SubNodeKey(NodeId nodeId) {
+        this.nodeId = nodeId;
+    }
+
+    /**
+     * Creates a copy from a given sub node key.
+     *
+     * @param key the sub node key
+     */
+    public SubNodeKey(SubNodeKey key) {
+        nodeId = key.nodeId;
+    }
+
+    /**
+     * Returns the node id of this instance.
+     *
+     * @return node id
+     */
+    public NodeId getNodeId() {
+        return nodeId;
+    }
+
+    @Override
+    public int hashCode() {
+        return nodeId.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        SubNodeKey other = (SubNodeKey) obj;
+        return Objects.equals(nodeId, other.nodeId);
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this).add("nodeId", nodeId).toString();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/package-info.java
new file mode 100755
index 0000000..1386f5b
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/instance/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present 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.
+ */
+
+/**
+ * Node instance classes for NEMO model.
+ */
+package org.onosproject.nemo.model.object.node.instance;
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/package-info.java
new file mode 100755
index 0000000..84ee357
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/node/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present 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.
+ */
+
+/**
+ * Node classes for NEMO model.
+ */
+package org.onosproject.nemo.model.object.node;
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinition.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinition.java
new file mode 100755
index 0000000..d3b750c
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinition.java
@@ -0,0 +1,226 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.property.definitions;
+
+import static com.google.common.collect.ImmutableMap.Builder;
+import static com.google.common.collect.ImmutableMap.builder;
+import org.onosproject.nemo.model.common.PropertyName;
+
+/**
+ * Single property definition's information.
+ */
+public interface PropertyDefinition {
+
+    /**
+     * Returns a unique name for a kind of property.
+     *
+     * @return a name of property
+     */
+    PropertyName getPropertyName();
+
+    /**
+     * Returns the type of the property value.
+     *
+     * @return the value
+     */
+    PropertyValueType getPropertyValueType();
+
+    /**
+     * Specify whether the property is required for the object.
+     *
+     * @return required
+     */
+    IsRequired getIsRequired();
+
+    /**
+     * Specify whether the property is read-only for object.
+     *
+     * @return access
+     */
+    Access getIsReadOnly();
+
+    /**
+     * .
+     * Returns Primary Key of YANG List Type
+     *
+     * @return the key
+     */
+    PropertyDefinitionKey getKey();
+
+    /**
+     * Designates property value type.
+     */
+    enum PropertyValueType {
+
+        /** An string-valued property. */
+        STRING(0),
+
+        /** An integer-valued property. */
+        INT(1),
+
+        /** An integer-range property. */
+        RANGE(2);
+
+        int value;
+
+        private static final java.util.Map<Integer, PropertyValueType>
+                VALUE_MAP;
+
+        PropertyValueType(int value) {
+            this.value = value;
+        }
+
+        /**
+         * Returns integer value.
+         *
+         * @return integer value
+         */
+        public int intValue() {
+            return value;
+        }
+
+        static {
+            Builder<Integer, PropertyValueType> b = builder();
+            for (PropertyValueType enumItem : PropertyValueType.values()) {
+                b.put(enumItem.value, enumItem);
+            }
+            VALUE_MAP = b.build();
+        }
+
+        /**
+         * Returns property value type.
+         *
+         * @param value the value for value map
+         * @return corresponding PropertyValueType item
+         * @throws IllegalArgumentException if there is no mapping
+         */
+        public static PropertyValueType forValue(int value) {
+            PropertyValueType is = VALUE_MAP.get(value);
+            if (is == null) {
+                throw new IllegalArgumentException(
+                        "No PropertyValueType for value: " + value);
+            }
+            return is;
+        }
+    }
+
+    /**
+     * Designates required property.
+     */
+    enum IsRequired {
+
+        /** The property is required */
+        REQUIRED(0),
+
+        /** The property is optional */
+        OPTIONAL(1);
+
+        int value;
+
+        private static final java.util.Map<Integer, IsRequired> VALUE_MAP;
+
+
+        IsRequired(int value) {
+            this.value = value;
+        }
+
+        /**
+         * Returns integer value.
+         *
+         * @return integer value
+         */
+        public int intValue() {
+            return value;
+        }
+
+        static {
+            Builder<Integer, IsRequired> b = builder();
+            for (IsRequired enumItem : IsRequired.values()) {
+                b.put(enumItem.value, enumItem);
+            }
+            VALUE_MAP = b.build();
+        }
+
+        /**
+         * Returns value map.
+         *
+         * @param value is required value to get value map
+         * @return corresponding IsRequired item
+         * @throws IllegalArgumentException if there is no mapping
+         */
+        public static IsRequired forValue(int value) {
+            IsRequired is = VALUE_MAP.get(value);
+            if(is == null){
+                throw new IllegalArgumentException(
+                        "No PropertyValueType for value: " + value);
+            }
+            return is;
+        }
+    }
+
+    /**
+     * Designates property access.
+     */
+    enum Access {
+
+        /** The property can be read and written. */
+        READ_WRITE(0),
+
+        /** The property is read-only. */
+        READ_ONLY(1);
+
+        int value;
+
+        private static final java.util.Map<Integer, Access> VALUE_MAP;
+
+        Access(int value) {
+            this.value = value;
+        }
+
+        /**
+         * Returns integer value.
+         *
+         * @return integer value
+         */
+        public int intValue() {
+            return value;
+        }
+
+        static {
+            Builder<Integer, Access> b = builder();
+            for (Access enumItem : Access.values()) {
+                b.put(enumItem.value, enumItem);
+            }
+            VALUE_MAP = b.build();
+        }
+
+        /**
+         * Returns the value map.
+         *
+         * @param value value to get value map
+         * @return corresponding IsReadOnly item
+         * @throws IllegalArgumentException if there is no mapping
+         */
+        public static Access forValue(int value) {
+            Access is = VALUE_MAP.get(value);
+            if (is == null) {
+                throw new IllegalArgumentException(
+                        "No PropertyValueType for value: " + value);
+            }
+            return is;
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinitionBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinitionBuilder.java
new file mode 100755
index 0000000..3e60477
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinitionBuilder.java
@@ -0,0 +1,253 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.property.definitions;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import org.onosproject.nemo.model.common.PropertyName;
+
+import com.google.common.collect.Maps;
+
+/**
+ * The builder of property definition.
+ */
+public class PropertyDefinitionBuilder {
+
+    private final Map<Class<? extends PropertyDefinition>, PropertyDefinition>
+            augmentation = Maps.newHashMap();
+    private PropertyDefinition.Access isReadOnly;
+    private PropertyDefinition.IsRequired isRequired;
+    private PropertyDefinitionKey key;
+    private PropertyName propertyName;
+    private PropertyDefinition.PropertyValueType propertyValueType;
+
+    /**
+     * Creates a default user role builder.
+     */
+    public PropertyDefinitionBuilder() {
+    }
+
+    /**
+     * Creates a property definition builder from a property definition object.
+     *
+     * @param base the property definition object
+     */
+    public PropertyDefinitionBuilder(PropertyDefinition base) {
+        if (base.getKey() == null) {
+            key = new PropertyDefinitionKey(base.getPropertyName());
+            propertyName = base.getPropertyName();
+        } else {
+            key = base.getKey();
+            propertyName = key.getPropertyName();
+        }
+        isReadOnly = base.getIsReadOnly();
+        isRequired = base.getIsRequired();
+        propertyValueType = base.getPropertyValueType();
+    }
+
+    /**
+     * Sets the property definition access to be used by the builder.
+     *
+     * @param readOnly property definition read-only value
+     * @return self
+     */
+    public PropertyDefinitionBuilder isReadOnly(
+    	PropertyDefinition.Access readOnly) {
+        isReadOnly = readOnly;
+        return this;
+    }
+
+    /**
+     * Sets the property definition requirement to be used by the builder.
+     *
+     * @param required property definition
+     * @return self
+     */
+    public PropertyDefinitionBuilder isRequired(
+    	PropertyDefinition.IsRequired required) {
+        isRequired = required;
+        return this;
+    }
+
+    /**
+     * Sets the property definition key to be used by the builder.
+     *
+     * @param key property definition key value
+     * @return self
+     */
+    public PropertyDefinitionBuilder key(PropertyDefinitionKey key) {
+        this.key = key;
+        return this;
+    }
+
+    /**
+     * Sets the property name to be used by the builder.
+     *
+     * @param name property name value
+     * @return self
+     */
+    public PropertyDefinitionBuilder propertyName(PropertyName name) {
+        propertyName = name;
+        return this;
+    }
+
+    /**
+     * Sets the property value type to be used by the builder.
+     *
+     * @param type property value type value
+     * @return self
+     */
+    public PropertyDefinitionBuilder propertyValueType(
+            PropertyDefinition.PropertyValueType type) {
+        propertyValueType = type;
+        return this;
+    }
+
+    /**
+     * Adds an augmentation to the augmentation list. If the given augmentation
+     * is null, then removes the augmentation type from the map.
+     *
+     * @param augmentationType the type of argumentation
+     * @param augmentation the augmentation
+     * @return self
+     */
+    public PropertyDefinitionBuilder addAugmentation(
+            Class<? extends PropertyDefinition> augmentationType,
+            PropertyDefinition augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Deletes an augmentation from the augmentation list.
+     *
+     * @param augmentationType the type of argumentation
+     * @return self
+     */
+    public PropertyDefinitionBuilder removeAugmentation(
+            Class<?extends PropertyDefinition> augmentationType) {
+        augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds a property definition from this builder instance.
+     *
+     * @return property definition
+     */
+    public PropertyDefinition build() {
+        return new PropertyDefinitionImpl(this);
+    }
+
+    /**
+     * The implementation of property definition interface.
+     */
+    private static final class PropertyDefinitionImpl implements
+            PropertyDefinition {
+
+        private final Access isReadOnly;
+        private final IsRequired isRequired;
+        private final PropertyDefinitionKey key;
+        private final PropertyName propertyName;
+        private final PropertyValueType propertyValueType;
+        private final Map<Class<? extends PropertyDefinition>,
+                PropertyDefinition> augmentation;
+
+        private PropertyDefinitionImpl(PropertyDefinitionBuilder base) {
+            if (base.key == null) {
+                key = new PropertyDefinitionKey(base.propertyName);
+                propertyName = base.propertyName;
+            } else {
+                key = base.key;
+                propertyName = key.getPropertyName();
+            }
+            isReadOnly = base.isReadOnly;
+            isRequired = base.isRequired;
+            propertyValueType = base.propertyValueType;
+            augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public Access getIsReadOnly() {
+            return isReadOnly;
+        }
+
+        @Override
+        public IsRequired getIsRequired() {
+            return isRequired;
+        }
+
+        @Override
+        public PropertyDefinitionKey getKey() {
+            return key;
+        }
+
+        @Override
+        public PropertyName getPropertyName() {
+            return propertyName;
+        }
+
+        @Override
+        public PropertyValueType getPropertyValueType() {
+            return propertyValueType;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(isReadOnly, isRequired, key, propertyName,
+                    propertyValueType, augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            PropertyDefinitionImpl o = (PropertyDefinitionImpl) obj;
+            return Objects.equals(isReadOnly, o.isReadOnly) &&
+                    Objects.equals(isRequired, o.isRequired) &&
+                    Objects.equals(key, o.key) &&
+                    Objects.equals(propertyName, o.propertyName) &&
+                    Objects.equals(propertyValueType, o.propertyValueType) &&
+                    Objects.equals(augmentation, o.augmentation);
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("isReadOnly", isReadOnly)
+                    .add("isRequired", isRequired)
+                    .add("key", key)
+                    .add("propertyName", propertyName)
+                    .add("propertyValueType", propertyValueType)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinitionKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinitionKey.java
new file mode 100755
index 0000000..f937b17
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinitionKey.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.property.definitions;
+
+import org.onosproject.nemo.model.common.PropertyName;
+
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * The key to differentiate user roles.
+ */
+public class PropertyDefinitionKey {
+    private final PropertyName propertyName;
+
+    /**
+     * Creates a property definition key from a given property name.
+     *
+     * @param propertyName the property name indicator
+     */
+    public PropertyDefinitionKey(PropertyName propertyName) {
+        this.propertyName = propertyName;
+    }
+
+    /**
+     * Creates a copy from a given property definition key instance.
+     *
+     * @param key the property definition key
+     */
+    public PropertyDefinitionKey(PropertyDefinitionKey key) {
+        propertyName = key.propertyName;
+    }
+
+    /**
+     * Returns the property name of this instance.
+     *
+     * @return property name
+     */
+    public PropertyName getPropertyName() {
+        return propertyName;
+    }
+
+    @Override
+    public int hashCode() {
+        return propertyName.hashCode();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        PropertyDefinitionKey other = (PropertyDefinitionKey) obj;
+        return Objects.equals(propertyName, other.propertyName);
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this).add("propertyName", propertyName)
+                .toString();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/definitions/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/definitions/package-info.java
new file mode 100755
index 0000000..96cd497
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/definitions/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present 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.
+ */
+
+/**
+ * Property definitions for NEMO model.
+ */
+package org.onosproject.nemo.model.object.property.definitions;
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/PropertyValues.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/PropertyValues.java
new file mode 100755
index 0000000..c629e03
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/PropertyValues.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.property.instance;
+
+import org.onosproject.nemo.model.object.property.instance.property.values.IntValue;
+import org.onosproject.nemo.model.object.property.instance.property.values.RangeValue;
+import org.onosproject.nemo.model.object.property.instance.property.values.StringValue;
+
+import java.util.List;
+
+/**
+ * Single property value's information.
+ */
+public interface PropertyValues {
+
+    /**
+     * Returns a list of values for a kind of string.
+     *
+     * @return a value of string
+     */
+    List<StringValue> getStringValues();
+
+    /**
+     * Returns a list of values for a kind of integer.
+     *
+     * @return a value of integer
+     */
+    List<IntValue> getIntValues();
+
+    /**
+     * Returns value for a kind of range.
+     *
+     * @return a value of range
+     */
+    RangeValue getRangeValue();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/PropertyValuesBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/PropertyValuesBuilder.java
new file mode 100755
index 0000000..4c65195
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/PropertyValuesBuilder.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.property.instance;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+
+import org.onosproject.nemo.model.object.property.instance.property.values.IntValue;
+import org.onosproject.nemo.model.object.property.instance.property.values.RangeValue;
+import org.onosproject.nemo.model.object.property.instance.property.values.StringValue;
+
+import com.google.common.collect.Maps;
+
+/**
+ * The builder of property values.
+ */
+public class PropertyValuesBuilder {
+
+    private Map<Class<? extends PropertyValues>, PropertyValues> augmentation =
+            Maps.newHashMap();
+    private List<IntValue> intValue;
+    private List<StringValue> stringValue;
+    private RangeValue rangeValue;
+
+    /**
+     * Creates a default user role builder.
+     */
+    public PropertyValuesBuilder() {
+    }
+
+    /**
+     * Creates a property value builder from a property value object.
+     *
+     * @param base the property value object
+     */
+    public PropertyValuesBuilder(PropertyValues base) {
+        intValue = base.getIntValues();
+        rangeValue = base.getRangeValue();
+        stringValue = base.getStringValues();
+    }
+
+    /**
+     * Sets the integer values to be used by the builder.
+     *
+     * @param values property values
+     * @return self
+     */
+    public PropertyValuesBuilder intValues(List<IntValue> values) {
+        intValue = values;
+        return this;
+    }
+
+    /**
+     * Sets the range value to be used by the builder.
+     *
+     * @param value range value
+     * @return self
+     */
+    public PropertyValuesBuilder rangeValue(RangeValue value) {
+        rangeValue = value;
+        return this;
+    }
+
+    /**
+     * Sets the string values to be used by the builder.
+     *
+     * @param values string values
+     * @return self
+     */
+    public PropertyValuesBuilder stringValues(List<StringValue> values) {
+        stringValue = values;
+        return this;
+    }
+
+    /**
+     * Adds an augmentation to the augmentation list. If the given augmentation
+     * is null, then removes the augmentation type from the map.
+     *
+     * @param augmentationType the type of argumentation
+     * @param augmentation the augmentation
+     * @return self
+     */
+    public PropertyValuesBuilder addAugmentation(
+            Class<? extends PropertyValues> augmentationType,
+            PropertyValues augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Deletes an augmentation from the augmentation list.
+     *
+     * @param augmentationType the type of argumentation
+     * @return self
+     */
+    public PropertyValuesBuilder removeAugmentation(
+            Class<? extends PropertyValues> augmentationType) {
+        augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds a property value from this builder instance.
+     *
+     * @return property values
+     */
+    public PropertyValues build() {
+        return new PropertyValuesImpl(this);
+    }
+
+    /**
+     * The implementation of property value interface.
+     */
+    private static final class PropertyValuesImpl implements PropertyValues {
+
+        private final List<IntValue> intValue;
+        private final RangeValue rangeValue;
+        private final List<StringValue> stringValue;
+        private final Map<Class<? extends PropertyValues>, PropertyValues>
+                augmentation;
+
+        private PropertyValuesImpl(PropertyValuesBuilder base) {
+            intValue = base.intValue;
+            rangeValue = base.rangeValue;
+            stringValue = base.stringValue;
+            augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public List<IntValue> getIntValues() {
+            return intValue;
+        }
+
+        @Override
+        public RangeValue getRangeValue() {
+            return rangeValue;
+        }
+
+        @Override
+        public List<StringValue> getStringValues() {
+            return stringValue;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(intValue, rangeValue, stringValue,
+                    augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            PropertyValuesImpl o = (PropertyValuesImpl) obj;
+            return Objects.equals(intValue, o.intValue) &&
+                    Objects.equals(rangeValue, o.rangeValue) &&
+                    Objects.equals(stringValue, o.stringValue) &&
+                    Objects.equals(augmentation, o.augmentation);
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("intValue", intValue)
+                    .add("rangeValue", rangeValue)
+                    .add("stringValue", stringValue)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/package-info.java
new file mode 100755
index 0000000..ee95644
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present 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.
+ */
+
+/**
+ * Property instance classes for NEMO model.
+ */
+package org.onosproject.nemo.model.object.property.instance;
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/IntValue.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/IntValue.java
new file mode 100755
index 0000000..4b053b8
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/IntValue.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.property.instance.property.values;
+
+/**
+ * Single User role's information.
+ */
+public interface IntValue {
+
+    /**
+     * Returns the primary value of YANG list type.
+     *
+     * @return the value
+     */
+    long getValue();
+
+    /**
+     * Returns the primary order of YANG list type.
+     *
+     * @return the order
+     */
+    long getOrder();
+
+    /**
+     * Returns the primary key of YANG list type.
+     *
+     * @return the key
+     */
+    IntValueKey getKey();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/IntValueBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/IntValueBuilder.java
new file mode 100755
index 0000000..81a52be
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/IntValueBuilder.java
@@ -0,0 +1,215 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.property.instance.property.values;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import com.google.common.collect.Maps;
+
+/**
+ * The builder of integer value.
+ */
+public class IntValueBuilder {
+
+    private static final long MAX_LENGTH =  4294967295L;
+    private static final long MIN_LENGTH =  0L;
+    private static final String ERROR_LEN_MSG = "Invalid range:" +
+            " %s, expected: [[" + MIN_LENGTH + "‥" + MAX_LENGTH + "]].";
+
+    private Map<Class<? extends IntValue>, IntValue> augmentation =
+            Maps.newHashMap();
+    private IntValueKey key;
+    private long order;
+    private long value;
+
+    /**
+     * Creates a default user role builder.
+     */
+    public IntValueBuilder() {
+    }
+
+    /**
+     * Creates a integer value builder from a integer value object.
+     *
+     * @param base the integer value object
+     */
+    public IntValueBuilder(IntValue base) {
+        if (base.getKey() == null) {
+            key = new IntValueKey(base.getOrder(), base.getValue());
+            order = base.getOrder();
+            value = base.getValue();
+        } else {
+            key = base.getKey();
+            order = key.getOrder();
+            value = key.getValue();
+        }
+    }
+
+    /**
+     * Sets the integer value key to be used by the builder.
+     *
+     * @param key integer value key
+     * @return self
+     */
+    public IntValueBuilder key(IntValueKey key) {
+        this.key = key;
+        return this;
+    }
+
+    /**
+     * Sets the order to be used by the builder.
+     *
+     * @param order order value
+     * @return self
+     */
+    public IntValueBuilder order(long order) {
+        checkOrderRange(order);
+        this.order = order;
+        return this;
+    }
+
+    /**
+     * Sets the value to be used by the builder.
+     *
+     * @param value integer value
+     * @return self
+     */
+    public IntValueBuilder value(long value) {
+        this.value = value;
+        return this;
+    }
+
+    /**
+     * Adds an augmentation to the augmentation list. If the given augmentation
+     * is null, then removes the augmentation type from the map.
+     *
+     * @param augmentationType the type of argumentation
+     * @param augmentation the augmentation
+     * @return self
+     */
+    public IntValueBuilder addAugmentation(
+            Class<? extends IntValue> augmentationType,IntValue augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Deletes an augmentation from the augmentation list.
+     *
+     * @param augmentationType the type of argumentation
+     * @return self
+     */
+    public IntValueBuilder removeAugmentation(
+            Class<? extends IntValue> augmentationType) {
+            augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds a integer value from this builder instance.
+     *
+     * @return integer value
+     */
+    public IntValue build() {
+        return new IntValueImpl(this);
+    }
+
+    private static void checkOrderRange(long value) {
+        if (value < MIN_LENGTH || value > MAX_LENGTH) {
+            throw new IllegalArgumentException(
+                    String.format(ERROR_LEN_MSG, value));
+        }
+    }
+
+    /**
+     * The implementation of integer value interface.
+     */
+    private static final class IntValueImpl implements IntValue {
+
+        private final IntValueKey key;
+        private final long order;
+        private final long value;
+        private final Map<Class<? extends IntValue>, IntValue> augmentation;
+
+        private IntValueImpl(IntValueBuilder base) {
+            if (base.key == null) {
+                key = new IntValueKey(base.order, base.value);
+                order = base.order;
+                value = base.value;
+            } else {
+                key = base.key;
+                order = key.getOrder();
+                value = key.getValue();
+            }
+            augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public IntValueKey getKey() {
+            return key;
+        }
+
+        @Override
+        public long getOrder() {
+            return order;
+        }
+
+        @Override
+        public long getValue() {
+            return value;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(key, order, value, augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            IntValueImpl o = (IntValueImpl) obj;
+            return Objects.equals(key, o.key) &&
+                    Objects.equals(order, o.order) &&
+                    Objects.equals(value, o.value) &&
+                    Objects.equals(augmentation, o.augmentation);
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("key", key)
+                    .add("order", order)
+                    .add("value", value)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/IntValueKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/IntValueKey.java
new file mode 100755
index 0000000..e890e94
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/IntValueKey.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.property.instance.property.values;
+
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * The key to differentiate integer value.
+ */
+public class IntValueKey {
+    private final long value;
+    private final long order;
+
+    /**
+     * Creates a integer value key from a given value.
+     *
+     * @param order integer value key order
+     * @param value the integer value
+     */
+    public IntValueKey(long order, long value) {
+        this.value = value;
+        this.order = order;
+    }
+
+    /**
+     * Creates a copy from a given integer value key instance.
+     *
+     * @param key the integer value key
+     */
+    public IntValueKey(IntValueKey key) {
+        value = key.value;
+        order = key.order;
+    }
+
+    /**
+     * Returns the value of this instance.
+     *
+     * @return value,if it exists
+     */
+    public long getValue() {
+        return value;
+    }
+
+    /**
+     * Returns the order of this instance.
+     *
+     * @return order,if it exists
+     */
+    public long getOrder() {
+        return order;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(value, order);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        IntValueKey o = (IntValueKey) obj;
+        return value == o.value && order == o.order;
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this).add("value", value)
+                .add("order", order)
+                .toString();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/RangeValue.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/RangeValue.java
new file mode 100755
index 0000000..5a9d77c
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/RangeValue.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.property.instance.property.values;
+
+/**
+ * Single range value's information.
+ */
+public interface RangeValue {
+
+    /**
+     * Returns minimum value.
+     *
+     * @return minimum value
+     */
+    long getMin();
+
+    /**
+     * Returns maximum value.
+     *
+     * @return maximum value
+     */
+    long getMax();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/RangeValueBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/RangeValueBuilder.java
new file mode 100755
index 0000000..375e1fd
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/RangeValueBuilder.java
@@ -0,0 +1,168 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.property.instance.property.values;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import com.google.common.collect.Maps;
+
+/**
+ * The builder of range value.
+ */
+public class RangeValueBuilder {
+    private Map<Class<? extends RangeValue>, RangeValue> augmentation =
+            Maps.newHashMap();
+    private long max;
+    private long min;
+
+    /**
+     * Creates a default user role builder.
+     */
+    public RangeValueBuilder() {
+    }
+
+    /**
+     * Creates a range value builder from a range value object.
+     *
+     * @param base the range value object
+     */
+    public RangeValueBuilder(RangeValue base) {
+        max = base.getMax();
+        min = base.getMin();
+    }
+
+    /**
+     * Sets the maximum value to be used by the builder.
+     *
+     * @param value maximum range value
+     * @return self
+     */
+    public RangeValueBuilder max(long value) {
+        max = value;
+        return this;
+    }
+
+    /**
+     * Sets the minimum value to be used by the builder.
+     *
+     * @param value minimum range value
+     * @return self
+     */
+    public RangeValueBuilder min(long value) {
+        min = value;
+        return this;
+    }
+
+    /**
+     * Adds an augmentation to the augmentation list. If the given augmentation
+     * is null, then removes the augmentation type from the map.
+     *
+     * @param augmentationType the type of argumentation
+     * @param augmentation the augmentation
+     * @return self
+     */
+    public RangeValueBuilder addAugmentation(
+            Class<? extends RangeValue> augmentationType,
+            RangeValue augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Deletes an augmentation from the augmentation list.
+     *
+     * @param augmentationType the type of argumentation
+     * @return self
+     */
+    public RangeValueBuilder removeAugmentation(
+            Class<? extends RangeValue> augmentationType) {
+            augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds a range value from this builder instance.
+     *
+     * @return range value
+     */
+    public RangeValue build() {
+        return new RangeValueImpl(this);
+    }
+
+    /**
+     * The implementation of range value interface.
+     */
+    private static final class RangeValueImpl implements RangeValue {
+
+        private final long max;
+        private final long min;
+        private Map<Class<? extends RangeValue>, RangeValue> augmentation;
+
+        private RangeValueImpl(RangeValueBuilder base) {
+            max = base.max;
+            min = base.min;
+            augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public long getMax() {
+            return max;
+        }
+
+        @Override
+        public long getMin() {
+            return min;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(max, min, augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            RangeValueImpl o = (RangeValueImpl) obj;
+            return Objects.equals(max, o.max) &&
+                    Objects.equals(min, o.min) &&
+                    Objects.equals(augmentation, o.augmentation);
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("max", max)
+                    .add("min", min)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/StringValue.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/StringValue.java
new file mode 100755
index 0000000..c4330c5
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/StringValue.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.property.instance.property.values;
+
+/**
+ * Single string value's information.
+ */
+public interface StringValue {
+
+    /**
+     * Returns the primary value of YANG list type.
+     *
+     * @return the value
+     */
+    String getValue();
+
+    /**
+     * Returns the primary order of YANG list type.
+     *
+     * @return the order
+     */
+    long getOrder();
+
+    /**
+     * Returns the primary key of YANG list type.
+     *
+     * @return the key
+     */
+    StringValueKey getKey();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/StringValueBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/StringValueBuilder.java
new file mode 100755
index 0000000..304d59c
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/StringValueBuilder.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.property.instance.property.values;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import com.google.common.collect.Maps;
+
+/**
+ * The builder of string value.
+ */
+public class StringValueBuilder {
+
+    private static final long MAX_LENGTH =  4294967295L;
+    private static final long MIN_LENGTH =  0L;
+    private static final String ERROR_LEN_MSG = "Invalid range:" +
+            " %s, expected: [[" + MIN_LENGTH + "‥" + MAX_LENGTH + "]].";
+
+    private Map<Class<? extends StringValue>, StringValue> augmentation =
+            Maps.newHashMap();
+    private StringValueKey key;
+    private long order;
+    private String value;
+
+    /**
+     * Creates a default user role builder.
+     */
+    public StringValueBuilder() {
+    }
+
+    /**
+     * Creates a string value builder from a string value object.
+     *
+     * @param base string value object
+     */
+    public StringValueBuilder(StringValue base) {
+        if (base.getKey() == null) {
+            key = new StringValueKey(base.getOrder(), base.getValue());
+            order = base.getOrder();
+            value = base.getValue();
+        } else {
+            key = base.getKey();
+            order = key.getOrder();
+            value = key.getValue();
+        }
+    }
+
+    /**
+     * Sets the string value key to be used by the builder.
+     *
+     * @param key string value key value
+     * @return self
+     */
+    public StringValueBuilder key(StringValueKey key) {
+        this.key = key;
+        return this;
+    }
+
+    /**
+     * Sets the order value to be used by the builder.
+     *
+     * @param order string order value
+     * @return self
+     */
+    public StringValueBuilder order(long order) {
+        checkOrderRange(order);
+        this.order = order;
+        return this;
+    }
+
+    /**
+     * Sets the value to be used by the builder.
+     *
+     * @param value string value
+     * @return self
+     */
+    public StringValueBuilder value(String value) {
+        this.value = value;
+        return this;
+    }
+
+    /**
+     * Adds an augmentation to the augmentation list. If the given augmentation
+     * is null, then removes the augmentation type from the map.
+     *
+     * @param augmentationType the type of argumentation
+     * @param augmentation the augmentation
+     * @return self
+     */
+    public StringValueBuilder addAugmentation(
+            Class<? extends StringValue> augmentationType,
+            StringValue augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Deletes an augmentation from the augmentation list.
+     *
+     * @param augmentationType the type of argumentation
+     * @return self
+     */
+    public StringValueBuilder removeAugmentation(
+            Class<? extends StringValue> augmentationType) {
+        this.augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds a string value from this builder instance.
+     *
+     * @return string value
+     */
+    public StringValue build() {
+        return new StringValueImpl(this);
+    }
+
+    private static void checkOrderRange(long value) {
+        if (value < MIN_LENGTH || value > MAX_LENGTH) {
+            throw new IllegalArgumentException(
+                    String.format(ERROR_LEN_MSG, value));
+        }
+    }
+
+    /**
+     * The implementation of string value interface.
+     */
+    private static final class StringValueImpl implements StringValue {
+
+        private final StringValueKey key;
+        private final long order;
+        private final String value;
+        private final Map<Class<? extends StringValue>, StringValue>
+                augmentation;
+
+        private StringValueImpl(StringValueBuilder base) {
+            if (base.key == null) {
+                key = new StringValueKey(base.order, base.value);
+                order = base.order;
+                value = base.value;
+            } else {
+                key = base.key;
+                order = key.getOrder();
+                value = key.getValue();
+            }
+            augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public StringValueKey getKey() {
+            return key;
+        }
+
+        @Override
+        public long getOrder() {
+            return order;
+        }
+
+        @Override
+        public String getValue() {
+            return value;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(key, order, value, augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            StringValueImpl o = (StringValueImpl) obj;
+            return Objects.equals(key, o.key) &&
+                    Objects.equals(order, o.order) &&
+                    Objects.equals(value, o.value) &&
+                    Objects.equals(augmentation, o.augmentation);
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("key", key)
+                    .add("order", order)
+                    .add("value", value)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/StringValueKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/StringValueKey.java
new file mode 100755
index 0000000..479198e
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/StringValueKey.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright 2016-present 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.nemo.model.object.property.instance.property.values;
+
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * The key to differentiate string value.
+ */
+public class StringValueKey {
+    private final String value;
+    private final long order;
+
+    /**
+     * Creates a string value key from a given value.
+     *
+     * @param order the string value key order
+     * @param value the string value
+     */
+    public StringValueKey(long order, String value) {
+        this.order = order;
+        this.value = value;
+    }
+
+    /**
+     * Creates a copy from a given string value key instance.
+     *
+     * @param source the string value key
+     */
+    public StringValueKey(StringValueKey source) {
+        value = source.value;
+        order = source.order;
+    }
+
+    /**
+     * Returns the value of this instance.
+     *
+     * @return string value
+     */
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * Returns the order of this instance.
+     *
+     * @return order the order
+     */
+    public long getOrder() {
+        return order;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(value, order);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        StringValueKey o = (StringValueKey) obj;
+        return Objects.equals(value, o.value) &&
+                Objects.equals(order, o.order);
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this).add("value", value)
+                .add("order", order)
+                .toString();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/package-info.java
new file mode 100755
index 0000000..b85dd1e
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/instance/property/values/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present 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.
+ */
+
+/**
+ * Property values classes for NEMO model.
+ */
+package org.onosproject.nemo.model.object.property.instance.property.values;
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/package-info.java
new file mode 100755
index 0000000..634eeba
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/object/property/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-present 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.
+ */
+
+/**
+ * Property classes for NEMO model.
+ */
+package org.onosproject.nemo.model.object.property;
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ActionDefinitions.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ActionDefinitions.java
index 9f3cf78..dd42fc7 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ActionDefinitions.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ActionDefinitions.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ActionDefinitionsBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ActionDefinitionsBuilder.java
index 039dc92..13e5af6 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ActionDefinitionsBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ActionDefinitionsBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ConditionParameterDefinitions.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ConditionParameterDefinitions.java
index 7c0b3e9..1e870be 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ConditionParameterDefinitions.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ConditionParameterDefinitions.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ConditionParameterDefinitionsBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ConditionParameterDefinitionsBuilder.java
index 4cdf1ef..fc8e72b 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ConditionParameterDefinitionsBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/ConditionParameterDefinitionsBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/NemoOperationData.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/NemoOperationData.java
index f89d59d..97efd10 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/NemoOperationData.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/NemoOperationData.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinition.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinition.java
index a32b9fa..f3c5af2 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinition.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinition.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionBuilder.java
index a949a78..a520cec 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionKey.java
index aacd456..d2672d1 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionKey.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionKey.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/package-info.java
index 49839ff..010dd71 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/package-info.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/definitions/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValue.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValue.java
index 417162c..35d3e49 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValue.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValue.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014-present Open Networking Laboratory
+ * Copyright 2014-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueBuilder.java
index d2f86f3..a4f3ee9 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014-present Open Networking Laboratory
+ * Copyright 2014-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueKey.java
index f8cda4d..1942392 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueKey.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueKey.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValue.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValue.java
index cfa501f..aeef4d4 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValue.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValue.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValueBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValueBuilder.java
index f39d600..3a4358b 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValueBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValueBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2014-present Open Networking Laboratory
+ * Copyright 2014-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValue.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValue.java
index 81b5f0e..c514eb1 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValue.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValue.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueBuilder.java
index c255863..61db3b6 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueKey.java
index 95f72f3..faa6866 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueKey.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueKey.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/Utils.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/Utils.java
index f372e33..9df8280 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/Utils.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/Utils.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/package-info.java
index 857ce92..d356f31 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/package-info.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/package-info.java
index aea81db..e275d1b 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/package-info.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/package-info.java
index a23cf12..7800d0b 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/package-info.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinition.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinition.java
index 8987857..7295cf4 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinition.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinition.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionBuilder.java
index 7eadd84..7ee4809 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionKey.java
index d0d787c..31ccbf2 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionKey.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionKey.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/condition/parameter/definition/ParameterMatchPatterns.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/condition/parameter/definition/ParameterMatchPatterns.java
index 7d5e123..849dc68 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/condition/parameter/definition/ParameterMatchPatterns.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/condition/parameter/definition/ParameterMatchPatterns.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/condition/parameter/definition/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/condition/parameter/definition/package-info.java
index d21c478..cddf451 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/condition/parameter/definition/package-info.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/condition/parameter/definition/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/package-info.java
index c42f25f..af1ead0 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/package-info.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/package-info.java
index ade6de1..0b7f70b 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/package-info.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/user/NemoUserData.java b/nemoengine/src/main/java/org/onosproject/nemo/model/user/NemoUserData.java
index e01e9ca..6f077c3 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/user/NemoUserData.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/user/NemoUserData.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/user/UserInstance.java b/nemoengine/src/main/java/org/onosproject/nemo/model/user/UserInstance.java
index d9b266b..e2c1c77 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/user/UserInstance.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/user/UserInstance.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/user/UserRoles.java b/nemoengine/src/main/java/org/onosproject/nemo/model/user/UserRoles.java
index a600be5..1cecdf6 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/user/UserRoles.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/user/UserRoles.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/user/UserRolesBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/user/UserRolesBuilder.java
index d49b406..2ed4a5b 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/user/UserRolesBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/user/UserRolesBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/user/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/user/package-info.java
index 3095bd9..6b8239a 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/user/package-info.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/user/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/UserRole.java b/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/UserRole.java
index 4fc9fe5..7404deb 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/UserRole.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/UserRole.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/UserRoleBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/UserRoleBuilder.java
index a0696f6..b138ded 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/UserRoleBuilder.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/UserRoleBuilder.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/UserRoleKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/UserRoleKey.java
index cd53377..990534b 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/UserRoleKey.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/UserRoleKey.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/package-info.java
index ada7ed5..53954c8 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/package-info.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/user/roles/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/service/NemoEngine.java b/nemoengine/src/main/java/org/onosproject/nemo/service/NemoEngine.java
index 9d65ccc..60f073c 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/service/NemoEngine.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/service/NemoEngine.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/service/NemoService.java b/nemoengine/src/main/java/org/onosproject/nemo/service/NemoService.java
index 0331d4c..59ad22a 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/service/NemoService.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/service/NemoService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/service/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/service/package-info.java
index 311efbc..ccf8662 100644
--- a/nemoengine/src/main/java/org/onosproject/nemo/service/package-info.java
+++ b/nemoengine/src/main/java/org/onosproject/nemo/service/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/AbstractCommonTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/AbstractCommonTest.java
index 780c4cc..3d6d1ea 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/AbstractCommonTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/AbstractCommonTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ActionNameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ActionNameTest.java
index 1d09efa..ace5b1f 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ActionNameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ActionNameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConditionParameterNameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConditionParameterNameTest.java
index 2df9c5d..a315089 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConditionParameterNameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConditionParameterNameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConditionSegmentIdTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConditionSegmentIdTest.java
index b134f3a..f166896 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConditionSegmentIdTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConditionSegmentIdTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConnectionIdTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConnectionIdTest.java
index bc56fb7..805c49e 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConnectionIdTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConnectionIdTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConnectionNameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConnectionNameTest.java
index 18c8f06..7d1f791 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConnectionNameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConnectionNameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConnectionTypeTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConnectionTypeTest.java
index 7e4e0ee..13d78cc 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConnectionTypeTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConnectionTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConstraintParameterNameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConstraintParameterNameTest.java
index 9fae39f..d8852fb 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConstraintParameterNameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConstraintParameterNameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConstraintSegmentIdTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConstraintSegmentIdTest.java
index d8ecf2c..eb74e73 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConstraintSegmentIdTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ConstraintSegmentIdTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/DescriptionTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/DescriptionTest.java
index 50518cf..59062e8 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/DescriptionTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/DescriptionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/FlowIdTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/FlowIdTest.java
index a430ab9..6c02a4f 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/FlowIdTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/FlowIdTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/FlowNameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/FlowNameTest.java
index 6eff50c..9617212 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/FlowNameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/FlowNameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/FlowTypeTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/FlowTypeTest.java
index 9100942..3fdaf6e 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/FlowTypeTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/FlowTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/IntentIdTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/IntentIdTest.java
index d08e8f6..b4d4f63 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/IntentIdTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/IntentIdTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/MatchItemNameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/MatchItemNameTest.java
index cf9824c..2f7b570 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/MatchItemNameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/MatchItemNameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/NameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/NameTest.java
index f4f0b72..652d368 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/NameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/NameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/NodeIdTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/NodeIdTest.java
index 8eaf2d9..bcfc9cd 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/NodeIdTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/NodeIdTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/NodeNameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/NodeNameTest.java
index a19b911..b7a3b6e 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/NodeNameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/NodeNameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/NodeTypeTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/NodeTypeTest.java
index 383260b..6e5f9c0 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/NodeTypeTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/NodeTypeTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ObjectIdTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ObjectIdTest.java
index 935d57a..978e0e3 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ObjectIdTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ObjectIdTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ObjectNameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ObjectNameTest.java
index 3873586..efc461b 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ObjectNameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ObjectNameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/OperationIdTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/OperationIdTest.java
index 3382a84..2b25ccb 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/OperationIdTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/OperationIdTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/OperationNameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/OperationNameTest.java
index 0364a9e..f0a4fcf 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/OperationNameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/OperationNameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ParameterNameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ParameterNameTest.java
index e24ff32..822c484 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/ParameterNameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/ParameterNameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/PropertyNameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/PropertyNameTest.java
index 56a3321..a0740eb 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/PropertyNameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/PropertyNameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UniqueIdTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UniqueIdTest.java
index df04489..6fc33be 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UniqueIdTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UniqueIdTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserIdTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserIdTest.java
index 31ba234..1132aa7 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserIdTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserIdTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserNameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserNameTest.java
index 3815553..fb7e386 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserNameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserNameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserPasswordTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserPasswordTest.java
index 990633d..3bafb3c 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserPasswordTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserPasswordTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserRoleDescriptionTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserRoleDescriptionTest.java
index 2045440..e1da035 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserRoleDescriptionTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserRoleDescriptionTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserRoleNameTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserRoleNameTest.java
index f01a7d1..c299e8b 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserRoleNameTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UserRoleNameTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UuidTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UuidTest.java
index 434f235..bb7d959 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/common/UuidTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/common/UuidTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/BeginTransactionInputBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/BeginTransactionInputBuilderTest.java
index 5621411..7c6f723 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/BeginTransactionInputBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/BeginTransactionInputBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/BeginTransactionOutputBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/BeginTransactionOutputBuilderTest.java
index fa9a0ec..0c26ba6 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/BeginTransactionOutputBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/BeginTransactionOutputBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/EndTransactionInputBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/EndTransactionInputBuilderTest.java
index bd4b76c..eebc8e8 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/EndTransactionInputBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/EndTransactionInputBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/EndTransactionOutputBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/EndTransactionOutputBuilderTest.java
index e12289f..45511de 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/EndTransactionOutputBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/EndTransactionOutputBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestInputBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestInputBuilderTest.java
index 227acc8..4cb862d 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestInputBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestInputBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestOutputBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestOutputBuilderTest.java
index 2271458..d2aa929 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestOutputBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/LanguageStyleNemoRequestOutputBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/RegisterUserOutputBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/RegisterUserOutputBuilderTest.java
index 4181ffb..6018910 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/RegisterUserOutputBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/RegisterUserOutputBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/StructureStyleNemoDeleteOutputBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/StructureStyleNemoDeleteOutputBuilderTest.java
index 9bf0636..73c6b8f 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/StructureStyleNemoDeleteOutputBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/StructureStyleNemoDeleteOutputBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/StructureStyleNemoUpdateOutputBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/StructureStyleNemoUpdateOutputBuilderTest.java
index 4638c22..88d644d 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/StructureStyleNemoUpdateOutputBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/StructureStyleNemoUpdateOutputBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/ObjectsBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/ObjectsBuilderTest.java
index 7916fb1..5d2f96e 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/ObjectsBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/ObjectsBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/OperationsBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/OperationsBuilderTest.java
index ceed8c5..de134b2 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/OperationsBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/intent/structure/style/nemo/delete/input/OperationsBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/object/match/item/definitions/MatchItemDefinitionKeyTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/object/match/item/definitions/MatchItemDefinitionKeyTest.java
new file mode 100644
index 0000000..193e064
--- /dev/null
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/object/match/item/definitions/MatchItemDefinitionKeyTest.java
@@ -0,0 +1,48 @@
+package org.onosproject.nemo.model.object.match.item.definitions;
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.onosproject.nemo.model.common.MatchItemName;
+
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Unit tests for {@link MatchItemDefinitionKey}.
+ */
+public class MatchItemDefinitionKeyTest {
+
+    private static final String NAME = "SomeName";
+    private static final String OTHER = "OtherName";
+    private static final String NAME_ERROR_MSG = "name not set";
+
+    private MatchItemDefinitionKey source;
+    private MatchItemDefinitionKey copy;
+    private MatchItemDefinitionKey diff;
+
+    @Test
+    public void fromMatchItemName() {
+        source = new MatchItemDefinitionKey(new MatchItemName(NAME));
+        assertEquals(NAME_ERROR_MSG, NAME,
+                source.getMatchItemName().getValue());
+    }
+
+    @Test
+    public void copyConstructor() {
+        source = new MatchItemDefinitionKey(new MatchItemName(NAME));
+        copy = new MatchItemDefinitionKey(source);
+        new EqualsTester()
+                .addEqualityGroup(source, copy)
+                .testEquals();
+    }
+
+    @Test
+    public void equality() {
+        source = new MatchItemDefinitionKey(new MatchItemName(NAME));
+        copy = new MatchItemDefinitionKey(new MatchItemName(NAME));
+        diff = new MatchItemDefinitionKey(new MatchItemName(OTHER));
+        new EqualsTester()
+                .addEqualityGroup(source, copy)
+                .addEqualityGroup(diff)
+                .testEquals();
+    }
+}
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinitionBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinitionBuilderTest.java
new file mode 100644
index 0000000..be4eec0
--- /dev/null
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinitionBuilderTest.java
@@ -0,0 +1,104 @@
+package org.onosproject.nemo.model.object.node.definitions;
+
+import static junit.framework.Assert.assertEquals;
+
+import org.junit.Test;
+import org.onosproject.nemo.model.common.NodeType;
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Unit tests for {@link NodeDefinitionBuilder}.
+ */
+public class NodeDefinitionBuilderTest {
+
+    private static final String TYPE = "SomeName";
+    private static final String OTHER_TYPE = "OtherName";
+    private static final String TYPE_ERROR_MSG = "name not set";
+    private static final String KEY_ERROR_MSG = "key not set";
+    private NodeDefinitionKey key;
+    private NodeType name;
+    private NodeType otherName;
+    private NodeDefinition listParam;
+    private NodeDefinition def;
+    private NodeDefinition copy;
+    private NodeDefinition diff;
+
+    @Test
+    public void buildNodeDefinitionWithNodeDefinitionKey() {
+        name = new NodeType(TYPE);
+        key = new NodeDefinitionKey(name);
+        listParam = new NodeDefinitionBuilder()
+                .key(key)
+                .build();
+        def = new NodeDefinitionBuilder()
+                .key(key)
+                .addAugmentation(NodeDefinition.class, listParam)
+                .build();
+        def = new NodeDefinitionBuilder(def)
+                .addAugmentation(NodeDefinition.class, null)
+                .build();
+        assertEquals(TYPE_ERROR_MSG, name, def.getNodeType());
+        assertEquals(KEY_ERROR_MSG, key, def.getKey());
+    }
+
+    @Test
+    public void buildNodeDefinitionWithNodeType() {
+        name = new NodeType(TYPE);
+        key = new NodeDefinitionKey(name);
+        listParam = new NodeDefinitionBuilder()
+                .nodeType(name)
+                .build();
+        def = new NodeDefinitionBuilder()
+                .nodeType(name)
+                .addAugmentation(NodeDefinition.class, listParam)
+                .build();
+        def = new NodeDefinitionBuilder(def)
+                .addAugmentation(NodeDefinition.class, null)
+                .build();
+        assertEquals(TYPE_ERROR_MSG, name, def.getNodeType());
+        assertEquals(KEY_ERROR_MSG, key, def.getKey());
+    }
+
+    @Test
+    public void fromNodeWithNodeKey() {
+        name = new NodeType(TYPE);
+        key = new NodeDefinitionKey(name);
+        def = new NodeDefinitionBuilder()
+                .key(key)
+                .build();
+        copy = new NodeDefinitionBuilder(def).build();
+        assertEquals(TYPE_ERROR_MSG, name, copy.getNodeType());
+        assertEquals(KEY_ERROR_MSG, key, copy.getKey());
+    }
+
+    @Test
+    public void fromActionWithActionName() {
+        name = new NodeType(TYPE);
+        key = new NodeDefinitionKey(name);
+        def = new NodeDefinitionBuilder()
+                .nodeType(name)
+                .build();
+        copy = new NodeDefinitionBuilder(def).build();
+        assertEquals(TYPE_ERROR_MSG, name, copy.getNodeType());
+        assertEquals(KEY_ERROR_MSG, key, copy.getKey());
+    }
+
+    @Test
+    public void equality() {
+        name = new NodeType(TYPE);
+        def = new NodeDefinitionBuilder()
+                .nodeType(name)
+                .build();
+        copy = new NodeDefinitionBuilder()
+                .nodeType(name)
+                .build();
+        otherName = new NodeType(OTHER_TYPE);
+        diff = new NodeDefinitionBuilder()
+                .nodeType(otherName)
+                .build();
+        new EqualsTester()
+                .addEqualityGroup(def, copy)
+                .addEqualityGroup(diff)
+                .testEquals();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinitionKeyTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinitionKeyTest.java
new file mode 100644
index 0000000..8071d9f
--- /dev/null
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/definitions/NodeDefinitionKeyTest.java
@@ -0,0 +1,46 @@
+package org.onosproject.nemo.model.object.node.definitions;
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.onosproject.nemo.model.common.NodeType;
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Unit tests for {@link NodeDefinitionKey}.
+ */
+public class NodeDefinitionKeyTest {
+
+    private static final String TYPE = "SomeType";
+    private static final String OTHER = "OtherType";
+    private static final String TYPE_ERROR_MSG = "type not set";
+
+    private NodeDefinitionKey key;
+    private NodeDefinitionKey copy;
+    private NodeDefinitionKey diff;
+
+    @Test
+    public void fromNodeType() {
+        key = new NodeDefinitionKey(new NodeType(TYPE));
+        assertEquals(TYPE_ERROR_MSG, TYPE, key.getNodeType().getValue());
+    }
+
+    @Test
+    public void copyConstructor() {
+        key = new NodeDefinitionKey(new NodeType(TYPE));
+        copy = new NodeDefinitionKey(key);
+        new EqualsTester()
+                .addEqualityGroup(key, copy)
+                .testEquals();
+    }
+
+    @Test
+    public void equality() {
+        key = new NodeDefinitionKey(new NodeType(TYPE));
+        copy = new NodeDefinitionKey(new NodeType(TYPE));
+        diff = new NodeDefinitionKey(new NodeType(OTHER));
+        new EqualsTester()
+                .addEqualityGroup(key, copy)
+                .addEqualityGroup(diff)
+                .testEquals();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/instance/PropertyBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/instance/PropertyBuilderTest.java
new file mode 100644
index 0000000..cc8d8d4
--- /dev/null
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/instance/PropertyBuilderTest.java
@@ -0,0 +1,104 @@
+package org.onosproject.nemo.model.object.node.instance;
+
+import static junit.framework.Assert.assertEquals;
+
+import org.junit.Test;
+import org.onosproject.nemo.model.common.PropertyName;
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Unit tests for {@link PropertyBuilder}.
+ */
+public class PropertyBuilderTest {
+
+    private static final String NAME = "SomeName";
+    private static final String OTHER_NAME = "OtherName";
+    private static final String NAME_ERROR_MSG = "name not set";
+    private static final String KEY_ERROR_MSG = "key not set";
+    private PropertyKey key;
+    private PropertyName name;
+    private PropertyName otherName;
+    private Property listParam;
+    private Property def;
+    private Property copy;
+    private Property diff;
+
+    @Test
+    public void buildPropertyWithPropertyKey() {
+        name = new PropertyName(NAME);
+        key = new PropertyKey(name);
+        listParam = new PropertyBuilder()
+                .key(key)
+                .build();
+        def = new PropertyBuilder()
+                .key(key)
+                .addAugmentation(Property.class, listParam)
+                .build();
+        def = new PropertyBuilder(def)
+                .addAugmentation(Property.class, null)
+                .build();
+        assertEquals(NAME_ERROR_MSG, name, def.getPropertyName());
+        assertEquals(KEY_ERROR_MSG, key, def.getKey());
+    }
+
+    @Test
+    public void buildPropertyWithPropertyName() {
+        name = new PropertyName(NAME);
+        key = new PropertyKey(name);
+        listParam = new PropertyBuilder()
+                .propertyName(name)
+                .build();
+        def = new PropertyBuilder()
+                .propertyName(name)
+                .addAugmentation(Property.class, listParam)
+                .build();
+        def = new PropertyBuilder(def)
+                .addAugmentation(Property.class, null)
+                .build();
+        assertEquals(NAME_ERROR_MSG, name, def.getPropertyName());
+        assertEquals(KEY_ERROR_MSG, key, def.getKey());
+    }
+
+    @Test
+    public void fromPropertyWithPropertyKey() {
+        name = new PropertyName(NAME);
+        key = new PropertyKey(name);
+        def = new PropertyBuilder()
+                .key(key)
+                .build();
+        copy = new PropertyBuilder(def).build();
+        assertEquals(NAME_ERROR_MSG, name, copy.getPropertyName());
+        assertEquals(KEY_ERROR_MSG, key, copy.getKey());
+    }
+
+    @Test
+    public void fromPropertyWithPropertyName() {
+        name = new PropertyName(NAME);
+        key = new PropertyKey(name);
+        def = new PropertyBuilder()
+                .propertyName(name)
+                .build();
+        copy = new PropertyBuilder(def).build();
+        assertEquals(NAME_ERROR_MSG, name, copy.getPropertyName());
+        assertEquals(KEY_ERROR_MSG, key, copy.getKey());
+    }
+
+    @Test
+    public void equality() {
+        name = new PropertyName(NAME);
+        def = new PropertyBuilder()
+                .propertyName(name)
+                .build();
+        copy = new PropertyBuilder()
+                .propertyName(name)
+                .build();
+        otherName = new PropertyName(OTHER_NAME);
+        diff = new PropertyBuilder()
+                .propertyName(otherName)
+                .build();
+        new EqualsTester()
+                .addEqualityGroup(def, copy)
+                .addEqualityGroup(diff)
+                .testEquals();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/instance/PropertyKeyTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/instance/PropertyKeyTest.java
new file mode 100644
index 0000000..ba6c8bb
--- /dev/null
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/instance/PropertyKeyTest.java
@@ -0,0 +1,47 @@
+package org.onosproject.nemo.model.object.node.instance;
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.onosproject.nemo.model.common.PropertyName;
+
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Unit tests for {@link PropertyKey}.
+ */
+public class PropertyKeyTest {
+
+    private static final String NAME = "SomeName";
+    private static final String OTHER = "OtherName";
+    private static final String NAME_ERROR_MSG = "name not set";
+
+    private PropertyKey key;
+    private PropertyKey copy;
+    private PropertyKey diff;
+
+    @Test
+    public void fromPropertyName() {
+        key = new PropertyKey(new PropertyName(NAME));
+        assertEquals(NAME_ERROR_MSG, NAME, key.getPropertyName().getValue());
+    }
+
+    @Test
+    public void copyConstructor() {
+        key = new PropertyKey(new PropertyName(NAME));
+        copy = new PropertyKey(key);
+        new EqualsTester()
+                .addEqualityGroup(key, copy)
+                .testEquals();
+    }
+
+    @Test
+    public void equality() {
+        key = new PropertyKey(new PropertyName(NAME));
+        copy = new PropertyKey(new PropertyName(NAME));
+        diff = new PropertyKey(new PropertyName(OTHER));
+        new EqualsTester()
+                .addEqualityGroup(key, copy)
+                .addEqualityGroup(diff)
+                .testEquals();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/instance/SubNodeBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/instance/SubNodeBuilderTest.java
new file mode 100644
index 0000000..5c1b02c
--- /dev/null
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/instance/SubNodeBuilderTest.java
@@ -0,0 +1,104 @@
+package org.onosproject.nemo.model.object.node.instance;
+
+import static junit.framework.Assert.assertEquals;
+
+import org.junit.Test;
+import org.onosproject.nemo.model.common.NodeId;
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Unit tests for {@link SubNodeBuilder}.
+ */
+public class SubNodeBuilderTest {
+
+    private static final String NODEID = "14ce424a-3e50-4a2a-ad5c-b29845158c8b";
+    private static final String OTHER = "a4ce424a-3e50-4a2a-ad5c-b29845158c8b";
+    private static final String NODEID_ERROR_MSG = "node id not set";
+    private static final String KEY_ERROR_MSG = "key not set";
+    private SubNodeKey key;
+    private NodeId name;
+    private NodeId otherName;
+    private SubNode listParam;
+    private SubNode def;
+    private SubNode copy;
+    private SubNode diff;
+
+    @Test
+    public void buildSubNodeWithSubNodeKey() {
+        name = new NodeId(NODEID);
+        key = new SubNodeKey(name);
+        listParam = new SubNodeBuilder()
+                .key(key)
+                .build();
+        def = new SubNodeBuilder()
+                .key(key)
+                .addAugmentation(SubNode.class, listParam)
+                .build();
+        def = new SubNodeBuilder(def)
+                .addAugmentation(SubNode.class, null)
+                .build();
+        assertEquals(NODEID_ERROR_MSG, name, def.getNodeId());
+        assertEquals(KEY_ERROR_MSG, key, def.getKey());
+    }
+
+    @Test
+    public void buildSubNodeWithSubNodeName() {
+        name = new NodeId(NODEID);
+        key = new SubNodeKey(name);
+        listParam = new SubNodeBuilder()
+                .nodeId(name)
+                .build();
+        def = new SubNodeBuilder()
+                .nodeId(name)
+                .addAugmentation(SubNode.class, listParam)
+                .build();
+        def = new SubNodeBuilder(def)
+                .addAugmentation(SubNode.class, null)
+                .build();
+        assertEquals(NODEID_ERROR_MSG, name, def.getNodeId());
+        assertEquals(KEY_ERROR_MSG, key, def.getKey());
+    }
+
+    @Test
+    public void fromSubNodeWithSubNodeKey() {
+        name = new NodeId(NODEID);
+        key = new SubNodeKey(name);
+        def = new SubNodeBuilder()
+                .key(key)
+                .build();
+        copy = new SubNodeBuilder(def).build();
+        assertEquals(NODEID_ERROR_MSG, name, copy.getNodeId());
+        assertEquals(KEY_ERROR_MSG, key, copy.getKey());
+    }
+
+    @Test
+    public void fromSubNodeWithSubNodeName() {
+        name = new NodeId(NODEID);
+        key = new SubNodeKey(name);
+        def = new SubNodeBuilder()
+                .nodeId(name)
+                .build();
+        copy = new SubNodeBuilder(def).build();
+        assertEquals(NODEID_ERROR_MSG, name, copy.getNodeId());
+        assertEquals(KEY_ERROR_MSG, key, copy.getKey());
+    }
+
+    @Test
+    public void equality() {
+        name = new NodeId(NODEID);
+        def = new SubNodeBuilder()
+                .nodeId(name)
+                .build();
+        copy = new SubNodeBuilder()
+                .nodeId(name)
+                .build();
+        otherName = new NodeId(OTHER);
+        diff = new SubNodeBuilder()
+                .nodeId(otherName)
+                .build();
+        new EqualsTester()
+                .addEqualityGroup(def, copy)
+                .addEqualityGroup(diff)
+                .testEquals();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/instance/SubNodeKeyTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/instance/SubNodeKeyTest.java
new file mode 100644
index 0000000..cbd612d
--- /dev/null
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/object/node/instance/SubNodeKeyTest.java
@@ -0,0 +1,47 @@
+package org.onosproject.nemo.model.object.node.instance;
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.onosproject.nemo.model.common.NodeId;
+
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Unit tests for {@link SubNodeKey}.
+ */
+public class SubNodeKeyTest {
+
+    private static final String NODEID = "14ce424a-3e50-4a2a-ad5c-b29845158c8b";
+    private static final String OTHER = "a4ce424a-3e50-4a2a-ad5c-b29845158c8b";
+    private static final String NODEID_ERROR_MSG = "node id not set";
+
+    private SubNodeKey key;
+    private SubNodeKey copy;
+    private SubNodeKey diff;
+
+    @Test
+    public void fromNodeId() {
+        key = new SubNodeKey(new NodeId(NODEID));
+        assertEquals(NODEID_ERROR_MSG, NODEID, key.getNodeId().getValue());
+    }
+
+    @Test
+    public void copyConstructor() {
+        key = new SubNodeKey(new NodeId(NODEID));
+        copy = new SubNodeKey(key);
+        new EqualsTester()
+                .addEqualityGroup(key, copy)
+                .testEquals();
+    }
+
+    @Test
+    public void equality() {
+        key = new SubNodeKey(new NodeId(NODEID));
+        copy = new SubNodeKey(new NodeId(NODEID));
+        diff = new SubNodeKey(new NodeId(OTHER));
+        new EqualsTester()
+                .addEqualityGroup(key, copy)
+                .addEqualityGroup(diff)
+                .testEquals();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinitionBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinitionBuilderTest.java
new file mode 100644
index 0000000..16f7006
--- /dev/null
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinitionBuilderTest.java
@@ -0,0 +1,121 @@
+package org.onosproject.nemo.model.object.property.definitions;
+
+import static junit.framework.Assert.assertEquals;
+
+import org.junit.Test;
+import org.onosproject.nemo.model.common.PropertyName;
+import org.onosproject.nemo.model.object.property.definitions.PropertyDefinition.PropertyValueType;
+
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Unit tests for {@link PropertyDefinitionBuilder}.
+ */
+public class PropertyDefinitionBuilderTest {
+
+    private static final String NAME = "SomeName";
+    private static final String OTHER_NAME = "OtherName";
+    private static final String NAME_ERROR_MSG = "name not set";
+    private static final String KEY_ERROR_MSG = "key not set";
+    private static final String TYPE_ERROR_MSG = "type not set";
+
+    private PropertyDefinitionKey key;
+    private PropertyDefinition.PropertyValueType type;
+    private PropertyName name;
+    private PropertyName otherName;
+    private PropertyDefinition listParam;
+    private PropertyDefinition def;
+    private PropertyDefinition copy;
+    private PropertyDefinition diff;
+
+    @Test
+    public void buildPropertyDefinitionWithPropertyDefinitionKey() {
+        name = new PropertyName(NAME);
+        key = new PropertyDefinitionKey(name);
+        type = PropertyValueType.forValue(0);
+        listParam = new PropertyDefinitionBuilder()
+                .key(key)
+                .build();
+        def = new PropertyDefinitionBuilder()
+                .key(key)
+                .propertyValueType(type)
+                .addAugmentation(PropertyDefinition.class, listParam)
+                .build();
+        def = new PropertyDefinitionBuilder(def)
+                .addAugmentation(PropertyDefinition.class, null)
+                .build();
+        assertEquals(NAME_ERROR_MSG, name, def.getPropertyName());
+        assertEquals(KEY_ERROR_MSG, key, def.getKey());
+        assertEquals(TYPE_ERROR_MSG, type, def.getPropertyValueType());
+    }
+
+    @Test
+    public void buildPropertyDefinitionWithPropertyName() {
+        name = new PropertyName(NAME);
+        key = new PropertyDefinitionKey(name);
+        type = PropertyValueType.forValue(0);
+        listParam = new PropertyDefinitionBuilder()
+                .propertyName(name)
+                .build();
+        def = new PropertyDefinitionBuilder()
+                .propertyValueType(type)
+                .propertyName(name)
+                .addAugmentation(PropertyDefinition.class, listParam)
+                .build();
+        def = new PropertyDefinitionBuilder(def)
+                .addAugmentation(PropertyDefinition.class, null)
+                .build();
+        assertEquals(NAME_ERROR_MSG, name, def.getPropertyName());
+        assertEquals(KEY_ERROR_MSG, key, def.getKey());
+        assertEquals(TYPE_ERROR_MSG, type, def.getPropertyValueType());
+    }
+
+    @Test
+    public void fromPropertyWithPropertyKey() {
+        name = new PropertyName(NAME);
+        key = new PropertyDefinitionKey(name);
+        type = PropertyValueType.forValue(0);
+        def = new PropertyDefinitionBuilder()
+                .propertyValueType(type)
+                .key(key)
+                .build();
+        copy = new PropertyDefinitionBuilder(def).build();
+        assertEquals(NAME_ERROR_MSG, name, copy.getPropertyName());
+        assertEquals(KEY_ERROR_MSG, key, copy.getKey());
+        assertEquals(TYPE_ERROR_MSG, type, def.getPropertyValueType());
+    }
+
+    @Test
+    public void fromPropertyWithPropertyName() {
+        name = new PropertyName(NAME);
+        key = new PropertyDefinitionKey(name);
+        type = PropertyValueType.forValue(0);
+        def = new PropertyDefinitionBuilder()
+                .propertyValueType(type)
+                .propertyName(name)
+                .build();
+        copy = new PropertyDefinitionBuilder(def).build();
+        assertEquals(NAME_ERROR_MSG, name, copy.getPropertyName());
+        assertEquals(KEY_ERROR_MSG, key, copy.getKey());
+        assertEquals(TYPE_ERROR_MSG, type, def.getPropertyValueType());
+    }
+
+    @Test
+    public void equality() {
+        name = new PropertyName(NAME);
+        def = new PropertyDefinitionBuilder()
+                .propertyName(name)
+                .build();
+        copy = new PropertyDefinitionBuilder()
+                .propertyName(name)
+                .build();
+        otherName = new PropertyName(OTHER_NAME);
+        diff = new PropertyDefinitionBuilder()
+                .propertyName(otherName)
+                .build();
+        new EqualsTester()
+                .addEqualityGroup(def, copy)
+                .addEqualityGroup(diff)
+                .testEquals();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinitionKeyTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinitionKeyTest.java
new file mode 100644
index 0000000..5b99f74
--- /dev/null
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/object/property/definitions/PropertyDefinitionKeyTest.java
@@ -0,0 +1,48 @@
+package org.onosproject.nemo.model.object.property.definitions;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import org.onosproject.nemo.model.common.PropertyName;
+
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Unit tests for {@link PropertyDefinitionKey}.
+ */
+public class PropertyDefinitionKeyTest {
+
+    private static final String NAME = "SomeName";
+    private static final String OTHER = "OtherName";
+    private static final String NAME_ERROR_MSG = "name not set";
+
+    private PropertyDefinitionKey key;
+    private PropertyDefinitionKey copy;
+    private PropertyDefinitionKey diff;
+
+    @Test
+    public void fromActionName() {
+        key = new PropertyDefinitionKey(new PropertyName(NAME));
+        assertEquals(NAME_ERROR_MSG, NAME, key.getPropertyName().getValue());
+    }
+
+    @Test
+    public void copyConstructor() {
+        key = new PropertyDefinitionKey(new PropertyName(NAME));
+        copy = new PropertyDefinitionKey(key);
+        new EqualsTester()
+                .addEqualityGroup(key, copy)
+                .testEquals();
+    }
+
+    @Test
+    public void equality() {
+        key = new PropertyDefinitionKey(new PropertyName(NAME));
+        copy = new PropertyDefinitionKey(new PropertyName(NAME));
+        diff = new PropertyDefinitionKey(new PropertyName(OTHER));
+        new EqualsTester()
+                .addEqualityGroup(key, copy)
+                .addEqualityGroup(diff)
+                .testEquals();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/object/property/instance/property/values/IntValueKeyTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/object/property/instance/property/values/IntValueKeyTest.java
new file mode 100644
index 0000000..53969e0
--- /dev/null
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/object/property/instance/property/values/IntValueKeyTest.java
@@ -0,0 +1,50 @@
+package org.onosproject.nemo.model.object.property.instance.property.values;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Unit tests for {@link IntValueKey}.
+ */
+public class IntValueKeyTest {
+
+    private static final long VALUE = 1;
+    private static final long OTHER_VALUE = 2;
+    private static final String VALUE_ERROR_MSG = "value not set";
+    private static final long ORDER = 1;
+    private static final long OTHER_ORDER = 2;
+    private static final String ORDER_ERROR_MSG = "order not set";
+
+    private IntValueKey key;
+    private IntValueKey copy;
+    private IntValueKey diff;
+
+    @Test
+    public void fromIntValue() {
+        key = new IntValueKey(VALUE,ORDER);
+        assertEquals(VALUE_ERROR_MSG, VALUE, key.getValue());
+        assertEquals(ORDER_ERROR_MSG, ORDER, key.getOrder());
+    }
+
+    @Test
+    public void copyConstructor() {
+        key = new IntValueKey(VALUE,ORDER);
+        copy = new IntValueKey(key);
+        new EqualsTester()
+                .addEqualityGroup(key, copy)
+                .testEquals();
+    }
+
+    @Test
+    public void equality() {
+        key = new IntValueKey(VALUE,ORDER);
+        copy = new IntValueKey(VALUE,ORDER);
+        diff = new IntValueKey(OTHER_VALUE,OTHER_ORDER);
+        new EqualsTester()
+                .addEqualityGroup(key, copy)
+                .addEqualityGroup(diff)
+                .testEquals();
+    }
+}
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/object/property/instance/property/values/StringValueKeyTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/object/property/instance/property/values/StringValueKeyTest.java
new file mode 100644
index 0000000..d836f3f
--- /dev/null
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/object/property/instance/property/values/StringValueKeyTest.java
@@ -0,0 +1,51 @@
+package org.onosproject.nemo.model.object.property.instance.property.values;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+import com.google.common.testing.EqualsTester;
+
+/**
+ * Unit tests for {@link StringValueKey}.
+ */
+public class StringValueKeyTest {
+
+    private static final String VALUE = "SomeValue";
+    private static final String OTHER_VALUE = "OtherValue";
+    private static final String VALUE_ERROR_MSG = "value not set";
+    private static final long ORDER = 1;
+    private static final long OTHER_ORDER = 2;
+    private static final String ORDER_ERROR_MSG = "order not set";
+
+    private StringValueKey source;
+    private StringValueKey copy;
+    private StringValueKey diff;
+
+    @Test
+    public void fromStringValueKey() {
+        source = new StringValueKey(ORDER,VALUE);
+        assertEquals(VALUE_ERROR_MSG, VALUE, source.getValue());
+        assertEquals(ORDER_ERROR_MSG, ORDER, source.getOrder());
+    }
+
+    @Test
+    public void copyConstructor() {
+        source = new StringValueKey(ORDER,VALUE);
+        copy = new StringValueKey(source);
+        new EqualsTester()
+                .addEqualityGroup(source, copy)
+                .testEquals();
+    }
+
+    @Test
+    public void equality() {
+        source = new StringValueKey(ORDER,VALUE);
+        copy = new StringValueKey(ORDER,VALUE);
+        diff = new StringValueKey(OTHER_ORDER,OTHER_VALUE);
+        new EqualsTester()
+                .addEqualityGroup(source, copy)
+                .addEqualityGroup(diff)
+                .testEquals();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/operation/ActionDefinitionsBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/operation/ActionDefinitionsBuilderTest.java
index 10d4046..f1fb613 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/operation/ActionDefinitionsBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/operation/ActionDefinitionsBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/operation/ConditionParameterDefinitionsBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/operation/ConditionParameterDefinitionsBuilderTest.java
index f52c760..55ef571 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/operation/ConditionParameterDefinitionsBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/operation/ConditionParameterDefinitionsBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionBuilderTest.java
index 8f8fc67..28e3e6e 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionKeyTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionKeyTest.java
index c1110dd..193f285 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionKeyTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/operation/action/definitions/ActionDefinitionKeyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionBuilderTest.java
index 42995e1..c6f65ec 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionKeyTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionKeyTest.java
index ea6a9ad..8cae960 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionKeyTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/operation/condition/parameter/definitions/ConditionParameterDefinitionKeyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/user/UserRolesBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/user/UserRolesBuilderTest.java
index e3f01df..d2603ab 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/user/UserRolesBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/user/UserRolesBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/user/roles/UserRoleBuilderTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/user/roles/UserRoleBuilderTest.java
index 0ed2cd0..8ea2380 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/user/roles/UserRoleBuilderTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/user/roles/UserRoleBuilderTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoengine/src/test/java/org/onosproject/nemo/model/user/roles/UserRoleKeyTest.java b/nemoengine/src/test/java/org/onosproject/nemo/model/user/roles/UserRoleKeyTest.java
index d5686be..f3baa45 100644
--- a/nemoengine/src/test/java/org/onosproject/nemo/model/user/roles/UserRoleKeyTest.java
+++ b/nemoengine/src/test/java/org/onosproject/nemo/model/user/roles/UserRoleKeyTest.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoweb/pom.xml b/nemoweb/pom.xml
index 367f1ad..cac10ff 100644
--- a/nemoweb/pom.xml
+++ b/nemoweb/pom.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  ~ Copyright 2016-present Open Networking Laboratory
+  ~ Copyright 2016-present Open Networking Foundation
   ~
   ~ Licensed under the Apache License, Version 2.0 (the "License");
   ~ you may not use this file except in compliance with the License.
diff --git a/nemoweb/src/main/java/org/onosproject/nemo/web/package-info.java b/nemoweb/src/main/java/org/onosproject/nemo/web/package-info.java
index b41aaee..7ce9582 100644
--- a/nemoweb/src/main/java/org/onosproject/nemo/web/package-info.java
+++ b/nemoweb/src/main/java/org/onosproject/nemo/web/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoweb/src/main/java/org/onosproject/nemo/web/rest/NemoWebApplication.java b/nemoweb/src/main/java/org/onosproject/nemo/web/rest/NemoWebApplication.java
index 14bd162..c4ab96f 100644
--- a/nemoweb/src/main/java/org/onosproject/nemo/web/rest/NemoWebApplication.java
+++ b/nemoweb/src/main/java/org/onosproject/nemo/web/rest/NemoWebApplication.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoweb/src/main/java/org/onosproject/nemo/web/rest/NemoWebResource.java b/nemoweb/src/main/java/org/onosproject/nemo/web/rest/NemoWebResource.java
index 3859f15..05aa398 100644
--- a/nemoweb/src/main/java/org/onosproject/nemo/web/rest/NemoWebResource.java
+++ b/nemoweb/src/main/java/org/onosproject/nemo/web/rest/NemoWebResource.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoweb/src/main/java/org/onosproject/nemo/web/rest/package-info.java b/nemoweb/src/main/java/org/onosproject/nemo/web/rest/package-info.java
index f0adbaa..ed86be9 100644
--- a/nemoweb/src/main/java/org/onosproject/nemo/web/rest/package-info.java
+++ b/nemoweb/src/main/java/org/onosproject/nemo/web/rest/package-info.java
@@ -1,5 +1,5 @@
 /*
- * Copyright 2016-present Open Networking Laboratory
+ * Copyright 2016-present Open Networking Foundation
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/nemoweb/src/main/webapp/WEB-INF/web.xml b/nemoweb/src/main/webapp/WEB-INF/web.xml
index dcba8fc..7f92ded 100644
--- a/nemoweb/src/main/webapp/WEB-INF/web.xml
+++ b/nemoweb/src/main/webapp/WEB-INF/web.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-  ~ Copyright 2016-present Open Networking Laboratory
+  ~ Copyright 2016-present Open Networking Foundation
   ~
   ~ Licensed under the Apache License, Version 2.0 (the "License");
   ~ you may not use this file except in compliance with the License.
diff --git a/pom.xml b/pom.xml
index 471a1d8..1a113c7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1,5 +1,5 @@
 <!--
-  ~ Copyright 2016-present Open Networking Laboratory
+  ~ Copyright 2016-present Open Networking Foundation
   ~
   ~ Licensed under the Apache License, Version 2.0 (the "License");
   ~ you may not use this file except in compliance with the License.
