diff --git a/build.gradle b/build.gradle
index de322fceebe23864820f63c414daeb1dcbe1c391..35e48fec6bee2b4ae45087f8df5749a71edb9edb 100644
--- a/build.gradle
+++ b/build.gradle
@@ -28,6 +28,9 @@ dependencies {
 	developmentOnly 'org.springframework.boot:spring-boot-devtools'
 	annotationProcessor 'org.projectlombok:lombok'
 	testImplementation 'org.springframework.boot:spring-boot-starter-test'
+	implementation 'org.springframework.boot:spring-boot-starter-validation'
+//	implementation 'org.springframework.boot:spring-boot-starter-jdbc'
+//	implementation 'org.mariadb.jdbc:mariadb-java-client:2.1.2'
 }
 
 tasks.named('bootBuildImage') {
diff --git a/src/main/java/Team5/SmartTowns/Landmarks/Landmarks.java b/src/main/java/Team5/SmartTowns/Landmarks/Landmarks.java
new file mode 100644
index 0000000000000000000000000000000000000000..ee6628f305b885fab6253be7ab50482d1cc818f2
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/Landmarks/Landmarks.java
@@ -0,0 +1,29 @@
+package Team5.SmartTowns.Landmarks;
+
+import jakarta.validation.constraints.Email;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+@Data
+@AllArgsConstructor
+public class Landmarks {
+    @NotEmpty(message = "You must type in a username.")
+    private String landmarkName;
+    @Email(message = "You must attach a contact address.")
+    private String landmarkEmail;
+    private String landmarkDescription;
+    private String landmarkLocation;
+    private Integer trailID;
+
+
+    public Landmarks(){
+        this.landmarkName ="";
+        this.landmarkEmail="";
+        this.landmarkDescription ="";
+        this.landmarkLocation ="";
+        this.trailID =0;
+    }
+
+
+}
diff --git a/src/main/java/Team5/SmartTowns/Landmarks/LandmarksController.java b/src/main/java/Team5/SmartTowns/Landmarks/LandmarksController.java
new file mode 100644
index 0000000000000000000000000000000000000000..98c35594da947d261f6980b10a516a75b4583431
--- /dev/null
+++ b/src/main/java/Team5/SmartTowns/Landmarks/LandmarksController.java
@@ -0,0 +1,53 @@
+package Team5.SmartTowns.Landmarks;
+
+import jakarta.validation.Valid;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.validation.BindingResult;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.servlet.ModelAndView;
+//import jakarta.validation.Valid;
+
+@Controller
+public class LandmarksController {
+
+// Controllers for LandmarkFormTh.html landmark submission form
+    @GetMapping("/landmarkSubmission")
+    public ModelAndView landmarkSubmission(){
+        ModelAndView modelAndView1 = new ModelAndView("Landmarks/LandmarkFormTh.html");
+        modelAndView1.addObject("landmarkData", new Landmarks());
+        return modelAndView1;
+
+    }
+
+
+    @PostMapping("/landmarkSub")
+    public ModelAndView landmarkSent(@Valid @ModelAttribute("landmarkData") Landmarks landmarks, BindingResult bindingResult, Model model ) {
+
+
+        if (bindingResult.hasErrors()) {
+            ModelAndView modelAndView = new ModelAndView("Landmarks/LandmarkFormTh.html", model.asMap());
+            return modelAndView;
+
+        } else{
+            System.out.println(landmarks);
+            // current functionality only prints successful Landmarks, (todo )database integration is necessary here
+
+
+        ModelAndView modelAndView = new ModelAndView("redirect:/test.html");
+            return modelAndView;
+
+        }
+
+
+
+
+
+
+
+    }
+
+
+}
diff --git a/src/main/resources/static/css/landmarkFormStyle.css b/src/main/resources/static/css/landmarkFormStyle.css
new file mode 100644
index 0000000000000000000000000000000000000000..9d638b48ae03d406b9f97c85e21f14a00fb3188f
--- /dev/null
+++ b/src/main/resources/static/css/landmarkFormStyle.css
@@ -0,0 +1,21 @@
+/*LandmarkFormTh stylesheet*/
+body{
+    background:  rgb(41, 41, 41);
+    color: wheat;
+}
+#landmarkSubmission {
+    background-color: rgb(206, 153, 253);
+    color: black;
+    border-color: white;
+    align-content: center;
+    text-align: center;
+    border-radius: 25px;
+    max-width: 620px;
+    margin: 0 auto
+}
+
+#landmarkFormTitle{
+    color:white;
+    text-align: center;
+
+}
\ No newline at end of file
diff --git a/src/main/resources/templates/Landmarks/LandmarkFormTh.html b/src/main/resources/templates/Landmarks/LandmarkFormTh.html
new file mode 100644
index 0000000000000000000000000000000000000000..9690356f54031ce873453d68aa97a248ac89f687
--- /dev/null
+++ b/src/main/resources/templates/Landmarks/LandmarkFormTh.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>Landmark Sign Up</title>
+    <link rel="stylesheet" th:href="@{css/landmarkFormStyle.css}">
+    <link rel="stylesheet" th:href="@{css/templatingstyle.css}">
+
+
+</head>
+<body>
+<header th:insert="~{/towns/Templating.html :: header}"></header>
+<hr style="height:20px; visibility:hidden;" />
+<H2 id="landmarkFormTitle"> Interested in joining our trails? Sign up Here! </H2>
+<main>
+<!--    Form used to submit potential landmarks for trails-->
+    <form action="/landmarkSub" id="landmarkSubmission" name="landmarkSubmission" method="post" th:object="${landmarkData}" onsubmit="return landmarkFormValidation()">
+
+        <br>
+        <label>Business Name:
+           <input type="text" th:field="*{landmarkName}" placeholder="Business name here...">
+        </label><br>
+        <div th:errors="*{landmarkName}" th:if="${#fields.hasErrors('landmarkName')}">ErrorLandmarkName</div>
+        <br><label>Contact Address:
+            <input type="text" th:field="*{landmarkEmail}" placeholder="E-mail here...">
+        </label><br>
+        <div th:errors="*{landmarkEmail}" th:if="${#fields.hasErrors('landmarkEmail')}">ErrorEmail</div>
+        <br><label>Please Describe Your Business:<br>
+            <textarea th:field="*{landmarkDescription}" rows="18" cols="70" placeholder="Max 200 words please..."></textarea>
+        </label><br><br>
+        <label>Your Location:
+            <select th:field="*{landmarkLocation}">
+                <option value="" disabled selected>Select Location</option>
+                <option value="Caerphilly">Caerphilly</option>
+                <option value="Risca">Risca</option>
+                <option value="Penarth">Penarth</option>
+            </select>
+        </label><br><br>
+        <label>Trail:
+            <select th:field="*{trailID}">
+                <option value=0 disabled selected>Select Trail</option>
+                <option value=0101>(Caerphilly) Castle Trail</option>
+                <option value=0102>(Caerphilly) Pub Trail</option>
+                <option value=0103>(Caerphilly) Heritage Trail</option>
+                <option value=0201>(Risca) Heritage and Culture Trail</option>
+                <option value=0301>(Penarth) Esplanade Trail</option>
+            </select>
+
+        </label><br><br>
+
+
+        <input type="submit">
+        <hr style="height:0px; visibility:hidden;" />
+    </form>
+
+    <hr style="height:40px; visibility:hidden;" />
+</main>
+
+<script>
+
+
+
+
+// verification function of the above form
+    function landmarkFormValidation(){
+        var pass=true;
+        var trail = document.forms["landmarkSubmission"]["trailID"].value
+        var location = document.forms["landmarkSubmission"]["landmarkLocation"].value
+        var description = document.forms["landmarkSubmission"]["landmarkDescription"].value;
+        var descriptionWrdCount=description.split(" ").length
+        if (descriptionWrdCount>200){
+            alert('Please keep your description to a maximum of 200 words.');
+            pass = false;
+        }
+
+        if (trail==0){ // values of 0 and "" used to ensure default drop down option isn't submittable
+            alert('Invalid trail selected. \nPlease select the trail you wish to join.');
+            pass = false;
+        }
+
+        if (location==""){
+            alert('Invalid location selected. \nPlease select the location you wish to join.');
+
+            pass = false; // ensure correct trail is selected in accordance to the town it takes place in
+
+        } if ( (location=="Caerphilly" & (parseInt(trail/100)!==1)) ||
+            (location=="Risca" & (parseInt(trail/100)!==2)) ||
+            (location=="Penarth" & (parseInt(trail/100)!==3)) ){
+            alert('Trail unavailable in your current location. \nPlease choose an available trail');
+            pass = false;
+        }
+
+        return pass;
+    }
+
+
+</script>
+<footer th:insert="~{/towns/Templating.html :: footer}"></footer>
+</body>
+</html>
\ No newline at end of file
diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html
index 39906f23d230c075381eeb440453ce3b4ace4029..47b1dc1353c7c96bcb3409f54558ff18c4da6cf4 100644
--- a/src/main/resources/templates/home.html
+++ b/src/main/resources/templates/home.html
@@ -9,7 +9,6 @@
 
 <body>
     <header th:replace="fragments/temp_frags.html :: header"></header>
