Index: src/main/java/mk/ukim/finki/busngo/model/entities/Kondukter.java
===================================================================
--- src/main/java/mk/ukim/finki/busngo/model/entities/Kondukter.java	(revision e272096e020b86abe8d6a6c02c7dc6fcc5b30678)
+++ 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 e272096e020b86abe8d6a6c02c7dc6fcc5b30678)
+++ 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 e272096e020b86abe8d6a6c02c7dc6fcc5b30678)
+++ 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 e272096e020b86abe8d6a6c02c7dc6fcc5b30678)
+++ 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 e272096e020b86abe8d6a6c02c7dc6fcc5b30678)
+++ 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 e272096e020b86abe8d6a6c02c7dc6fcc5b30678)
+++ 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 e272096e020b86abe8d6a6c02c7dc6fcc5b30678)
+++ 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 e272096e020b86abe8d6a6c02c7dc6fcc5b30678)
+++ 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 e272096e020b86abe8d6a6c02c7dc6fcc5b30678)
+++ 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 e272096e020b86abe8d6a6c02c7dc6fcc5b30678)
+++ 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) {
