diff --git a/db_structure.xml b/db_structure.xml
index dbbfa8c7a4d341f93df0555b7467b1f5ce9c1315..b124217112745b27a2bca1d38be94b32a952a812 100644
--- a/db_structure.xml
+++ b/db_structure.xml
@@ -1249,11 +1249,10 @@
 		<!-- object id (ex: file id for files)-->
 		<field>
 			<name>objectid</name>
-			<type>integer</type>
-			<default>0</default>
+			<type>text</type>
+			<default></default>
 			<notnull>true</notnull>
-			<unsigned>true</unsigned>
-			<length>4</length>
+			<length>64</length>
 		</field>
 
 		<!-- object type (ex: "files")-->
diff --git a/lib/private/systemtag/systemtagobjectmapper.php b/lib/private/systemtag/systemtagobjectmapper.php
index f70541920a43d1ec405ad9f709189efa1eb37191..586351cf8c1bfa652b3bbe0d30bc70c0c7860c92 100644
--- a/lib/private/systemtag/systemtagobjectmapper.php
+++ b/lib/private/systemtag/systemtagobjectmapper.php
@@ -103,7 +103,7 @@ class SystemTagObjectMapper implements ISystemTagObjectMapper {
 		$this->assertTagsExist($tagIds);
 
 		$query = $this->connection->getQueryBuilder();
-		$query->select($query->createFunction('DISTINCT(`objectid`)'))
+		$query->selectDistinct('objectid')
 			->from(self::RELATION_TABLE)
 			->where($query->expr()->in('systemtagid', $query->createNamedParameter($tagIds, IQueryBuilder::PARAM_INT_ARRAY)))
 			->andWhere($query->expr()->eq('objecttype', $query->createNamedParameter($objectType)));
@@ -219,7 +219,7 @@ class SystemTagObjectMapper implements ISystemTagObjectMapper {
 			->where($query->expr()->in('objectid', $query->createParameter('objectids')))
 			->andWhere($query->expr()->eq('objecttype', $query->createParameter('objecttype')))
 			->andWhere($query->expr()->eq('systemtagid', $query->createParameter('tagid')))
-			->setParameter('objectids', $objIds, IQueryBuilder::PARAM_INT_ARRAY)
+			->setParameter('objectids', $objIds, IQueryBuilder::PARAM_STR_ARRAY)
 			->setParameter('tagid', $tagId)
 			->setParameter('objecttype', $objectType);
 
diff --git a/tests/lib/systemtag/systemtagobjectmappertest.php b/tests/lib/systemtag/systemtagobjectmappertest.php
index f81445e5348d3d9fbfeedf738b262680188c310d..861eb2406748e4708c910bf2cf22d9e6fe0144ff 100644
--- a/tests/lib/systemtag/systemtagobjectmappertest.php
+++ b/tests/lib/systemtag/systemtagobjectmappertest.php
@@ -102,10 +102,10 @@ class SystemTagObjectMapperTest extends TestCase {
 				return $result;
 			}));
 
