Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/AdminServiceImpl.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/AdminServiceImpl.java	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/AdminServiceImpl.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
@@ -3,4 +3,5 @@
 import lombok.AllArgsConstructor;
 import lombok.RequiredArgsConstructor;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterAdminDetailsDTO;
 import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
 import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
@@ -20,10 +21,10 @@
 
     @Override
-    public RecruiterDetailsDTO changeAccess(long recruiterId, boolean access) {
+    public RecruiterAdminDetailsDTO changeAccess(long recruiterId, boolean access) {
         Recruiter recruiter = recruiterRepository.findById(recruiterId).orElse(null);
         if (recruiter != null) {
             recruiter.setHasAccess(access);
             recruiterRepository.save(recruiter);
-            return RecruiterMapper.mapToRecruiterDetailsDTO(recruiter);
+            return RecruiterMapper.mapToRecruiterAdminDetailsDTO(recruiter);
         }
         return null;
@@ -32,7 +33,7 @@
 
     @Override
-    public List<RecruiterDetailsDTO> findAllRecruiters() {
+    public List<RecruiterAdminDetailsDTO> findAllRecruiters() {
         List<Recruiter> recruiterList = recruiterRepository.findAll();
-        return recruiterList.stream().map(RecruiterMapper::mapToRecruiterDetailsDTO).toList();
+        return recruiterList.stream().map(RecruiterMapper::mapToRecruiterAdminDetailsDTO).toList();
     }
 }
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JobAdvertisementServiceImpl.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JobAdvertisementServiceImpl.java	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JobAdvertisementServiceImpl.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
@@ -30,5 +30,5 @@
     @Override
     public JobAdDetailsDTO addJobAdvertisement(JobAdvertisementDTO jobAdvertisementDTO) {
-        Recruiter recruiter = recruiterRepository.findRecruiterByEmail(jobAdvertisementDTO.getEmail()).orElseThrow(() -> new IllegalArgumentException("User not found"));
+        Recruiter recruiter = recruiterRepository.findById(jobAdvertisementDTO.getId()).orElseThrow(() -> new IllegalArgumentException("User not found"));
         JobAdvertisement jobAdvertisement = new JobAdvertisement(
                 recruiter,
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JwtServiceImpl.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JwtServiceImpl.java	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/JwtServiceImpl.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
@@ -25,4 +25,5 @@
                 .claim("role", user.getRole())
                 .claim("access", user.isHasAccess())
+                .claim("id", user.getId())
                 .setIssuedAt(new Date())
                 .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24))
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/RecruiterServiceImpl.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/RecruiterServiceImpl.java	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/impl/RecruiterServiceImpl.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
@@ -3,9 +3,21 @@
 import lombok.RequiredArgsConstructor;
 import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterEditDetailsDTO;
 import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
 import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.mappers.RecruiterMapper;
 import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.repositories.RecruiterRepository;
 import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef.RecruiterService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.Resource;
+import org.springframework.core.io.UrlResource;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardCopyOption;
 
 @Service
@@ -14,4 +26,38 @@
 
     private final RecruiterRepository recruiterRepository;
+    private final Path logoStorageLocation;
+
+    @Autowired
+    RecruiterServiceImpl(@Value("./uploads") String uploadDir, RecruiterRepository recruiterRepository) {
+        this.recruiterRepository = recruiterRepository;
+
+        this.logoStorageLocation = Paths.get(uploadDir + "/logo").toAbsolutePath().normalize();
+        try {
+            Files.createDirectories(this.logoStorageLocation);
+        } catch (IOException ex) {
+            throw new RuntimeException("Could not create the directory where the uploaded files will be stored.", ex);
+        }
+    }
+
+
+    @Override
+    public RecruiterEditDetailsDTO editRecruiterDetailsById(Long recruiterId, RecruiterEditDetailsDTO recruiterEditDetailsDTO) {
+        Recruiter recruiter = recruiterRepository.findById(recruiterId).orElse(null);
+        recruiter.setEmail(recruiterEditDetailsDTO.getEmail());
+        recruiter.setCompanyName(recruiterEditDetailsDTO.getCompanyName());
+        recruiter.setCompanyDescription(recruiterEditDetailsDTO.getCompanyDescription());
+        recruiter.setContactEmailAddress(recruiterEditDetailsDTO.getContactEmail());
+        recruiter.setContactPhoneNumber(recruiterEditDetailsDTO.getContactPhoneNumber());
+        recruiter.setReceptionist(recruiterEditDetailsDTO.getReceptionist());
+        recruiterRepository.save(recruiter);
+        return RecruiterMapper.mapToRecruiterEditDetailsDTO(recruiter);
+    }
+
+    @Override
+    public RecruiterEditDetailsDTO getRecruiterEditDetailsById(Long recruiterId) {
+        Recruiter recruiter = recruiterRepository.findById(recruiterId).orElse(null);
+        return RecruiterMapper.mapToRecruiterEditDetailsDTO(recruiter);
+    }
+
 
     @Override
@@ -20,3 +66,50 @@
         return RecruiterMapper.mapToRecruiterDetailsDTO(recruiter);
     }
+
+    @Override
+    public void submitLogo(Long recruiterId, MultipartFile logoFile) {
+
+        Path recruiterLogoDir = this.logoStorageLocation.resolve(String.valueOf(recruiterId));
+        try {
+            Files.createDirectories(recruiterLogoDir);
+            String originalFilename = logoFile.getOriginalFilename();
+
+            if (originalFilename != null) {
+                Path targetLocation = recruiterLogoDir.resolve(originalFilename);
+
+                Files.copy(logoFile.getInputStream(), targetLocation, StandardCopyOption.REPLACE_EXISTING);
+
+                Recruiter recruiter = recruiterRepository.findById(recruiterId)
+                        .orElseThrow(() -> new RuntimeException("Recruiter not found"));
+                String relativePath = Paths.get("uploads", "logo", String.valueOf(recruiterId), originalFilename).toString();
+                recruiter.setLogoFilePath(relativePath);
+                recruiterRepository.save(recruiter);
+            }
+
+        } catch (IOException ex) {
+            throw new RuntimeException("Could not store file. Please try again!", ex);
+        }
+
+      
+    }
+
+    public Resource loadLogoAsResource(Long recruiterId) {
+        Recruiter recruiter = recruiterRepository.findById(recruiterId)
+                .orElseThrow(() -> new RuntimeException("Recruiter not found"));
+
+        try {
+            String relativeLogoPath = recruiter.getLogoFilePath();
+            Path logoPath = this.logoStorageLocation.getParent().getParent().resolve(relativeLogoPath);
+            Resource resource = new UrlResource(logoPath.toUri());
+            if (resource.exists()) {
+                return resource;
+            } else {
+                throw new RuntimeException("File not found " + logoPath);
+            }
+        } catch (IOException ex) {
+            throw new RuntimeException("File not found " + ex);
+        }
+
+    }
+
 }
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/AdminService.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/AdminService.java	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/AdminService.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
@@ -1,4 +1,5 @@
 package mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.service.intef;
 
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterAdminDetailsDTO;
 import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
 
