Index: src/main/java/mk/ukim/finki/busngo/model/entities/Kondukter.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/entities/Kondukter.java	(revision 4d026a5e5b12d6fe64a4a57a4d7c6ca5f10561ed)
+++ src/main/java/mk/ukim/finki/busngo/model/entities/Kondukter.java	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -3,8 +3,10 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.util.List;
 import java.util.Objects;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
 @Entity
Index: src/main/java/mk/ukim/finki/busngo/model/entities/Korisnik.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/entities/Korisnik.java	(revision 4d026a5e5b12d6fe64a4a57a4d7c6ca5f10561ed)
+++ src/main/java/mk/ukim/finki/busngo/model/entities/Korisnik.java	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -50,4 +50,9 @@
     private String kLozinka;
 
+    @Basic
+    @Column(name = "k_role")
+    @Enumerated(EnumType.STRING)
+    private Role kRole;
+
 //    @OneToMany(mappedBy = "korisnikByPatnikKId")
 //    private List<Bilet> biletsByKId;
@@ -60,5 +65,5 @@
     @Override
     public Collection<? extends GrantedAuthority> getAuthorities() {
-        return kIsAdmin ? Collections.singletonList(Role.ROLE_ADMIN) : Collections.singletonList(Role.ROLE_USER);
+        return Collections.singletonList(kRole);
     }
 
Index: src/main/java/mk/ukim/finki/busngo/model/entities/Patnik.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/entities/Patnik.java	(revision 4d026a5e5b12d6fe64a4a57a4d7c6ca5f10561ed)
+++ src/main/java/mk/ukim/finki/busngo/model/entities/Patnik.java	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -3,8 +3,10 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.util.List;
 import java.util.Objects;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
 @Entity
Index: src/main/java/mk/ukim/finki/busngo/model/entities/Vozac.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/entities/Vozac.java	(revision 4d026a5e5b12d6fe64a4a57a4d7c6ca5f10561ed)
+++ src/main/java/mk/ukim/finki/busngo/model/entities/Vozac.java	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -3,8 +3,10 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 
 import java.util.List;
 import java.util.Objects;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
 @Entity
Index: src/main/java/mk/ukim/finki/busngo/model/entities/Vraboten.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/entities/Vraboten.java	(revision 4d026a5e5b12d6fe64a4a57a4d7c6ca5f10561ed)
+++ src/main/java/mk/ukim/finki/busngo/model/entities/Vraboten.java	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -3,4 +3,5 @@
 import jakarta.persistence.*;
 import lombok.Data;
+import lombok.EqualsAndHashCode;
 import lombok.Getter;
 
@@ -8,4 +9,5 @@
 import java.util.Objects;
 
+@EqualsAndHashCode(callSuper = true)
 @Data
 @Entity
Index: src/main/java/mk/ukim/finki/busngo/repository/VrabotrenRepository.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/repository/VrabotrenRepository.java	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
+++ src/main/java/mk/ukim/finki/busngo/repository/VrabotrenRepository.java	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -0,0 +1,8 @@
+package mk.ukim.finki.busngo.repository;
+
+import mk.ukim.finki.busngo.model.entities.Vraboten;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface VrabotrenRepository extends JpaRepository<Vraboten, Long> {
+
+}
Index: src/main/java/mk/ukim/finki/busngo/service/AuthService.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/service/AuthService.java	(revision 4d026a5e5b12d6fe64a4a57a4d7c6ca5f10561ed)
+++ src/main/java/mk/ukim/finki/busngo/service/AuthService.java	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -2,4 +2,5 @@
 
 import mk.ukim.finki.busngo.model.entities.Korisnik;
+import mk.ukim.finki.busngo.model.enums.Role;
 import mk.ukim.finki.busngo.model.enums.VrabotenType;
 
@@ -9,3 +10,4 @@
     Korisnik registerVraboten(String ime, String email, String password, String confirmPassword, String address, String telefon, VrabotenType type, Double salary);
 
+    Korisnik register(String name, String email, String password, String confirmPassword, String address, String phone, Role role, Double salary);
 }
Index: src/main/java/mk/ukim/finki/busngo/service/KorisnikService.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/service/KorisnikService.java	(revision 4d026a5e5b12d6fe64a4a57a4d7c6ca5f10561ed)
+++ src/main/java/mk/ukim/finki/busngo/service/KorisnikService.java	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -2,4 +2,5 @@
 
 import mk.ukim.finki.busngo.model.entities.Korisnik;