-
     <main>
         <div class="trailList">
             <ul class="ulHeader">
diff --git a/src/main/resources/templates/towns/Templating.html b/src/main/resources/templates/towns/Templating.html
index c27b5912286144bc1b6d3a83d255dc45c693a0ee..f7a4d184e91b2fb31759692f4d0771bfb781ac82 100644
--- a/src/main/resources/templates/towns/Templating.html
+++ b/src/main/resources/templates/towns/Templating.html
@@ -1,3 +1,21 @@
+<!--<<<<<<< HEAD-->
+<!--<header th:fragment="headerBlock">-->
+<!--    <br>Header Block<br>-->
+<!--</header>-->
+
+<!--<footer th:fragment="footerBlock">-->
+<!--    <br><b>VZTA</b><br>-->
+<!--    <br>Near Me Now LTD<br>-->
+<!--    <br>Britania House<br>-->
+<!--    <br>Caerphilly Business Park<br>-->
+<!--    <br>Caerphilly<br>-->
+<!--    <br>CF83 3GG<br>-->
+<!--    <br>(C) VZTA 2022<br>-->
+<!--    <br><b>Follow Us</b><br>-->
+<!--    <br>Facebook Twitter Instagram LinkedIn<br>-->
+<!--    <br>Privacy Policy Terms and Conditions<br>-->
+<!--</footer>-->
+<!--=======-->
 <link rel="stylesheet" href="../../static/css/templatingstyle.css">
 <header class="headerBar" th:fragment="header">
 
