diff --git a/includes/file.inc b/includes/file.inc
index de9d17d..097d4c3 100644
--- a/includes/file.inc
+++ b/includes/file.inc
@@ -2475,10 +2475,10 @@ function drupal_tempnam($directory, $prefix) {
   $scheme = file_uri_scheme($directory);
 
   if ($scheme && file_stream_wrapper_valid_scheme($scheme)) {
-    $wrapper = file_stream_wrapper_get_instance_by_scheme($scheme);
+    $local_directory = drupal_realpath($directory);
 
-    if ($filename = tempnam($wrapper->getDirectoryPath(), $prefix)) {
-      return $scheme . '://' . drupal_basename($filename);
+    if (is_writable($local_directory) && ($filename = tempnam($local_directory, $prefix))) {
+      return file_stream_wrapper_uri_normalize($directory . '/' . basename($filename));
     }
     else {
       return FALSE;
diff --git a/modules/simpletest/tests/file.test b/modules/simpletest/tests/file.test
index 89ecac7..e06eea6 100644
--- a/modules/simpletest/tests/file.test
+++ b/modules/simpletest/tests/file.test
@@ -2691,7 +2691,7 @@ public function testFileMimeTypeDetection() {
 /**
  * Tests stream wrapper functions.
  */
-class StreamWrapperTest extends DrupalWebTestCase {
+class StreamWrapperTest extends FileTestCase {
 
   protected $scheme = 'dummy';
   protected $classname = 'DrupalDummyStreamWrapper';
@@ -2766,4 +2766,23 @@ function testGetValidStreamScheme() {
     $this->assertTrue(file_stream_wrapper_valid_scheme(file_uri_scheme('public://asdf')), 'Got a valid stream scheme from public://asdf');
     $this->assertFalse(file_stream_wrapper_valid_scheme(file_uri_scheme('foo://asdf')), 'Did not get a valid stream scheme from foo://asdf');
   }
+
+  /**
+   * Test the drupal_tempnam() function.
+   *
+   * Ensure that drupal_tempnam can create files in a folder when using a stream
+   * wrapper.
+   */
+  function testDrupalTempnam() {
+    // Create a tmp file at the root of the default stream wrapper.
+    $tempnam = drupal_tempnam(file_default_scheme() . '://', 'tmp');
+    $this->assertTrue($tempnam, t('Default stream wrapper can create temporary files'));
+    $this->assertEqual(file_default_scheme() . '://tmp', substr($tempnam, 0, strlen(file_default_scheme() . '://tmp')), t('Temporary file created at root of stream wrapper with correct URI'));
+
+    // Create a tmp file in a subfolder of the default stream wrapper.
+    $folder = $this->createDirectory();
+    $tempnam = drupal_tempnam($folder, 'tmp');
+    $this->assertTrue($tempnam, t('Default stream wrapper can create temporary files'));
+    $this->assertEqual($folder, drupal_dirname($tempnam), t('Temporary file in subdirectory of stream wrapper was created'));
+  }
 }