+import mk.ukim.finki.busngo.model.enums.Role;
 
 
@@ -10,3 +11,4 @@
     Korisnik findById(Long id);
     Korisnik loadUserByEmail(String email);
+
 }
Index: src/main/java/mk/ukim/finki/busngo/service/impl/AuthServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/service/impl/AuthServiceImpl.java	(revision 4d026a5e5b12d6fe64a4a57a4d7c6ca5f10561ed)
+++ src/main/java/mk/ukim/finki/busngo/service/impl/AuthServiceImpl.java	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -5,4 +5,5 @@
 import mk.ukim.finki.busngo.model.entities.Patnik;
 import mk.ukim.finki.busngo.model.entities.Vozac;
+import mk.ukim.finki.busngo.model.enums.Role;
 import mk.ukim.finki.busngo.model.enums.VrabotenType;
 import mk.ukim.finki.busngo.model.exceptions.InvalidCredentialsException;
@@ -128,4 +129,54 @@
     }
 
+    @Override
+    public Korisnik register(String name, String email, String password, String confirmPassword, String address, String phone, Role role, Double salary) {
+        if (email == null || password == null || email.isEmpty() || password.isEmpty()) {
+            throw new InvalidCredentialsException();
+        }
+
+        if(!password.equals(confirmPassword)){
+            throw new InvalidCredentialsException();
+        }
+
+        if(role.equals(Role.ROLE_DRIVER)){
+            Vozac vozac = new Vozac();
+            vozac.setKIme(name);
+            vozac.setKAdresa(address);
+            vozac.setKLozinka(passwordEncoder.encode(password));
+            vozac.setKEmail(email);
+            vozac.setKTelefon(phone);
+            vozac.setKIsAdmin(role.equals(Role.ROLE_ADMIN));
+            vozac.setKRole(role);
+            vozac.setVPlata(salary != null ? salary : 0.0);
+            vozac.setVDatumNaVrabotuvanje(Date.valueOf(LocalDate.now()));
+            this.korisnikRepository.save(vozac);
+            return vozacRepository.save(vozac);
+        } else if(role.equals(Role.ROLE_CONDUCTOR)){
+            Kondukter kondukter = new Kondukter();
+            kondukter.setKIme(name);
+            kondukter.setKAdresa(address);
+            kondukter.setKLozinka(passwordEncoder.encode(password));
+            kondukter.setKEmail(email);
+            kondukter.setKTelefon(phone);
+            kondukter.setKIsAdmin(role.equals(Role.ROLE_ADMIN));
+            kondukter.setKRole(role);
+            kondukter.setVPlata(salary != null ? salary : 0.0);
+            kondukter.setVDatumNaVrabotuvanje(Date.valueOf(LocalDate.now()));
+            this.korisnikRepository.save(kondukter);
+            return kondukterRepository.save(kondukter);
+        } else {
+            Patnik patnik = new Patnik();
+            patnik.setKIme(name);
+            patnik.setKAdresa(address);
+            patnik.setKLozinka(passwordEncoder.encode(password));
+            patnik.setKEmail(email);
+            patnik.setKTelefon(phone);
+            patnik.setKIsAdmin(role.equals(Role.ROLE_ADMIN));
+            patnik.setKRole(role);
+            this.korisnikRepository.save(patnik);
+            return patnikRepository.save(patnik);
+        }
+    }
+
 
 }
Index: src/main/java/mk/ukim/finki/busngo/service/impl/KorisnikServiceImpl.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/service/impl/KorisnikServiceImpl.java	(revision 4d026a5e5b12d6fe64a4a57a4d7c6ca5f10561ed)
+++ src/main/java/mk/ukim/finki/busngo/service/impl/KorisnikServiceImpl.java	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -2,4 +2,5 @@
 
 import mk.ukim.finki.busngo.model.entities.Korisnik;
+import mk.ukim.finki.busngo.model.enums.Role;
 import mk.ukim.finki.busngo.model.exceptions.InvalidUserId;
 import mk.ukim.finki.busngo.repository.KorisnikRepository;
Index: src/main/java/mk/ukim/finki/busngo/web/RegisterController.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/web/RegisterController.java	(revision 4d026a5e5b12d6fe64a4a57a4d7c6ca5f10561ed)
+++ src/main/java/mk/ukim/finki/busngo/web/RegisterController.java	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -2,4 +2,5 @@
 
 import mk.ukim.finki.busngo.model.entities.Korisnik;
+import mk.ukim.finki.busngo.model.enums.Role;
 import mk.ukim.finki.busngo.model.enums.VrabotenType;
 import mk.ukim.finki.busngo.model.exceptions.InvalidCredentialsException;
