diff --git a/lib/backend.py b/lib/backend.py
index 01fd28dc27bbd89454036ee36cd682c6a1ebb301..0b922884d5d18b6fcd6c77a7dbbb3d4ec0efe657 100644
--- a/lib/backend.py
+++ b/lib/backend.py
@@ -712,7 +712,7 @@ def InstanceOsAdd(instance, reinstall):
   """
   inst_os = OSFromDisk(instance.os)
 
-  create_env = OSEnvironment(instance)
+  create_env = OSEnvironment(instance, inst_os)
   if reinstall:
     create_env['INSTANCE_REINSTALL'] = "1"
 
@@ -744,7 +744,7 @@ def RunRenameInstance(instance, old_name):
   """
   inst_os = OSFromDisk(instance.os)
 
-  rename_env = OSEnvironment(instance)
+  rename_env = OSEnvironment(instance, inst_os)
   rename_env['OLD_INSTANCE_NAME'] = old_name
 
   logfile = "%s/rename-%s-%s-%s-%d.log" % (constants.LOG_OS_DIR, instance.os,
@@ -1569,9 +1569,9 @@ def _TryOSFromDisk(name, base_dir=None):
     # push the error up
     return status, api_versions
 
-  if constants.OS_API_VERSION not in api_versions:
+  if not constants.OS_API_VERSIONS.intersection(api_versions):
     return False, ("API version mismatch for path '%s': found %s, want %s." %
-                   (os_dir, api_versions, constants.OS_API_VERSION))
+                   (os_dir, api_versions, constants.OS_API_VERSIONS))
 
   # OS Scripts dictionary, we will populate it with the actual script names
   os_scripts = dict.fromkeys(constants.OS_SCRIPTS)
@@ -1628,11 +1628,13 @@ def OSFromDisk(name, base_dir=None):
   return payload
 
 
-def OSEnvironment(instance, debug=0):
+def OSEnvironment(instance, os, debug=0):
   """Calculate the environment for an os script.
 
   @type instance: L{objects.Instance}
   @param instance: target instance for the os script run
+  @type os: L{objects.OS}
+  @param os: operating system for which the environment is being built
   @type debug: integer
   @param debug: debug level (0 or 1, for OS Api 10)
   @rtype: dict
@@ -1642,7 +1644,8 @@ def OSEnvironment(instance, debug=0):
 
   """
   result = {}
-  result['OS_API_VERSION'] = '%d' % constants.OS_API_VERSION
+  api_version = max(constants.OS_API_VERSIONS.intersection(os.api_versions))
+  result['OS_API_VERSION'] = '%d' % api_version
   result['INSTANCE_NAME'] = instance.name
   result['INSTANCE_OS'] = instance.os
   result['HYPERVISOR'] = instance.hypervisor
@@ -1759,9 +1762,9 @@ def ExportSnapshot(disk, dest_node, instance, cluster_name, idx):
   @rtype: None
 
   """
-  export_env = OSEnvironment(instance)
-
   inst_os = OSFromDisk(instance.os)
+  export_env = OSEnvironment(instance, inst_os)
+
   export_script = inst_os.export_script
 
   logfile = "%s/exp-%s-%s-%s.log" % (constants.LOG_OS_DIR, inst_os.name,
@@ -1903,8 +1906,8 @@ def ImportOSIntoInstance(instance, src_node, src_images, cluster_name):
   @return: each boolean represent the success of importing the n-th disk
 
   """
-  import_env = OSEnvironment(instance)
   inst_os = OSFromDisk(instance.os)
+  import_env = OSEnvironment(instance, inst_os)
   import_script = inst_os.import_script
 
   logfile = "%s/import-%s-%s-%s.log" % (constants.LOG_OS_DIR, instance.os,
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 03660c1534192b2c8b7255e0a9f9c2170b182f76..91a35a35b59872e08123a826ae4770f814086c07 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -2577,7 +2577,7 @@ class LUQueryClusterInfo(NoHooksLU):
       "software_version": constants.RELEASE_VERSION,
       "protocol_version": constants.PROTOCOL_VERSION,
       "config_version": constants.CONFIG_VERSION,
-      "os_api_version": constants.OS_API_VERSION,
+      "os_api_version": max(constants.OS_API_VERSIONS),
       "export_version": constants.EXPORT_VERSION,
       "architecture": (platform.architecture()[0], platform.machine()),
       "name": cluster.cluster_name,
diff --git a/lib/constants.py b/lib/constants.py
index 01034051e75ad64f9883b0308a70923c0e9af2d0..13dad7ad9c3a164f871936372e7bba73747baa30 100644
--- a/lib/constants.py
+++ b/lib/constants.py
@@ -26,7 +26,9 @@ from ganeti import _autoconf
 # various versions
 PROTOCOL_VERSION = 20
 RELEASE_VERSION = _autoconf.PACKAGE_VERSION
-OS_API_VERSION = 10
+OS_API_V10 = 10
+OS_API_V15 = 15
+OS_API_VERSIONS = frozenset([OS_API_V10, OS_API_V15])
 EXPORT_VERSION = 0
 RAPI_VERSION = 2
 
diff --git a/qa/qa_os.py b/qa/qa_os.py
index b39e3ca3917c3e420e96980fddd0951227ca40bb..4b6fa5e22f159c9ce9bd08ffd312d589c82bb261 100644
--- a/qa/qa_os.py
+++ b/qa/qa_os.py
@@ -72,7 +72,7 @@ def _SetupTempOs(node, dir, valid):
   if valid:
     parts.append(sq(["ln", "-fs", "/bin/true", "create"]))
 
-  parts.append(sq(["echo", str(constants.OS_API_VERSION)]) +
+  parts.append(sq(["echo", str(constants.OS_API_V10)]) +
                " >ganeti_api_version")
 
   cmd = ' && '.join(parts)