diff --git a/src/main/java/nl/fairbydesign/backend/parsers/ExcelValidator.java b/src/main/java/nl/fairbydesign/backend/parsers/ExcelValidator.java
index a1a388a1416555569e367effa0aeb0c955a55fc1..e83e673f3b1db489a50fea60e52ef8cd948385f0 100644
--- a/src/main/java/nl/fairbydesign/backend/parsers/ExcelValidator.java
+++ b/src/main/java/nl/fairbydesign/backend/parsers/ExcelValidator.java
@@ -604,24 +604,29 @@ public class ExcelValidator {
                     for (observation_unit observation_unit : study.getAllHasPart()) {
                         for (Sample sample : observation_unit.getAllHasPart()) {
                             for (Assay assay : sample.getAllHasPart()) {
-                                if (assay.getClassTypeIri().endsWith("AmpliconLibraryAssay")) {
-                                    AmpliconLibraryAssay assay1 = (AmpliconLibraryAssay) assay;
-                                    for (Data_sample data_sample : assay1.getAllHasPart()) {
-                                        data_sample.getName();
-                                    }
-                                } else if (assay.getClassTypeIri().endsWith("AmpliconAssay")) {
-                                    AmpliconAssay assay1 = (AmpliconAssay) assay;
-                                    for (Data_sample data_sample : assay1.getAllHasPart()) {
-                                        data_sample.getName();
-                                    }
-                                } else if (assay.getClassTypeIri().endsWith("RNASeqAssay")) {
-                                    RNASeqAssay assay1 = (RNASeqAssay) assay;
-                                    for (Data_sample data_sample : assay1.getAllHasPart()) {
-                                        data_sample.getName();
-                                    }
-                                } else if (assay.getClassTypeIri().endsWith("DNASeqAssay")) {
-                                    DNASeqAssay assay1 = (DNASeqAssay) assay;
-                                    for (Data_sample data_sample : assay1.getAllHasPart()) {
+//                                if (assay.getClassTypeIri().endsWith("AmpliconLibraryAssay")) {
+//                                    AmpliconLibraryAssay assay1 = (AmpliconLibraryAssay) assay;
+//                                    for (Data_sample data_sample : assay1.getAllHasPart()) {
+//                                        data_sample.getName();
+//                                    }
+//                                } else if (assay.getClassTypeIri().endsWith("AmpliconAssay")) {
+//                                    AmpliconAssay assay1 = (AmpliconAssay) assay;
+//                                    for (Data_sample data_sample : assay1.getAllHasPart()) {
+//                                        data_sample.getName();
+//                                    }
+//                                } else if (assay.getClassTypeIri().endsWith("RNASeqAssay")) {
+//                                    RNASeqAssay assay1 = (RNASeqAssay) assay;
+//                                    for (Data_sample data_sample : assay1.getAllHasPart()) {
+//                                        data_sample.getName();
+//                                    }
+//                                } else if (assay.getClassTypeIri().endsWith("DNASeqAssay")) {
+//                                    DNASeqAssay assay1 = (DNASeqAssay) assay;
+//                                    for (Data_sample data_sample : assay1.getAllHasPart()) {
+//                                        data_sample.getName();
+//                                    }
+//                                } else
+                                    if (assay.getClassTypeIri().endsWith("Assay")) {
+                                    for (Data_sample data_sample : assay.getAllHasPart()) {
                                         data_sample.getName();
                                     }
                                 } else {
@@ -752,24 +757,30 @@ public class ExcelValidator {
         logger.info("Parsing " + sheet.getSheetName());
         ArrayList<String> header = new ArrayList<>();
 
-        // Assay type
-        AssayType assayType;
-        if (sheet.getSheetName().endsWith("AmpliconAssay")) {
-            assayType = AssayType.Amplicon;
-        } else if (sheet.getSheetName().endsWith("AmpliconLibrary")) {
-            assayType = AssayType.AmpliconLibrary;
-        } else if (sheet.getSheetName().endsWith("RNA")) {
-            assayType = AssayType.Transcriptomics;
-        } else if (sheet.getSheetName().toLowerCase().endsWith("illumina")) {
-            assayType = AssayType.Genomics;
-        } else if (sheet.getSheetName().toLowerCase().endsWith("nanopore")) {
-            assayType = AssayType.Genomics;
-        } else if (sheet.getSheetName().endsWith("Proteomics")) {
-            assayType = AssayType.Proteomics;
-        } else if (sheet.getSheetName().endsWith("Metabolomics")) {
-            assayType = AssayType.Metabolomics;
+        // Assay type after " - " split, strip, camel case it and then remove spaces and turn into a URI
+        String assayTypeIRI;
+        if (sheet.getSheetName().contains(" - ")) {
+            String[] name = sheet.getSheetName().split(" - ");
+            String assayName = name[name.length-1];
+            boolean validAssayName = false;
+            // Check if it is part of the excel package
+            for (Metadata metadata : metadataArrayList) {
+                if (metadata.getPackage().toLowerCase(Locale.ROOT).contains(assayName.toLowerCase(Locale.ROOT))) {
+                    validAssayName = true;
+                    break;
+                }
+            }
+            if (!validAssayName) {
+                throw new Exception("This assay name is not supported: " + assayName);
+            }
+
+            // Create IRI
+            assayName = StringUtils.capitalize(assayName).replaceAll(" +", "");
+            assayTypeIRI = "http://m-unlock.nl/ontology/" + assayName;
+
         } else {
-            throw new Exception("The sheet " + sheet.getSheetName() + " is of an unsupported assay type");
+            // some kind of exception
+            throw new Exception("Assay sheet formatting is not correct should be according to: Assay - type");
         }
 
         // Header capture
@@ -803,8 +814,6 @@ public class ExcelValidator {
                         fileCell = row.getCell(header.indexOf(FORWARD_FILENAME), Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
                     } else if (header.indexOf(FILE_NAME) != -1) {
                         fileCell = row.getCell(header.indexOf(FILE_NAME), Row.MissingCellPolicy.CREATE_NULL_AS_BLANK);
-                    } else {
-                        // No file given yet...
                     }
 
                     // TODO Reduce list to the core elements
@@ -853,65 +862,68 @@ public class ExcelValidator {
                     }
 
                     // Setting the assay URL based on the type and identifier
-                    String ASSAYIRI = PREFIX + assayType.getIRI().replaceAll(".*/", "") + "/ASY_" + row.getCell(index).getStringCellValue().trim() + "";
+                    String ASSAYIRI = PREFIX + assayTypeIRI.replaceAll(".*/", "") + "/ASY_" + row.getCell(index).getStringCellValue().trim() + "";
 
                     // Generic place holders
-                    Assay assay;
-
-                    // Section for amplicon / library data
-                    if (assayType.equals(AssayType.Amplicon)) {
-                        AmpliconAssay ampliconAssay = domain.make(AmpliconAssay.class, ASSAYIRI);
-                        assay = ampliconAssay;
-                    } else if (assayType.equals(AssayType.AmpliconLibrary)) {
-                        // Create amplicon library object
-                        if (header.indexOf(LIBRARY_NAME) == -1) {
-                            logging("Missing LibraryName for AmpliconLibraryAssay");
-                        }
-                        String assayLibraryIRI = PREFIX + AssayType.AmpliconLibrary.getIRI().replaceAll(".*/", "") + "/" + getStringValueCell(row.getCell(header.indexOf(LIBRARY_NAME))).trim();
-                        String assayIRI = PREFIX + AssayType.Amplicon.getIRI().replaceAll(".*/", "") + "/" + getStringValueCell(row.getCell(header.indexOf(ASSAY_IDENTIFIER))).trim();
-
-                        // logger.debug("Library " + assayLibraryIRI);
-
-                        AmpliconLibraryAssay ampliconLibraryAssay = domain.make(AmpliconLibraryAssay.class, assayLibraryIRI);
-                        String ampliconLibraryAssayIdentifier = getStringValueCell(row.getCell(header.indexOf(LIBRARY_NAME))).trim();
-                        ampliconLibraryAssay.setIdentifier(ampliconLibraryAssayIdentifier);
-                        ampliconLibraryAssay.setDescription("Amplicon library " + ampliconLibraryAssayIdentifier);
-                        ampliconLibraryAssay.setLogicalPath("null");
-
-                        // Cell can be numeric
-//                         Sample sample = getSample(iriCorrector(getStringValueCell(row.getCell(header.indexOf("SampleIdentifier")))));
-                        // TODO check if we should do this? Amplicon assay should be a library and attached to assay of type amplicon
-                        // sample.addAssay(ampliconLibraryAssay);
-                        // ampliconLibraryAssay.setSample(sample);
-                        // parsedHeaders.add(LIBRARY_NAME);
-                        // Skip identifier addition due to amplicon assays having many different identifiers for the same library
-                        parsedHeaders.add(ASSAY_IDENTIFIER);
-                        parsedHeaders.add(ASSAY_DESCRIPTION);
-                        // Prevent adding file objects as strings
-                        parsedHeaders.add(FORWARD_FILENAME);
-                        parsedHeaders.add(REVERSE_FILENAME);
-
-                        otherColumns(header, parsedHeaders, row, ampliconLibraryAssay.getResource().getURI(), metadataArrayList);
-                        // Remove this for further processing of the assay
-                        parsedHeaders.removeAll(List.of(new String[]{ASSAY_IDENTIFIER, ASSAY_DESCRIPTION}));
-
-                        // Create amplicon object even though its not demultiplexed yet?...
-                        AmpliconAssay ampliconAssay = domain.make(AmpliconAssay.class, assayIRI);
-                        // Make link to the amplicon library
-                        ampliconAssay.setLibrary(ampliconLibraryAssay);
-                        assay = ampliconAssay;
-
-                        // Section for RNA sequencing data
-                    } else if (assayType.equals(AssayType.Transcriptomics)) {
-                        RNASeqAssay rnaSeqAssay = domain.make(RNASeqAssay.class, ASSAYIRI);
-                        assay = rnaSeqAssay;
-                        // Section for DNA sequencing data
-                    } else if (assayType.equals(AssayType.Genomics)) {
-                        DNASeqAssay dnaSeqAssay = domain.make(DNASeqAssay.class, ASSAYIRI);
-                        assay = dnaSeqAssay;
-                    } else {
-                        throw new Exception(assayType.getIRI() + " not ready at the moment");
-                    }
+                    Assay assay = domain.make(Assay.class, ASSAYIRI);
+                    assay.addAdditionalType(assayTypeIRI);
+
+//                    // Section for amplicon / library data
+//                    if (assayType.equals(AssayType.Amplicon)) {
+//                        AmpliconAssay ampliconAssay = domain.make(AmpliconAssay.class, ASSAYIRI);
+//                        assay = ampliconAssay;
+//                    } else if (assayType.equals(AssayType.AmpliconLibrary)) {
+//                        // Create amplicon library object
+//                        if (header.indexOf(LIBRARY_NAME) == -1) {
+//                            logging("Missing LibraryName for AmpliconLibraryAssay");
+//                        }
+//                        String assayLibraryIRI = PREFIX + AssayType.AmpliconLibrary.getIRI().replaceAll(".*/", "") + "/" + getStringValueCell(row.getCell(header.indexOf(LIBRARY_NAME))).trim();
+//                        String assayIRI = PREFIX + AssayType.Amplicon.getIRI().replaceAll(".*/", "") + "/" + getStringValueCell(row.getCell(header.indexOf(ASSAY_IDENTIFIER))).trim();
+//
+//                        // logger.debug("Library " + assayLibraryIRI);
+//
+//                        AmpliconLibraryAssay ampliconLibraryAssay = domain.make(AmpliconLibraryAssay.class, assayLibraryIRI);
+//                        String ampliconLibraryAssayIdentifier = getStringValueCell(row.getCell(header.indexOf(LIBRARY_NAME))).trim();
+//                        ampliconLibraryAssay.setIdentifier(ampliconLibraryAssayIdentifier);
+//                        ampliconLibraryAssay.setDescription("Amplicon library " + ampliconLibraryAssayIdentifier);
+//                        ampliconLibraryAssay.setLogicalPath("null");
+//
+//                        // Cell can be numeric
+////                         Sample sample = getSample(iriCorrector(getStringValueCell(row.getCell(header.indexOf("SampleIdentifier")))));
+//                        // TODO check if we should do this? Amplicon assay should be a library and attached to assay of type amplicon
+//                        // sample.addAssay(ampliconLibraryAssay);
+//                        // ampliconLibraryAssay.setSample(sample);
+//                        // parsedHeaders.add(LIBRARY_NAME);
+//                        // Skip identifier addition due to amplicon assays having many different identifiers for the same library
+//                        parsedHeaders.add(ASSAY_IDENTIFIER);
+//                        parsedHeaders.add(ASSAY_DESCRIPTION);
+//                        // Prevent adding file objects as strings
+//                        parsedHeaders.add(FORWARD_FILENAME);
+//                        parsedHeaders.add(REVERSE_FILENAME);
+//
+//                        otherColumns(header, parsedHeaders, row, ampliconLibraryAssay.getResource().getURI(), metadataArrayList);
+//                        // Remove this for further processing of the assay
+//                        parsedHeaders.removeAll(List.of(new String[]{ASSAY_IDENTIFIER, ASSAY_DESCRIPTION}));
+//
+//                        // Create amplicon object even though its not demultiplexed yet?...
+//                        AmpliconAssay ampliconAssay = domain.make(AmpliconAssay.class, assayIRI);
+//                        // Make link to the amplicon library
+//                        ampliconAssay.setLibrary(ampliconLibraryAssay);
+//                        assay = ampliconAssay;
+//
+//                        // Section for RNA sequencing data
+//                    } else if (assayType.equals(AssayType.Transcriptomics)) {
+//                        RNASeqAssay rnaSeqAssay = domain.make(RNASeqAssay.class, ASSAYIRI);
+//                        assay = rnaSeqAssay;
+//                        // Section for DNA sequencing data
+//                    } else if (assayType.equals(AssayType.Genomics)) {
+//                        DNASeqAssay dnaSeqAssay = domain.make(DNASeqAssay.class, ASSAYIRI);
+//                        assay = dnaSeqAssay;
+//                    } else {
+//                        logger.info("Created default Assay");
+//                        assay = domain.make(Assay.class, ASSAYIRI);
+//                        // TODO add additional type based on sheet name and default IRI
+//                    }
 
                     /**
                      * Generic Assay information
@@ -923,7 +935,7 @@ public class ExcelValidator {
                     // parsedHeaders.addAll(Arrays.asList(ASSAY_DESCRIPTION, ASSAY_TITLE, ASSAY_IDENTIFIER, PLATFORM));
 
                     if (fileCell.getCellType().equals(CellType.BLANK)) {
-//                            logging("No file found for " + assay.getResource().getURI());
+                        logger.debug("No file found for " + assay.getResource().getURI());
                     } else {
                         String fileName = getStringValueCell(fileCell);
                         // Check the FileNameForwardPath and FileNameReversePath first
@@ -970,7 +982,8 @@ public class ExcelValidator {
 
                                 parsedHeaders.addAll(Arrays.asList(FORWARD_FILENAME, REVERSE_FILENAME));
                             }
-                        } else if (fileName != null) {
+                            // If it is one of the sequence assay types
+                        } else if (!assay.getClassTypeIri().endsWith("/Assay")) {
                             SingleSequenceDataSet singleSequenceDataSet = domain.make(SingleSequenceDataSet.class, PREFIX + fileName);
                             singleSequenceDataSet.setName(new File(fileName).getName().trim());
                             singleSequenceDataSet.setContentUrl("null");
@@ -987,6 +1000,15 @@ public class ExcelValidator {
                             assay.addHasPart(singleSequenceDataSet);
 
                             parsedHeaders.addAll(Arrays.asList(FORWARD_FILENAME));
+                        } else {
+                            Data_sample data_sample = domain.make(Data_sample.class, PREFIX + fileName);
+                            data_sample.setName(new File(fileName).getName().trim());
+                            data_sample.setContentUrl("null");
+                            data_sample.setBase64("null");
+                            data_sample.setSha256("null");
+                            data_sample.setContentSize(0L);
+                            data_sample.setFileFormat(setFileFormat(data_sample.getName()));
+                            assay.addHasPart(data_sample);
                         }
                     }
 
@@ -1004,14 +1026,14 @@ public class ExcelValidator {
                     // parsedHeaders.addAll(Arrays.asList(SAMPLE_IDENTIFIER));
 
                     // assay is still an amplicon assay but if it has an amplicon library we should move the files from amplicon assay to amplicon library assay
-                    if (assayType.equals(AssayType.AmpliconLibrary)) {
-                        AmpliconAssay ampliconAssay = (AmpliconAssay) assay;
-                        AmpliconLibraryAssay library = ampliconAssay.getLibrary();
-                        for (Data_sample data_sample : ampliconAssay.getAllHasPart()) {
-                            library.addHasPart(data_sample);
-                            ampliconAssay.remHasPart(data_sample);
-                        }
-                    }
+//                    if (assayType.equals(AssayType.AmpliconLibrary)) {
+//                        AmpliconAssay ampliconAssay = (AmpliconAssay) assay;
+//                        AmpliconLibraryAssay library = ampliconAssay.getLibrary();
+//                        for (Data_sample data_sample : ampliconAssay.getAllHasPart()) {
+//                            library.addHasPart(data_sample);
+//                            ampliconAssay.remHasPart(data_sample);
+//                        }
+//                    }
 
                     // Perform reference incorporation
                     if (header.indexOf(REFERENCE) != -1) {
diff --git a/src/main/java/nl/fairbydesign/views/template/TemplateView.java b/src/main/java/nl/fairbydesign/views/template/TemplateView.java
index e673ad8464e36629c3a8d39381c10b890a0b7ec8..b09ee5981fb74edcc6a5431227d9228f375086a4 100644
--- a/src/main/java/nl/fairbydesign/views/template/TemplateView.java
+++ b/src/main/java/nl/fairbydesign/views/template/TemplateView.java
@@ -274,7 +274,9 @@ public class TemplateView extends Div {
         VerticalLayout placeholder = new VerticalLayout();
         createPackageSelectionGrid(placeholder, metadata, help, false);
         verticalLayouts.add(placeholder);
-        assayLayout.add(addAssayButton, removeAssayButton);
+        HorizontalLayout assayButtons = new HorizontalLayout();
+        assayButtons.add(addAssayButton, removeAssayButton);
+        assayLayout.add(assayButtons);
         assayLayout.add(verticalLayouts.get(0));
 
         // Button to add another assay to the assay layout