diff --git a/tile_gen/generate_tiles.py b/tile_gen/generate_tiles.py
index daeca8b114b83c33494b9ec4b5dceebd7c7a4bc9..5fef7c8e4d68f4117481a26c5ddfac31c39d39d2 100644
--- a/tile_gen/generate_tiles.py
+++ b/tile_gen/generate_tiles.py
@@ -5,6 +5,7 @@ import sys
 import warnings
 import logging
 import subprocess
+import shutil
 
 import tile_index
 
@@ -43,6 +44,18 @@ def remap_tifs(input_tifs, out_dir, remap_suffix):
             yield otif
 
 
+def link_or_copy(input_tifs, out_dir):
+    """Hardlink input tifs to output directory."""
+    for prod_file in input_tifs:
+        out_file = os.path.join(out_dir, os.path.basename(prod_file))
+        try:
+            os.link(prod_file, out_file)
+        except OSError:
+            # on different mounts probably?
+            shutil.copy2(prod_file, out_file)
+        yield out_file
+
+
 def main():
     import argparse
     parser = argparse.ArgumentParser(description="Take input geotiffs and generate mapserver compatible tiles.")
@@ -68,9 +81,12 @@ def main():
         shp_fn = args.shape_file.format(product=prod)
         shp_pathname = os.path.join(out_dir, shp_fn)
 
-        # remap if needed
         if args.remap:
+            # remap if needed
             prod_files = list(remap_tifs(prod_files, out_dir, args.remap_suffix))
+        else:
+            # hardlink if needed
+            prod_files = list(link_or_copy(prod_files, out_dir))
 
         # create shape file
         tile_index.index(prod_files, shp_pathname)