@@ -35,5 +36,5 @@
         }
 
-        model.addAttribute("types", VrabotenType.values());
+        model.addAttribute("roles", Role.values());
 
         model.addAttribute("bodyContent", "register");
@@ -48,15 +49,10 @@
                            @RequestParam String address,
                            @RequestParam String phone,
-                           @RequestParam(required = false)VrabotenType vrabotenType,
+                           @RequestParam Role role,
                            @RequestParam(required = false) Double salary
                            ) {
         try{
-            Korisnik korisnik;
-            if(vrabotenType != null){
-                 korisnik = this.authService.registerVraboten(name, email, password, confirmPassword, address, phone, vrabotenType, salary);
+            Korisnik korisnik = authService.register(name, email, password, confirmPassword, address, phone, role, salary);
 
-            }
-            else
-                korisnik = this.authService.registerPatnik(name, email, password, confirmPassword, address, phone);
             return "redirect:/login";
         } catch (InvalidCredentialsException | UserAlreadyExistsException exception) {
Index: src/main/resources/application.properties
===================================================================
--- src/main/resources/application.properties	(revision 4d026a5e5b12d6fe64a4a57a4d7c6ca5f10561ed)
+++ src/main/resources/application.properties	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -1,4 +1,4 @@
 #
-spring.datasource.url=jdbc:postgresql://localhost:8089/db_202324z_va_prj_busngo
+spring.datasource.url=jdbc:postgresql://localhost:8081/db_202324z_va_prj_busngo
 spring.datasource.username=db_202324z_va_prj_busngo_owner
 spring.datasource.password=d9f924580e7
@@ -11,5 +11,5 @@
 #spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
 spring.jpa.properties.hibernate.jdbc.non_contextual_creation=true
-spring.jpa.properties.hibernate.default_schema=project
+spring.jpa.properties.hibernate.default_schema=project_new
 
 spring.jpa.hibernate.ddl-auto=validate
Index: src/main/resources/templates/fragments/header.html
===================================================================
--- src/main/resources/templates/fragments/header.html	(revision 4d026a5e5b12d6fe64a4a57a4d7c6ca5f10561ed)
+++ src/main/resources/templates/fragments/header.html	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -10,14 +10,14 @@
       <div class="collapse navbar-collapse justify-content-end" id="navbarsExampleDefault">
         <ul class="navbar-nav m-auto">
-          <li sec:hasRole class="nav-item m-auto">
+          <li sec:authorize="hasRole('ROLE_PASSENGER')" class="nav-item m-auto">
             <a class="nav-link active" href="/bilet">Bileti</a>
           </li>
-          <li class="nav-item m-auto">
+          <li sec:authorize="hasAnyRole('ROLE_PASSENGER')" class="nav-item m-auto">
             <a class="nav-link active" href="/vozenje">Vozenja</a>
           </li>
-          <li class="nav-item m-auto">
+          <li sec:authorize="hasRole('ROLE_PASSENGER')" class="nav-item m-auto">
             <a class="nav-link active" href="/kazna">Kazni</a>
           </li>
-          <li class="nav-item m-auto">
+          <li sec:authorize="hasAnyRole('ROLE_CONDUCTOR', 'ROLE_DRIVER')" class="nav-item m-auto">
             <a class="nav-link active" href="/instanca-na-linija">Instanci</a>
           </li>
Index: src/main/resources/templates/register.html
===================================================================
--- src/main/resources/templates/register.html	(revision 4d026a5e5b12d6fe64a4a57a4d7c6ca5f10561ed)
+++ src/main/resources/templates/register.html	(revision 8b875e649f470a3da43d250a59b91c529cb64a1a)
@@ -29,12 +29,12 @@
       </p>
 
-      <p sec:authorize="hasRole('ROLE_ADMIN')">
-        <label for="vrabotenType" class="sr-only">Vraboten Type</label>
-        <select name="vrabotenType" id="vrabotenType">
-          <option th:each="type : ${types}"
-                  th:text="${type.name()}"
-                  th:value="${type}" ></option>
+<!--      <p sec:authorize="hasRole('ROLE_ADMIN')">-->
+        <label for="role" class="sr-only">Role</label>
+        <select name="role" id="role">
+          <option th:each="role : ${roles}"
+                  th:text="${role.name()}"
+                  th:value="${role}" ></option>
         </select>
-      </p>
+<!--      </p>-->
 
       <p sec:authorize="hasRole('ROLE_ADMIN')">
