diff --git a/pyopencl/__init__.py b/pyopencl/__init__.py
index 0c3df5f952567d087a4b531ed0f17b3d69a14186..5b84393df9da5a4b9da07b3d417e67766b30f903 100644
--- a/pyopencl/__init__.py
+++ b/pyopencl/__init__.py
@@ -347,6 +347,9 @@ class Program(object):
         elif isinstance(options, six.text_type):
             options = [options.encode("utf8")]
 
+        if cache_dir is None:
+            cache_dir = self._context.cache_dir
+
         options = (options
                 + _DEFAULT_BUILD_OPTIONS
                 + _DEFAULT_INCLUDE_OPTIONS
@@ -1208,7 +1211,7 @@ _add_functionality()
 
 # {{{ convenience
 
-def create_some_context(interactive=None, answers=None):
+def create_some_context(interactive=None, answers=None, cache_dir=None):
     import os
     if answers is None:
         if "PYOPENCL_CTX" in os.environ:
@@ -1219,7 +1222,7 @@ def create_some_context(interactive=None, answers=None):
             from pyopencl.tools import get_test_platforms_and_devices
             for plat, devs in get_test_platforms_and_devices():
                 for dev in devs:
-                    return Context([dev])
+                    return Context([dev], cache_dir=cache_dir)
 
     if answers is not None:
         pre_provided_answers = answers
@@ -1334,7 +1337,7 @@ def create_some_context(interactive=None, answers=None):
         raise RuntimeError("not all provided choices were used by "
                 "create_some_context. (left over: '%s')" % ":".join(answers))
 
-    return Context(devices)
+    return Context(devices, cache_dir=cache_dir)
 
 _csc = create_some_context
 
diff --git a/pyopencl/cffi_cl.py b/pyopencl/cffi_cl.py
index ecb42397eb415296ce2865c82e92be4f009660ac..2e6caa6109dfde15b788f34a87a1b1f06b1bd200 100644
--- a/pyopencl/cffi_cl.py
+++ b/pyopencl/cffi_cl.py
@@ -641,7 +641,7 @@ def _parse_context_properties(properties):
 class Context(_Common):
     _id = 'context'
 
-    def __init__(self, devices=None, properties=None, dev_type=None):
+    def __init__(self, devices=None, properties=None, dev_type=None, cache_dir=None):
         c_props = _parse_context_properties(properties)
         status_code = _ffi.new('cl_int*')
 
@@ -665,6 +665,7 @@ class Context(_Common):
                                                         dev_type))
 
         self.ptr = _ctx[0]
+        self.cache_dir = cache_dir
 
 # }}}