diff --git a/lib/workers/pr/changelog/index.js b/lib/workers/pr/changelog/index.js
index bed8520f03f9bc66a79ef39277c3bdd32979ff3a..ad458ece326e35c26970305a47d16b1855420a7f 100644
--- a/lib/workers/pr/changelog/index.js
+++ b/lib/workers/pr/changelog/index.js
@@ -6,13 +6,6 @@ module.exports = {
   getChangeLogJSON,
 };
 
-const cacheNamespace = 'changelog';
-function getCacheKey({ repositoryUrl, releases }) {
-  return `${repositoryUrl}-${
-    releases ? releases.map(release => release.version).join('-') : ''
-  }`;
-}
-
 async function getChangeLogJSON(args) {
   const { repositoryUrl, versionScheme, fromVersion, toVersion } = args;
   if (!repositoryUrl) {
@@ -25,23 +18,8 @@ async function getChangeLogJSON(args) {
   if (!fromVersion || equals(fromVersion, toVersion)) {
     return null;
   }
-  const cachedResult = await renovateCache.get(
-    cacheNamespace,
-    getCacheKey(args)
-  );
-  if (cachedResult) {
-    return cachedResult;
-  }
-
   try {
     const res = await sourceGithub.getChangeLogJSON({ ...args });
-    const cacheMinutes = 60;
-    await renovateCache.set(
-      cacheNamespace,
-      getCacheKey(args),
-      res,
-      cacheMinutes
-    );
     return res;
   } catch (err) /* istanbul ignore next */ {
     logger.error(
diff --git a/lib/workers/pr/changelog/release-notes.js b/lib/workers/pr/changelog/release-notes.js
index b1ece9e2ad632cbfdce16ad4026220e355174f3a..e29ddc19d76bf91befb5b16aee79c083ee8a728a 100644
--- a/lib/workers/pr/changelog/release-notes.js
+++ b/lib/workers/pr/changelog/release-notes.js
@@ -182,23 +182,39 @@ async function addReleaseNotes(input) {
   }
   const output = { ...input, versions: [] };
   const repository = input.project.github.replace(/\.git$/, '');
+  const cacheNamespace = 'changelog-github-notes';
+  function getCacheKey(version) {
+    return `${repository}:${version}`;
+  }
   for (const v of input.versions) {
-    let releaseNotes = await getReleaseNotesMd(
-      repository,
-      v.version,
-      input.project.githubBaseURL
-    );
+    let releaseNotes;
+    const cacheKey = getCacheKey(v.version);
+    releaseNotes = await renovateCache.get(cacheNamespace, cacheKey);
     if (!releaseNotes) {
-      logger.trace('No markdown release notes found for v' + v.version);
-      releaseNotes = await getReleaseNotes(
+      releaseNotes = await getReleaseNotesMd(
         repository,
         v.version,
         input.project.githubBaseURL
       );
-    }
-    // Small hack to force display of release notes when there is a compare url
-    if (!releaseNotes && v.compare.url) {
-      releaseNotes = { url: v.compare.url };
+      if (!releaseNotes) {
+        logger.trace('No markdown release notes found for v' + v.version);
+        releaseNotes = await getReleaseNotes(
+          repository,
+          v.version,
+          input.project.githubBaseURL
+        );
+      }
+      // Small hack to force display of release notes when there is a compare url
+      if (!releaseNotes && v.compare.url) {
+        releaseNotes = { url: v.compare.url };
+      }
+      const cacheMinutes = 30;
+      await renovateCache.set(
+        cacheNamespace,
+        cacheKey,
+        releaseNotes,
+        cacheMinutes
+      );
     }
     output.versions.push({
       ...v,
diff --git a/lib/workers/pr/changelog/source-github.js b/lib/workers/pr/changelog/source-github.js
index cc1068f1093669db52b7986c22794641d2171707..fd8bb8b4f58e8168a316d891fecef746fac2474a 100644
--- a/lib/workers/pr/changelog/source-github.js
+++ b/lib/workers/pr/changelog/source-github.js
@@ -108,6 +108,11 @@ async function getChangeLogJSON({
     return getDateRef(config.endpoint, repository, release.releaseTimestamp);
   }
 
+  const cacheNamespace = 'changelog-github-release';
+  function getCacheKey(version) {
+    return `${repository}:${version}`;
+  }
+
   const changelogReleases = [];
   // compare versions
   const include = version =>
@@ -116,17 +121,30 @@ async function getChangeLogJSON({
     const prev = validReleases[i - 1];
     const next = validReleases[i];
     if (include(next.version)) {
-      const release = {
-        version: next.version,
-        date: next.releaseTimestamp,
-        // put empty changes so that existing templates won't break
-        changes: [],
-        compare: {},
-      };
-      const prevHead = await getRef(prev);
-      const nextHead = await getRef(next);
-      if (prevHead && nextHead) {
-        release.compare.url = `${githubBaseURL}${repository}/compare/${prevHead}...${nextHead}`;
+      let release = await renovateCache.get(
+        cacheNamespace,
+        getCacheKey(next.version)
+      );
+      if (!release) {
+        release = {
+          version: next.version,
+          date: next.releaseTimestamp,
+          // put empty changes so that existing templates won't break
+          changes: [],
+          compare: {},
+        };
+        const prevHead = await getRef(prev);
+        const nextHead = await getRef(next);
+        if (prevHead && nextHead) {
+          release.compare.url = `${githubBaseURL}${repository}/compare/${prevHead}...${nextHead}`;
+        }
+        const cacheMinutes = 30;
+        await renovateCache.set(
+          cacheNamespace,
+          getCacheKey(next.version),
+          release,
+          cacheMinutes
+        );
       }
       changelogReleases.unshift(release);
     }
diff --git a/test/workers/pr/changelog/__snapshots__/index.spec.js.snap b/test/workers/pr/changelog/__snapshots__/index.spec.js.snap
index fd951caaa20866d50401442cf1b663bcfa1321ab..67581a19c878f369e10037190059c3d25f425bd6 100644
--- a/test/workers/pr/changelog/__snapshots__/index.spec.js.snap
+++ b/test/workers/pr/changelog/__snapshots__/index.spec.js.snap
@@ -163,12 +163,14 @@ Object {
     Object {
       "changes": Array [],
       "compare": Object {},
+      "releaseNotes": undefined,
       "version": "2.5.2",
     },
     Object {
       "changes": Array [],
       "compare": Object {},
       "date": "2017-12-24T03:20:46.238Z",
+      "releaseNotes": undefined,
       "version": "2.4.2",
     },
     Object {