diff --git a/spotseeker_server/test/item/image_put.py b/spotseeker_server/test/item/image_put.py
index 0c37427825e2e8d68581ff41a538ff3f3f342fbf..9dbf0dbe84def836fd334adf182d0656ba3ae3e0 100644
--- a/spotseeker_server/test/item/image_put.py
+++ b/spotseeker_server/test/item/image_put.py
@@ -24,7 +24,7 @@ from django.test.utils import override_settings
 from mock import patch
 from spotseeker_server import models
 
-TEST_ROOT = abspath(dirname(__file__))
+IMAGE_ROOT = abspath(os.path.join(settings.BASE_DIR, "media"))
 
 
 @override_settings(SPOTSEEKER_AUTH_MODULE='spotseeker_server.auth.all_ok')
@@ -35,8 +35,7 @@ class ItemImagePUTTest(TestCase):
     """
 
     def setUp(self):
-        self.TEMP_DIR = tempfile.mkdtemp()
-        with self.settings(MEDIA_ROOT=self.TEMP_DIR):
+        with self.settings(MEDIA_ROOT=IMAGE_ROOT):
             spot = Spot.objects.create(
                 name="This is a spot fot testing PUTting images")
             spot.save()
@@ -51,7 +50,7 @@ class ItemImagePUTTest(TestCase):
             self.url = self.url
 
             # GIF
-            f = open("%s/../resources/test_gif.gif" % TEST_ROOT)
+            f = open("%s/test_gif.gif" % IMAGE_ROOT, 'rb')
             gif = self.item.itemimage_set.create(
                 description="This is the GIF test",
                 image=File(f))
@@ -61,7 +60,7 @@ class ItemImagePUTTest(TestCase):
             self.gif_url = "%s/image/%s" % (self.url, self.gif.pk)
 
             # JPEG
-            f = open("%s/../resources/test_jpeg.jpg" % TEST_ROOT)
+            f = open("%s/test_jpeg.jpg" % IMAGE_ROOT, 'rb')
             jpeg = self.item.itemimage_set.create(
                 description="This is the JPEG test",
                 image=File(f))
@@ -71,7 +70,7 @@ class ItemImagePUTTest(TestCase):
             self.jpeg_url = "%s/image/%s" % (self.url, self.jpeg.pk)
 
             # PNG
-            f = open("%s/../resources/test_png.png" % TEST_ROOT)
+            f = open("%s/test_png.png" % IMAGE_ROOT, 'rb')
             png = self.item.itemimage_set.create(
                 description="This is the PNG test",
                 image=File(f))
@@ -81,7 +80,7 @@ class ItemImagePUTTest(TestCase):
             self.png_url = "%s/image/%s" % (self.url, self.png.pk)
 
     def test_bad_url(self):
-        with self.settings(MEDIA_ROOT=self.TEMP_DIR):
+        with self.settings(MEDIA_ROOT=IMAGE_ROOT):
             c = Client()
             item = Item.objects.create(name="This is the wrong Item")
 
@@ -92,7 +91,7 @@ class ItemImagePUTTest(TestCase):
             self.assertEqual(response.status_code, 404)
 
     def test_invalid_url(self):
-        with self.settings(MEDIA_ROOT=self.TEMP_DIR):
+        with self.settings(MEDIA_ROOT=IMAGE_ROOT):
             c = Client()
             bad_url = "%s/image/aa" % self.url
             response = c.put(bad_url,
@@ -101,7 +100,7 @@ class ItemImagePUTTest(TestCase):
             self.assertEqual(response.status_code, 404)
 
     def test_invalid_id_too_high(self):
-        with self.settings(MEDIA_ROOT=self.TEMP_DIR):
+        with self.settings(MEDIA_ROOT=IMAGE_ROOT):
             c = Client()
             test_id = self.gif.pk + 10000
             test_url = "%s/image/%s" % (self.url, test_id)
@@ -111,13 +110,13 @@ class ItemImagePUTTest(TestCase):
             self.assertEqual(response.status_code, 404)
 
     def test_valid_same_type_with_etag(self):
-        with self.settings(MEDIA_ROOT=self.TEMP_DIR):
+        with self.settings(MEDIA_ROOT=IMAGE_ROOT):
             c = Client()
             response = c.get(self.jpeg_url)
             etag = response['etag']
 
-            f = open("%s/../resources/test_jpeg2.jpg" % TEST_ROOT)
-            f2 = open("%s/../resources/test_jpeg.jpg" % TEST_ROOT)
+            f = open("%s/test_jpeg2.jpg" % IMAGE_ROOT, 'rb')
+            f2 = open("%s/test_jpeg.jpg" % IMAGE_ROOT, 'rb')
 
             new_jpeg_name = "testing PUT name: {0}".format(random.random())
 
@@ -125,7 +124,7 @@ class ItemImagePUTTest(TestCase):
                              files={"description": new_jpeg_name,
                                     "image": f},
                              If_Match=etag)
-            f = open("%s/../resources/test_jpeg2.jpg" % TEST_ROOT)
+            f = open("%s/test_jpeg2.jpg" % IMAGE_ROOT, 'rb')
             self.assertEqual(response.status_code, 200)
             self.assertEqual(int(response["content-length"]),
                               len(f.read()))
@@ -134,14 +133,14 @@ class ItemImagePUTTest(TestCase):
             self.assertEqual(response["content-type"], "image/jpeg")
 
     def test_valid_different_image_type_valid_etag(self):
-        with self.settings(MEDIA_ROOT=self.TEMP_DIR):
+        with self.settings(MEDIA_ROOT=IMAGE_ROOT):
             c = Client()
             response = c.get(self.gif_url)
 
             etag = response["etag"]
 
-            f = open("%s/../resources/test_png.png" % TEST_ROOT)
-            f2 = open("%s/../resources/test_gif.gif" % TEST_ROOT)
+            f = open("%s/test_png.png" % IMAGE_ROOT, 'rb')
+            f2 = open("%s/test_gif.gif" % IMAGE_ROOT, 'rb')
 
             new_name = "testing PUT name: {0}".format(random.random())
 
@@ -152,7 +151,7 @@ class ItemImagePUTTest(TestCase):
                                           "boundary=--aklsjf--",
                              If_Match=etag)
             self.assertEqual(response.status_code, 200)
-            f = open("%s/../resources/test_png.png" % TEST_ROOT)
+            f = open("%s/test_png.png" % IMAGE_ROOT, 'rb')
 
             # Just to be sure
             response = c.get(self.gif_url)
@@ -163,18 +162,18 @@ class ItemImagePUTTest(TestCase):
                                 len(f2.read()))
 
     def test_invalid_image_type_valid_etag(self):
-        with self.settings(MEDIA_ROOT=self.TEMP_DIR):
+        with self.settings(MEDIA_ROOT=IMAGE_ROOT):
             c = Client()
             response = c.get(self.gif_url)
             etag = response["ETag"]
 
-            f = open("%s/../resources/test_png.png" % TEST_ROOT)
-            f2 = open("%s/../resources/test_gif.gif" % TEST_ROOT)
+            f = open("%s/test_png.png" % IMAGE_ROOT, 'rb')
+            f2 = open("%s/test_gif.gif" % IMAGE_ROOT, 'rb')
 
             new_name = "testing PUT name: {0}".format(random.random())
 
             c = Client()
-            f = open("%s/../resources/fake_jpeg.jpg" % TEST_ROOT)
+            f = open("%s/fake_jpeg.jpg" % IMAGE_ROOT, 'rb')
             response = c.put(self.gif_url,
                              files={"description": "This is a text file",
                                     "image": f},
@@ -184,10 +183,10 @@ class ItemImagePUTTest(TestCase):
 
     # Want this to be one of the first tests to run
     def test_a_valid_image_no_etag(self):
-        with self.settings(MEDIA_ROOT=self.TEMP_DIR):
+        with self.settings(MEDIA_ROOT=IMAGE_ROOT):
             c = Client()
             # GIF
-            f = open("%s/../resources/test_gif2.gif" % TEST_ROOT)
+            f = open("%s/test_gif2.gif" % IMAGE_ROOT, 'rb')
             new_gif_name = "testing PUT name: {0}".format(random.random())
             response = c.put(self.gif_url,
                              files={"description": new_gif_name,
@@ -199,7 +198,7 @@ class ItemImagePUTTest(TestCase):
             self.assertEqual(updated_img.image, self.gif.image)
 
             # JPEG
-            f = open("%s/../resources/test_jpeg2.jpg" % TEST_ROOT)
+            f = open("%s/test_jpeg2.jpg" % IMAGE_ROOT, 'rb')
             new_jpeg_name = "testing PUT name: {0}".format(random.random())
             response = c.put(self.gif_url,
                              files={"description": new_jpeg_name,
@@ -212,7 +211,7 @@ class ItemImagePUTTest(TestCase):
                               self.jpeg.description)
 
             # PNG
-            f = open("%s/../resources/test_png2.png" % TEST_ROOT)
+            f = open("%s/test_png2.png" % IMAGE_ROOT, 'rb')
             new_png_name = "testing PUT name: {0}".format(random.random())
             response = c.put(self.gif_url,
                              files={"description": new_png_name,
@@ -229,9 +228,6 @@ class ItemImagePUTTest(TestCase):
             self.assertNotEqual(os.fstat(f.fileno()).st_size,
                                 int(content_length))
 
-            f = open("%s/../resources/test_gif.gif" % TEST_ROOT)
+            f = open("%s/test_gif.gif" % IMAGE_ROOT, 'rb')
             self.assertEqual(os.fstat(f.fileno()).st_size,
                               int(content_length))
-
-    def tearDown(self):
-        shutil.rmtree(self.TEMP_DIR)
diff --git a/spotseeker_server/urls.py b/spotseeker_server/urls.py
index 659ff9122066ecf5c32b7fa66c36c667c7b0a4df..1c4ef59955efeda188cff536b340ee26796f98d9 100644
--- a/spotseeker_server/urls.py
+++ b/spotseeker_server/urls.py
@@ -65,6 +65,9 @@ urlpatterns = [
     path('v1/spot/<int:spot_id>/image/<int:image_id>/thumb/constrain/<str:thumb_dimensions>',
          csrf_exempt(ThumbnailView().run),
          {'constrain': True}),
+    path('v1/spot/<int:spot_id>/image/<int:image_id>/thumb/',
+         csrf_exempt(ThumbnailView().run),
+         name='spot-image-thumb'),
     path('v1/spot/<int:spot_id>/image/<int:image_id>/thumb/<str:thumb_dimensions>',
          csrf_exempt(ThumbnailView().run),
          name='spot-image-thumb'),
diff --git a/spotseeker_server/views/share_space.py b/spotseeker_server/views/share_space.py
index 93e4c7bc1e99e4b346472cab1a4974a59c33dbf2..b60b4727fdf7153d70ed85e7c57486d798ba3611 100644
--- a/spotseeker_server/views/share_space.py
+++ b/spotseeker_server/views/share_space.py
@@ -98,7 +98,7 @@ class ShareSpaceView(RESTDispatch):
                 path = getattr(settings,
                                'SS_APP_SPACE_PATH',
                                '/space/{{ spot_id }}/{{ spot_name }}')
-                path = re.sub(r'{{\s*spot_id\s*}}', spot_id, path)
+                path = re.sub(r'{{\s*spot_id\s*}}', str(spot_id), path)
                 path = \
                     re.sub(r'{{\s*spot_name\s*}}', urlquote(spot.name), path)
                 hash_val = \