Index: src/main/java/it/finki/tinki/repository/CompanyRepository.java
===================================================================
--- src/main/java/it/finki/tinki/repository/CompanyRepository.java	(revision 31fc5c832566b8b50bbf769ea742abacdc590666)
+++ src/main/java/it/finki/tinki/repository/CompanyRepository.java	(revision 14b648eee678e5e87dfe65cf778d6af63f0956bf)
@@ -10,4 +10,5 @@
 public interface CompanyRepository extends JpaRepository<Company, Long> {
     Company findByEmailAndPassword(String email, String password);
-    Optional<Object> findByEmail(String email);
+    Optional<Company> findByEmail(String email);
+    Optional<Company> findByIdAndEmail(Long id, String email);
 }
Index: src/main/java/it/finki/tinki/repository/TeamRepository.java
===================================================================
--- src/main/java/it/finki/tinki/repository/TeamRepository.java	(revision 31fc5c832566b8b50bbf769ea742abacdc590666)
+++ src/main/java/it/finki/tinki/repository/TeamRepository.java	(revision 14b648eee678e5e87dfe65cf778d6af63f0956bf)
@@ -1,4 +1,5 @@
 package it.finki.tinki.repository;
 
+import it.finki.tinki.model.Users.Company;
 import it.finki.tinki.model.Users.Team;
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -11,3 +12,4 @@
     Team findByEmailAndPassword(String email, String password);
     Optional<Team> findByEmail(String email);
+    Optional<Team> findByIdAndEmail(Long id, String email);
 }
Index: src/main/java/it/finki/tinki/repository/UserRepository.java
===================================================================
--- src/main/java/it/finki/tinki/repository/UserRepository.java	(revision 31fc5c832566b8b50bbf769ea742abacdc590666)
+++ src/main/java/it/finki/tinki/repository/UserRepository.java	(revision 14b648eee678e5e87dfe65cf778d6af63f0956bf)
@@ -11,3 +11,4 @@
     User findByEmailAndPassword(String email, String password);
     Optional<User> findByEmail(String email);
+    Optional<User> findByIdAndEmail(Long id, String email);
 }
Index: src/main/java/it/finki/tinki/service/AccountService.java
===================================================================
--- src/main/java/it/finki/tinki/service/AccountService.java	(revision 31fc5c832566b8b50bbf769ea742abacdc590666)
+++ src/main/java/it/finki/tinki/service/AccountService.java	(revision 14b648eee678e5e87dfe65cf778d6af63f0956bf)
@@ -3,7 +3,11 @@
 import it.finki.tinki.model.Skill;
 import it.finki.tinki.model.Users.Account;
+import it.finki.tinki.model.Users.Company;
+import it.finki.tinki.model.Users.Team;
+import it.finki.tinki.model.Users.User;
 import it.finki.tinki.model.enumerator.AccountType;
 
 import java.util.List;
+import java.util.Optional;
 
 public interface AccountService {
@@ -13,3 +17,7 @@
     Account registerCompany(String email, String password, String name, String country, String city, String street);
     Account findByIdAndType(Long accId, AccountType type);
+    User editUser(Long id, String email, String name, String surname, List<Skill> retainedSkills, List<Skill> skillsToLearn);
+    Company editCompany(Long id, String email, String name, String country, String city, String street);
+    Optional<?> findByIdAndEmail(Long id, String email, AccountType type);
+    Team editTeam(Long id, String email, String name, int members);
 }
Index: src/main/java/it/finki/tinki/service/impl/AccountServiceImpl.java
===================================================================
--- src/main/java/it/finki/tinki/service/impl/AccountServiceImpl.java	(revision 31fc5c832566b8b50bbf769ea742abacdc590666)
+++ src/main/java/it/finki/tinki/service/impl/AccountServiceImpl.java	(revision 14b648eee678e5e87dfe65cf778d6af63f0956bf)
@@ -19,4 +19,5 @@
 
 import java.util.List;
+import java.util.Optional;
 
 @Service
@@ -81,25 +82,5 @@
         User ru = this.userRepository.save(u);
 
-        List<Job> jobs = this.jobRepository.findAll();
-        List<Project> projects = this.projectRepository.findAll();
-        List<Internship> internships = this.internshipRepository.findAll();
-
-        if(jobs.size()!=0){
-            for (Job job : jobs) {
-                this.matchmakerService.setUpUserJobMatches(job, u);
-            }
-        }
-
-        if(projects.size()!=0){
-            for (Project project : projects) {
-                this.matchmakerService.setUpUserProjectMatches(project, u);
-            }
-        }
-
-        if(internships.size()!=0){
-            for(Internship internship : internships){
-                this.matchmakerService.setUpUserInternshipMatches(internship, u);
-            }
-        }
+        setUpUser(ru);
 
         return ru;
