diff --git a/lib/private/Files/Storage/DAV.php b/lib/private/Files/Storage/DAV.php
index 04910ece684ca2d478c3be3fe97cc086c228e8ba..4713eb86fc0591575dbb2017c1a6cc6c8f12b300 100644
--- a/lib/private/Files/Storage/DAV.php
+++ b/lib/private/Files/Storage/DAV.php
@@ -506,13 +506,18 @@ class DAV extends Common {
 		$path1 = $this->cleanPath($path1);
 		$path2 = $this->cleanPath($path2);
 		try {
+			// overwrite directory ?
+			if ($this->is_dir($path2)) {
+				// needs trailing slash in destination
+				$path2 = rtrim($path2, '/') . '/';
+			}
 			$this->client->request(
 				'MOVE',
 				$this->encodePath($path1),
 				null,
-				array(
-					'Destination' => $this->createBaseUri() . $this->encodePath($path2)
-				)
+				[
+					'Destination' => $this->createBaseUri() . $this->encodePath($path2),
+				]
 			);
 			$this->statCache->clear($path1 . '/');
 			$this->statCache->clear($path2 . '/');
@@ -530,10 +535,22 @@ class DAV extends Common {
 	/** {@inheritdoc} */
 	public function copy($path1, $path2) {
 		$this->init();
-		$path1 = $this->encodePath($this->cleanPath($path1));
-		$path2 = $this->createBaseUri() . $this->encodePath($this->cleanPath($path2));
+		$path1 = $this->cleanPath($path1);
+		$path2 = $this->cleanPath($path2);
 		try {
-			$this->client->request('COPY', $path1, null, array('Destination' => $path2));
+			// overwrite directory ?
+			if ($this->is_dir($path2)) {
+				// needs trailing slash in destination
+				$path2 = rtrim($path2, '/') . '/';
+			}
+			$this->client->request(
+				'COPY',
+				$this->encodePath($path1),
+				null,
+				[
+					'Destination' => $this->createBaseUri() . $this->encodePath($path2),
+				]
+			);
 			$this->statCache->clear($path2 . '/');
 			$this->statCache->set($path2, true);
 			$this->removeCachedFile($path2);