diff --git a/io_scene_obj/__init__.py b/io_scene_obj/__init__.py
index a2b97bff9876256aa11778f57d1b89a32c2c31be..eef29f97c09fabd39e89af7976cccfdccf155599 100644
--- a/io_scene_obj/__init__.py
+++ b/io_scene_obj/__init__.py
@@ -164,6 +164,10 @@ class ImportOBJ(bpy.types.Operator, ImportHelper):
                                         ).to_4x4()
         keywords["global_matrix"] = global_matrix
 
+        if bpy.data.is_saved and context.user_preferences.filepaths.use_relative_paths:
+            import os
+            keywords["relpath"] = os.path.dirname((bpy.data.path_resolve("filepath", False).as_bytes()))
+
         return import_obj.load(self, context, **keywords)
 
     def draw(self, context):
diff --git a/io_scene_obj/import_obj.py b/io_scene_obj/import_obj.py
index 72c17bfa4dc988d40f2a3ff382e8f629ee1479fd..68f24a998ddd409ca74e45deaafce28ab6ddf58a 100644
--- a/io_scene_obj/import_obj.py
+++ b/io_scene_obj/import_obj.py
@@ -74,20 +74,22 @@ def line_value(line_split):
         return b' '.join(line_split[1:])
 
 
-def obj_image_load(imagepath, DIR, recursive):
+def obj_image_load(imagepath, DIR, recursive, relpath):
     """
     Mainly uses comprehensiveImageLoad
     but tries to replace '_' with ' ' for Max's exporter replaces spaces with underscores.
     """
     if b'_' in imagepath:
-        image = load_image(imagepath.replace(b'_', b' '), DIR, recursive=recursive)
+        image = load_image(imagepath.replace(b'_', b' '), DIR, recursive=recursive, relpath=relpath)
         if image:
             return image
 
-    return load_image(imagepath, DIR, recursive=recursive, place_holder=True)
+    return load_image(imagepath, DIR, recursive=recursive, place_holder=True, relpath=relpath)
 
 
-def create_materials(filepath, material_libs, unique_materials, unique_material_images, use_image_search, float_func):
+def create_materials(filepath, relpath,
+                     material_libs, unique_materials, unique_material_images,
+                     use_image_search, float_func):
     """
     Create all the used materials in this obj,
     assign colors and images to the materials from all referenced material libs
@@ -103,7 +105,7 @@ def create_materials(filepath, material_libs, unique_materials, unique_material_
         texture = bpy.data.textures.new(name=type, type='IMAGE')
 
         # Absolute path - c:\.. etc would work here
-        image = obj_image_load(imagepath, DIR, use_image_search)
+        image = obj_image_load(imagepath, DIR, use_image_search, relpath)
         has_data = False
         image_depth = 0
 
@@ -838,6 +840,7 @@ def load(operator, context, filepath,
          use_split_groups=True,
          use_image_search=True,
          use_groups_as_vgroups=False,
+         relpath=None,
          global_matrix=None,
          ):
     """
@@ -1101,7 +1104,7 @@ def load(operator, context, filepath,
     time_sub = time_new
 
     print('\tloading materials and images...')
-    create_materials(filepath, material_libs, unique_materials, unique_material_images, use_image_search, float_func)
+    create_materials(filepath, relpath, material_libs, unique_materials, unique_material_images, use_image_search, float_func)
 
     time_new = time.time()
     print("%.4f sec" % (time_new - time_sub))