diff --git a/CHANGES b/CHANGES
index f19704d9013bc882564f0c13b46966fad22a3ed8..da516efdc2a63719f10fc333ed7d732df5977ab0 100644
--- a/CHANGES
+++ b/CHANGES
@@ -31,6 +31,21 @@ ConfBridge
    - record_command: a command to execute when recording is finished
    Note that these options may also be with the CONFBRIDGE function.
 
+ControlPlayback
+------------------
+ * Remote files can now be retrieved and played back. See the Playback
+   dialplan application for more details.
+
+Playback
+------------------
+ * Remote files can now be retrieved and played back via the Playback and other
+   media playback dialplan applications. This is done by directly providing
+   the URL to play to the dialplan application:
+     same => n,Playback(http://1.1.1.1/howler-monkeys-fl.wav)
+   Note that unlike 'normal' media files, the entire URI to the file must be
+   provided, including the file extension. Currently, on HTTP and HTTPS URI
+   schemes are supported.
+
 SMS
 ------------------
  * Added the 'n' option, which prevents the SMS from being written to the log
@@ -132,6 +147,17 @@ Core
    of '[json]' can be set, e.g.,
       full => [json]debug,verbose,notice,warning,error
 
+ * The core now supports a 'media cache', which stores temporary media files
+   retrieved from external sources. CLI commands have been added to manipulate
+   and display the cached files, including:
+   - 'media cache show <all>' - show all cached media files, or details about
+     one particular cached media file
+   - 'media cache refresh <item>' - force a refresh of a particular media file
+     in the cache
+   - 'media cache delete <item>' - remove an item from the cache
+   - 'media cache create <uri>' - retrieve a URI and store it in the cache
+
+
 Functions
 ------------------
 
diff --git a/main/file.c b/main/file.c
index f0f826a4ff905b1b090cdf31dfd5f48762c38c5b..654937a5824bcd7bb7ea972835d6bad5541fb418 100644
--- a/main/file.c
+++ b/main/file.c
@@ -54,6 +54,7 @@ ASTERISK_REGISTER_FILE()
 #include "asterisk/stasis.h"
 #include "asterisk/json.h"
 #include "asterisk/stasis_system.h"
+#include "asterisk/media_cache.h"
 
 /*! \brief
  * The following variable controls the layout of localized sound files.
@@ -644,6 +645,10 @@ static int fileexists_test(const char *filename, const char *fmt, const char *la
 		return 0;
 	}
 
+	if (!ast_media_cache_retrieve(filename, NULL, buf, buflen)) {
+		return filehelper(buf, result_cap, NULL, ACTION_EXISTS);
+	}
+
 	if (ast_language_is_prefix && !is_absolute_path(filename)) { /* new layout */
 		if (lang) {
 			snprintf(buf, buflen, "%s/%s", lang, filename);