@@ -147,3 +128,111 @@
         return null;
     }
+
+    public Optional<?> findByIdAndEmail(Long id, String email, AccountType accountType){
+
+        switch (accountType){
+            case USER:
+                return this.userRepository.findByIdAndEmail(id, email);
+            case TEAM:
+                return this.teamRepository.findByIdAndEmail(id, email);
+            case COMPANY:
+                return this.companyRepository.findByIdAndEmail(id, email);
+        }
+
+        return Optional.empty();
+    }
+
+    public User editUser(Long id, String email, String name, String surname, List<Skill> retainedSkills, List<Skill> skillsToLearn){
+        if(email==null || email.isEmpty() || name==null || name.isEmpty() || surname==null || surname.isEmpty()){
+            throw new InvalidArgumentsException();
+        }
+
+        User u = this.userRepository.findById(id).get();
+        Optional<User> t = this.userRepository.findByEmail(email);
+
+        if(t.isPresent() && !t.get().equals(u)){
+            throw new UserExistsException();
+        }
+
+        u.setEmail(email);
+        u.setName(name);
+        u.setSurname(surname);
+        u.setRetainedSkills(retainedSkills);
+        u.setSkillsToLearn(skillsToLearn);
+
+        User m = this.userRepository.save(u);
+
+        setUpUser(m);
+
+        return m;
+    }
+
+    public Company editCompany(Long id, String email, String name, String country, String city, String street){
+        if(email==null || email.isEmpty() || name==null || name.isEmpty()
+                || country==null || country.isEmpty() || city==null || city.isEmpty() || street==null || street.isEmpty()){
+            throw new InvalidArgumentsException();
+        }
+
+        Company c = this.companyRepository.findById(id).get();
+        Optional<Company> t = this.companyRepository.findByEmail(email);
+
+        if(t.isPresent() && !t.get().equals(c)){
+            throw new UserExistsException();
+        }
+
+        c.setEmail(email);
+        c.setName(name);
+
+        Address ad = c.getAddress();
+        ad.setCountry(country);
+        ad.setCity(city);
+        ad.setStreet(street);
+
+        this.addressRepository.save(ad);
+        return this.companyRepository.save(c);
+    }
+
+    public Team editTeam(Long id, String email, String name, int members){
+        if(email==null || email.isEmpty() || name==null || name.isEmpty()){
+            throw new InvalidArgumentsException();
+        }
+
+        Team t = this.teamRepository.findById(id).get();
+        Optional<Team> tt = this.teamRepository.findByEmail(email);
+
+        if(tt.isPresent() && !tt.get().equals(t)){
+            throw new UserExistsException();
+        }
+
+        t.setEmail(email);
+        t.setName(name);
+        t.setMembers(members);
+
+        return this.teamRepository.save(t);
+    }
+
+
+    private void setUpUser(User u){
+        List<Job> jobs = this.jobRepository.findAll();
+        List<Project> projects = this.projectRepository.findAll();
+        List<Internship> internships = this.internshipRepository.findAll();
+
+        if(jobs.size()!=0){
+            for (Job job : jobs) {
+                this.matchmakerService.setUpUserJobMatches(job, u);
+            }
+        }
+
+        if(projects.size()!=0){
+            for (Project project : projects) {
+                this.matchmakerService.setUpUserProjectMatches(project, u);
+            }
+        }
+
+        if(internships.size()!=0){
+            for(Internship internship : internships){
+                this.matchmakerService.setUpUserInternshipMatches(internship, u);
+            }
+        }
+    }
 }
