diff --git a/mozen/pom.xml b/mozen/pom.xml
index 993375b9df8e869dbf616b1f9741dc3b9fcde032..dfe5cd84531de1119e98c0d253c2477ce9d7687d 100644
--- a/mozen/pom.xml
+++ b/mozen/pom.xml
@@ -36,16 +36,16 @@
 			<groupId>org.hsqldb</groupId>
 			<artifactId>hsqldb</artifactId>
 		</dependency>
-		<dependency>
-			<groupId>io.jsonwebtoken</groupId>
-			<artifactId>jjwt</artifactId>
-			<version>0.9.1</version>
-		</dependency>
 		<dependency>
 			<groupId>org.mariadb.jdbc</groupId>
 			<artifactId>mariadb-java-client</artifactId>
 			<version>2.6.0</version>
 		</dependency>
+		<dependency>
+			<groupId>io.jsonwebtoken</groupId>
+			<artifactId>jjwt</artifactId>
+			<version>0.9.1</version>
+		</dependency>
 
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
diff --git a/mozen/src/main/java/mozen/business/IUserManager.java b/mozen/src/main/java/mozen/business/IUserManager.java
index d2dc292334f5f136fe0a85e29efdc6cf18005fc7..7e4650eac1cb314e788d6bf7c876ad39eb1a2bd1 100644
--- a/mozen/src/main/java/mozen/business/IUserManager.java
+++ b/mozen/src/main/java/mozen/business/IUserManager.java
@@ -3,11 +3,12 @@ package mozen.business;
 import java.util.Collection;
 
 import mozen.messages.SignupMessage;