@@ -6,5 +7,5 @@
 
 public interface AdminService {
-    RecruiterDetailsDTO changeAccess(long recruiterId, boolean access);
-    List<RecruiterDetailsDTO> findAllRecruiters();
+    RecruiterAdminDetailsDTO changeAccess(long recruiterId, boolean access);
+    List<RecruiterAdminDetailsDTO> findAllRecruiters();
 }
Index: jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/RecruiterService.java
===================================================================
--- jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/RecruiterService.java	(revision b2488107b82c95e4bdfdfd18b76b44f023786601)
+++ jobvista-backend/src/main/java/mk/ukim/finki/predmeti/internettehnologii/jobvistabackend/service/intef/RecruiterService.java	(revision befb98800bd9171fa5ce8a5f29287e549f0ff5aa)
@@ -2,7 +2,14 @@
 
 import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterDetailsDTO;
-import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.Recruiter;
+import mk.ukim.finki.predmeti.internettehnologii.jobvistabackend.models.users.DTO.RecruiterEditDetailsDTO;
+import org.springframework.core.io.Resource;
+import org.springframework.web.multipart.MultipartFile;
 
 public interface RecruiterService {
     RecruiterDetailsDTO getRecruiterDetailsById(Long recruiterId);
+    RecruiterEditDetailsDTO editRecruiterDetailsById(Long recruiterId, RecruiterEditDetailsDTO recruiterEditDetailsDTO);
+    RecruiterEditDetailsDTO getRecruiterEditDetailsById(Long recruiterId);
+
+    void submitLogo(Long recruiterId, MultipartFile logoFile);
+    Resource loadLogoAsResource(Long recruiterId);
 }
