diff --git a/server/src/main/java/org/hl7/davinci/endpoint/rems/DatabaseInit.java b/server/src/main/java/org/hl7/davinci/endpoint/rems/DatabaseInit.java
index 1cb358a68..52b9febb7 100644
--- a/server/src/main/java/org/hl7/davinci/endpoint/rems/DatabaseInit.java
+++ b/server/src/main/java/org/hl7/davinci/endpoint/rems/DatabaseInit.java
@@ -61,8 +61,9 @@ CommandLineRunner initDatabase(DrugsRepository repository, RemsFhirRepository re
             patientEnrollmentResource.setResource(patientQuestionnaireResource);
             patientEnrollmentResource.setId("turalio-patient-enrollment");
             remsFhirRepository.save(patientEnrollmentResource);
+            patientEnrollmentRequirement.setName("Patient Enrollment");
             patientEnrollmentRequirement.setResource(patientEnrollmentResource);
-            patientEnrollmentRequirement.setDescription("complete patient enrollment questionnaire");
+            patientEnrollmentRequirement.setDescription("Submit Patient Enrollment form to the REMS Administrator");
             patientEnrollmentRequirement.setDrug(turalio);
             requirementRepository.save(patientEnrollmentRequirement);
 
@@ -75,8 +76,9 @@ CommandLineRunner initDatabase(DrugsRepository repository, RemsFhirRepository re
              prescriberEnrollmentResource.setResource(prescriberQuestionnaireResource);
              prescriberEnrollmentResource.setId("turalio-prescriber-enrollment");
              remsFhirRepository.save(prescriberEnrollmentResource);
+             prescriberEnrollmentRequirement.setName("Prescriber Enrollment");
              prescriberEnrollmentRequirement.setResource(prescriberEnrollmentResource);
-             prescriberEnrollmentRequirement.setDescription("complete prescriber enrollment questionnaire");
+             prescriberEnrollmentRequirement.setDescription("Submit Prescriber Enrollment form and training certification to the REMS Administrator");
              prescriberEnrollmentRequirement.setDrug(turalio);
              requirementRepository.save(prescriberEnrollmentRequirement);
 
@@ -89,11 +91,46 @@ CommandLineRunner initDatabase(DrugsRepository repository, RemsFhirRepository re
             prescriberKnowledgeResource.setResource(prescriberKnowledgeQuestionnaireResource);
             prescriberKnowledgeResource.setId("turalio-prescriber-knowledge-check");
             remsFhirRepository.save(prescriberKnowledgeResource);
+            prescriberCertificationRequirement.setName("Prescriber Knowledge Assessment");
             prescriberCertificationRequirement.setResource(prescriberKnowledgeResource);
-            prescriberCertificationRequirement.setDescription("complete prescriber knowledge check");
-            prescriberCertificationRequirement.setParent(prescriberEnrollmentRequirement);
+            prescriberCertificationRequirement.setDescription("Submit Prescriber Knowledge Assessment Form to REMS Administrator to receive certification");
+            prescriberCertificationRequirement.setParentRequirement(prescriberEnrollmentRequirement);
+            // prescriberCertificationRequirement.setDrug(turalio); 
             requirementRepository.save(prescriberCertificationRequirement);
 
+             // pharmacist enrollment form requirement
+             // change form below to pharmacist enrollment once form is translated
+             String pharmacistQuestionnaire = readFile("src/main/java/org/hl7/davinci/endpoint/rems/resources/Turalio/Questionnaire-R4-Prescriber-Enrollment.json", Charset.defaultCharset());
+             Requirement pharmacistEnrollmentRequirement = new Requirement();
+             RemsFhir pharmacistEnrollmentResource = new RemsFhir();
+             pharmacistEnrollmentResource.setResourceType(ResourceType.Questionnaire.toString());
+             JsonNode pharmacistQuestionnaireResource = JacksonUtil.toJsonNode(pharmacistQuestionnaire);
+             pharmacistEnrollmentResource.setResource(pharmacistQuestionnaireResource);
+             pharmacistEnrollmentResource.setId("turalio-pharmacist-enrollment");
+             remsFhirRepository.save(pharmacistEnrollmentResource);
+             pharmacistEnrollmentRequirement.setName("Pharmacist Enrollment");
+             pharmacistEnrollmentRequirement.setResource(pharmacistEnrollmentResource);
+             pharmacistEnrollmentRequirement.setDescription("Submit Pharmacist Enrollment form and training certification to the REMS Administrator");
+             pharmacistEnrollmentRequirement.setDrug(turalio);
+             requirementRepository.save(pharmacistEnrollmentRequirement);
+
+            // pharmacist knowledge assessment / certification sub-requirement
+            // change form below to pharmacist knowledge assessment once form is translated
+            String pharmacistKnowledgeQuestionnaire = readFile("src/main/java/org/hl7/davinci/endpoint/rems/resources/Turalio/Questionnaire-R4-Prescriber-Knowledge-Assessment.json", Charset.defaultCharset());
+            Requirement pharmacistCertificationRequirement = new Requirement();
+            RemsFhir pharmacistKnowledgeResource = new RemsFhir();
+            pharmacistKnowledgeResource.setResourceType(ResourceType.Questionnaire.toString());
+            JsonNode pharmacistKnowledgeQuestionnaireResource = JacksonUtil.toJsonNode(pharmacistKnowledgeQuestionnaire);
+            pharmacistKnowledgeResource.setResource(pharmacistKnowledgeQuestionnaireResource);
+            pharmacistKnowledgeResource.setId("turalio-pharmacist-knowledge-check");
+            remsFhirRepository.save(pharmacistKnowledgeResource);
+            pharmacistCertificationRequirement.setName("Pharmacist Knowledge Assessment");
+            pharmacistCertificationRequirement.setResource(pharmacistKnowledgeResource);
+            pharmacistCertificationRequirement.setDescription("Submit Pharmacist Knowledge Assessment Form to REMS Administrator to receive certification");
+            pharmacistCertificationRequirement.setParentRequirement(pharmacistEnrollmentRequirement);
+            // pharmacistCertificationRequirement.setDrug(turalio); 
+            requirementRepository.save(pharmacistCertificationRequirement);
+
         };
     }
 }
