diff --git a/src/components/display/pharma_display/PhDJsonld.vue b/src/components/display/pharma_display/PhDJsonld.vue
index a01d9a62af02f9eea70b189a024f61ead02c2568..cba7c6fbc2b622ea23175b3d45b2f4e9a61b6f6f 100644
--- a/src/components/display/pharma_display/PhDJsonld.vue
+++ b/src/components/display/pharma_display/PhDJsonld.vue
@@ -289,7 +289,6 @@
       </template>
 
       <template v-else-if="p==='dcterms:subject'" slot="dcterms:subject">
-        <v-btn @click="pharmaStructure()">form</v-btn>
         <template v-for="(subject, j) in o">
           <v-card
             class="mt-3"
@@ -310,8 +309,69 @@
             <p-d-skos-preflabel :p="p" :o="subject" :key="componentid+'subject'+j"></p-d-skos-preflabel>
           </template>
         </template>
+        <template v-for="(categ,index) in pharmaStructure">
+          <v-card v-if="categ.fields.length>0" :key="'category'+index">
+            <v-toolbar dense flat>
+              <v-layout>
+                <v-toolbar-title class="font-weight-light">{{categ.category}}</v-toolbar-title>
+              </v-layout>
+            </v-toolbar>
+
+            <template v-if="categ.fields.length>0">
+              <v-card v-for="l in categ.fields" :key="l+'field'">
+                <!--   s {{s}} type {{sec.type}} label {{s.label}} if {{getSelectionElem(sec.type,s.label)}}-->
+                <v-layout v-if="l">
+                  <v-flex xs1 class="subheading">
+                    <a :href="l.id" target="_blank">{{l.label}}</a>
+                  </v-flex>
+                  <v-flex xs11>
+                    <v-card v-for="(inputf,index) in l.entries" :key="index+'subjectField'">
+                      inputf{{inputf}}
+                      <!-- <v-flex xs2 v-if="inputf.selection">{{getLabel(inputf.data['@type'])}}</v-flex>-->
+                      <p-d-skos-preflabel
+                        v-if="getSkosexactMatch(inputf)==undefined"
+                        :p="getLabel(inputf['@type'])"
+                        :o="inputf"
+                        :key="inputf+index+'pharmafreesubject'"
+                      ></p-d-skos-preflabel>
+
+                      <ph-d-metadata
+                        v-if="getSkosexactMatch(inputf)"
+                        :o="inputf"
+                        :p="p"
+                        :key="inputf+index+'pharmasubject'"
+                      ></ph-d-metadata>
+                    </v-card>
+                  </v-flex>
+                  <v-divider></v-divider>
+                </v-layout>
+              </v-card>
+            </template>
+            <!--<template v-else>
+              <v-card v-for="(inputf,index) in getCatElem(sec.type)" :key="index+'subj'">
+                <v-flex xs2>
+                  <a :href="sec.id" target="_blank">{{getLabel(inputf.data['@type'])}}</a>
+                </v-flex>
+
+                <p-d-skos-preflabel
+                  v-if="getSkosexactMatch(inputf.data)==undefined"
+                  :p="getLabel(inputf.data['@type'])"
+                  :o="inputf.data"
+                  :key="inputf+index+'pharmafreesubject'"
+                ></p-d-skos-preflabel>
+                <ph-d-metadata
+                  v-if="getSkosexactMatch(inputf.data)"
+                  :o="inputf.data"
+                  :p="p"
+                  :key="inputf+index+'pharmasubject'"
+                ></ph-d-metadata>
 
-        <template v-for="sec in pharmaSubjects">
+                <v-divider></v-divider>
+              </v-card>
+            </template>-->
+          </v-card>
+        </template>
+        <!--<template v-for="sec in pharmaSubjects">
           <v-card v-if="getCatElem(sec.type)&&getCatElem(sec.type).length>0" :key="sec.type">
             <v-toolbar dense flat>
               <v-layout>
@@ -374,7 +434,7 @@
               </v-card>
             </template>
           </v-card>
