diff --git a/src/main/java/it/inaf/ia2/transfer/service/PutFileService.java b/src/main/java/it/inaf/ia2/transfer/service/PutFileService.java
index be3a79ba93b6862f5244140633ad2e7ba7f4c22d..f7462f91f99e7e740f6bbde90ad4aa2532f057c6 100644
--- a/src/main/java/it/inaf/ia2/transfer/service/PutFileService.java
+++ b/src/main/java/it/inaf/ia2/transfer/service/PutFileService.java
@@ -7,6 +7,7 @@ package it.inaf.ia2.transfer.service;
 
 import it.inaf.ia2.transfer.persistence.FileDAO;
 import it.inaf.ia2.transfer.persistence.model.FileInfo;
+import it.inaf.oats.vospace.exception.InvalidArgumentException;
 import it.inaf.oats.vospace.exception.QuotaExceededException;
 import java.io.File;
 import java.io.IOException;
@@ -96,9 +97,12 @@ public class PutFileService {
         // the first upload (fsPath not null)
         if(destinationFileInfo.getActualBasePath() != null) {
             if(destinationFileInfo.getFsPath() != null) {
-                LOG.warn("Node {} fsPath is not null: {}. Overwriting.", 
+                LOG.error("Node {} fsPath is not null: {}. Overwriting.", 
                         destinationFileInfo.getVirtualPath(), 
                         destinationFileInfo.getFsPath());
+                        throw new InvalidArgumentException("Node " + 
+                        destinationFileInfo.getVirtualPath() +
+                        " is already populated. Overwriting not allowed.");
             }
             
             destinationFileInfo.setFsPath(this.generateFsPath().toString());                       
diff --git a/src/test/java/it/inaf/ia2/transfer/controller/CopyControllerTest.java b/src/test/java/it/inaf/ia2/transfer/controller/CopyControllerTest.java
index c084b25844d2956841a6a80898d5c5b8730f9d56..c75441897b9bf33351006d217a17daa80770a39c 100644
--- a/src/test/java/it/inaf/ia2/transfer/controller/CopyControllerTest.java
+++ b/src/test/java/it/inaf/ia2/transfer/controller/CopyControllerTest.java
@@ -34,9 +34,6 @@ public class CopyControllerTest {
 
     @Autowired
     private MockMvc mockMvc;
-
-    @MockBean
-    private FileCopyService fileCopyService;
     
     private static String jobId;
     private static String sourceVosRootPath;
diff --git a/src/test/java/it/inaf/ia2/transfer/controller/PutFileControllerTest.java b/src/test/java/it/inaf/ia2/transfer/controller/PutFileControllerTest.java
index 58dbe07fd29b009311247f182a63d9367e26f30f..a4221b62a6be1e237561e854504a7fb0a0c77964 100644
--- a/src/test/java/it/inaf/ia2/transfer/controller/PutFileControllerTest.java
+++ b/src/test/java/it/inaf/ia2/transfer/controller/PutFileControllerTest.java
@@ -98,7 +98,23 @@ public class PutFileControllerTest {
 
         assertTrue(file.delete());
     }
+    
+    @Test
+    public void putGenericFileOverwriteDenied() throws Exception {
+
+        when(fileDao.getRemainingQuota(any())).thenReturn(null);
+
+        String randomFileName = UUID.randomUUID().toString();
+        FileInfo fileInfo = createBaseFileInfo(randomFileName);
+        fileInfo.setFsPath("year/month/date/UUID-whatever");
 
+        MockMultipartFile fakeFile = new MockMultipartFile("file", "test.txt", "text/plain", "content".getBytes());
+
+        mockMvc.perform(putMultipart("/path/to/test.txt")
+                .file(fakeFile))
+                .andDo(print())
+                .andExpect(status().isBadRequest());
+    }
     
     @Test
     public void putGenericFileWithJobId() throws Exception {