Index: src/main/java/it/finki/tinki/web/controller/EditController.java
===================================================================
--- src/main/java/it/finki/tinki/web/controller/EditController.java	(revision 14b648eee678e5e87dfe65cf778d6af63f0956bf)
+++ src/main/java/it/finki/tinki/web/controller/EditController.java	(revision 14b648eee678e5e87dfe65cf778d6af63f0956bf)
@@ -0,0 +1,102 @@
+package it.finki.tinki.web.controller;
+
+import it.finki.tinki.model.Skill;
+import it.finki.tinki.model.Users.Account;
+import it.finki.tinki.model.Users.Company;
+import it.finki.tinki.model.Users.Team;
+import it.finki.tinki.model.Users.User;
+import it.finki.tinki.model.dto.*;
+import it.finki.tinki.model.enumerator.AccountType;
+import it.finki.tinki.service.AccountService;
+import it.finki.tinki.service.SkillService;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+import java.util.Optional;
+
+@RestController
+@RequestMapping(path = "/api/edit")
+public class EditController {
+
+    AccountService accountService;
+    SkillService skillService;
+
+    public EditController(AccountService accountService, SkillService skillService) {
+        this.accountService = accountService;
+        this.skillService = skillService;
+    }
+
+    @RequestMapping(path = "/user/{id}/{email}")
+    public UserResponseDTO editUser(@PathVariable(name = "id") Long id,
+                                    @PathVariable(name = "email") String email,
+                                    @RequestBody UserRegisterDTO body){
+
+        Optional<?> a = this.accountService.findByIdAndEmail(id, email, AccountType.USER);
+
+        if(a.isPresent()){
+            List<Skill> retained = this.skillService.returnSkillsBasedOnId(body.getRetainedSkills());
+            List<Skill> toLearn = this.skillService.returnSkillsBasedOnId(body.getSkillsToLearn());
+
+            User u = (User) this.accountService.editUser(id, body.getEmail(), body.getName(), body.getSurname(), retained, toLearn);
+
+            UserResponseDTO userResponseDTO = new UserResponseDTO();
+
+            userResponseDTO.setEmail(u.getEmail());
+            userResponseDTO.setName(u.getName());
+            userResponseDTO.setSurname(u.getSurname());
+            userResponseDTO.setRetained(u.getRetainedSkills());
+            userResponseDTO.setToLearn(u.getSkillsToLearn());
+
+            return userResponseDTO;
+        }
+
+        return null;
+    }
+
+    @RequestMapping(path = "/company/{id}/{email}")
+    public CompanyResponseDTO editCompany(@PathVariable(name = "id") Long id,
+                                          @PathVariable(name = "email") String email,
+                                          @RequestBody CompanyRegisterDTO body){
+
+        Optional<?> a = this.accountService.findByIdAndEmail(id, email, AccountType.COMPANY);
+
+        if(a.isPresent()){
+            Company c = this.accountService.editCompany(id, body.getEmail(), body.getName(), body.getCountry(), body.getCity(), body.getStreet());
+
+            CompanyResponseDTO companyResponseDTO = new CompanyResponseDTO();
+
+            companyResponseDTO.setEmail(c.getEmail());
+            companyResponseDTO.setName(c.getName());
+            companyResponseDTO.setAddress(c.getAddress());
+
+            return companyResponseDTO;
+        }
+
+        return null;
+    }
+
+    @RequestMapping(path = "/team/{id}/{email}")
+    public TeamResponseDTO editTeam(@PathVariable(name = "id") Long id,
+                                    @PathVariable(name = "email") String email,
+                                    @RequestBody TeamRegisterDTO body){
+
+        Optional<?> a = this.accountService.findByIdAndEmail(id, email, AccountType.TEAM);
+
+        if(a.isPresent()){
+            Team t = this.accountService.editTeam(id, body.getEmail(), body.getName(), body.getMembers());
+
+            TeamResponseDTO teamResponseDTO = new TeamResponseDTO();
+
+            teamResponseDTO.setEmail(t.getEmail());
+            teamResponseDTO.setName(t.getName());
+            teamResponseDTO.setMembers(t.getMembers());
+
+            return teamResponseDTO;
+        }
+
+        return null;
+    }
+}
Index: src/main/java/it/finki/tinki/web/controller/RegisterController.java
===================================================================
--- src/main/java/it/finki/tinki/web/controller/RegisterController.java	(revision 31fc5c832566b8b50bbf769ea742abacdc590666)
+++ src/main/java/it/finki/tinki/web/controller/RegisterController.java	(revision 14b648eee678e5e87dfe65cf778d6af63f0956bf)
@@ -69,5 +69,5 @@
 
     @RequestMapping(path = "/company", method = RequestMethod.POST)
-    private Map<String, String> registeCompany(@RequestBody CompanyRegisterDTO body){
+    private Map<String, String> registerCompany(@RequestBody CompanyRegisterDTO body){
 
         Account k = this.accountService.registerCompany(body.getEmail(),