+import mozen.messages.UserUpdateMessage;
 import mozen.model.User;
 
 public interface IUserManager {
   User addUser(SignupMessage message);
-  void updateUser(User user, User userToUpdate) throws Exception;
+  void updateUser(User user, UserUpdateMessage message) throws Exception;
   void removeUser(User user, Long id);
 
   Collection<User> getUsers();
diff --git a/mozen/src/main/java/mozen/business/UserManager.java b/mozen/src/main/java/mozen/business/UserManager.java
index 38eb22e4f36528a4e42972e6bad10c3049c181a2..450934deb1ca736ae4e5d29a03fd5be94b62fc50 100644
--- a/mozen/src/main/java/mozen/business/UserManager.java
+++ b/mozen/src/main/java/mozen/business/UserManager.java
@@ -9,6 +9,7 @@ import org.springframework.stereotype.Service;
 
 import mozen.model.Role;
 import mozen.messages.SignupMessage;
+import mozen.messages.UserUpdateMessage;
 import mozen.model.User;
 import mozen.repos.UserRepository;
 import mozen.utils.UserHelper;
@@ -37,8 +38,18 @@ public class UserManager implements IUserManager {
   }
 
   @Override
-  public void updateUser(User user, User userToUpdate) throws Exception {
-    if(isRightUser(user, userToUpdate)) repo.save(userToUpdate);
+  public void updateUser(User user, UserUpdateMessage message) throws Exception {
+    User userToUpdate = getUser(message.getId());
+
+    if(!isRightUser(user, userToUpdate)) 
+      throw new Exception("Not the user");
+
+    userToUpdate.setEmail(message.getEmail());
+    userToUpdate.setUsername(message.getUsername());
+    if (message.getPassword() != null)
+      userToUpdate.setPassword(bCryptPasswordEncoder.encode(message.getPassword()));
+
+    repo.save(userToUpdate);
   }
 
   @Override
diff --git a/mozen/src/main/java/mozen/messages/UserUpdateMessage.java b/mozen/src/main/java/mozen/messages/UserUpdateMessage.java
new file mode 100644
index 0000000000000000000000000000000000000000..2885e748f4d91f5bcc7f82ca305a7cccaa483e96
--- /dev/null
+++ b/mozen/src/main/java/mozen/messages/UserUpdateMessage.java
@@ -0,0 +1,69 @@
+package mozen.messages;
+
+import java.io.Serializable;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Pattern;
+import javax.validation.constraints.Size;
+
+public class UserUpdateMessage implements Serializable{
+  private static final long serialVersionUID = 1L;
+
+  @NotNull
+  private Long id;
+  
+  @NotNull
+  @Size(min = 1, max = 30)
+  private String username;
+
+  @Size(min = 1, max = 60)
+  private String password;
+  
+  @NotNull
+  @Size(min = 1, max = 30)
+  @Pattern(regexp="([a-z0-9])+([.]([a-z0-9])+)?@([a-z])+(([.]([a-z])+)?|([-]([a-z])+)?)+.([a-z]){2,}")
+  private String email;
+
+  public UserUpdateMessage() {
+  }
+
+  public UserUpdateMessage(Long id, String username, String password, String email) {
+    this.id = id;
+    this.username = username;
+    this.password = password;
+    this.email = email;
+  }
+
+  public Long getId() {
+    return this.id;
+  }
+
+  public void setId(Long id) {
+    this.id = id;
+  }
+
+  public String getUsername() {
+    return this.username;
+  }
+
+  public void setUsername(String username) {
+    this.username = username;
+  }
+
+  public String getPassword() {
+    return this.password;
+  }
+
+  public void setPassword(String password) {
+    this.password = password;
+  }
+
+  public String getEmail() {
+    return this.email;
+  }
+
+  public void setEmail(String email) {
+    this.email = email;
+  }
+
+}
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/utils/DatabaseFiller.java b/mozen/src/main/java/mozen/utils/DatabaseFiller.java
index 4636076933d973332410aff64ab5a6cb61b843c0..fd19c3e9c1aa1c3ede377ebcbf7c7e0d1d5dd9f7 100644
--- a/mozen/src/main/java/mozen/utils/DatabaseFiller.java
+++ b/mozen/src/main/java/mozen/utils/DatabaseFiller.java
@@ -23,22 +23,48 @@ import mozen.model.Tag;
 import mozen.model.TagCategory;
 import mozen.model.User;
 import mozen.repos.ModelRepository;
+import mozen.repos.TagRepository;
 import mozen.repos.UserRepository;
 
 @Service
 public class DatabaseFiller {
   @Autowired
-  ModelRepository modelRepo;
+  private ModelRepository modelRepo;
 
   @Autowired
-  UserRepository userRepo;
+  private UserRepository userRepo;
+
+  @Autowired
+  private TagRepository tagRepo;
 
   @Autowired
   private BCryptPasswordEncoder bCryptPasswordEncoder;
 
   @EventListener(ContextRefreshedEvent.class)
   public void onApplicationEvent(ContextRefreshedEvent event) {
-    event.getApplicationContext().getBean(DatabaseFiller.class).fillDB();
+    // event.getApplicationContext().getBean(DatabaseFiller.class).fillDB();
+    event.getApplicationContext().getBean(DatabaseFiller.class).fillDBBasic();
+  }
+
+  @Transactional
+  public void addAdmin() {
+    User admin = new User();
+    admin.setEmail("admin@admin.admin");
+    admin.setPassword(bCryptPasswordEncoder.encode("1234"));
+    admin.setUsername("admin");
+    admin.setRole(Role.ADMIN);
+
+    try {
+      userRepo.save(admin);
+      System.err.println("[DB FILLER] Admin added");
+    } catch (Exception e) {
+      System.err.println("[DB FILLER] Admin already present");
+    }    
+  }
+
+  public void fillDBBasic() {
+    addAdmin();
+    basicTags();
   }
 
   @Transactional
@@ -56,12 +82,6 @@ public class DatabaseFiller {
     u2.setUsername("user 2");
     u2.setRole(Role.DEFAULT);
 
-    User admin = new User();
-    admin.setEmail("admin@admin.admin");
-    admin.setPassword(bCryptPasswordEncoder.encode("1234"));
-    admin.setUsername("admin");
-    admin.setRole(Role.ADMIN);
-
     Model m1 = new Model();
     m1.setAuthor(u1);
     m1.setName("Model Testo");
@@ -103,10 +123,11 @@ public class DatabaseFiller {
 
     userRepo.save(u1);
     userRepo.save(u2);
-    userRepo.save(admin);
 
     System.err.println("[DB FILLER] Users added");
 
+    addAdmin();
+
     modelRepo.save(m1);
     System.err.println("[DB FILLER] Model added");
   }
@@ -143,4 +164,39 @@ public class DatabaseFiller {
     return tags;
   }
 
+  public void basicTags() {
+    try {
+      TagCategory category_task = new TagCategory();
+      category_task.setName("Task");
+
+      Tag tag = new Tag();
+      tag.setCategory(category_task);
+      tag.setName("Classification");
+      tagRepo.save(tag);
+
+
+      TagCategory category_arch = new TagCategory();
+      category_arch.setName("Architecture");
+
+      Tag tag2 = new Tag();
+      tag2.setCategory(category_arch);
+      tag2.setName("VGG19");
+      tagRepo.save(tag2);
+
+
+      TagCategory category_dataset = new TagCategory();
+      category_dataset.setName("Dataset");
+
+      Tag tag3 = new Tag();
+      tag3.setCategory(category_dataset);
+      tag3.setName("Cifar10");
+      tagRepo.save(tag3);
+
+      System.err.println("[DB FILLER] Basic tags added");
+    } catch (Exception e) {
+      System.err.println(e);
+      System.err.println("[DB FILLER] Basic tags already present");
+    }
+  }
+
 }
\ No newline at end of file
diff --git a/mozen/src/main/java/mozen/utils/Md5Utils.java b/mozen/src/main/java/mozen/utils/Md5Utils.java
index 963b7205605dbf01cb5506d86483f90bb8261168..5bc1b44357668672b56551386d763c46abfe55ad 100644
--- a/mozen/src/main/java/mozen/utils/Md5Utils.java
+++ b/mozen/src/main/java/mozen/utils/Md5Utils.java
@@ -1,20 +1,19 @@
 package mozen.utils;
 
+import java.io.BufferedInputStream;
 import java.io.IOException;
-import java.math.BigInteger;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
+import java.io.InputStream;
 
+import org.springframework.util.DigestUtils;
 import org.springframework.web.multipart.MultipartFile;
 
 public class Md5Utils {
   public static String getMD5(MultipartFile file) {
     try {
-      byte[] uploadBytes = file.getBytes();
-      MessageDigest md5 = MessageDigest.getInstance("MD5");
-      byte[] digest = md5.digest(uploadBytes);
-      return new BigInteger(1, digest).toString(16);
-    } catch (NoSuchAlgorithmException | IOException e) {
+      InputStream inputStream =  new BufferedInputStream(file.getInputStream());
+      String digest = DigestUtils.md5DigestAsHex(inputStream);
+      return digest;
+    } catch (IOException e) {
       e.printStackTrace();
       return null;
     }    
diff --git a/mozen/src/main/java/mozen/web/UserController.java b/mozen/src/main/java/mozen/web/UserController.java
index c5504ad728f00c06893a0fb9d13f81e18db414cf..c3a18f984452957946afb8e96842eead45f09e82 100644
--- a/mozen/src/main/java/mozen/web/UserController.java
+++ b/mozen/src/main/java/mozen/web/UserController.java
@@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.CrossOrigin;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.PutMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -24,6 +25,7 @@ import org.springframework.web.bind.annotation.RestController;
 import mozen.business.IUserManager;
 import mozen.messages.ResponseMessage;
 import mozen.messages.SignupMessage;
+import mozen.messages.UserUpdateMessage;
 import mozen.model.User;
 import mozen.utils.JwtUtils;
 import mozen.utils.UserHelper;
@@ -46,24 +48,24 @@ public class UserController {
     return userManager.getUsers();
   }
 
-  @PostMapping("")
-  public ResponseEntity<ResponseMessage> changeUserDetails(@RequestParam User userToUpdate) {
+  @PutMapping("")
+  public ResponseEntity<ResponseMessage> changeUserDetails(@RequestBody @Valid UserUpdateMessage message) {
     ResponseMessage response = new ResponseMessage(false, "");
     User user = UserHelper.getCurrentUser(userManager);
     if(user == null) {
       response.setError(true);
       response.setMessage("User unknown");
-      return ResponseEntity.ok(response);
+      return ResponseEntity.badRequest().body(response);
     }
 
     try {
-      userManager.updateUser(user ,userToUpdate);
+      userManager.updateUser(user ,message);
+      return ResponseEntity.ok(response);
     } catch (Exception e) {
       response.setError(true);
       response.setMessage(e.getMessage());
+      return ResponseEntity.badRequest().body(response);
     }
-    
-    return ResponseEntity.ok().build();
   }
 
   @DeleteMapping("")
@@ -73,16 +75,17 @@ public class UserController {
     if(user == null) {
       response.setError(true);
       response.setMessage("User unknown");
-      return ResponseEntity.ok(response);
+      return ResponseEntity.badRequest().body(response);
     }
 
     try {
       userManager.removeUser(user, id);
+      return ResponseEntity.ok().build();
     } catch (Exception e) {
       response.setError(true);
       response.setMessage(e.getMessage());
+      return ResponseEntity.badRequest().body(response);
     }
-    return ResponseEntity.ok().build();
   }
 
   @PostMapping("/signup")
@@ -95,12 +98,12 @@ public class UserController {
       Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
       grantedAuthorities.add(new SimpleGrantedAuthority("ROLE_"+user.getRole()));
       response.setMessage(JwtUtils.generateToken(user.getUsername(), grantedAuthorities));
+      return ResponseEntity.ok(response);
     } catch (Exception e) {
       response.setError(true);
       response.setMessage(e.getMessage());
-    }   
-    
-    return ResponseEntity.ok(response);
+      return ResponseEntity.badRequest().body(response);
+    }
   }
 
   @GetMapping("/setAdmin")
@@ -115,12 +118,11 @@ public class UserController {
 
     try {
       userManager.setAdmin(id, user);
+      return ResponseEntity.ok(response);
     } catch (Exception e) {
       response.setError(true);
       response.setMessage(e.getMessage());
       return ResponseEntity.badRequest().body(response);
     }
-
-    return ResponseEntity.ok(response);
   }
 }
\ No newline at end of file
diff --git a/mozen/src/main/resources/application.properties b/mozen/src/main/resources/application.properties
index 4d10c8991625874e9442803c1b173e43dd415bca..a848592deb106ac5b6d3cf376c275ba51beb4f6c 100644
--- a/mozen/src/main/resources/application.properties
+++ b/mozen/src/main/resources/application.properties
@@ -22,11 +22,11 @@ server.port=8181
 #spring.jpa.hibernate.ddl-auto=update
 
 # DOCKER + MARIADB
-spring.datasource.url=jdbc:mariadb://mozen_mariadb:3306/MOZEN_DB
-spring.datasource.username=mozen_user
-spring.datasource.password=1234
-spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
-spring.jpa.hibernate.ddl-auto=update
+#spring.datasource.url=jdbc:mariadb://mozen_mariadb:3306/MOZEN_DB
+#spring.datasource.username=mozen_user
+#spring.datasource.password=1234
+#spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
+#spring.jpa.hibernate.ddl-auto=update
 
 spring.servlet.multipart.max-file-size=10GB
 spring.servlet.multipart.max-request-size=10GB