diff --git a/lib/files/stream/staticstream.php b/lib/files/stream/staticstream.php
index 7725a6a5a0458c0a5b4930e8e70d47464caa5888..45b1a7a81f81ce66b7abff3ec3c55eae0c7e1a78 100644
--- a/lib/files/stream/staticstream.php
+++ b/lib/files/stream/staticstream.php
@@ -9,6 +9,8 @@
 namespace OC\Files\Stream;
 
 class StaticStream {
+	const MODE_FILE = 0100000;
+
 	public $context;
 	protected static $data = array();
 
@@ -26,6 +28,10 @@ class StaticStream {
 	public function stream_flush() {
 	}
 
+	public static function clear() {
+		self::$data = array();
+	}
+
 	public function stream_open($path, $mode, $options, &$opened_path) {
 		switch ($mode[0]) {
 			case 'r':
@@ -94,36 +100,7 @@ class StaticStream {
 	}
 
 	public function stream_stat() {
-		$size = strlen(self::$data[$this->path]);
-		$time = time();
-		return array(
-			0 => 0,
-			'dev' => 0,
-			1 => 0,
-			'ino' => 0,
-			2 => 0777,
-			'mode' => 0777,
-			3 => 1,
-			'nlink' => 1,
-			4 => 0,
-			'uid' => 0,
-			5 => 0,
-			'gid' => 0,
-			6 => '',
-			'rdev' => '',
-			7 => $size,
-			'size' => $size,
-			8 => $time,
-			'atime' => $time,
-			9 => $time,
-			'mtime' => $time,
-			10 => $time,
-			'ctime' => $time,
-			11 => -1,
-			'blksize' => -1,
-			12 => -1,
-			'blocks' => -1,
-		);
+		return $this->url_stat($this->path);
 	}
 
 	public function stream_tell() {
@@ -157,34 +134,22 @@ class StaticStream {
 		if (isset(self::$data[$path])) {
 			$size = strlen(self::$data[$path]);
 			$time = time();
-			return array(
-				0 => 0,
+			$data = array(
 				'dev' => 0,
-				1 => 0,
 				'ino' => 0,
-				2 => 0777,
-				'mode' => 0777,
-				3 => 1,
+				'mode' => self::MODE_FILE | 0777,
 				'nlink' => 1,
-				4 => 0,
 				'uid' => 0,
-				5 => 0,
 				'gid' => 0,
-				6 => '',
 				'rdev' => '',
-				7 => $size,
 				'size' => $size,
-				8 => $time,
 				'atime' => $time,
-				9 => $time,
 				'mtime' => $time,
-				10 => $time,
 				'ctime' => $time,
-				11 => -1,
 				'blksize' => -1,
-				12 => -1,
 				'blocks' => -1,
 			);
+			return array_values($data) + $data;
 		}
 		return false;
 	}
diff --git a/tests/lib/files/stream/staticstream.php b/tests/lib/files/stream/staticstream.php
new file mode 100644
index 0000000000000000000000000000000000000000..d55086196a005359229e566038a9408be8ebadde
--- /dev/null
+++ b/tests/lib/files/stream/staticstream.php
@@ -0,0 +1,68 @@
+<?php
+/**
+ * Copyright (c) 2013 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+namespace Test\Files\Stream;
+
+class StaticStream extends \PHPUnit_Framework_TestCase {
+
+	private $sourceFile;
+	private $sourceText;
+
+	public function __construct() {
+		$this->sourceFile = \OC::$SERVERROOT . '/tests/data/lorem.txt';
+		$this->sourceText = file_get_contents($this->sourceFile);
+	}
+
+	public function tearDown() {
+		\OC\Files\Stream\StaticStream::clear();
+	}
+
+	public function testContent() {
+		file_put_contents('static://foo', $this->sourceText);
+		$this->assertEquals($this->sourceText, file_get_contents('static://foo'));
+	}
+
+	public function testMultipleFiles() {
+		file_put_contents('static://foo', $this->sourceText);
+		file_put_contents('static://bar', strrev($this->sourceText));
+		$this->assertEquals($this->sourceText, file_get_contents('static://foo'));
+		$this->assertEquals(strrev($this->sourceText), file_get_contents('static://bar'));
+	}
+
+	public function testOverwrite() {
+		file_put_contents('static://foo', $this->sourceText);
+		file_put_contents('static://foo', 'qwerty');
+		$this->assertEquals('qwerty', file_get_contents('static://foo'));
+	}
+
+	public function testIsFile() {
+		$this->assertFalse(is_file('static://foo'));
+		file_put_contents('static://foo', $this->sourceText);
+		$this->assertTrue(is_file('static://foo'));
+	}
+
+	public function testIsDir() {
+		$this->assertFalse(is_dir('static://foo'));
+		file_put_contents('static://foo', $this->sourceText);
+		$this->assertFalse(is_dir('static://foo'));
+	}
+
+	public function testFileType() {
+		file_put_contents('static://foo', $this->sourceText);
+		$this->assertEquals('file', filetype('static://foo'));
+	}
+
+	public function testUnlink() {
+		$this->assertFalse(file_exists('static://foo'));
+		file_put_contents('static://foo', $this->sourceText);
+		$this->assertTrue(file_exists('static://foo'));
+		unlink('static://foo');
+		clearstatcache();
+		$this->assertFalse(file_exists('static://foo'));
+	}
+}
diff --git a/tests/lib/streamwrappers.php b/tests/lib/streamwrappers.php
index c7e51ccfa48560c0f682b5e34198c70170eed0c8..d15b712139db631c2d0a04d2d5c3567c76a0cd14 100644
--- a/tests/lib/streamwrappers.php
+++ b/tests/lib/streamwrappers.php
@@ -33,18 +33,6 @@ class Test_StreamWrappers extends PHPUnit_Framework_TestCase {
 		$this->assertEquals(count($items), count($result));
 	}
 
-	public function testStaticStream() {
-		$sourceFile = OC::$SERVERROOT . '/tests/data/lorem.txt';
-		$staticFile = 'static://test';
-		$this->assertFalse(file_exists($staticFile));
-		file_put_contents($staticFile, file_get_contents($sourceFile));
-		$this->assertTrue(file_exists($staticFile));
-		$this->assertEquals(file_get_contents($sourceFile), file_get_contents($staticFile));
-		unlink($staticFile);
-		clearstatcache();
-		$this->assertFalse(file_exists($staticFile));
-	}
-
 	public function testCloseStream() {
 		//ensure all basic stream stuff works
 		$sourceFile = OC::$SERVERROOT . '/tests/data/lorem.txt';