Index: src/main/java/mk/ukim/finki/synergymed/models/Deliverycompany.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/Deliverycompany.java	(revision 12ce021e054b414ecb0668b2b30f1672a97a7d44)
+++ src/main/java/mk/ukim/finki/synergymed/models/Deliverycompany.java	(revision e0f42d22be3b368dd31c02fb475d2b66c7ef6a25)
@@ -11,5 +11,4 @@
 public class Deliverycompany {
     @Id
-    @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Column(name = "company_id", nullable = false)
     private Integer id;
Index: src/main/java/mk/ukim/finki/synergymed/models/enumerations/CompanyRoleType.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/models/enumerations/CompanyRoleType.java	(revision 12ce021e054b414ecb0668b2b30f1672a97a7d44)
+++ src/main/java/mk/ukim/finki/synergymed/models/enumerations/CompanyRoleType.java	(revision e0f42d22be3b368dd31c02fb475d2b66c7ef6a25)
@@ -5,4 +5,6 @@
     DISTRIBUTOR,
     MANUFACTURER,
-    PHARMACY
+    PHARMACY,
+
+    DELIVERYCOMPANY
 }
Index: src/main/java/mk/ukim/finki/synergymed/service/DeliveryCompanyService.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/DeliveryCompanyService.java	(revision e0f42d22be3b368dd31c02fb475d2b66c7ef6a25)
+++ src/main/java/mk/ukim/finki/synergymed/service/DeliveryCompanyService.java	(revision e0f42d22be3b368dd31c02fb475d2b66c7ef6a25)
@@ -0,0 +1,14 @@
+package mk.ukim.finki.synergymed.service;
+
+import mk.ukim.finki.synergymed.models.Deliverycompany;
+import mk.ukim.finki.synergymed.models.Distributor;
+
+import java.util.List;
+import java.util.Optional;
+
+public interface DeliveryCompanyService {
+    List<Deliverycompany> findAll();
+    Optional<Deliverycompany> findById(Integer companyId);
+    Deliverycompany create(Integer companyId);
+    void deleteById(Integer companyId);
+}
Index: src/main/java/mk/ukim/finki/synergymed/service/impl/DeliveryCompanyServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/service/impl/DeliveryCompanyServiceImpl.java	(revision e0f42d22be3b368dd31c02fb475d2b66c7ef6a25)
+++ src/main/java/mk/ukim/finki/synergymed/service/impl/DeliveryCompanyServiceImpl.java	(revision e0f42d22be3b368dd31c02fb475d2b66c7ef6a25)
@@ -0,0 +1,59 @@
+package mk.ukim.finki.synergymed.service.impl;
+
+import jakarta.persistence.EntityNotFoundException;
+import mk.ukim.finki.synergymed.models.Company;
+import mk.ukim.finki.synergymed.models.Deliverycompany;
+import mk.ukim.finki.synergymed.repositories.CompanyRepository;
+import mk.ukim.finki.synergymed.repositories.DeliverycompanyRepository;
+import mk.ukim.finki.synergymed.service.DeliveryCompanyService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class DeliveryCompanyServiceImpl implements DeliveryCompanyService {
+
+    private final DeliverycompanyRepository deliveryCompanyRepository;
+    private final CompanyRepository companyRepository;
+
+    public DeliveryCompanyServiceImpl(DeliverycompanyRepository deliveryCompanyRepository,
+                                      CompanyRepository companyRepository) {
+        this.deliveryCompanyRepository = deliveryCompanyRepository;
+        this.companyRepository = companyRepository;
+    }
+
+    @Override
+    public List<Deliverycompany> findAll() {
+        return deliveryCompanyRepository.findAll();
+    }
+
+    @Override
+    public Optional<Deliverycompany> findById(Integer companyId) {
+        return deliveryCompanyRepository.findById(companyId);
+    }
+
+    @Override
+    @Transactional
+    public Deliverycompany create(Integer companyId) {
+        if (deliveryCompanyRepository.existsById(companyId)) {
+            throw new IllegalStateException("Delivery company already exists for company " + companyId);
+        }
+
+        Company company = companyRepository.findById(companyId)
+                .orElseThrow(() -> new EntityNotFoundException("Company not found: " + companyId));
+
+        Deliverycompany dc = new Deliverycompany();
+        // If Deliverycompany uses @MapsId on its company mapping, this copies company.id into deliverycompany.id
+        dc.setCompany(company);
+
+        return deliveryCompanyRepository.save(dc);
+    }
+
+    @Override
+    @Transactional
+    public void deleteById(Integer companyId) {
+        deliveryCompanyRepository.deleteById(companyId);
+    }
+}
Index: src/main/java/mk/ukim/finki/synergymed/web/CompanyController.java
===================================================================
--- src/main/java/mk/ukim/finki/synergymed/web/CompanyController.java	(revision e0f42d22be3b368dd31c02fb475d2b66c7ef6a25)
+++ src/main/java/mk/ukim/finki/synergymed/web/CompanyController.java	(revision e0f42d22be3b368dd31c02fb475d2b66c7ef6a25)
@@ -0,0 +1,144 @@
+package mk.ukim.finki.synergymed.web;
+
+import mk.ukim.finki.synergymed.models.Company;
+import mk.ukim.finki.synergymed.models.enumerations.CompanyRoleType;
+import mk.ukim.finki.synergymed.service.*;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.mvc.support.RedirectAttributes;
+
+import java.util.*;
+
+@Controller
+@RequestMapping("/companies")
+public class CompanyController {
+
+    private final CompanyService companyService;
+    private final CompanyOrchestrationService companyOrchestrationService;
+    private final DistributorService distributorService;
+    private final ManufacturerService manufacturerService;
+    private final PharmacyService pharmacyService;
+    private final DeliveryCompanyService deliveryCompanyService;
+
+    public CompanyController(CompanyService companyService,
+                             CompanyOrchestrationService companyOrchestrationService,
+                             DistributorService distributorService,
+                             ManufacturerService manufacturerService,
+                             PharmacyService pharmacyService,
+                             DeliveryCompanyService deliveryCompanyService) {
+        this.companyService = companyService;
+        this.companyOrchestrationService = companyOrchestrationService;
+        this.distributorService = distributorService;
+        this.manufacturerService = manufacturerService;
+        this.pharmacyService = pharmacyService;
+        this.deliveryCompanyService = deliveryCompanyService;
+    }
+
+    // Grid of companies
+    @GetMapping
+    public String index(Model model) {
+        List<Company> companies = companyService.findAll();
+        Map<Integer, List<CompanyRoleType>> rolesByCompany = new HashMap<>();
+        for (Company c : companies) {
+            List<CompanyRoleType> roles = new ArrayList<>();
+            if (distributorService.findById(c.getId()).isPresent()) roles.add(CompanyRoleType.DISTRIBUTOR);
+            if (manufacturerService.findById(c.getId()).isPresent()) roles.add(CompanyRoleType.MANUFACTURER);
+            if (pharmacyService.findById(c.getId()).isPresent()) roles.add(CompanyRoleType.PHARMACY);
+            try {
+                if (deliveryCompanyService.findById(c.getId()).isPresent()) {
+                    roles.add(CompanyRoleType.valueOf("DELIVERYCOMPANY"));
+                }
+            } catch (IllegalArgumentException ignored) {}
+            rolesByCompany.put(c.getId(), roles);
+        }
+        model.addAttribute("companies", companies);
+        model.addAttribute("rolesByCompany", rolesByCompany);
+        return "companies";
+    }
+
+    // Create form
+    @GetMapping("/new")
+    public String createForm(Model model) {
+        model.addAttribute("roleTypes", CompanyRoleType.values()); // checkboxes shown only on create
+        model.addAttribute("mode", "create");
+        return "company-form";
+    }
+
+    // Create with roles
+    @PostMapping
+    public String create(@RequestParam String companyName,
+                         @RequestParam(required = false) String description,
+                         @RequestParam String registrationNumber,
+                         @RequestParam(name = "roles", required = false) List<CompanyRoleType> roles,
+                         RedirectAttributes ra) {
+        Company saved = companyOrchestrationService.createCompanyWithRoles(
+                companyName, description, registrationNumber, roles == null ? List.of() : roles
+        );
+        ra.addFlashAttribute("message", "Company created: " + saved.getCompanyName());
+        return "redirect:/companies";
+    }
+
+    // GET /companies/{id}/edit — pre-check roles using current DB state
+    @GetMapping("/{id}/edit")
+    public String editForm(@PathVariable Integer id, Model model) {
+        Company c = companyService.findById(id).orElseThrow();
+        Set<CompanyRoleType> selectedRoles = new HashSet<>();
+        if (distributorService.findById(id).isPresent()) selectedRoles.add(CompanyRoleType.DISTRIBUTOR);
+        if (manufacturerService.findById(id).isPresent()) selectedRoles.add(CompanyRoleType.MANUFACTURER);
+        if (pharmacyService.findById(id).isPresent()) selectedRoles.add(CompanyRoleType.PHARMACY);
+        try { if (deliveryCompanyService.findById(id).isPresent()) selectedRoles.add(CompanyRoleType.valueOf("DELIVERYCOMPANY")); }
+        catch (IllegalArgumentException ignored) {}
+
+        model.addAttribute("company", c);
+        model.addAttribute("roleTypes", CompanyRoleType.values());
+        model.addAttribute("selectedRoles", selectedRoles);
+        model.addAttribute("mode", "edit");
+        return "company-form";
+    }
+
+    // POST /companies/{id}/update — simple update + role reset
+    @PostMapping("/{id}/update")
+    public String update(@PathVariable Integer id,
+                         @RequestParam String companyName,
+                         @RequestParam(required = false) String description,
+                         @RequestParam String registrationNumber,
+                         @RequestParam(name = "roles", required = false) List<CompanyRoleType> roles,
+                         RedirectAttributes ra) {
+        // 1) Update core fields (your existing simple update)
+        companyService.update(id, companyName, description, registrationNumber);
+
+        // 2) Reset roles: remove all, then add only the submitted ones
+        distributorService.deleteById(id);
+        manufacturerService.deleteById(id);
+        pharmacyService.deleteById(id);
+        try { deliveryCompanyService.deleteById(id); } catch (Exception ignored) {}
+
+        if (roles != null) {
+            for (CompanyRoleType r : roles) {
+                switch (r) {
+                    case DISTRIBUTOR -> distributorService.create(id);
+                    case MANUFACTURER -> manufacturerService.create(id);
+                    case PHARMACY -> pharmacyService.create(id);
+                    default -> {
+                        if ("DELIVERYCOMPANY".equals(r.name())) {
+                            deliveryCompanyService.create(id);
+                        }
+                    }
+                }
+            }
+        }
+
+        ra.addFlashAttribute("message", "Company updated: " + companyName);
+        return "redirect:/companies";
+    }
+
+
+    // Delete (FKs should cascade from company to roles in DB)
+    @PostMapping("/{id}/delete")
+    public String delete(@PathVariable Integer id, RedirectAttributes ra) {
+        companyService.deleteById(id);
+        ra.addFlashAttribute("message", "Company deleted");
+        return "redirect:/companies";
+    }
+}
Index: src/main/resources/templates/companies.html
===================================================================
--- src/main/resources/templates/companies.html	(revision e0f42d22be3b368dd31c02fb475d2b66c7ef6a25)
+++ src/main/resources/templates/companies.html	(revision e0f42d22be3b368dd31c02fb475d2b66c7ef6a25)
@@ -0,0 +1,59 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title>SynergyMed – Companies</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <style>
+        :root{--teal-1:#20b2aa;--teal-2:#48d1cc;--bg:#fefeff;--card:#ffffff;--muted:#6c757d;--text:#1f2937;--shadow:0 20px 40px rgba(0,0,0,0.10);--shadow-sm:0 6px 18px rgba(0,0,0,0.08)}
+        *{margin:0;padding:0;box-sizing:border-box}
+        body{font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;min-height:100vh;background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);color:var(--text);padding:28px;display:flex;justify-content:center}
+        .page{width:100%;max-width:1200px}
+        .header{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px;background:linear-gradient(135deg,var(--teal-1),var(--teal-2));color:#fff;padding:20px 24px;border-radius:20px;box-shadow:var(--shadow)}
+        .btn{display:inline-block;border:none;cursor:pointer;text-decoration:none;padding:12px 16px;border-radius:12px;font-weight:600;letter-spacing:.5px;transition:.2s ease}
+        .btn-primary{background:linear-gradient(135deg,var(--teal-1),var(--teal-2));color:#fff;box-shadow:0 10px 20px rgba(32,178,170,.25)}
+        .btn-primary:hover{transform:translateY(-2px)}
+        .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:22px}
+        .card{background:var(--card);border-radius:18px;overflow:hidden;box-shadow:var(--shadow-sm);display:flex;flex-direction:column}
+        .content{padding:14px 16px 18px}
+        .title{font-weight:700;margin:6px 0 2px}
+        .muted{color:var(--muted);font-size:.92rem}
+        .row{display:flex;justify-content:space-between;align-items:center;margin-top:10px}
+        .badge{display:inline-block;background:rgba(32,178,170,.12);color:#137a74;padding:4px 8px;border-radius:999px;font-size:.80rem;font-weight:700;margin-right:6px}
+        .btn-outline{background:#fff;border:2px solid rgba(32,178,170,.25);color:#20b2aa;padding:8px 12px;border-radius:10px;text-decoration:none;font-weight:600;transition:.2s ease}
+        .btn-outline:hover{border-color:#20b2aa;box-shadow:0 6px 14px rgba(32,178,170,.18)}
+        @media (max-width:560px){body{padding:16px}.header{padding:16px}}
+    </style>
+</head>
+<body>
+<div class="page">
+    <div class="header">
+        <h2>Companies</h2>
+        <a class="btn btn-primary" th:href="@{/companies/new}">Create</a>
+    </div>
+
+    <div class="grid">
+        <div class="card" th:each="c : ${companies}">
+            <div class="content">
+                <div class="title" th:text="${c.companyName}">Company Name</div>
+                <div class="muted" th:text="${'Reg. No: ' + c.registrationNumber}">Reg No</div>
+                <div class="muted" th:text="${c.description}">Description</div>
+
+                <div style="margin-top:8px;">
+                    <span class="badge" th:each="r : ${rolesByCompany[c.id]}" th:text="${r}">ROLE</span>
+                </div>
+
+                <div class="row" style="margin-top:12px;">
+                    <div>
+                        <a class="btn-outline" th:href="@{/companies/{id}/edit(id=${c.id})}" style="margin-right:8px;">Edit</a>
+                    </div>
+                    <form th:action="@{/companies/{id}/delete(id=${c.id})}" method="post" style="display:inline">
+                        <button type="submit" class="btn-outline" style="color:#b3261e;border-color:#f0caca">Delete</button>
+                    </form>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+</body>
+</html>
Index: src/main/resources/templates/company-form.html
===================================================================
--- src/main/resources/templates/company-form.html	(revision e0f42d22be3b368dd31c02fb475d2b66c7ef6a25)
+++ src/main/resources/templates/company-form.html	(revision e0f42d22be3b368dd31c02fb475d2b66c7ef6a25)
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org" lang="en">
+<head>
+    <meta charset="UTF-8">
+    <title th:text="${mode=='create' ? 'Create Company' : 'Edit Company'}">Company</title>
+    <meta name="viewport" content="width=device-width, initial-scale=1.0">
+    <style>
+        :root{--teal-1:#20b2aa;--teal-2:#48d1cc;--bg:#fefeff;--card:#ffffff;--muted:#6c757d;--shadow:0 20px 40px rgba(0,0,0,.1)}
+        *{margin:0;padding:0;box-sizing:border-box}
+        body{font-family:'Segoe UI',Tahoma,Geneva,Verdana,sans-serif;min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#a4ecba 0%,#fefeff 100%);padding:24px}
+        .wrap{width:100%;max-width:720px;background:#fff;border-radius:20px;overflow:hidden;box-shadow:var(--shadow)}
+        .head{background:linear-gradient(135deg,var(--teal-1),var(--teal-2));color:#fff;padding:26px 24px}
+        .body{padding:26px 24px}
+        .row{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px}
+        .row-1{display:grid;grid-template-columns:1fr;gap:16px;margin-bottom:6px}
+        label{display:block;margin-bottom:8px;color:#334155;font-weight:600;font-size:.95rem}
+        input,textarea{width:100%;padding:14px 12px;border:2px solid #e6ebf0;border-radius:12px;background:#f8fafc;transition:.2s ease;font-size:1rem}
+        textarea{min-height:110px}
+        input:focus,textarea:focus{outline:none;border-color:var(--teal-1);background:#fff;box-shadow:0 0 0 3px rgba(32,178,170,.12)}
+        .hint{color:var(--muted);font-size:.86rem;margin-top:4px}
+        .roles{display:flex;flex-wrap:wrap;gap:10px;margin-top:6px}
+        .chip{display:inline-flex;align-items:center;gap:6px;border:2px solid rgba(32,178,170,.25);border-radius:999px;padding:8px 12px;background:#fff}
+        .actions{display:flex;gap:12px;padding:0 24px 24px 24px}
+        .btn{border:none;padding:12px 16px;border-radius:12px;cursor:pointer;font-weight:700;letter-spacing:.4px}
+        .btn-primary{background:linear-gradient(135deg,var(--teal-1),var(--teal-2));color:#fff;box-shadow:0 10px 20px rgba(32,178,170,.25)}
+        .btn-secondary{background:#fff;color:#111;border:2px solid rgba(32,178,170,.25)}
+    </style>
+</head>
+<body>
+<div class="wrap">
+    <div class="head">
+        <h2 th:text="${mode=='create' ? 'Create Company' : 'Edit Company'}">Company</h2>
+    </div>
+
+    <div class="body">
+        <form th:action="${mode=='create'} ? @{/companies} : @{/companies/{id}/update(id=${company.id})}" method="post">
+            <!-- If Spring Security is enabled, include a CSRF token input here -->
+
+            <div class="row">
+                <div>
+                    <label>Company Name</label>
+                    <input type="text" name="companyName" th:value="${mode=='edit' ? company.companyName : ''}" required>
+                </div>
+                <div>
+                    <label>Registration Number</label>
+                    <input type="text" name="registrationNumber" th:value="${mode=='edit' ? company.registrationNumber : ''}" required>
+                </div>
+            </div>
+
+            <div class="row-1">
+                <div>
+                    <label>Description</label>
+                    <textarea name="description" th:text="${mode=='edit' ? company.description : ''}"></textarea>
+                </div>
+            </div>
+
+            <!-- Roles on both create and edit; edit pre-checks via selectedRoles -->
+            <div class="row-1">
+                <div>
+                    <label>Company Types</label>
+                    <div class="roles">
+                        <label class="chip" th:each="rt : ${roleTypes}">
+                            <input type="checkbox" name="roles" th:value="${rt}"
+                                   th:checked="${mode=='edit' and selectedRoles != null and selectedRoles.contains(rt)}">
+                            <span th:text="${rt}">ROLE</span>
+                        </label>
+                    </div>
+                    <div class="hint">Select roles; on update, existing roles are pre-checked based on current state.</div>
+                </div>
+            </div>
+
+            <div class="actions">
+                <button class="btn btn-primary" type="submit" th:text="${mode=='create' ? 'Create' : 'Update'}">Save</button>
+                <a class="btn btn-secondary" th:href="@{/companies}">Cancel</a>
+            </div>
+        </form>
+    </div>
+</div>
+</body>
+</html>