\ No newline at end of file
diff --git a/server/src/main/java/org/hl7/davinci/endpoint/rems/controller/RemsController.java b/server/src/main/java/org/hl7/davinci/endpoint/rems/controller/RemsController.java
index 2564fba7f..8e866ca9e 100644
--- a/server/src/main/java/org/hl7/davinci/endpoint/rems/controller/RemsController.java
+++ b/server/src/main/java/org/hl7/davinci/endpoint/rems/controller/RemsController.java
@@ -118,15 +118,32 @@ public ResponseEntity<Object> postRems(@RequestBody String jsonData) {
         remsRequest.setStatus("Pending");
         remsRequest.setResource(remsObject);
         remsRepository.save(remsRequest);
-
-        // this loop needs to change to handle multiple levels of sub-requirement conditions
-        // this loop needs to also handle parsing out resources for each requirement - may need to be separate endpoints
+        
         for (Requirement requirement : drug.getRequirements()) {
             MetRequirement metReq = new MetRequirement();
             metReq.setRequirement(requirement);
             metReq.setRemsRequest(remsRequest);
             remsRequest.addMetRequirement(metReq);
+
+            //logic to set requirement as met or not, for now hard code only patient enrollment form
+            if (requirement.getName().equals("Patient Enrollment")) {
+              metReq.setCompleted(true);
+            }
+
             metRequirementsRepository.save(metReq);
+
+            // only handle one level of sub requirements for now
+            for (Requirement subRequirement : requirement.getChildRequirements()) {
+              MetRequirement subMetReq = new MetRequirement();
+              subMetReq.setRequirement(subRequirement);
+              // subMetReq.setRemsRequest(remsRequest);
+              subMetReq.setParentMetRequirement(metReq);
+              // remsRequest.addMetRequirement(subMetReq);
+              metReq.addChildMetRequirements(subMetReq);
+              metRequirementsRepository.save(subMetReq);
+            }
+
+
         }
         remsRepository.save(remsRequest);
         updateRemsRequestStatusInBackground(id);
diff --git a/server/src/main/java/org/hl7/davinci/endpoint/rems/database/drugs/Drug.java b/server/src/main/java/org/hl7/davinci/endpoint/rems/database/drugs/Drug.java
index 0ec47c097..5938e1be2 100644
--- a/server/src/main/java/org/hl7/davinci/endpoint/rems/database/drugs/Drug.java
+++ b/server/src/main/java/org/hl7/davinci/endpoint/rems/database/drugs/Drug.java
@@ -44,7 +44,7 @@ public List<Requirement> getRequirements() {
         return this.requirements;
     }
 
-    public void setResource(List<Requirement> requirements) {
+    public void setRequirements(List<Requirement> requirements) {
         this.requirements = requirements;
     }
 
@@ -52,7 +52,7 @@ public void addRequirement(Requirement requirement)  {
         this.requirements.add(requirement);
     }
     public String getCreatedAt() {
-        return createdAt;
+        return this.createdAt;
     }
 
     public void setCreatedAt(String createdAt) {
@@ -60,7 +60,7 @@ public void setCreatedAt(String createdAt) {
     }
 
     public String getCodeSystem() {
-        return codeSystem;
+        return this.codeSystem;
     }
 
     public void setCodeSystem(String codeSystem) {
@@ -68,7 +68,7 @@ public void setCodeSystem(String codeSystem) {
     }
 
     public String getCode() {
-        return code;
+        return this.code;
     }
 
     public void setCode(String code) {
diff --git a/server/src/main/java/org/hl7/davinci/endpoint/rems/database/fhir/RemsFhir.java b/server/src/main/java/org/hl7/davinci/endpoint/rems/database/fhir/RemsFhir.java
index 2c06e6062..94cae42cf 100644
--- a/server/src/main/java/org/hl7/davinci/endpoint/rems/database/fhir/RemsFhir.java
+++ b/server/src/main/java/org/hl7/davinci/endpoint/rems/database/fhir/RemsFhir.java
@@ -49,7 +49,7 @@ public void setResource(JsonNode resource) {
     }
 
     public String getResourceType() {
-        return resourceType;
+        return this.resourceType;
     }
 
     public void setResourceType(String resourceType) {
@@ -57,7 +57,7 @@ public void setResourceType(String resourceType) {
     }
 
     public String getCreatedAt() {
-        return createdAt;
+        return this.createdAt;
     }
 
     public void setCreatedAt(String createdAt) {
diff --git a/server/src/main/java/org/hl7/davinci/endpoint/rems/database/rems/Rems.java b/server/src/main/java/org/hl7/davinci/endpoint/rems/database/rems/Rems.java
index b59975ac6..9a053437d 100644
--- a/server/src/main/java/org/hl7/davinci/endpoint/rems/database/rems/Rems.java
+++ b/server/src/main/java/org/hl7/davinci/endpoint/rems/database/rems/Rems.java
@@ -1,5 +1,6 @@
 package  org.hl7.davinci.endpoint.rems.database.rems;
 import org.hl7.davinci.endpoint.rems.database.requirement.MetRequirement;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
 import java.util.ArrayList;
 import java.util.List;
 import javax.persistence.*;
@@ -32,6 +33,7 @@ public class Rems {
   private JsonNode resource;
 
   @OneToMany(mappedBy="remsRequest", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+  @JsonManagedReference
   private List<MetRequirement> metRequirements = new ArrayList<>();
 
   public void Rems() {}
diff --git a/server/src/main/java/org/hl7/davinci/endpoint/rems/database/requirement/MetRequirement.java b/server/src/main/java/org/hl7/davinci/endpoint/rems/database/requirement/MetRequirement.java
index 56a64a356..b6c383abc 100644
--- a/server/src/main/java/org/hl7/davinci/endpoint/rems/database/requirement/MetRequirement.java
+++ b/server/src/main/java/org/hl7/davinci/endpoint/rems/database/requirement/MetRequirement.java
@@ -1,5 +1,7 @@
 package org.hl7.davinci.endpoint.rems.database.requirement;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
+import com.fasterxml.jackson.annotation.JsonBackReference;
 import org.hl7.davinci.endpoint.rems.database.drugs.Drug;
 import org.hl7.davinci.endpoint.rems.database.fhir.RemsFhir;
 import org.hl7.davinci.endpoint.rems.database.rems.Rems;
@@ -22,7 +24,7 @@ public class MetRequirement {
     private String createdAt;
 
     @Column(name = "completed", nullable = false)
-    private boolean completed ;
+    private Boolean completed ;
 
     // FHIR resource which defines the requirement (task, questionnaire, etc)
     @JoinColumn(name = "completedRequirement", nullable = true)
@@ -31,26 +33,34 @@ public class MetRequirement {
 
     @ManyToOne(fetch = FetchType.EAGER)
     @JoinColumn(name="REQUIREMENT_ID")
-    @JsonIgnore
     private Requirement requirement;
 
     @ManyToOne
     @JoinColumn(name="REMS_REQUEST")
-    @JsonIgnore
+    @JsonBackReference
     private Rems remsRequest;
 
     @OneToMany(mappedBy="parentMetRequirement", fetch = FetchType.EAGER)
+    @JsonManagedReference
     private List<MetRequirement> childMetRequirements = new ArrayList<>();
 
     @ManyToOne
-    @JoinColumn(name="PARENT_MET_REQUIREMENT")
-    @JsonIgnore
+    @JoinColumn(name="PARENT_MET_REQUIREMENT", nullable = true)
+    @JsonBackReference
     private MetRequirement parentMetRequirement;
 
     public MetRequirement() {
         this.createdAt = ZonedDateTime.now().format(DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" ));
         this.completed = false;    }
 
+    public Integer getId() {
+        return this.id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
     public Rems getRemsRequest() {
         return this.remsRequest;
     }
@@ -68,46 +78,45 @@ public void setCompletedRequirement(RemsFhir requirement) {
     }
 
     public String getCreatedAt() {
-        return createdAt;
+        return this.createdAt;
     }
 
     public void setCreatedAt(String createdAt) {
         this.createdAt = createdAt;
     }
 
-    public boolean isCompleted() {
-        return completed;
+    public Boolean getCompleted() {
+        return this.completed;
     }
 
-    public void setCompleted(boolean completed) {
+    public void setCompleted(Boolean completed) {
         this.completed = completed;
     }
 
     public Requirement getRequirement() {
-        return requirement;
+        return this.requirement;
     }
 
     public void setRequirement(Requirement requirement) {
         this.requirement = requirement;
     }
-
-    public List<MetRequirement> getChildren() {
+    public List<MetRequirement> getChildMetRequirements() {
         return this.childMetRequirements;
     }
     
-    public void setChildren(List<MetRequirement> requirements) {
+    public void setChildMetRequirements(List<MetRequirement> requirements) {
         this.childMetRequirements = requirements;
     }
     
-    public void addChild(MetRequirement requirement)  {
+    public void addChildMetRequirements(MetRequirement requirement)  {
         this.childMetRequirements.add(requirement);
     }
 
-    public MetRequirement getParent() {
+    public MetRequirement getParentMetRequirement () {
         return this.parentMetRequirement;
     }
     
-    public void setParent(MetRequirement requirement) {
+    public void setParentMetRequirement(MetRequirement requirement) {
         this.parentMetRequirement = requirement;
     }
 
diff --git a/server/src/main/java/org/hl7/davinci/endpoint/rems/database/requirement/Requirement.java b/server/src/main/java/org/hl7/davinci/endpoint/rems/database/requirement/Requirement.java
index f9efa8bf5..3b37ab9a0 100644
--- a/server/src/main/java/org/hl7/davinci/endpoint/rems/database/requirement/Requirement.java
+++ b/server/src/main/java/org/hl7/davinci/endpoint/rems/database/requirement/Requirement.java
@@ -1,5 +1,7 @@
 package org.hl7.davinci.endpoint.rems.database.requirement;
 import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
+import com.fasterxml.jackson.annotation.JsonBackReference;
 import org.hl7.davinci.endpoint.rems.database.drugs.Drug;
 import org.hl7.davinci.endpoint.rems.database.fhir.RemsFhir;
 import java.util.ArrayList;
@@ -23,12 +25,16 @@ public class Requirement {
     @Column(name = "description", nullable = true)
     private String description;
 
+    @Column(name = "name", nullable = true)
+    private String name;
+
     // FHIR resource which defines the requirement (task, questionnaire, etc)
-    @JoinColumn(name = "resource", nullable = false)
+    @JoinColumn(name = "resource", nullable = true)
     @OneToOne
     private RemsFhir resource;
 
     @OneToMany(mappedBy="requirement")
+    @JsonIgnore
     private List<MetRequirement> metRequirements = new ArrayList<>();
 
     @ManyToOne
@@ -37,17 +43,26 @@ public class Requirement {
     private Drug drug;
 
     @OneToMany(mappedBy="parentRequirement", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
+    @JsonManagedReference
     private List<Requirement> childRequirements = new ArrayList<>();
 
     @ManyToOne(fetch = FetchType.EAGER)
-    @JoinColumn(name="PARENT_REQUIREMENT")
-    @JsonIgnore
+    @JoinColumn(name="PARENT_REQUIREMENT", nullable = true)
+    @JsonBackReference
     private Requirement parentRequirement;
 
     public Requirement() {
         this.createdAt = ZonedDateTime.now().format(DateTimeFormatter.ofPattern( "uuuu.MM.dd.HH.mm.ss" ));
     }
 
+    public Integer getId() {
+        return this.id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
     public RemsFhir getResource() {
         return this.resource;
     }
@@ -57,7 +72,7 @@ public void setResource(RemsFhir resource) {
     }
 
     public String getCreatedAt() {
-        return createdAt;
+        return this.createdAt;
     }
 
     public void setCreatedAt(String createdAt) {
@@ -65,13 +80,21 @@ public void setCreatedAt(String createdAt) {
     }
 
     public String getDescription() {
-        return description;
+        return this.description;
     }
 
     public void setDescription(String description) {
         this.description = description;
     }
 
+    public String getName() {
+        return this.name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
     public Drug getDrug() {
         return drug;
     }
@@ -80,23 +103,23 @@ public void setDrug(Drug drug) {
         this.drug = drug;
     }
 
-    public List<Requirement> getChildren() {
+    public List<Requirement> getChildRequirements() {
         return this.childRequirements;
     }
     
-    public void setChildren(List<Requirement> requirements) {
+    public void setChildRequirements(List<Requirement> requirements) {
         this.childRequirements = requirements;
     }
     
-    public void addChild(Requirement requirement)  {
+    public void addChildRequirements(Requirement requirement)  {
         this.childRequirements.add(requirement);
     }
 
-    public Requirement getParent() {
+    public Requirement getParentRequirement () {
         return this.parentRequirement;
     }
     
-    public void setParent(Requirement requirement) {
+    public void setParentRequirement(Requirement requirement) {
         this.parentRequirement = requirement;
     }
 
diff --git a/server/src/main/resources/application.yml b/server/src/main/resources/application.yml
index 7af34557e..abaae3377 100644
--- a/server/src/main/resources/application.yml
+++ b/server/src/main/resources/application.yml
@@ -2,8 +2,11 @@
 spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation: true
 
 spring:
-  h2: 
-    console.enabled: true
+  h2:
+    console:
+      enabled: true
+      settings:
+        web-allow-others: true
   thymeleaf:
     cache: false
   datasource:
