diff --git a/feature-lifecycle/pom.xml b/feature-lifecycle/pom.xml
index b57847a..952cf98 100644
--- a/feature-lifecycle/pom.xml
+++ b/feature-lifecycle/pom.xml
@@ -129,6 +129,25 @@
             <scope>test</scope>
         </dependency>
 
+        <dependency>
+            <groupId>org.onap.policy.common</groupId>
+            <artifactId>gson</artifactId>
+            <version>${policy.common.version}</version>
+        </dependency>
+
+        <dependency>
+            <groupId>org.onap.policy.models</groupId>
+            <artifactId>policy-models-examples</artifactId>
+            <version>${policy.models.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
+            <groupId>com.openpojo</groupId>
+            <artifactId>openpojo</artifactId>
+            <scope>test</scope>
+        </dependency>
+
     </dependencies>
 
 </project>
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/DroolsPolicy.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/DroolsPolicy.java
new file mode 100644
index 0000000..a023466
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/DroolsPolicy.java
@@ -0,0 +1,44 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.experimental.SuperBuilder;
+
+@Data
+@SuperBuilder
+public abstract class DroolsPolicy {
+    @SerializedName("type")
+    protected String type;
+
+    @SerializedName("type_version")
+    protected String typeVersion;
+
+    @SerializedName("version")
+    protected String version;
+
+    @SerializedName("name")
+    protected String name;
+
+    @SerializedName("metadata")
+    protected Metadata metadata;
+}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/Metadata.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/Metadata.java
new file mode 100644
index 0000000..fd68e5b
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/Metadata.java
@@ -0,0 +1,40 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * Metadata in Native Drools Policies.
+ */
+
+@Data
+@Builder
+public class Metadata implements Serializable {
+
+    private static final long serialVersionUID = -1027974819756498893L;
+
+    @SerializedName("policy-id")
+    protected String policyId;
+}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java
new file mode 100644
index 0000000..bda7748
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerCustomSerializer.java
@@ -0,0 +1,39 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models.controller;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.experimental.SuperBuilder;
+
+
+@Data
+@SuperBuilder
+public class ControllerCustomSerializer implements Serializable {
+    private static final long serialVersionUID = 1505345574249332514L;
+
+    @SerializedName("customSerializerClass")
+    protected String customSerializerClass;
+
+    @SerializedName("jsonParser")
+    protected String jsonParser;
+}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java
new file mode 100644
index 0000000..0d5a363
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerPolicy.java
@@ -0,0 +1,41 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models.controller;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.experimental.SuperBuilder;
+import org.onap.policy.drools.domain.models.DroolsPolicy;
+
+/**
+ * Controller Policy model root object.
+ */
+
+@Data
+@SuperBuilder
+public class ControllerPolicy extends DroolsPolicy implements Serializable {
+
+    private static final long serialVersionUID = -8171337852833516581L;
+
+    @SerializedName("properties")
+    protected ControllerProperties properties;
+}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java
new file mode 100644
index 0000000..0ed6d33
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerProperties.java
@@ -0,0 +1,52 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models.controller;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import java.util.List;
+import java.util.Map;
+import lombok.Data;
+import lombok.experimental.SuperBuilder;
+
+
+/**
+ * Controller Domain Policy.
+ */
+
+@Data
+@SuperBuilder
+public class ControllerProperties implements Serializable {
+    private static final long serialVersionUID = 1259434187110418986L;
+
+    @SerializedName("controllerName")
+    protected String controllerName;
+
+    @SerializedName("sourceTopics")
+    protected List<ControllerSourceTopic> sourceTopics;
+
+    @SerializedName("sinkTopics")
+    protected List<ControllerSinkTopic> sinkTopics;
+
+    @SerializedName("customConfig")
+    protected Map<String, String> customConfig;
+
+}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java
new file mode 100644
index 0000000..77a5e93
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSerialization.java
@@ -0,0 +1,42 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models.controller;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.experimental.SuperBuilder;
+
+
+@Data
+@SuperBuilder
+public class ControllerSerialization implements Serializable {
+
+    @SerializedName("eventClass")
+    public String eventClass;
+
+    @SerializedName("eventFilter")
+    public String eventFilter;
+
+    @SerializedName("customSerializer")
+    public ControllerCustomSerializer customSerializer;
+
+}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java
new file mode 100644
index 0000000..acb4fb0
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSinkTopic.java
@@ -0,0 +1,45 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models.controller;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import java.util.List;
+import lombok.Data;
+import lombok.experimental.SuperBuilder;
+
+
+/**
+ * Sink Topic.
+ */
+
+@Data
+@SuperBuilder
+public class ControllerSinkTopic implements Serializable {
+    private static final long serialVersionUID = 8770353732981476267L;
+
+    @SerializedName("topicName")
+    protected String topicName;
+
+    @SerializedName("serialization")
+    protected List<ControllerSerialization> serialization;
+
+}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java
new file mode 100644
index 0000000..69d57bc
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/controller/ControllerSourceTopic.java
@@ -0,0 +1,44 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models.controller;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import java.util.List;
+import lombok.Data;
+import lombok.experimental.SuperBuilder;
+
+
+/**
+ * Source Topics.
+ */
+
+@Data
+@SuperBuilder
+public class ControllerSourceTopic implements Serializable {
+    private static final long serialVersionUID = -1732598566914643612L;
+
+    @SerializedName("topicName")
+    protected String topicName;
+
+    @SerializedName("serialization")
+    protected List<ControllerSerialization> serialization;
+}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java
new file mode 100644
index 0000000..0af9633
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsController.java
@@ -0,0 +1,43 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models.nativ.rules;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * Controller Model in Native Drools Policies.
+ */
+
+@Data
+@Builder
+public class NativeDroolsController implements Serializable {
+
+    private static final long serialVersionUID = -2070515139072136869L;
+
+    @SerializedName("name")
+    protected String name;
+
+    @SerializedName("version")
+    protected String version;
+}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java
new file mode 100644
index 0000000..fce6ca1
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsPolicy.java
@@ -0,0 +1,41 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models.nativ.rules;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.experimental.SuperBuilder;
+import org.onap.policy.drools.domain.models.DroolsPolicy;
+
+/**
+ * Native Drools Policy model root object.
+ */
+
+@Data
+@SuperBuilder
+public class NativeDroolsPolicy extends DroolsPolicy implements Serializable {
+
+    private static final long serialVersionUID = -8171337852833516581L;
+
+    @SerializedName("properties")
+    protected NativeDroolsProperties properties;
+}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java
new file mode 100644
index 0000000..dfd25ca
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsProperties.java
@@ -0,0 +1,42 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models.nativ.rules;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * Properties in Native Drools Policies.
+ */
+
+@Data
+@Builder
+public class NativeDroolsProperties implements Serializable {
+    private static final long serialVersionUID = 2360030332628276427L;
+
+    @SerializedName("rulesArtifact")
+    protected NativeDroolsRulesArtifact rulesArtifact;
+
+    @SerializedName("controller")
+    protected NativeDroolsController controller;
+}
diff --git a/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java
new file mode 100644
index 0000000..8ca3386
--- /dev/null
+++ b/feature-lifecycle/src/main/java/org/onap/policy/drools/domain/models/nativ/rules/NativeDroolsRulesArtifact.java
@@ -0,0 +1,46 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models.nativ.rules;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import lombok.Builder;
+import lombok.Data;
+
+/**
+ * Rules Artifact in Native Drools Policies.
+ */
+
+@Data
+@Builder
+public class NativeDroolsRulesArtifact implements Serializable {
+
+    private static final long serialVersionUID = -3519759514319217518L;
+
+    @SerializedName("groupId")
+    protected String groupId;
+
+    @SerializedName("artifactId")
+    protected String artifactId;
+
+    @SerializedName("version")
+    protected String version;
+}
diff --git a/feature-lifecycle/src/main/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json b/feature-lifecycle/src/main/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json
new file mode 100644
index 0000000..8548f7f
--- /dev/null
+++ b/feature-lifecycle/src/main/resources/schemas/onap.policies.controlloop.operational.common.Drools-1.0.0.schema.json
@@ -0,0 +1,315 @@
+{
+    "definitions": {},
+    "$schema": "http://json-schema.org/draft-07/schema#",
+    "$id": "http://www.onap.org/policy/models/schemas/onap.policies.controlloop.operational.common.Drools.schema.json",
+    "type": "object",
+    "title": "The Root Schema",
+    "required": [
+        "type",
+        "type_version",
+        "version",
+        "metadata",
+        "properties"
+    ],
+    "properties": {
+        "type": {
+            "$id": "#/properties/type",
+            "type": "string",
+            "title": "Policy Type",
+            "default": "onap.policies.controlloop.operational.common.Drools",
+            "examples": [
+                "onap.policies.controlloop.operational.common.Drools"
+            ],
+            "pattern": "^(.+)$"
+        },
+        "type_version": {
+            "$id": "#/properties/type_version",
+            "type": "string",
+            "title": "Policy Type Version",
+            "default": "1.0.0",
+            "examples": [
+                "1.0.0"
+            ],
+            "pattern": "^(.+)$"
+        },
+        "name": {
+            "$id": "#/properties/name",
+            "type": "string",
+            "title": "Policy Name",
+            "default": "",
+            "examples": [
+                "example"
+            ],
+            "pattern": "^(.*)$"
+        },
+        "version": {
+            "$id": "#/properties/version",
+            "type": "string",
+            "title": "Policy Version",
+            "default": "1.0.0",
+            "examples": [
+                "1.0.0"
+            ],
+            "pattern": "^(.+)$"
+        },
+        "metadata": {
+            "$id": "#/properties/metadata",
+            "type": "object",
+            "title": "Metadata",
+            "required": [
+                "policy-id"
+            ],
+            "properties": {
+                "policy-id": {
+                    "$id": "#/properties/metadata/properties/policy-id",
+                    "type": "string",
+                    "title": "Policy ID",
+                    "examples": [
+                        "operational.restart"
+                    ],
+                    "pattern": "^(.+)$"
+                }
+            }
+        },
+        "properties": {
+            "$id": "#/properties/properties",
+            "type": "object",
+            "title": "Properties",
+            "required": [
+                "id",
+                "timeout",
+                "abatement",
+                "trigger",
+                "operations",
+                "controllerName"
+            ],
+            "properties": {
+                "id": {
+                    "$id": "#/properties/properties/properties/id",
+                    "type": "string",
+                    "title": "Control Loop Name",
+                    "examples": [
+                        "ControlLoop-vCPE-48f0c2c3-a172-4192-9ae3-052274181b6e"
+                    ],
+                    "pattern": "^(.+)$"
+                },
+                "timeout": {
+                    "$id": "#/properties/properties/properties/timeout",
+                    "type": "integer",
+                    "title": "Timeout in seconds",
+                    "minimum": 1,
+                    "default": 30,
+                    "examples": [
+                        3600
+                    ]
+                },
+                "abatement": {
+                    "$id": "#/properties/properties/properties/abatement",
+                    "type": "boolean",
+                    "title": "Abatement",
+                    "default": false,
+                    "examples": [
+                        true
+                    ]
+                },
+                "trigger": {
+                    "$id": "#/properties/properties/properties/trigger",
+                    "type": "string",
+                    "title": "Trigger Operation",
+                    "examples": [
+                        "unique-policy-id-1-restart"
+                    ],
+                    "pattern": "^(.+)$"
+                },
+                "operations": {
+                    "$id": "#/properties/properties/properties/operations",
+                    "type": "array",
+                    "title": "Operations",
+                    "items": {
+                        "$id": "#/properties/properties/properties/operations/items",
+                        "type": "object",
+                        "title": "Items",
+                        "uniqueItems": true,
+                        "required": [
+                            "id",
+                            "description",
+                            "operation",
+                            "timeout",
+                            "retries",
+                            "success",
+                            "failure",
+                            "failure_timeout",
+                            "failure_retries",
+                            "failure_exception",
+                            "failure_guard"
+                        ],
+                        "properties": {
+                            "id": {
+                                "$id": "#/properties/properties/properties/operations/items/properties/id",
+                                "type": "string",
+                                "title": "Operation Identifier",
+                                "examples": [
+                                    "unique-policy-id-1-restart"
+                                ],
+                                "pattern": "^(.+)$"
+                            },
+                            "description": {
+                                "$id": "#/properties/properties/properties/operations/items/properties/description",
+                                "type": "string",
+                                "title": "Description",
+                                "examples": [
+                                    "Restart the VM"
+                                ],
+                                "pattern": "^(.+)$"
+                            },
+                            "operation": {
+                                "$id": "#/properties/properties/properties/operations/items/properties/operation",
+                                "type": "object",
+                                "title": "Operation",
+                                "required": [
+                                    "actor",
+                                    "recipe",
+                                    "target"
+                                ],
+                                "properties": {
+                                    "actor": {
+                                        "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/actor",
+                                        "type": "string",
+                                        "title": "Actor",
+                                        "examples": [
+                                            "APPC"
+                                        ],
+                                        "pattern": "^(.+)$"
+                                    },
+                                    "recipe": {
+                                        "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/recipe",
+                                        "type": "string",
+                                        "title": "Recipe",
+                                        "examples": [
+                                            "Restart"
+                                        ],
+                                        "pattern": "^(.+)$"
+                                    },
+                                    "target": {
+                                        "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/target",
+                                        "type": "object",
+                                        "title": "Target",
+                                        "required": [
+                                            "type"
+                                        ],
+                                        "properties": {
+                                            "type": {
+                                                "$id": "#/properties/properties/properties/operations/items/properties/operation/properties/target/properties/type",
+                                                "type": "string",
+                                                "title": "Target Type",
+                                                "examples": [
+                                                    "VNF"
+                                                ],
+                                                "pattern": "^(.+)$"
+                                            }
+                                        }
+                                    }
+                                }
+                            },
+                            "timeout": {
+                                "$id": "#/properties/properties/properties/operations/items/properties/timeout",
+                                "type": "integer",
+                                "title": "Operation Timeout in seconds",
+                                "default": 10,
+                                "minimum": 1,
+                                "examples": [
+                                    1200
+                                ]
+                            },
+                            "retries": {
+                                "$id": "#/properties/properties/properties/operations/items/properties/retries",
+                                "type": "integer",
+                                "title": "Number of Retries",
+                                "default": 0,
+                                "examples": [
+                                    3
+                                ]
+                            },
+                            "success": {
+                                "$id": "#/properties/properties/properties/operations/items/properties/success",
+                                "type": "string",
+                                "title": "Success Treatment",
+                                "default": "final_success",
+                                "examples": [
+                                    "final_success",
+                                    "unique-policy-id-2"
+                                ],
+                                "pattern": "^(.+)$"
+                            },
+                            "failure": {
+                                "$id": "#/properties/properties/properties/operations/items/properties/failure",
+                                "type": "string",
+                                "title": "Failure Treatment",
+                                "default": "final_failure",
+                                "examples": [
+                                    "final_failure",
+                                    "unique-policy-id-2"
+                                ],
+                                "pattern": "^(.+)$"
+                            },
+                            "failure_timeout": {
+                                "$id": "#/properties/properties/properties/operations/items/properties/failure_timeout",
+                                "type": "string",
+                                "title": "Failure Timeout Treatment",
+                                "default": "final_failure_timeout",
+                                "examples": [
+                                    "final_failure_timeout",
+                                    "unique-policy-id-2"
+                                ],
+                                "pattern": "^(.+)$"
+                            },
+                            "failure_retries": {
+                                "$id": "#/properties/properties/properties/operations/items/properties/failure_retries",
+                                "type": "string",
+                                "title": "Failure Retries Treatment",
+                                "default": "final_failure_retries",
+                                "examples": [
+                                    "final_failure_retries",
+                                    "unique-policy-id-2"
+                                ],
+                                "pattern": "^(.+)$"
+                            },
+                            "failure_exception": {
+                                "$id": "#/properties/properties/properties/operations/items/properties/failure_exception",
+                                "type": "string",
+                                "title": "Failure Exception Treatment",
+                                "default": "",
+                                "examples": [
+                                    "final_failure_exception",
+                                    "unique-policy-id-2"
+                                ],
+                                "pattern": "^(.+)$"
+                            },
+                            "failure_guard": {
+                                "$id": "#/properties/properties/properties/operations/items/properties/failure_guard",
+                                "type": "string",
+                                "title": "Failure Guard Treatment",
+                                "default": "final_failure_guard",
+                                "examples": [
+                                    "final_failure_guard",
+                                    "unique-policy-id-2"
+                                ],
+                                "pattern": "^(.+)$"
+                            }
+                        }
+                    }
+                },
+                "controllerName": {
+                    "$id": "#/properties/properties/properties/controllerName",
+                    "type": "string",
+                    "title": "Controller Name",
+                    "default": "",
+                    "examples": [
+                        "usecases"
+                    ],
+                    "pattern": "^(.+)$"
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/feature-lifecycle/src/main/resources/schemas/onap.policies.drools.Controller-1.0.0.schema.json b/feature-lifecycle/src/main/resources/schemas/onap.policies.drools.Controller-1.0.0.schema.json
new file mode 100644
index 0000000..e07a3e1
--- /dev/null
+++ b/feature-lifecycle/src/main/resources/schemas/onap.policies.drools.Controller-1.0.0.schema.json
@@ -0,0 +1,274 @@
+{
+    "definitions": {},
+    "$schema": "http://json-schema.org/draft-07/schema#",
+    "$id": "http://www.onap.org/policy/models/schemas/onap.policies.drools.Controller.schema.json",
+    "type": "object",
+    "title": "Domain onap.policies.drools.Controller Policy root schema",
+    "required": [
+        "type",
+        "type_version",
+        "version",
+        "metadata",
+        "properties"
+    ],
+    "properties": {
+        "type": {
+            "$id": "#/properties/type",
+            "type": "string",
+            "title": "Policy Type",
+            "default": "onap.policies.native.Drools",
+            "examples": [
+                "onap.policies.native.Drools"
+            ],
+            "pattern": "^(.+)$"
+        },
+        "type_version": {
+            "$id": "#/properties/type_version",
+            "type": "string",
+            "title": "Policy Type Version",
+            "examples": [
+                "1.0.0"
+            ],
+            "pattern": "^(.+)$"
+        },
+        "version": {
+            "$id": "#/properties/version",
+            "type": "string",
+            "title": "Version",
+            "examples": [
+                "1.0.0"
+            ],
+            "pattern": "^(.+)$"
+        },
+        "name": {
+            "$id": "#/properties/name",
+            "type": "string",
+            "title": "Name",
+            "examples": [
+                "example"
+            ],
+            "pattern": "^(.+)$"
+        },
+        "metadata": {
+            "$id": "#/properties/metadata",
+            "type": "object",
+            "title": "Metadata",
+            "required": [
+                "policy-id"
+            ],
+            "properties": {
+                "policy-id": {
+                    "$id": "#/properties/metadata/properties/policy-id",
+                    "type": "string",
+                    "title": "The policy-id Schema",
+                    "examples": [
+                        "example"
+                    ],
+                    "pattern": "^(.+)$"
+                }
+            }
+        },
+        "properties": {
+            "$id": "#/properties/properties",
+            "type": "object",
+            "title": "Policy Domain Properties",
+            "required": [
+                "controllerName"
+            ],
+            "properties": {
+                "controllerName": {
+                    "$id": "#/properties/properties/properties/controllerName",
+                    "type": "string",
+                    "title": "Controller Name",
+                    "examples": [
+                        "example"
+                    ],
+                    "pattern": "^(.+)$"
+                },
+                "sourceTopics": {
+                    "$id": "#/properties/properties/properties/sourceTopics",
+                    "type": "array",
+                    "title": "Source Topics",
+                    "items": {
+                        "$id": "#/properties/properties/properties/sourceTopics/items",
+                        "type": "object",
+                        "title": "Topic Data",
+                        "required": [
+                            "topicName",
+                            "serialization"
+                        ],
+                        "properties": {
+                            "topicName": {
+                                "$id": "#/properties/properties/properties/sourceTopics/items/properties/topicName",
+                                "type": "string",
+                                "title": "Topic Name",
+                                "examples": [
+                                    "DCAE_TOPIC"
+                                ],
+                                "pattern": "^(.+)$"
+                            },
+                            "serialization": {
+                                "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization",
+                                "type": "array",
+                                "title": "Serialization",
+                                "items": {
+                                    "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items",
+                                    "type": "object",
+                                    "title": "Serialization  Data",
+                                    "required": [
+                                        "eventClass",
+                                        "eventFilter",
+                                        "customSerializer"
+                                    ],
+                                    "properties": {
+                                        "eventClass": {
+                                            "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/eventClass",
+                                            "type": "string",
+                                            "title": "Event Class",
+                                            "examples": [
+                                                "org.onap.policy.controlloop.CanonicalOnset"
+                                            ],
+                                            "pattern": "^(.+)$"
+                                        },
+                                        "eventFilter": {
+                                            "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/eventFilter",
+                                            "type": "string",
+                                            "title": "Event Filter",
+                                            "examples": [
+                                                "[?($.closedLoopEventStatus == 'ONSET')]"
+                                            ],
+                                            "pattern": "^(.+)$"
+                                        },
+                                        "customSerializer": {
+                                            "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/customSerializer",
+                                            "type": "object",
+                                            "title": "Custom Serializer",
+                                            "required": [
+                                                "customSerializerClass",
+                                                "jsonParser"
+                                            ],
+                                            "properties": {
+                                                "customSerializerClass": {
+                                                    "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/customSerializer/properties/customSerializerClass",
+                                                    "type": "string",
+                                                    "title": "Custom Serializer Class",
+                                                    "examples": [
+                                                        "org.onap.policy.controlloop.util.Serialization"
+                                                    ],
+                                                    "pattern": "^(.*)$"
+                                                },
+                                                "jsonParser": {
+                                                    "$id": "#/properties/properties/properties/sourceTopics/items/properties/serialization/items/properties/customSerializer/properties/jsonParser",
+                                                    "type": "string",
+                                                    "title": "JSON Parser reference",
+                                                    "examples": [
+                                                        "gson"
+                                                    ],
+                                                    "pattern": "^(.+)$"
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                },
+                "sinkTopics": {
+                    "$id": "#/properties/properties/properties/sinkTopics",
+                    "type": "array",
+                    "title": "Sink Topics",
+                    "items": {
+                        "$id": "#/properties/properties/properties/sinkTopics/items",
+                        "type": "object",
+                        "title": "Sink Topic Data",
+                        "required": [
+                            "topicName",
+                            "serialization"
+                        ],
+                        "properties": {
+                            "topicName": {
+                                "$id": "#/properties/properties/properties/sinkTopics/items/properties/topicName",
+                                "type": "string",
+                                "title": "Topic Name",
+                                "default": "",
+                                "examples": [
+                                    "APPC-CL"
+                                ],
+                                "pattern": "^(.+)$"
+                            },
+                            "serialization": {
+                                "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization",
+                                "type": "array",
+                                "title": "The Serialization Schema",
+                                "items": {
+                                    "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items",
+                                    "type": "object",
+                                    "title": "Serialization Data",
+                                    "required": [
+                                        "eventClass",
+                                        "eventFilter"
+                                    ],
+                                    "properties": {
+                                        "eventClass": {
+                                            "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/eventClass",
+                                            "type": "string",
+                                            "title": "Event Class",
+                                            "examples": [
+                                                "org.onap.policy.appc.Response"
+                                            ],
+                                            "pattern": "^(.+)$"
+                                        },
+                                        "eventFilter": {
+                                            "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/eventFilter",
+                                            "type": "string",
+                                            "title": "The Eventfilter Schema",
+                                            "examples": [
+                                                "[?($.CommonHeader && $.Status)]"
+                                            ],
+                                            "pattern": "^(.+)$"
+                                        },
+                                        "customSerializer": {
+                                            "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/customSerializer",
+                                            "type": "object",
+                                            "title": "The Customserializer Schema",
+                                            "required": [
+                                                "customSerializerClass",
+                                                "jsonParser"
+                                            ],
+                                            "properties": {
+                                                "customSerializerClass": {
+                                                    "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/customSerializer/properties/customSerializerClass",
+                                                    "type": "string",
+                                                    "title": "The Customserializerclass Schema",
+                                                    "examples": [
+                                                        "org.onap.policy.appc.util.Serialization"
+                                                    ],
+                                                    "pattern": "^(.+)$"
+                                                },
+                                                "jsonParser": {
+                                                    "$id": "#/properties/properties/properties/sinkTopics/items/properties/serialization/items/properties/customSerializer/properties/jsonParser",
+                                                    "type": "string",
+                                                    "title": "The Jsonparser Schema",
+                                                    "examples": [
+                                                        "gsonPretty"
+                                                    ],
+                                                    "pattern": "^(.+)$"
+                                                }
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                },
+                "customConfig": {
+                    "$id": "#/properties/properties/properties/customConfig",
+                    "type": "object",
+                    "title": "other Configuration"
+                }
+            }
+        }
+    }
+}
diff --git a/feature-lifecycle/src/main/resources/schemas/onap.policies.native.Drools-1.0.0.schema.json b/feature-lifecycle/src/main/resources/schemas/onap.policies.native.Drools-1.0.0.schema.json
new file mode 100644
index 0000000..d1866c6
--- /dev/null
+++ b/feature-lifecycle/src/main/resources/schemas/onap.policies.native.Drools-1.0.0.schema.json
@@ -0,0 +1,150 @@
+{
+    "definitions": {},
+    "$schema": "http://json-schema.org/draft-07/schema#",
+    "$id": "http://www.onap.org/policy/models/schemas/onap.policies.controlloop.native.Drools.schema.json",
+    "type": "object",
+    "title": "Domain onap.policies.controlloop.native.Drools Policy root schema",
+    "required": [
+        "type",
+        "type_version",
+        "version",
+        "metadata",
+        "properties"
+    ],
+    "properties": {
+        "type": {
+            "$id": "#/properties/type",
+            "type": "string",
+            "title": "Policy Type",
+            "default": "onap.policies.native.Drools",
+            "examples": [
+                "onap.policies.native.Drools"
+            ],
+            "pattern": "^(.+)$"
+        },
+        "type_version": {
+            "$id": "#/properties/type_version",
+            "type": "string",
+            "title": "Policy Type Version",
+            "examples": [
+                "1.0.0"
+            ],
+            "pattern": "^(.+)$"
+        },
+        "version": {
+            "$id": "#/properties/version",
+            "type": "string",
+            "title": "Version",
+            "examples": [
+                "1.0.0"
+            ],
+            "pattern": "^(.+)$"
+        },
+        "name": {
+            "$id": "#/properties/name",
+            "type": "string",
+            "title": "Name",
+            "examples": [
+                "example"
+            ],
+            "pattern": "^(.+)$"
+        },
+        "metadata": {
+            "$id": "#/properties/metadata",
+            "type": "object",
+            "title": "Metadata",
+            "required": [
+                "policy-id"
+            ],
+            "properties": {
+                "policy-id": {
+                    "$id": "#/properties/metadata/properties/policy-id",
+                    "type": "string",
+                    "title": "The Policy-id Schema",
+                    "examples": [
+                        "example"
+                    ],
+                    "pattern": "^(.+)$"
+                }
+            }
+        },
+        "properties": {
+            "$id": "#/properties/properties",
+            "type": "object",
+            "title": "Properties",
+            "required": [
+                "rulesArtifact"
+            ],
+            "properties": {
+                "rulesArtifact": {
+                    "$id": "#/properties/properties/properties/rulesArtifact",
+                    "type": "object",
+                    "title": "Rules Artifact",
+                    "required": [
+                        "groupId",
+                        "artifactId",
+                        "version"
+                    ],
+                    "properties": {
+                        "groupId": {
+                            "$id": "#/properties/properties/properties/rulesArtifact/properties/groupId",
+                            "type": "string",
+                            "title": "Group Id",
+                            "examples": [
+                                "org.onap.policy.controlloop"
+                            ],
+                            "pattern": "^(.*)$"
+                        },
+                        "artifactId": {
+                            "$id": "#/properties/properties/properties/rulesArtifact/properties/artifactId",
+                            "type": "string",
+                            "title": "Artifact ID",
+                            "examples": [
+                                "example"
+                            ],
+                            "pattern": "^(.*)$"
+                        },
+                        "version": {
+                            "$id": "#/properties/properties/properties/rulesArtifact/properties/version",
+                            "type": "string",
+                            "title": "Version",
+                            "examples": [
+                                "1.0.0"
+                            ],
+                            "pattern": "^(.*)$"
+                        }
+                    }
+                },
+                "controller": {
+                    "$id": "#/properties/properties/properties/controller",
+                    "type": "object",
+                    "title": "Controller",
+                    "required": [
+                        "name",
+                        "version"
+                    ],
+                    "properties": {
+                        "name": {
+                            "$id": "#/properties/properties/properties/controller/properties/name",
+                            "type": "string",
+                            "title": "Name",
+                            "examples": [
+                                "example"
+                            ],
+                            "pattern": "^(.+)$"
+                        },
+                        "version": {
+                            "$id": "#/properties/properties/properties/controller/properties/version",
+                            "type": "string",
+                            "title": "Version",
+                            "examples": [
+                                "1.0.0"
+                            ],
+                            "pattern": "^(.*)$"
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
diff --git a/feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DomainPolicyTypesTest.java b/feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DomainPolicyTypesTest.java
new file mode 100644
index 0000000..945b00b
--- /dev/null
+++ b/feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DomainPolicyTypesTest.java
@@ -0,0 +1,240 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import com.worldturner.medeia.api.ValidationFailedException;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.drools.domain.models.controller.ControllerPolicy;
+import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsController;
+import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsPolicy;
+import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsProperties;
+import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsRulesArtifact;
+import org.onap.policy.drools.policies.DomainMaker;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
+
+public class DomainPolicyTypesTest {
+
+    // Policy Types
+    private static final String OPERATIONAL_DROOLS_POLICY_TYPE = "onap.policies.controlloop.operational.common.Drools";
+    private static final String NATIVE_DROOLS_POLICY_TYPE = "onap.policies.native.Drools";
+
+    // Operational vCPE Policy
+    private static final String OP_POLICY_NAME_VCPE = "operational.restart";
+    private static final String VCPE_OPERATIONAL_DROOLS_POLICY_JSON =
+            "policies/vCPE.policy.operational.input.tosca.json";
+    public static final String VCPE_OPERATIONAL_DROOLS_LEGACY_POLICY_JSON =
+            "src/test/resources/tosca-policy-operational-restart.json";
+
+    // Native Drools Policy
+    private static final String EXAMPLE_NATIVE_DROOLS_POLICY_NAME = "example";
+    private static final String EXAMPLE_NATIVE_DROOLS_POLICY_JSON =
+            "src/test/resources/example.policy.native.drools.tosca.json";
+
+    // Controller Drools Policy
+    private static final String EXAMPLE_CONTROLLER_DROOLS_POLICY_NAME = "example";
+    private static final String EXAMPLE_CONTROLLER_DROOLS_POLICY_JSON =
+            "src/test/resources/example.policy.drools.controller.tosca.json";
+
+    private DomainMaker domainMaker;
+    private StandardCoder nonValCoder;
+
+    @Before
+    public void setUp() {
+        domainMaker = new DomainMaker();
+        nonValCoder = new StandardCoder();
+    }
+
+    @Test
+    public void testToscaOperationalPolicyType() throws CoderException, IOException {
+        String rawVcpeToscaPolicy = getExamplesPolicyString(VCPE_OPERATIONAL_DROOLS_POLICY_JSON, OP_POLICY_NAME_VCPE);
+        String rawVcpeLegacyToscaPolicy = getJsonFromFile(VCPE_OPERATIONAL_DROOLS_LEGACY_POLICY_JSON);
+
+        // valid "known" policy type with implicit schema
+        assertTrue(domainMaker
+            .isConformant(new ToscaPolicyTypeIdentifier(OPERATIONAL_DROOLS_POLICY_TYPE, "1.0.0"),
+                rawVcpeToscaPolicy));
+
+        // policy type without schema
+        assertFalse(domainMaker
+            .isConformant(new ToscaPolicyTypeIdentifier("blah.blah", "1.0.0"), rawVcpeToscaPolicy));
+
+        // known policy type but invalid json (legacy).
+        assertFalse(domainMaker
+            .isConformant(new ToscaPolicyTypeIdentifier(OPERATIONAL_DROOLS_POLICY_TYPE, "1.0.0"),
+                rawVcpeLegacyToscaPolicy));
+
+        ToscaPolicy vcpeToscaPolicy = getExamplesPolicy(VCPE_OPERATIONAL_DROOLS_POLICY_JSON, OP_POLICY_NAME_VCPE);
+        assertTrue(domainMaker.isConformant(vcpeToscaPolicy));
+        assertTrue(domainMaker.conformance(vcpeToscaPolicy));
+
+        // set an invalid value in the Tosca Policy (timeout less than minimum value).
+        final int timeout = (int) vcpeToscaPolicy.getProperties().get("timeout");
+        vcpeToscaPolicy.getProperties().put("timeout", 0);
+        assertFalse(domainMaker.isConformant(vcpeToscaPolicy));
+        assertThatThrownBy(() ->
+                                   domainMaker.conformance(vcpeToscaPolicy))
+                .isInstanceOf(ValidationFailedException.class)
+                .hasMessageContaining("Value 0 is smaller than minimum 1");
+
+        // put back the original timeout value in the Tosca Policy
+        vcpeToscaPolicy.getProperties().put("timeout", timeout);
+        assertTrue(domainMaker.isConformant(vcpeToscaPolicy));
+        assertTrue(domainMaker.conformance(vcpeToscaPolicy));
+
+        // remove required element
+        final Object operations = vcpeToscaPolicy.getProperties().remove("operations");
+        assertFalse(domainMaker.isConformant(vcpeToscaPolicy));
+        assertThatThrownBy(() ->
+                                   domainMaker.conformance(vcpeToscaPolicy))
+                .isInstanceOf(ValidationFailedException.class)
+                .hasMessageContaining("Required property operations is missing from object");
+
+        // put back the original operations value in the Tosca Policy
+        vcpeToscaPolicy.getProperties().put("operations", operations);
+        assertTrue(domainMaker.isConformant(vcpeToscaPolicy));
+        assertTrue(domainMaker.conformance(vcpeToscaPolicy));
+    }
+
+    @Test
+    public void testToscaNativeDroolsPolicy() throws CoderException, IOException {
+        String rawNativeDroolsPolicy =
+            getPolicyFromFileString(EXAMPLE_NATIVE_DROOLS_POLICY_JSON, EXAMPLE_NATIVE_DROOLS_POLICY_NAME);
+        ToscaPolicy toscaPolicy =
+            getExamplesPolicy(EXAMPLE_NATIVE_DROOLS_POLICY_JSON, EXAMPLE_NATIVE_DROOLS_POLICY_NAME);
+
+        ToscaPolicyTypeIdentifier policyTypeId =
+            new ToscaPolicyTypeIdentifier(NATIVE_DROOLS_POLICY_TYPE, "1.0.0");
+        domainMaker.isConformant(policyTypeId, rawNativeDroolsPolicy);
+
+        assertTrue(domainMaker.isConformant(toscaPolicy));
+        NativeDroolsPolicy domainDroolsPolicy = domainMaker.convertTo(toscaPolicy, NativeDroolsPolicy.class);
+        assertEquals("org.onap.policy.controlloop", domainDroolsPolicy.getProperties().getRulesArtifact().getGroupId());
+        assertEquals("example", domainDroolsPolicy.getProperties().getRulesArtifact().getArtifactId());
+        assertEquals("1.0.0", domainDroolsPolicy.getProperties().getRulesArtifact().getVersion());
+
+        String policyId = toscaPolicy.getMetadata().remove("policy-id");
+        assertThatThrownBy(() -> domainMaker.convertTo(toscaPolicy, NativeDroolsPolicy.class))
+                .isInstanceOf(CoderException.class).hasCauseInstanceOf(ValidationFailedException.class);
+
+        toscaPolicy.getMetadata().put("policy-id", policyId);
+
+        assertTrue(domainMaker.isDomainConformant(policyTypeId, domainDroolsPolicy));
+        assertTrue(domainMaker.conformance(policyTypeId, domainDroolsPolicy));
+
+        domainDroolsPolicy.setName("");
+        assertFalse(domainMaker.isDomainConformant(policyTypeId, domainDroolsPolicy));
+        assertThatThrownBy(() -> domainMaker.conformance(policyTypeId, domainDroolsPolicy))
+                .isInstanceOf(ValidationFailedException.class)
+                .hasMessageContaining("Pattern ^(.+)$ is not contained in text");
+
+        NativeDroolsPolicy domainDroolsPolicy2 =
+                NativeDroolsPolicy.builder().metadata(Metadata.builder().policyId("policy-id").build()).name("example")
+            .version("1.0.0").properties(
+                NativeDroolsProperties.builder().controller(
+                        NativeDroolsController.builder().name("example").version("1.0.0").build())
+                        .rulesArtifact(
+                                NativeDroolsRulesArtifact.builder().groupId("org.onap.policy.controlloop")
+                                        .artifactId("example").version("example").build()).build())
+            .type("onap.policies.native.Drools")
+            .typeVersion("1.0.0").build();
+        assertTrue(domainMaker
+            .isDomainConformant(
+                    new ToscaPolicyTypeIdentifier(domainDroolsPolicy2.getType(), domainDroolsPolicy2.getTypeVersion()),
+                    domainDroolsPolicy2));
+    }
+
+    @Test
+    public void testToscaControllerPolicy() throws CoderException {
+        ToscaPolicy toscaPolicy =
+                getExamplesPolicy(EXAMPLE_CONTROLLER_DROOLS_POLICY_JSON, EXAMPLE_CONTROLLER_DROOLS_POLICY_NAME);
+
+        assertTrue(domainMaker.isConformant(toscaPolicy));
+        ControllerPolicy controllerPolicy = domainMaker.convertTo(toscaPolicy, ControllerPolicy.class);
+
+        assertEquals("example", controllerPolicy.getName());
+        assertEquals("1.0.0", controllerPolicy.getVersion());
+        assertEquals("onap.policies.drools.Controller", controllerPolicy.getType());
+        assertEquals("1.0.0", controllerPolicy.getTypeVersion());
+        assertEquals("example", controllerPolicy.getMetadata().getPolicyId());
+        assertEquals("example", controllerPolicy.getProperties().getControllerName());
+        assertEquals("DCAE_TOPIC", controllerPolicy.getProperties().getSourceTopics().get(0).getTopicName());
+        assertEquals("org.onap.policy.controlloop.CanonicalOnset",
+            controllerPolicy.getProperties().getSourceTopics().get(0).getSerialization().get(0).getEventClass());
+        assertEquals("[?($.closedLoopEventStatus == 'ONSET')]",
+                controllerPolicy.getProperties().getSourceTopics().get(0).getSerialization().get(0).getEventFilter());
+        assertEquals("org.onap.policy.controlloop.util.Serialization",
+                controllerPolicy.getProperties().getSourceTopics().get(0).getSerialization().get(0)
+                        .getCustomSerializer().getCustomSerializerClass());
+        assertEquals("gson",
+                controllerPolicy.getProperties().getSourceTopics().get(0).getSerialization().get(0)
+                        .getCustomSerializer().getJsonParser());
+        assertEquals("APPC-CL", controllerPolicy.getProperties().getSinkTopics().get(0).getTopicName());
+        assertEquals("org.onap.policy.appc.Response",
+                controllerPolicy.getProperties().getSinkTopics().get(0).getSerialization().get(0).getEventClass());
+        assertEquals("[?($.CommonHeader && $.Status)]",
+                controllerPolicy.getProperties().getSinkTopics().get(0).getSerialization().get(0).getEventFilter());
+        assertEquals("org.onap.policy.appc.util.Serialization",
+                controllerPolicy.getProperties().getSinkTopics().get(0).getSerialization().get(0)
+                        .getCustomSerializer().getCustomSerializerClass());
+        assertEquals("gsonPretty",
+                controllerPolicy.getProperties().getSinkTopics().get(0).getSerialization().get(0)
+                        .getCustomSerializer().getJsonParser());
+        assertEquals("value1", controllerPolicy.getProperties().getCustomConfig().get("field1"));
+    }
+
+    private String getJsonFromFile(String filePath) throws IOException {
+        return new String(Files.readAllBytes(Paths.get(filePath)));
+    }
+
+    private String getJsonFromResource(String resourcePath) {
+        return ResourceUtils.getResourceAsString(resourcePath);
+    }
+
+    private String getPolicyFromFileString(String filePath, String policyName) throws CoderException, IOException {
+        String policyJson = getJsonFromFile(filePath);
+        ToscaServiceTemplate serviceTemplate = new StandardCoder().decode(policyJson, ToscaServiceTemplate.class);
+        return nonValCoder.encode(serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyName));
+    }
+
+    private ToscaPolicy getExamplesPolicy(String resourcePath, String policyName) throws CoderException {
+        String policyJson = getJsonFromResource(resourcePath);
+        ToscaServiceTemplate serviceTemplate = new StandardCoder().decode(policyJson, ToscaServiceTemplate.class);
+        return serviceTemplate.getToscaTopologyTemplate().getPolicies().get(0).get(policyName);
+    }
+
+    private String getExamplesPolicyString(String resourcePath, String policyName) throws CoderException {
+        return nonValCoder.encode(getExamplesPolicy(resourcePath, policyName));
+    }
+}
\ No newline at end of file
diff --git a/feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DroolsPolicyModelsTest.java b/feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DroolsPolicyModelsTest.java
new file mode 100644
index 0000000..813acdf
--- /dev/null
+++ b/feature-lifecycle/src/test/java/org/onap/policy/drools/domain/models/DroolsPolicyModelsTest.java
@@ -0,0 +1,86 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.domain.models;
+
+import com.openpojo.reflection.PojoClass;
+import com.openpojo.reflection.filters.FilterChain;
+import com.openpojo.reflection.filters.FilterClassName;
+import com.openpojo.reflection.filters.FilterNonConcrete;
+import com.openpojo.reflection.impl.PojoClassFactory;
+import com.openpojo.validation.Validator;
+import com.openpojo.validation.ValidatorBuilder;
+import com.openpojo.validation.test.impl.GetterTester;
+import com.openpojo.validation.test.impl.SetterTester;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Test;
+import org.onap.policy.drools.domain.models.controller.ControllerPolicy;
+import org.onap.policy.drools.domain.models.controller.ControllerProperties;
+import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsController;
+import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsPolicy;
+import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsProperties;
+import org.onap.policy.drools.domain.models.nativ.rules.NativeDroolsRulesArtifact;
+
+public class DroolsPolicyModelsTest {
+
+    @Test
+    public void testPackage() {
+        /* validate model pojos */
+        List<PojoClass> pojoClasses =
+                PojoClassFactory
+                        .getPojoClassesRecursively("org.onap.policy.drools.domain.models",
+                            new FilterChain(new FilterNonConcrete(),
+                                    new FilterClassName(DroolsPolicy.class.getName())));
+
+        Validator validator = ValidatorBuilder.create()
+                                      .with(new SetterTester(), new GetterTester()).build();
+        validator.validate(pojoClasses);
+    }
+
+    @Test
+    public void testBuildDomainPolicyNativeDrools() {
+        /* manually create a native drools policy */
+        NativeDroolsPolicy.builder().metadata(Metadata.builder().policyId("policy-id").build()).name("example")
+            .type("onap.policies.native.Drools")
+            .typeVersion("1.0.0")
+            .version("1.0.0")
+            .properties(
+                NativeDroolsProperties.builder().controller(
+                        NativeDroolsController.builder().name("example").version("1.0.0").build())
+                        .rulesArtifact(
+                                NativeDroolsRulesArtifact.builder().groupId("org.onap.policy.controlloop")
+                                        .artifactId("example").version("example").build()).build())
+            .build();
+    }
+
+    @Test
+    public void testBuildDomainPolicyController() {
+        /* manually create a controller policy */
+        ControllerPolicy.builder().metadata(Metadata.builder().policyId("policy-id").build()).name("example")
+            .version("1.0.0")
+            .type("onap.policies.drools.Controller")
+            .typeVersion("1.0.0")
+            .properties(ControllerProperties.builder().controllerName("example").sourceTopics(
+                    new ArrayList<>()).sinkTopics(new ArrayList<>()).build())
+            .build();
+    }
+
+}
\ No newline at end of file
diff --git a/feature-lifecycle/src/test/resources/example.policy.drools.controller.tosca.json b/feature-lifecycle/src/test/resources/example.policy.drools.controller.tosca.json
new file mode 100644
index 0000000..b4dd50d
--- /dev/null
+++ b/feature-lifecycle/src/test/resources/example.policy.drools.controller.tosca.json
@@ -0,0 +1,54 @@
+{
+    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+    "topology_template": {
+        "policies": [
+            {
+                "example": {
+                    "type": "onap.policies.drools.Controller",
+                    "type_version": "1.0.0",
+                    "version": "1.0.0",
+                    "name": "example",
+                    "metadata": {
+                        "policy-id": "example"
+                    },
+                    "properties": {
+                        "controllerName": "example",
+                        "sourceTopics": [
+                            {
+                                "topicName": "DCAE_TOPIC",
+                                "serialization": [
+                                    {
+                                        "eventClass": "org.onap.policy.controlloop.CanonicalOnset",
+                                        "eventFilter": "[?($.closedLoopEventStatus == 'ONSET')]",
+                                        "customSerializer": {
+                                            "customSerializerClass": "org.onap.policy.controlloop.util.Serialization",
+                                            "jsonParser": "gson"
+                                        }
+                                    }
+                                ]
+                            }
+                        ],
+                        "sinkTopics": [
+                            {
+                                "topicName": "APPC-CL",
+                                "serialization": [
+                                    {
+                                        "eventClass": "org.onap.policy.appc.Response",
+                                        "eventFilter": "[?($.CommonHeader && $.Status)]",
+                                        "customSerializer": {
+                                            "customSerializerClass": "org.onap.policy.appc.util.Serialization",
+                                            "jsonParser": "gsonPretty"
+                                        }
+                                    }
+                                ]
+                            }
+                        ],
+                        "customConfig": {
+                            "field1" : "value1"
+                        }
+                    }
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/feature-lifecycle/src/test/resources/example.policy.native.drools.tosca.json b/feature-lifecycle/src/test/resources/example.policy.native.drools.tosca.json
new file mode 100644
index 0000000..0313b2e
--- /dev/null
+++ b/feature-lifecycle/src/test/resources/example.policy.native.drools.tosca.json
@@ -0,0 +1,29 @@
+{
+    "tosca_definitions_version": "tosca_simple_yaml_1_0_0",
+    "topology_template": {
+        "policies": [
+            {
+                "example": {
+                    "type": "onap.policies.native.Drools",
+                    "type_version": "1.0.0",
+                    "version": "1.0.0",
+                    "name": "example",
+                    "metadata": {
+                        "policy-id": "example"
+                    },
+                    "properties": {
+                        "rulesArtifact": {
+                            "groupId": "org.onap.policy.controlloop",
+                            "artifactId": "example",
+                            "version": "1.0.0"
+                        },
+                        "controller": {
+                            "name": "example",
+                            "version": "1.0.0"
+                        }
+                    }
+                }
+            }
+        ]
+    }
+}
\ No newline at end of file
diff --git a/policy-utils/pom.xml b/policy-utils/pom.xml
index 1bc680b..f7bbff6 100644
--- a/policy-utils/pom.xml
+++ b/policy-utils/pom.xml
@@ -42,6 +42,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.onap.policy.common</groupId>
             <artifactId>utils</artifactId>
             <version>${policy.common.version}</version>
@@ -51,6 +56,21 @@
             <artifactId>commons-configuration2</artifactId>
             <version>2.4</version>
         </dependency>
+        <dependency>
+            <groupId>org.onap.policy.common</groupId>
+            <artifactId>gson</artifactId>
+            <version>${policy.common.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.onap.policy.models</groupId>
+            <artifactId>policy-models-tosca</artifactId>
+            <version>${policy.models.version}</version>
+        </dependency>
     </dependencies>
     <build>
         <plugins>
diff --git a/policy-utils/src/main/java/org/onap/policy/drools/policies/DomainMaker.java b/policy-utils/src/main/java/org/onap/policy/drools/policies/DomainMaker.java
new file mode 100644
index 0000000..6e1e088
--- /dev/null
+++ b/policy-utils/src/main/java/org/onap/policy/drools/policies/DomainMaker.java
@@ -0,0 +1,233 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.policies;
+
+import com.worldturner.medeia.api.ValidationFailedException;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import lombok.NoArgsConstructor;
+import lombok.NonNull;
+import org.apache.commons.lang3.StringUtils;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.common.utils.coder.StandardValCoder;
+import org.onap.policy.common.utils.resources.ResourceUtils;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Converts Tosca Policies into Domain policies.
+ *
+ * <p>
+ * A Domain Policy is a specialized version of the Tosca Policy that
+ * conform with a particular domain specification in json schema format.
+ * A ToscaPolicy is a generic data structure where domain data is contained
+ * in a Map[String, Object]. This class contains that generic information
+ * into a concrete domain specific data model for the ToscaPolicy.
+ * </p>
+ */
+
+@NoArgsConstructor
+public class DomainMaker {
+
+    private static final Logger logger = LoggerFactory.getLogger(DomainMaker.class);
+
+    /**
+     * policy-type -> schema validator map.
+     */
+    private final Map<ToscaPolicyTypeIdentifier, StandardValCoder> validators = new ConcurrentHashMap<>();
+
+    /**
+     * non-validation serialization coder.
+     */
+    private final StandardCoder nonValCoder = new StandardCoder();
+
+    /**
+     * Does this json conform to a registered policy type schema?.
+     */
+    public boolean isConformant(@NonNull ToscaPolicyTypeIdentifier policyType, @NonNull String json) {
+        if (!isRegistered(policyType)) {
+            return false;
+        }
+
+        return validators.get(policyType).isConformant(json);
+    }
+
+    /**
+     * Does this policy conform to its domain specification?.
+     */
+    public boolean isConformant(@NonNull ToscaPolicy policy) {
+        String rawPolicy = serialize(policy);
+        if (StringUtils.isBlank(rawPolicy)) {
+            return false;
+        }
+
+        return isConformant(policy.getTypeIdentifier(), rawPolicy);
+    }
+
+    /**
+     * Does this domain policy conforms to its schema definition?.
+     */
+    public <T> boolean isDomainConformant(@NonNull ToscaPolicyTypeIdentifier policyType, @NonNull T domainPolicy) {
+        if (!isRegistered(policyType)) {
+            return false;
+        }
+
+        try {
+            return validators.get(policyType).encode(domainPolicy) != null;
+        } catch (CoderException e) {
+            logger.info("policy {}:{} is not conformant", policyType, domainPolicy.getClass().getName(), e);
+            return false;
+        }
+    }
+
+    /**
+     * Check policy conformance to its specification providing a list of errors
+     * in a ValidationFailedException.
+     */
+    public boolean conformance(@NonNull ToscaPolicy policy) throws ValidationFailedException {
+        if (!isRegistered(policy.getTypeIdentifier())) {
+            return false;
+        }
+
+        String rawPolicy = serialize(policy);
+        if (StringUtils.isBlank(rawPolicy)) {
+            return false;
+        }
+
+        try {
+            validators.get(policy.getTypeIdentifier()).conformance(rawPolicy);
+        } catch (CoderException e) {
+            logger.info("policy {}:{}:{} is not conformant",
+                    policy.getTypeIdentifier(), policy.getName(), policy.getVersion(), e);
+            if (e.getCause() instanceof ValidationFailedException) {
+                throw (ValidationFailedException) e.getCause();
+            }
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Checks a domain policy conformance to its specification providing a list of errors
+     * in a ValidationFailedException.
+     */
+    public <T> boolean conformance(@NonNull ToscaPolicyTypeIdentifier policyType, T domainPolicy)
+        throws ValidationFailedException {
+
+        if (!isRegistered(policyType)) {
+            return false;
+        }
+
+        try {
+            validators.get(policyType).encode(domainPolicy);
+        } catch (CoderException e) {
+            logger.info("policy {}:{}:{} is not conformant", policyType, domainPolicy.getClass().getName(), e);
+            if (e.getCause() instanceof ValidationFailedException) {
+                throw (ValidationFailedException) e.getCause();
+            }
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Registers a known schema resource for validation.
+     */
+    public boolean registerValidator(@NonNull ToscaPolicyTypeIdentifier policyType) {
+        //
+        // A known schema is an schema embedded in a .jar in the classpath under the schemas/
+        // resource directory matching the following syntax: schemas/<policy-type>.schema.json.
+        //
+        String schema =
+                ResourceUtils
+                        .getResourceAsString("schemas/"
+                            + policyType.getName() + "-" + policyType.getVersion() + ".schema.json");
+        if (schema == null) {
+            return false;
+        }
+
+        return registerValidator(policyType, schema);
+    }
+
+    /**
+     * Registers/Overrides a new/known schema for a policy type.
+     */
+    public boolean registerValidator(@NonNull ToscaPolicyTypeIdentifier policyType, @NonNull String schema) {
+        try {
+            validators.put(policyType, new StandardValCoder(schema, policyType.toString()));
+        } catch (RuntimeException r) {
+            logger.info("schema for {} is not valid", policyType, r);
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Converts a ToscaPolicy into a Domain Policy.
+     */
+    public <T> T convertTo(@NonNull ToscaPolicy toscaPolicy, @NonNull Class<T> clazz) throws CoderException {
+        return convertTo(toscaPolicy.getTypeIdentifier(), nonValCoder.encode(toscaPolicy), clazz);
+    }
+
+    /**
+     * Converts a JSON policy into a Domain Policy.
+     */
+    public <T> T convertTo(@NonNull ToscaPolicyTypeIdentifier policyType, @NonNull String json, @NonNull Class<T> clazz)
+            throws CoderException {
+        if (isRegistered(policyType)) {
+            return validators.get(policyType).decode(json, clazz);
+        } else {
+            return nonValCoder.decode(json, clazz);
+        }
+    }
+
+    /**
+     * Converts a Tosca Policy Type specification to a domain-specific json specification.
+     */
+    public String convertToSchema(@NonNull ToscaPolicyType policyType) {
+        //
+        // TODO:
+        // 1. Convert Tosca Policy Type definition schema to suitable json schema.
+        // 2. Call registerValidator to register
+        throw new UnsupportedOperationException("schema generation from policy type is not supported");
+    }
+
+    public boolean isRegistered(@NonNull ToscaPolicyTypeIdentifier policyType) {
+        return validators.containsKey(policyType) || registerValidator(policyType);
+    }
+
+
+    private String serialize(@NonNull ToscaPolicy policy) {
+        String rawPolicy = null;
+        try {
+            rawPolicy = nonValCoder.encode(policy);
+        } catch (CoderException e) {
+            logger.debug("policy {}:{} is invalid json", policy.getTypeIdentifier(), policy.getIdentifier(), e);
+        }
+        return rawPolicy;
+    }
+}
diff --git a/policy-utils/src/test/java/org/onap/policy/drools/models/domains/a/DomainAPolicy.java b/policy-utils/src/test/java/org/onap/policy/drools/models/domains/a/DomainAPolicy.java
new file mode 100644
index 0000000..04f20b2
--- /dev/null
+++ b/policy-utils/src/test/java/org/onap/policy/drools/models/domains/a/DomainAPolicy.java
@@ -0,0 +1,49 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.models.domains.a;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class DomainAPolicy {
+    private static final long serialVersionUID = -8942432000554391455L;
+
+    @SerializedName("type")
+    public String type;
+
+    @SerializedName("type_version")
+    public String typeVersion;
+
+    @SerializedName("version")
+    public String version;
+
+    @SerializedName("metadata")
+    public Metadata metadata;
+
+    @SerializedName("properties")
+    public Properties properties;
+
+    @SerializedName("name")
+    public String name;
+}
diff --git a/policy-utils/src/test/java/org/onap/policy/drools/models/domains/a/Metadata.java b/policy-utils/src/test/java/org/onap/policy/drools/models/domains/a/Metadata.java
new file mode 100644
index 0000000..0cad4ff
--- /dev/null
+++ b/policy-utils/src/test/java/org/onap/policy/drools/models/domains/a/Metadata.java
@@ -0,0 +1,35 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.models.domains.a;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class Metadata implements Serializable {
+    private static final long serialVersionUID = 476541531265304644L;
+
+    @SerializedName("policy-id")
+    public String policyId;
+}
diff --git a/policy-utils/src/test/java/org/onap/policy/drools/models/domains/a/Nested.java b/policy-utils/src/test/java/org/onap/policy/drools/models/domains/a/Nested.java
new file mode 100644
index 0000000..eedadef
--- /dev/null
+++ b/policy-utils/src/test/java/org/onap/policy/drools/models/domains/a/Nested.java
@@ -0,0 +1,41 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.models.domains.a;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class Nested implements Serializable {
+    private static final long serialVersionUID = -1203143214137354429L;
+
+    @SerializedName("nested1")
+    public String nested1;
+
+    @SerializedName("nested2")
+    public boolean nested2;
+
+    @SerializedName("nested3")
+    public int nested3;
+}
diff --git a/policy-utils/src/test/java/org/onap/policy/drools/models/domains/a/Properties.java b/policy-utils/src/test/java/org/onap/policy/drools/models/domains/a/Properties.java
new file mode 100644
index 0000000..3ba66ce
--- /dev/null
+++ b/policy-utils/src/test/java/org/onap/policy/drools/models/domains/a/Properties.java
@@ -0,0 +1,35 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.models.domains.a;
+
+import com.google.gson.annotations.SerializedName;
+import java.io.Serializable;
+import lombok.Builder;
+import lombok.Data;
+
+@Data
+@Builder
+public class Properties implements Serializable {
+    private static final long serialVersionUID = 8476625479607243095L;
+
+    @SerializedName("nested")
+    public Nested nested;
+}
diff --git a/policy-utils/src/test/java/org/onap/policy/drools/policies/DomainMakerTest.java b/policy-utils/src/test/java/org/onap/policy/drools/policies/DomainMakerTest.java
new file mode 100644
index 0000000..cfacc7a
--- /dev/null
+++ b/policy-utils/src/test/java/org/onap/policy/drools/policies/DomainMakerTest.java
@@ -0,0 +1,194 @@
+/*
+ * ============LICENSE_START=======================================================
+ *  Copyright (C) 2020 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.drools.policies;
+
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import com.worldturner.medeia.api.ValidationFailedException;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import org.junit.Before;
+import org.junit.Test;
+import org.onap.policy.common.utils.coder.CoderException;
+import org.onap.policy.common.utils.coder.StandardCoder;
+import org.onap.policy.drools.models.domains.a.DomainAPolicy;
+import org.onap.policy.drools.models.domains.a.Metadata;
+import org.onap.policy.drools.models.domains.a.Nested;
+import org.onap.policy.drools.models.domains.a.Properties;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+
+public class DomainMakerTest {
+
+    private DomainMaker domainMaker;
+    private StandardCoder nonValCoder;
+
+    @Before
+    public void setUp() throws Exception {
+        domainMaker = new DomainMaker();
+        nonValCoder = new StandardCoder();
+    }
+
+    @Test
+    public void testIsConformantString() throws IOException {
+        ToscaPolicyTypeIdentifier policyTypeId =
+            new ToscaPolicyTypeIdentifier("policy.type.A", "1.0.0");
+        String rawJsonPolicyType =
+            getJsonFromFile("src/test/resources/policyA.json");
+
+        assertTrue(domainMaker.isConformant(policyTypeId, rawJsonPolicyType));
+
+        policyTypeId.setVersion("2.0.0");
+        assertFalse(domainMaker.isConformant(policyTypeId, rawJsonPolicyType));
+    }
+
+    @Test
+    public void testIsConformantToscaPolicy() throws IOException, CoderException {
+        ToscaPolicy policy = getToscaPolicy("src/test/resources/policyA.json");
+        assertTrue(domainMaker.isConformant(policy));
+
+        policy.setType("policy.type.Z");
+        assertFalse(domainMaker.isConformant(policy));
+    }
+
+    @Test
+    public void testIsDomainConformant() {
+        ToscaPolicyTypeIdentifier policyTypeId =
+                new ToscaPolicyTypeIdentifier("policy.type.A", "1.0.0");
+
+        DomainAPolicy domainAPolicy = createDomainPolicy();
+
+        assertTrue(domainMaker.isDomainConformant(policyTypeId, domainAPolicy));
+
+        // integer exceeding max. value
+        domainAPolicy.getProperties().getNested().setNested3(999);
+        assertFalse(domainMaker.isDomainConformant(policyTypeId, domainAPolicy));
+        domainAPolicy.getProperties().getNested().setNested3(33); // restore good valude
+
+        // not registered schema for policy type
+        policyTypeId.setVersion("2.0.0");
+        assertFalse(domainMaker.isDomainConformant(policyTypeId, domainAPolicy));
+    }
+
+
+    @Test
+    public void testConformance() throws IOException, CoderException {
+        ToscaPolicy policy1 = getToscaPolicy("src/test/resources/policyA.json");
+        assertTrue(domainMaker.conformance(policy1));
+
+        policy1.getProperties().remove("nested");
+        assertThatThrownBy(() -> domainMaker.conformance(policy1))
+                .isInstanceOf(ValidationFailedException.class)
+                .hasMessageContaining("Required property nested is missing from object");
+
+        DomainAPolicy domainAPolicy = createDomainPolicy();
+        assertTrue(domainMaker.conformance(policy1.getTypeIdentifier(), domainAPolicy));
+        assertDomainPolicy(domainAPolicy);
+
+        domainAPolicy.getProperties().getNested().setNested1("");
+        assertThatThrownBy(() -> domainMaker.conformance(policy1.getTypeIdentifier(), domainAPolicy))
+                .isInstanceOf(ValidationFailedException.class)
+                .hasMessageContaining("Pattern ^(.+)$ is not contained in text");
+    }
+
+    @Test
+    public void testRegisterValidator() throws IOException, CoderException {
+        ToscaPolicyTypeIdentifier policyTypeId =
+                new ToscaPolicyTypeIdentifier("policy.type.external", "9.9.9");
+
+        assertTrue(domainMaker.registerValidator(policyTypeId,
+            getJsonFromFile("src/test/resources/policy.type.external-9.9.9.schema.json")));
+
+        ToscaPolicy policy = getToscaPolicy("src/test/resources/policyA.json");
+        policy.setType("policy.type.external");
+        policy.setTypeVersion("9.9.9");
+        assertTrue(domainMaker.isConformant(policy));
+
+        policy.setTypeVersion("1.0.0");
+        assertFalse(domainMaker.isConformant(policy));
+    }
+
+    @Test
+    public void testConvertToDomainPolicy() throws IOException, CoderException {
+        DomainAPolicy domainAPolicy =
+                domainMaker.convertTo(getToscaPolicy("src/test/resources/policyA.json"), DomainAPolicy.class);
+        assertDomainPolicy(domainAPolicy);
+
+        assertNotNull(domainMaker.convertTo(getToscaPolicy("src/test/resources/policyA-no-policy-type.json"),
+                DomainAPolicy.class));
+    }
+
+    @Test
+    public void testConvertToSchema() {
+        assertThatThrownBy(() -> domainMaker
+            .convertToSchema(new ToscaPolicyType()))
+            .isInstanceOf(UnsupportedOperationException.class);
+    }
+
+    @Test
+    public void testIsRegistered() {
+        ToscaPolicyTypeIdentifier policyTypeId1 =
+                new ToscaPolicyTypeIdentifier("policy.type.A", "1.0.0");
+        assertTrue(domainMaker.isRegistered(policyTypeId1));
+
+        ToscaPolicyTypeIdentifier policyTypeId2 =
+                new ToscaPolicyTypeIdentifier("policy.type.external", "7.7.9");
+        assertFalse(domainMaker.isRegistered(policyTypeId2));
+
+    }
+
+    private String getJsonFromFile(String filePath) throws IOException {
+        return new String(Files.readAllBytes(Paths.get(filePath)));
+    }
+
+    private ToscaPolicy getToscaPolicy(String filePath) throws CoderException, IOException {
+        String policyJson = getJsonFromFile(filePath);
+        return new StandardCoder().decode(policyJson, ToscaPolicy.class);
+    }
+
+    private DomainAPolicy createDomainPolicy() {
+        return DomainAPolicy.builder().metadata(Metadata.builder().policyId("A").build())
+                       .name("A")
+                       .version("1.0.0")
+                       .type("policy.type.A")
+                       .typeVersion("1.0.0")
+                       .properties(Properties.builder()
+                           .nested(Nested.builder().nested1("nested1").nested2(true).nested3(50).build())
+                           .build()).build();
+    }
+
+    private void assertDomainPolicy(DomainAPolicy domainAPolicy) {
+        assertEquals("A", domainAPolicy.getName());
+        assertEquals("1.0.0", domainAPolicy.getVersion());
+        assertEquals("1.0.0", domainAPolicy.getTypeVersion());
+        assertEquals("policy.type.A", domainAPolicy.getType());
+        assertEquals("A", domainAPolicy.getMetadata().getPolicyId());
+        assertEquals("nested1", domainAPolicy.getProperties().getNested().getNested1());
+        assertEquals(true, domainAPolicy.getProperties().getNested().isNested2());
+        assertEquals(50, domainAPolicy.getProperties().getNested().getNested3());
+    }
+}
\ No newline at end of file
diff --git a/policy-utils/src/test/resources/policy.type.external-9.9.9.schema.json b/policy-utils/src/test/resources/policy.type.external-9.9.9.schema.json
new file mode 100644
index 0000000..d8651eb
--- /dev/null
+++ b/policy-utils/src/test/resources/policy.type.external-9.9.9.schema.json
@@ -0,0 +1,7 @@
+{
+    "definitions": {},
+    "$schema": "http://json-schema.org/draft-07/schema#",
+    "$id": "http://www.onap.org/policy/models/schemas/policy.type.external",
+    "type": "object",
+    "title": "Domain policy.type.external Policy root schema"
+}
diff --git a/policy-utils/src/test/resources/policyA-no-policy-type.json b/policy-utils/src/test/resources/policyA-no-policy-type.json
new file mode 100644
index 0000000..c92b736
--- /dev/null
+++ b/policy-utils/src/test/resources/policyA-no-policy-type.json
@@ -0,0 +1,16 @@
+{
+  "type": "policy.type.Z",
+  "type_version": "1.0.0",
+  "version": "1.0.0",
+  "metadata": {
+    "policy-id": "A"
+  },
+  "properties": {
+    "nested": {
+      "nested1": "nested1",
+      "nested2": true,
+      "nested3": 50
+    }
+  },
+  "name": "A"
+}
\ No newline at end of file
diff --git a/policy-utils/src/test/resources/policyA.json b/policy-utils/src/test/resources/policyA.json
new file mode 100644
index 0000000..7afa79d
--- /dev/null
+++ b/policy-utils/src/test/resources/policyA.json
@@ -0,0 +1,16 @@
+{
+  "type": "policy.type.A",
+  "type_version": "1.0.0",
+  "version": "1.0.0",
+  "metadata": {
+    "policy-id": "A"
+  },
+  "properties": {
+    "nested": {
+      "nested1": "nested1",
+      "nested2": true,
+      "nested3": 50
+    }
+  },
+  "name": "A"
+}
\ No newline at end of file
diff --git a/policy-utils/src/test/resources/schemas/policy.type.A-1.0.0.schema.json b/policy-utils/src/test/resources/schemas/policy.type.A-1.0.0.schema.json
new file mode 100644
index 0000000..089ec44
--- /dev/null
+++ b/policy-utils/src/test/resources/schemas/policy.type.A-1.0.0.schema.json
@@ -0,0 +1,89 @@
+{
+    "definitions": {},
+    "$schema": "http://json-schema.org/draft-07/schema#",
+    "$id": "http://www.onap.org/policy/models/schemas/policy.type.A",
+    "type": "object",
+    "title": "Domain policy.type.A Policy root schema",
+    "required": [
+        "type",
+        "type_version",
+        "version",
+        "metadata",
+        "properties"
+    ],
+    "properties": {
+        "type": {
+            "$id": "#/properties/type",
+            "type": "string",
+            "pattern": "^(.+)$"
+        },
+        "type_version": {
+            "$id": "#/properties/type_version",
+            "type": "string",
+            "pattern": "^(.+)$"
+        },
+        "version": {
+            "$id": "#/properties/version",
+            "type": "string",
+            "title": "Version",
+            "pattern": "^(.+)$"
+        },
+        "name": {
+            "$id": "#/properties/name",
+            "type": "string",
+            "pattern": "^(.+)$"
+        },
+        "metadata": {
+            "$id": "#/properties/metadata",
+            "type": "object",
+            "title": "Metadata",
+            "required": [
+                "policy-id"
+            ],
+            "properties": {
+                "policy-id": {
+                    "$id": "#/properties/metadata/properties/policy-id",
+                    "type": "string",
+                    "pattern": "^(.+)$"
+                }
+            }
+        },
+        "properties": {
+            "$id": "#/properties/properties",
+            "type": "object",
+            "required": [
+                "nested"
+            ],
+            "properties": {
+                "nested": {
+                    "$id": "#/properties/properties/properties/nested",
+                    "type": "object",
+                    "required": [
+                        "nested1",
+                        "nested2",
+                        "nested3"
+                    ],
+                    "properties": {
+                        "nested1": {
+                            "$id": "#/properties/properties/properties/nested/properties/nested1",
+                            "type": "string",
+                            "pattern": "^(.+)$"
+                        },
+                        "nested2": {
+                            "$id": "#/properties/properties/properties/nested/properties/nested2",
+                            "type": "boolean",
+                            "default": true
+                        },
+                        "nested3": {
+                            "$id": "#/properties/properties/properties/nested/properties/nested3",
+                            "type": "integer",
+                            "minimum": 1,
+                            "maximum": 100,
+                            "default": 30
+                        }
+                    }
+                }
+            }
+        }
+    }
+}