-		$this->tagMapper->assignTags(1, 'testtype', $this->tag1->getId());
-		$this->tagMapper->assignTags(1, 'testtype', $this->tag2->getId());
-		$this->tagMapper->assignTags(2, 'testtype', $this->tag1->getId());
-		$this->tagMapper->assignTags(3, 'anothertype', $this->tag1->getId());
+		$this->tagMapper->assignTags('1', 'testtype', $this->tag1->getId());
+		$this->tagMapper->assignTags('1', 'testtype', $this->tag2->getId());
+		$this->tagMapper->assignTags('2', 'testtype', $this->tag1->getId());
+		$this->tagMapper->assignTags('3', 'anothertype', $this->tag1->getId());
 	}
 
 	public function tearDown() {
@@ -121,15 +121,15 @@ class SystemTagObjectMapperTest extends TestCase {
 
 	public function testGetTagsForObjects() {
 		$tagIdMapping = $this->tagMapper->getTagIdsForObjects(
-			[1, 2, 3, 4],
+			['1', '2', '3', '4'],
 			'testtype'
 		);
 
 		$this->assertEquals([
-			1 => [$this->tag1->getId(), $this->tag2->getId()],
-			2 => [$this->tag1->getId()],
-			3 => [],
-			4 => [],
+			'1' => [$this->tag1->getId(), $this->tag2->getId()],
+			'2' => [$this->tag1->getId()],
+			'3' => [],
+			'4' => [],
 		], $tagIdMapping);
 	}
 
@@ -140,8 +140,8 @@ class SystemTagObjectMapperTest extends TestCase {
 		);
 
 		$this->assertEquals([
-			1,
-			2,
+			'1',
+			'2',
 		], $objectIds);
 	}
 
@@ -192,29 +192,29 @@ class SystemTagObjectMapperTest extends TestCase {
 	}
 
 	public function testAssignUnassignTags() {
-		$this->tagMapper->unassignTags(1, 'testtype', [$this->tag1->getId()]);
+		$this->tagMapper->unassignTags('1', 'testtype', [$this->tag1->getId()]);
 
-		$tagIdMapping = $this->tagMapper->getTagIdsForObjects(1, 'testtype');
+		$tagIdMapping = $this->tagMapper->getTagIdsForObjects('1', 'testtype');
 		$this->assertEquals([
 			1 => [$this->tag2->getId()],
 		], $tagIdMapping);
 
-		$this->tagMapper->assignTags(1, 'testtype', [$this->tag1->getId()]);
-		$this->tagMapper->assignTags(1, 'testtype', $this->tag3->getId());
+		$this->tagMapper->assignTags('1', 'testtype', [$this->tag1->getId()]);
+		$this->tagMapper->assignTags('1', 'testtype', $this->tag3->getId());
 
-		$tagIdMapping = $this->tagMapper->getTagIdsForObjects(1, 'testtype');
+		$tagIdMapping = $this->tagMapper->getTagIdsForObjects('1', 'testtype');
 
 		$this->assertEquals([
-			1 => [$this->tag1->getId(), $this->tag2->getId(), $this->tag3->getId()],
+			'1' => [$this->tag1->getId(), $this->tag2->getId(), $this->tag3->getId()],
 		], $tagIdMapping);
 	}
 
 	public function testReAssignUnassignTags() {
 		// reassign tag1
-		$this->tagMapper->assignTags(1, 'testtype', [$this->tag1->getId()]);
+		$this->tagMapper->assignTags('1', 'testtype', [$this->tag1->getId()]);
 
 		// tag 3 was never assigned
-		$this->tagMapper->unassignTags(1, 'testtype', [$this->tag3->getId()]);
+		$this->tagMapper->unassignTags('1', 'testtype', [$this->tag3->getId()]);
 
 		$this->assertTrue(true, 'No error when reassigning/unassigning');
 	}
@@ -223,13 +223,13 @@ class SystemTagObjectMapperTest extends TestCase {
 	 * @expectedException \OCP\SystemTag\TagNotFoundException
 	 */
 	public function testAssignNonExistingTags() {
-		$this->tagMapper->assignTags(1, 'testtype', [100]);
+		$this->tagMapper->assignTags('1', 'testtype', [100]);
 	}
 
 	public function testAssignNonExistingTagInArray() {
 		$caught = false;
 		try {
-			$this->tagMapper->assignTags(1, 'testtype', [100, $this->tag3->getId()]);
+			$this->tagMapper->assignTags('1', 'testtype', [100, $this->tag3->getId()]);
 		} catch (TagNotFoundException $e) {
 			$caught = true;
 		}
@@ -237,12 +237,12 @@ class SystemTagObjectMapperTest extends TestCase {
 		$this->assertTrue($caught, 'Exception thrown');
 
 		$tagIdMapping = $this->tagMapper->getTagIdsForObjects(
-			[1],
+			['1'],
 			'testtype'
 		);
 
 		$this->assertEquals([
-			1 => [$this->tag1->getId(), $this->tag2->getId()],
+			'1' => [$this->tag1->getId(), $this->tag2->getId()],
 		], $tagIdMapping, 'None of the tags got assigned');
 	}
 
@@ -250,13 +250,13 @@ class SystemTagObjectMapperTest extends TestCase {
 	 * @expectedException \OCP\SystemTag\TagNotFoundException
 	 */
 	public function testUnassignNonExistingTags() {
-		$this->tagMapper->unassignTags(1, 'testtype', [100]);
+		$this->tagMapper->unassignTags('1', 'testtype', [100]);
 	}
 
 	public function testUnassignNonExistingTagsInArray() {
 		$caught = false;
 		try {
-			$this->tagMapper->unassignTags(1, 'testtype', [100, $this->tag1->getId()]);
+			$this->tagMapper->unassignTags('1', 'testtype', [100, $this->tag1->getId()]);
 		} catch (TagNotFoundException $e) {
 			$caught = true;
 		}
@@ -269,14 +269,14 @@ class SystemTagObjectMapperTest extends TestCase {
 		);
 
 		$this->assertEquals([
-			1 => [$this->tag1->getId(), $this->tag2->getId()],
+			'1' => [$this->tag1->getId(), $this->tag2->getId()],
 		], $tagIdMapping, 'None of the tags got unassigned');
 	}
 
 	public function testHaveTagAllMatches() {
 		$this->assertTrue(
 			$this->tagMapper->haveTag(
-				[1],
+				['1'],
 				'testtype',
 				$this->tag1->getId(),
 				true
@@ -286,7 +286,7 @@ class SystemTagObjectMapperTest extends TestCase {
 
 		$this->assertTrue(
 			$this->tagMapper->haveTag(
-				[1, 2],
+				['1', '2'],
 				'testtype',
 				$this->tag1->getId(),
 				true
@@ -296,7 +296,7 @@ class SystemTagObjectMapperTest extends TestCase {
 
 		$this->assertFalse(
 			$this->tagMapper->haveTag(
-				[1, 2],
+				['1', '2'],
 				'testtype',
 				$this->tag2->getId(),
 				true
@@ -306,7 +306,7 @@ class SystemTagObjectMapperTest extends TestCase {
 
 		$this->assertFalse(
 			$this->tagMapper->haveTag(
-				[2],
+				['2'],
 				'testtype',
 				$this->tag2->getId(),
 				true
@@ -316,7 +316,7 @@ class SystemTagObjectMapperTest extends TestCase {
 
 		$this->assertFalse(
 			$this->tagMapper->haveTag(
-				[3],
+				['3'],
 				'testtype',
 				$this->tag2->getId(),
 				true
@@ -328,7 +328,7 @@ class SystemTagObjectMapperTest extends TestCase {
 	public function testHaveTagAtLeastOneMatch() {
 		$this->assertTrue(
 			$this->tagMapper->haveTag(
-				[1],
+				['1'],
 				'testtype',
 				$this->tag1->getId(),
 				false
@@ -338,7 +338,7 @@ class SystemTagObjectMapperTest extends TestCase {
 
 		$this->assertTrue(
 			$this->tagMapper->haveTag(
-				[1, 2],
+				['1', '2'],
 				'testtype',
 				$this->tag1->getId(),
 				false
@@ -348,7 +348,7 @@ class SystemTagObjectMapperTest extends TestCase {
 
 		$this->assertTrue(
 			$this->tagMapper->haveTag(
-				[1, 2],
+				['1', '2'],
 				'testtype',
 				$this->tag2->getId(),
 				false
@@ -358,7 +358,7 @@ class SystemTagObjectMapperTest extends TestCase {
 
 		$this->assertFalse(
 			$this->tagMapper->haveTag(
-				[2],
+				['2'],
 				'testtype',
 				$this->tag2->getId(),
 				false
@@ -368,7 +368,7 @@ class SystemTagObjectMapperTest extends TestCase {
 
 		$this->assertFalse(
 			$this->tagMapper->haveTag(
-				[3],
+				['3'],
 				'testtype',
 				$this->tag2->getId(),
 				false
@@ -382,7 +382,7 @@ class SystemTagObjectMapperTest extends TestCase {
 	 */
 	public function testHaveTagNonExisting() {
 		$this->tagMapper->haveTag(
-			[1],
+			['1'],
 			'testtype',
 			100
 		);
diff --git a/version.php b/version.php
index dfe5d68300cd5ada183d322b2cc2f868e6ec0cd7..4ae94717c3dc110447f95bbb94428a3a842c5b8a 100644
--- a/version.php
+++ b/version.php
@@ -25,7 +25,7 @@
 // We only can count up. The 4. digit is only for the internal patchlevel to trigger DB upgrades
 // between betas, final and RCs. This is _not_ the public version number. Reset minor/patchlevel
 // when updating major/minor version number.
-$OC_Version = array(9, 0, 0, 12);
+$OC_Version = array(9, 0, 0, 13);
 
 // The human readable string
 $OC_VersionString = '9.0.0 beta 2';