Index: src/main/java/it/finki/tinki/repository/CompanyRepository.java
===================================================================
--- src/main/java/it/finki/tinki/repository/CompanyRepository.java	(revision 504c3efac278eaf90577041fb77abf09abad1ac1)
+++ src/main/java/it/finki/tinki/repository/CompanyRepository.java	(revision 721cb87737b3d6d8f2ba84c1f9091d41137cb8d4)
@@ -5,6 +5,9 @@
 import org.springframework.stereotype.Repository;
 
+import java.util.Optional;
+
 @Repository
 public interface CompanyRepository extends JpaRepository<Company, Long> {
     Company findByEmailAndPassword(String email, String password);
+    Optional<Object> findByEmail(String email);
 }
Index: src/main/java/it/finki/tinki/service/AccountService.java
===================================================================
--- src/main/java/it/finki/tinki/service/AccountService.java	(revision 504c3efac278eaf90577041fb77abf09abad1ac1)
+++ src/main/java/it/finki/tinki/service/AccountService.java	(revision 721cb87737b3d6d8f2ba84c1f9091d41137cb8d4)
@@ -1,10 +1,15 @@
 package it.finki.tinki.service;
 
+import it.finki.tinki.model.Skill;
 import it.finki.tinki.model.Users.Account;
 import it.finki.tinki.model.enumerator.AccountType;
 
+import java.util.List;
 import java.util.Map;
 
 public interface AccountService {
     Account findUser(String email, String password, AccountType type);
+    Account registerUser(String email, String password, String name, String surname, List<Skill> retainedSkills, List<Skill> skillsToLearn);
+    Account registerTeam(String email, String password, String name, int members);
+    Account registerCompany(String email, String password, String name, String country, String city, String street);
 }
Index: src/main/java/it/finki/tinki/service/impl/AccountServiceImpl.java
===================================================================
--- src/main/java/it/finki/tinki/service/impl/AccountServiceImpl.java	(revision 504c3efac278eaf90577041fb77abf09abad1ac1)
+++ src/main/java/it/finki/tinki/service/impl/AccountServiceImpl.java	(revision 721cb87737b3d6d8f2ba84c1f9091d41137cb8d4)
@@ -80,3 +80,19 @@
         return this.teamRepository.save(t);
     }
+
+    public Account registerCompany(String email, String password, String name, String country, String city, String street){
+        if(email==null || email.isEmpty() || password==null || password.isEmpty() || name==null || name.isEmpty()
+                || country==null || country.isEmpty() || city==null || city.isEmpty() || street==null || street.isEmpty()){
+            throw new InvalidArgumentsException();
+        }
+
+        if(this.companyRepository.findByEmail(email).isPresent()){
+            throw new UserExistsException();
+        }
+
+        Address a = new Address(country, city, street);
+        this.addressRepository.save(a);
+        Company c = new Company(email, password, name, AccountType.COMPANY, a);
+        return this.companyRepository.save(c);
+    }
 }