@@ -53,3 +71,4 @@
     </div>
 </div>
 </div>
+<!--&gt;>>>>>> main-->
diff --git a/src/main/resources/templates/towns/caerphilly.html b/src/main/resources/templates/towns/caerphilly.html
index 811b8f5e5a68f960b99a751277debd027162caa6..d8c697546429b69854bf5e6c8112223d11469d16 100644
--- a/src/main/resources/templates/towns/caerphilly.html
+++ b/src/main/resources/templates/towns/caerphilly.html
@@ -110,6 +110,7 @@
         grid-template-columns: 50% 50%;
         grid-template-rows: auto;
         grid-template-areas:
+
         "title1 title1"
         "title2 title2"
         "BadgeStickerProgress ."
diff --git a/src/main/resources/templates/towns/templates.server/Templating.html b/src/main/resources/templates/towns/templates.server/Templating.html
deleted file mode 100644
index 65a9c20b4115094f7ef70c2778eb8512198e197d..0000000000000000000000000000000000000000
--- a/src/main/resources/templates/towns/templates.server/Templating.html
+++ /dev/null
@@ -1,16 +0,0 @@
-<header th:fragment="headerBlock">
-    <br>Header Block<br>
-</header>
-
-<footer th:fragment="footerBlock">
-    <br><b>VZTA</b><br>
-    <br>Near Me Now LTD<br>
-    <br>Britania House<br>
-    <br>Caerphilly Business Park<br>
-    <br>Caerphilly<br>
-    <br>CF83 3GG<br>
-    <br>(C) VZTA 2022<br>
-    <br><b>Follow Us</b><br>
-    <br>Facebook Twitter Instagram LinkedIn<br>
-    <br>Privacy Policy Terms and Conditions<br>
-</footer>
\ No newline at end of file