-        </template>
+        </template>-->
       </template>
 
       <template v-else-if="p==='@type'"></template>
@@ -448,13 +508,22 @@ export default {
         //only look at the ones which have not a skos:Concept type
         var formFields = formCategories[i].fields;
 
-        jsonStructured.push({ category: formCategories[i].description });
+        jsonStructured[i] = {
+          category: formCategories[i].description,
+          fields: []
+        };
+
         var formFieldsFiltered = formFields.filter(
           formFields => formFields.type != "skos:Concept"
         );
         //check which of those filetered fields ffields have a value in subjects
-        console.log("jsonStructured", jsonStructured, formFieldsFiltered);
+
         for (var j = 0; j < formFieldsFiltered.length; j++) {
+          console.log(
+            "looping over fileds",
+            formFieldsFiltered[j].label,
+            formFieldsFiltered[j].subcategory
+          );
           // console.log("ffields[j].type", ffields[j].type);
           //filter all the elem in subjects which have this type
           var jsonTypeArray = pharmajson.filter(function(fs) {
@@ -469,8 +538,34 @@ export default {
               formFieldsFiltered[j].type
             );
           }
+          if (jsonTypeArray.length > 0) {
+            jsonStructured[i].fields[j] = {
+              label: "",
+              id: ""
+            };
+            if (formFieldsFiltered[j].subcategory) {
+              console.log(
+                "formFieldsFiltered[j].subcategory",
+                formFieldsFiltered[j].subcategory
+              );
+              jsonStructured[i].fields[j].subcategory =
+                formFieldsFiltered[j].subcategory;
+              //jsonStructured[i].fields[j].subcategory = {
+              //  label: formFieldsFiltered[j].label,
+              //  id: formFieldsFiltered[j].infoRef
+              //};
+              //jsonStructured[i].fields[j].subcategory.entries = jsonTypeArray;
+            }
+            jsonStructured[i].fields[j] = {
+              label: formFieldsFiltered[j].label,
+              id: formFieldsFiltered[j].infoRef
+            };
+            jsonStructured[i].fields[j].entries = jsonTypeArray;
+          }
         }
       }
+      console.log("jsonStructured", jsonStructured);
+      return jsonStructured;
     },
 
     pharmaData: function() {
diff --git a/src/utils/fields.js b/src/utils/fields.js
index 339f0d333d835b8aafe67f68961d87a8479d9db5..70c2d76e8d4e6631efd88cbaf7cde8da896d13c6 100644
--- a/src/utils/fields.js
+++ b/src/utils/fields.js
@@ -210,7 +210,9 @@ const fields = [
     freefield: false,
     component: "ext-service",
     category: ["biologicalMacromolecule"],
+    subcategory: ["Protein"],
     description: "Protein",
+    infoRef: "",
     info:
       "UniProt ID EDAM>data:3021 Accession number of a UniProt (protein sequence) database entry"
   },
@@ -227,6 +229,7 @@ const fields = [
     removable: false,
     component: "text-field",
     category: ["biologicalMacromolecule"],
+    subcategory: ["Protein"],
     description: "Protein",
     info:
       "A quality of a protein that harbors a variation from the native protein (called canonical form), which could arise due to alternative promoter usage, alternative splicing, alternative translation initiation and ribosomal frameshifting.",
@@ -245,6 +248,7 @@ const fields = [
     removable: false,
     component: "text-field",
     category: ["biologicalMacromolecule"],
+    subcategory: ["Protein"],
     description: "Protein",
     info:
       "Any subcellular or molecular event, process, or condition that produces a divergence from the usual wild-type condition in the primary sequence of a peptide or protein molecule. (NCI) [ NCI ]",
@@ -263,6 +267,7 @@ const fields = [
     removable: false,
     component: "text-field",
     category: ["biologicalMacromolecule"],
+    subcategory: ["Protein"],
     description: "Protein",
     info:
       "Covalent modification of, or a change resulting in an alteration of the measured molecular mass of, a peptide or protein amino acid residue. [ PubMed:18688235 ]",
@@ -281,6 +286,7 @@ const fields = [
     removable: false,
     component: "text-field",
     category: ["biologicalMacromolecule"],
+    subcategory: ["Gene"],
     description: "Gene",
     info:
       "EntrezGene_ID NCIT:C49379 Indicates the accession number for a Gene within the Entrez Gene database. [ NCI ]",
@@ -299,6 +305,7 @@ const fields = [
     removable: false,
     component: "text-field",
     category: ["biologicalMacromolecule"],
+    subcategory: ["Gene"],
     description: "Gene",
     info:
       "Gene modification NCIT:C126104 Any gene manipulation method used to generate a product with an altered sequence, structure, or conformation. [ NCI ]",
@@ -322,6 +329,7 @@ const fields = [
     topId: "CHEBI_15986",
     component: "ext-service",
     category: ["biologicalMacromolecule"],
+    subcategory: ["Polynucleotide"],
     description: "Polynucleotide",
     info: "CHEBI:15986"
   },
@@ -338,6 +346,7 @@ const fields = [
     removable: false,
     component: "text-field",
     category: ["biologicalMacromolecule"],
+    subcategory: ["Polynucleotide"],
     description: "Polynucleotide",
     info:
       "RefSeq accession EDAM > data:1098  Accession number of a RefSeq database entry. Synonyms: RefSeq ID",
@@ -356,6 +365,7 @@ const fields = [
     removable: false,
     component: "text-field",
     category: ["biologicalMacromolecule"],
+    subcategory: ["Protein Family"],
     description: "Protein Family",
     info:
       "PFAM accession number EDAM > data:1138 Accession number of a Pfam entry.",
@@ -511,7 +521,7 @@ const fields = [
     commit: true,
     multiplicable: false,
     visible: true,
-    //category: ["life"],
+    category: ["life"],
     vocabulary: "life",
     info:
       "Life NCIT:C142142 Thee biochemical phenomenon that distinguishes organisms from inorganic matter. It is characterized by growth, metabolism, and reproduction. [ NCI ]"
@@ -873,6 +883,7 @@ const fields = [
     category: ["goTerm"],
     freefield: true,
     description: "GO Molecular Function:",
+    infoRef: "http://purl.obolibrary.org/obo/GO_0003674",
     info:
       "A molecular process that can be carried out by the action of a single macromolecular machine, usually via direct physical interactions with other molecular entities. Function in this sense denotes an action, or activity, that a gene product (or a complex) performs. These actions are described from two distinct but related perspectives: (1) biochemical activity, and (2) role as a component in a larger system/process."
   },
@@ -895,7 +906,7 @@ const fields = [
     category: ["goTerm"],
     description: "GO Biological Process:",
     freefield: true,
-    infoRef: "",
+    infoRef: "http://purl.obolibrary.org/obo/GO_0003674",
     info:
       "A biological process represents a specific objective that the organism is genetically programmed to achieve. Biological processes are often described by their outcome or ending state, e.g., the biological process of cell division results in the creation of two daughter cells (a divided cell) from a single parent cell. A biological process is accomplished by a particular set of molecular functions carried out by specific gene products (or macromolecular complexes), often in a highly regulated manner and in a particular temporal sequence."
   },
@@ -918,6 +929,7 @@ const fields = [
     category: ["goTerm"],
     freefield: true,
     description: "GO Cellular Component:",
+    infoRef: "http://purl.obolibrary.org/obo/GO_0005575",
     info:
       "A location, relative to cellular compartments and structures, occupied by a macromolecular machine when it carries out a molecular function. There are two ways in which the gene ontology describes locations of gene products: (1) relative to cellular structures (e.g., cytoplasmic side of plasma membrane) or compartments (e.g., mitochondrion), and (2) the stable macromolecular complexes of which they are parts (e.g., the ribosome). [ Sao Paulo MCA-MR Syndrome (ilx_0637672)"
   },