diff --git a/build/integration/features/bootstrap/BasicStructure.php b/build/integration/features/bootstrap/BasicStructure.php
index ec23916d614e42e38cc32c60a34079fccd74027d..9e7aa272d0aff558ceed9fb539b8223837d45926 100644
--- a/build/integration/features/bootstrap/BasicStructure.php
+++ b/build/integration/features/bootstrap/BasicStructure.php
@@ -35,6 +35,7 @@ require __DIR__ . '/../../vendor/autoload.php';
 trait BasicStructure {
 
 	use Auth;
+	use Trashbin;
 
 	/** @var string */
 	private $currentUser = '';
@@ -377,16 +378,6 @@ trait BasicStructure {
 		$this->createFileWithText("local_storage/$filename", $text);
 	}
 
-	/**
-	 * @When User :user empties trashbin
-	 * @param string $user
-	 */
-	public function emptyTrashbin($user) {
-		$body = new \Behat\Gherkin\Node\TableNode([['allfiles', 'true'], ['dir', '%2F']]);
-		$this->sendingToWithDirectUrl('POST', "/index.php/apps/files_trashbin/ajax/delete.php", $body);
-		$this->theHTTPStatusCodeShouldBe('200');
-	}
-
 	/**
 	 * @When Sleep for :seconds seconds
 	 * @param int $seconds
diff --git a/build/integration/features/bootstrap/Trashbin.php b/build/integration/features/bootstrap/Trashbin.php
new file mode 100644
index 0000000000000000000000000000000000000000..c7d3a338ac1723e0a261d3bbf8215b999dd6ba0c
--- /dev/null
+++ b/build/integration/features/bootstrap/Trashbin.php
@@ -0,0 +1,120 @@
+<?php
+/**
+ * @author Vincent Petry <pvince81@owncloud.com>
+ *
+ * @copyright Copyright (c) 2017, ownCloud GmbH.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License, version 3,
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+use GuzzleHttp\Client;
+use GuzzleHttp\Message\ResponseInterface;
+
+require __DIR__ . '/../../vendor/autoload.php';
+
+/**
+ * Trashbin functions
+ */
+trait Trashbin {
+
+	/**
+	 * @When User :user empties trashbin
+	 * @param string $user user
+	 */
+	public function emptyTrashbin($user) {
+		$this->asAn($user);
+		$body = new \Behat\Gherkin\Node\TableNode([['allfiles', 'true'], ['dir', '%2F']]);
+		$this->sendingToWithDirectUrl('POST', "/index.php/apps/files_trashbin/ajax/delete.php", $body);
+		$this->theHTTPStatusCodeShouldBe('200');
+	}
+
+	/**
+	 * List trashbin folder
+	 *
+	 * @param string $user user
+	 * @param string $path path
+	 * @return array response
+	 */
+	public function listTrashbinFolder($user, $path){
+		$this->asAn($user);
+		$params = '?dir=' . rawurlencode('/' . trim($path, '/'));
+		$this->sendingToWithDirectUrl('GET', '/index.php/apps/files_trashbin/ajax/list.php' . $params, null);
+		$this->theHTTPStatusCodeShouldBe('200');
+
+		$response = json_decode($this->response->getBody(), true);
+
+		return $response['data']['files'];
+	}
+
+	/**
+	 * @Then /^as "([^"]*)" the (file|folder|entry) "([^"]*)" exists in trash$/
+	 * @param string $user
+	 * @param string $entryText
+	 * @param string $path
+	 */
+	public function asTheFileOrFolderExistsInTrash($user, $entryText, $path) {
+		$path = trim($path, '/');
+		$sections = explode('/', $path, 2);
+
+		$firstEntry = $this->findFirstTrashedEntry($user, trim($sections[0], '/'));
+
+		PHPUnit_Framework_Assert::assertNotNull($firstEntry);
+
+		// query was on the main element ?
+		if (count($sections) === 1) {
+			// already found, return
+			return;
+		}
+
+		$subdir = trim(dirname($sections[1]), '/');
+		if ($subdir !== '' && $subdir !== '.') {
+			$subdir = $firstEntry . '/' . $subdir;
+		} else {
+			$subdir = $firstEntry;
+		}
+
+		$listing = $this->listTrashbinFolder($user, $subdir);
+		$checkedName = basename($path);
+
+		$found = false;
+		foreach ($listing as $entry) {
+			if ($entry['name'] === $checkedName) {
+				$found = true;
+				break;
+			}
+		}
+
+		PHPUnit_Framework_Assert::assertTrue($found);
+	}
+
+	/**
+	 * Finds the first trashed entry matching the given name
+	 *
+	 * @param string $name
+	 * @return string|null real entry name with timestamp suffix or null if not found
+	 */
+	private function findFirstTrashedEntry($user, $name) {
+		$listing = $this->listTrashbinFolder($user, '/');
+
+		foreach ($listing as $entry) {
+			if ($entry['name'] === $name) {
+				return $entry['name'] . '.d' . ((int)$entry['mtime'] / 1000);
+			}
+		}
+
+		return null;
+	}
+}
+
diff --git a/build/integration/features/sharing-v1-part2.feature b/build/integration/features/sharing-v1-part2.feature
index 284e5f9a94b1fc241326645db0a606aee7809acc..48c18a0b9488b57904022140449d45755eb4d9e3 100644
--- a/build/integration/features/sharing-v1-part2.feature
+++ b/build/integration/features/sharing-v1-part2.feature
@@ -705,6 +705,36 @@ Feature: sharing
     And Updating last share with
       | publicUpload | true |
     Then the OCS status code should be "404"
+    And the HTTP status code should be "200"
+
+  Scenario: deleting file out of a share as recipient creates a backup for the owner
+    Given As an "admin"
+    And user "user0" exists
+    And user "user1" exists
+    And user "user0" created a folder "/shared"
+    And User "user0" moved file "/textfile0.txt" to "/shared/shared_file.txt"
+    And folder "/shared" of user "user0" is shared with user "user1"
+    When User "user1" deletes file "/shared/shared_file.txt"
+    Then as "user1" the file "/shared/shared_file.txt" does not exist
+    And as "user0" the file "/shared/shared_file.txt" does not exist
+    And as "user0" the file "/shared_file.txt" exists in trash
+    And as "user1" the file "/shared_file.txt" exists in trash
+
+  Scenario: deleting folder out of a share as recipient creates a backup for the owner
+    Given As an "admin"
+    And user "user0" exists
+    And user "user1" exists
+    And user "user0" created a folder "/shared"
+    And user "user0" created a folder "/shared/sub"
+    And User "user0" moved file "/textfile0.txt" to "/shared/sub/shared_file.txt"
+    And folder "/shared" of user "user0" is shared with user "user1"
+    When User "user1" deletes folder "/shared/sub"
+    Then as "user1" the folder "/shared/sub" does not exist
+    And as "user0" the folder "/shared/sub" does not exist
+    And as "user0" the folder "/sub" exists in trash
+    And as "user0" the file "/sub/shared_file.txt" exists in trash
+    And as "user1" the folder "/sub" exists in trash
+    And as "user1" the file "/sub/shared_file.txt" exists in trash
 
   Scenario: moving a file into a share as recipient
     Given As an "admin"
diff --git a/build/integration/features/trashbin.feature b/build/integration/features/trashbin.feature
new file mode 100644
index 0000000000000000000000000000000000000000..adb73f2b5ea49d08fb0c61dccef2da1b92b01005
--- /dev/null
+++ b/build/integration/features/trashbin.feature
@@ -0,0 +1,13 @@
+Feature: trashbin
+	Background:
+		Given using api version "1"
+		And using old dav path
+		And As an "admin"
+		And app "files_trashbin" is enabled
+
+	Scenario: deleting a file moves it to trashbin
+		Given As an "admin"
+		And user "user0" exists
+		When User "user0" deletes file "/textfile0.txt"
+		Then as "user0" the file "/textfile0.txt" exists in trash
+