diff --git a/integration/caching_test.js b/integration/caching_test.js
index f54041f870a33789f67c81747e0813d18ab0993e..232f3f9ea1b2bfd822dc2f61dd51f6dbda0fb453 100644
--- a/integration/caching_test.js
+++ b/integration/caching_test.js
@@ -9,7 +9,7 @@ describe('File caching service', function () {
   let app
 
   beforeEach(async function () {
-    mockConfig({ urls: ['http://ui-server/'] })
+    mockConfig({ baseUrls: ['http://ui-server/'] })
     mockFetch({
       'http://ui-server': {
         '/manifest.json': generateSimpleViteManifest({
diff --git a/integration/config_test.js b/integration/config_test.js
index cde423c099998a9f1028fdc8e7f709abb7840c45..e6b8826210e006e5b65accb9c25035db9e7efd40 100644
--- a/integration/config_test.js
+++ b/integration/config_test.js
@@ -11,7 +11,7 @@ describe('Configuration', function () {
   beforeEach(async function () {
     // need to set the redis-prefix. Otherwise, the bull workers will interfere
     process.env.REDIS_PREFIX = Math.random().toString()
-    mockConfig(config = { urls: ['http://ui-server/'] })
+    mockConfig(config = { baseUrls: ['http://ui-server/'] })
     mockFetch({
       'http://ui-server': {
         '/manifest.json': generateSimpleViteManifest({
@@ -42,7 +42,7 @@ describe('Configuration', function () {
     const response = await request(app.server).get('/meta')
     expect(response.body).to.have.length(2)
 
-    config.urls = []
+    config.baseUrls = []
     const { pubClient } = await import('../src/redis.js')
     pubClient.publish(getRedisKey({ name: 'updateLatestVersion' }), '1234')
     await new Promise(resolve => setTimeout(resolve, 200))
diff --git a/integration/update-version_test.js b/integration/update-version_test.js
index af2244cb5c5c0a55702438073d488c58e5e17ad4..15d3fc77204a50ffc48b622cfa3a22d4eae2cd14 100644
--- a/integration/update-version_test.js
+++ b/integration/update-version_test.js
@@ -10,7 +10,7 @@ describe('Updates the version', function () {
   beforeEach(async function () {
     // need to set the redis-prefix. Otherwise, the bull workers will interfere
     process.env.REDIS_PREFIX = Math.random().toString()
-    mockConfig({ urls: ['http://ui-server/'] })
+    mockConfig({ baseUrls: ['http://ui-server/'] })
     mockFetch({
       'http://ui-server': {
         '/manifest.json': generateSimpleViteManifest({
@@ -102,7 +102,7 @@ describe('Updates the version', function () {
       td.reset()
       // need to set the redis-prefix. Otherwise, the bull workers will interfere
       process.env.REDIS_PREFIX = Math.random().toString()
-      mockConfig({ urls: ['http://ui-server/'] })
+      mockConfig({ baseUrls: ['http://ui-server/'] })
       mockFetch({
         'http://ui-server': {
           '/manifest.json': generateSimpleViteManifest({
diff --git a/spec/app_root_test.js b/spec/app_root_test.js
index f80fa82c124d77ed9f32d3417e6e1aa3e18d2272..029da1e0ce31ce32589fcc4a34b0d590e4f4ebe2 100644
--- a/spec/app_root_test.js
+++ b/spec/app_root_test.js
@@ -9,7 +9,7 @@ describe('With different app root', function () {
 
   beforeEach(async function () {
     let count = 0
-    mockConfig({ urls: ['http://ui-server/'] })
+    mockConfig({ baseUrls: ['http://ui-server/'] })
     mockRedis()
     mockFetch({
       'http://ui-server': {
diff --git a/spec/file-depencies_test.js b/spec/file-depencies_test.js
index 395197d2ce170ebd35ee07f567485226628ded9a..45e699e500130710ecda87ff1cdd5bd50da6fa40 100644
--- a/spec/file-depencies_test.js
+++ b/spec/file-depencies_test.js
@@ -9,7 +9,7 @@ describe('JS files with dependencies contain events', function () {
   let mockFetchConfig
 
   beforeEach(async function () {
-    mockConfig({ urls: ['http://ui-server/'] })
+    mockConfig({ baseUrls: ['http://ui-server/'] })
     mockRedis()
     mockFetch(mockFetchConfig = {
       'http://ui-server': {
@@ -45,7 +45,7 @@ describe('JS files with dependencies contain events', function () {
     expect(response.text).to.equal('console.log("this is index.html.js")\n/*injected by ui-middleware*/document.dispatchEvent(new CustomEvent("load-css",{detail:{css:["main.css"]}}))')
   })
 
-  it('javascript files from different versions have corrent dependencies', async function () {
+  it('javascript files from different versions have correct dependencies', async function () {
     const r1 = await request(app.server).get('/index.html.js')
     expect(r1.headers.dependencies).to.equal('main.css')
 
diff --git a/spec/file_caching_test.js b/spec/file_caching_test.js
index d3e8023d5f1a1f0bc95ca676f4a2e59a64fc5f74..3803ddb56771c5d13e8374ed7f7e79fd5ec263a9 100644
--- a/spec/file_caching_test.js
+++ b/spec/file_caching_test.js
@@ -17,7 +17,7 @@ describe('File caching service', function () {
 
   beforeEach(async function () {
     let count = 0
-    mockConfig({ urls: ['http://ui-server/'] })
+    mockConfig({ baseUrls: ['http://ui-server/'] })
     redis = mockRedis()
     mockFetch({
       'http://ui-server': {
@@ -202,7 +202,7 @@ describe('File caching service', function () {
 
   it('requests known file only from one server', async function () {
     let spy1, spy2
-    mockConfig({ urls: ['http://ui-server1/', 'http://ui-server2/'] })
+    mockConfig({ baseUrls: ['http://ui-server1/', 'http://ui-server2/'] })
     // we have example.js in both files. the first one will be overwritten and therefore not be called
     mockFetch({
       'http://ui-server1': {
diff --git a/spec/headers_test.js b/spec/headers_test.js
index c97721b7684055d47072b7b9f83ad4653d22f3e7..faca45bed45436a9f405bea36e77a3dac389a4f6 100644
--- a/spec/headers_test.js
+++ b/spec/headers_test.js
@@ -8,7 +8,7 @@ describe('Responses contain custom headers', function () {
   let app
 
   before(async function () {
-    mockConfig({ urls: ['http://ui-server/'] })
+    mockConfig({ baseUrls: ['http://ui-server/'] })
     mockFetch({
       'http://ui-server': {
         '/manifest.json': generateSimpleViteManifest({
@@ -64,7 +64,7 @@ describe('Responses contain custom headers', function () {
       td.reset()
       await new RedisMock().flushdb()
 
-      mockConfig({ urls: ['http://ui-server/'] })
+      mockConfig({ baseUrls: ['http://ui-server/'] })
       mockRedis()
       mockFetch({
         'http://ui-server': {
@@ -90,7 +90,7 @@ describe('Responses contain custom headers', function () {
       td.reset()
       await new RedisMock().flushdb()
 
-      mockConfig({ urls: ['http://ui-server/'] })
+      mockConfig({ baseUrls: ['http://ui-server/'] })
       mockRedis()
       mockFetch({
         'http://ui-server': {
@@ -117,7 +117,7 @@ describe('Responses contain custom headers', function () {
       td.reset()
       await new RedisMock().flushdb()
 
-      mockConfig({ urls: ['http://ui-server/'] })
+      mockConfig({ baseUrls: ['http://ui-server/'] })
       mockRedis()
       mockFetch({
         'http://ui-server': {
diff --git a/spec/meta_test.js b/spec/meta_test.js
index c5a0dc28046ee5e8cc2f18a15a02d99b392fc9cf..b9ca8a1374bef547873d8b6374e2efcfc8ed515d 100644
--- a/spec/meta_test.js
+++ b/spec/meta_test.js
@@ -10,7 +10,7 @@ describe('Responses contain custom headers', function () {
   let app
 
   beforeEach(async function () {
-    mockConfig(config = { urls: ['http://ui-server/'] })
+    mockConfig(config = { baseUrls: ['http://ui-server/'] })
     mockRedis()
     mockFetch(fetchConfig = {
       'http://ui-server': {
@@ -61,7 +61,7 @@ describe('Responses contain custom headers', function () {
     const response = await request(app.server).get('/meta')
     expect(response.body).to.have.length(2)
 
-    config.urls = []
+    config.baseUrls = []
     await import('../src/version.js').then(async ({ updateVersionProcessor }) => {
       // need to process two times to actually trigger the update
       await updateVersionProcessor()
@@ -91,7 +91,8 @@ describe('Responses contain custom headers', function () {
   describe('without redis disabled', function () {
     beforeEach(async function () {
       td.reset()
-      mockConfig({ urls: ['http://ui-server/'] })
+      mockConfig({ baseUrls: ['http://ui-server/'] })
+      mockRedis()
       mockFetch(fetchConfig = {
         'http://ui-server': {
           '/manifest.json': generateSimpleViteManifest({
diff --git a/spec/redirect_test.js b/spec/redirect_test.js
index 8e8ca1cfa5c00b4fe313926d51af59b9c966fef3..0baf75067eb07d7d5f0a2b9059dd73443f02ad94 100644
--- a/spec/redirect_test.js
+++ b/spec/redirect_test.js
@@ -8,7 +8,7 @@ describe('Redirects', function () {
   let app
 
   before(async function () {
-    mockConfig({ urls: ['http://ui-server/'] })
+    mockConfig({ baseUrls: ['http://ui-server/'] })
     mockRedis()
     mockFetch({
       'http://ui-server': {
diff --git a/spec/redis_test.js b/spec/redis_test.js
index d8c30c2d88b7ea77ae15fe11414548962b9522f1..cc51b841a1bcc795c2acf8ea089b27700708954b 100644
--- a/spec/redis_test.js
+++ b/spec/redis_test.js
@@ -1,5 +1,5 @@
 import request from 'supertest'
-import { generateSimpleViteManifest, mockApp, mockConfig, mockFetch } from './util.js'
+import { generateSimpleViteManifest, mockApp, mockConfig, mockFetch, mockRedis } from './util.js'
 import { expect } from 'chai'
 import * as td from 'testdouble'
 import sinon from 'sinon'
@@ -11,7 +11,8 @@ describe('Redis', function () {
   let spy
 
   beforeEach(async function () {
-    mockConfig({ urls: ['http://ui-server/'] })
+    mockConfig({ baseUrls: ['http://ui-server/'] })
+    mockRedis({}, false)
     mockFetch({
       'http://ui-server': {
         '/manifest.json': generateSimpleViteManifest({}),
diff --git a/spec/server_test.js b/spec/server_test.js
index b67e78bfc84c5da459e6f103d9cc2f9f34d78c2c..6c725c98246bded6f9f5330d29f89c0b51fbe940 100644
--- a/spec/server_test.js
+++ b/spec/server_test.js
@@ -9,7 +9,7 @@ describe('UI Middleware', function () {
   let fetchConfig
 
   beforeEach(async function () {
-    mockConfig({ urls: ['http://ui-server/'] })
+    mockConfig({ baseUrls: ['http://ui-server/'] })
     mockRedis()
     mockFetch(fetchConfig = {
       'http://ui-server': {
@@ -23,7 +23,6 @@ describe('UI Middleware', function () {
   afterEach(async function () {
     td.reset()
     await new RedisMock().flushdb()
-    process.env.CACHE_TTL = '30000'
   })
 
   it('fetches manifest data', async function () {
@@ -33,51 +32,33 @@ describe('UI Middleware', function () {
     expect(response.body).to.deep.equal([{ namespace: 'test', path: 'example' }])
   })
 
-  describe('when configuration changes', function () {
-    let prevConfig
-    beforeEach(async function () {
-      prevConfig = fetchConfig['http://ui-server']
-    })
-
-    afterEach(function () {
-      fetchConfig['http://ui-server'] = prevConfig
-    })
-
-    it('caches manifest data', async function () {
-      const response = await request(app.server).get('/manifests').parse(brotliParser)
-      expect(response.statusCode).to.equal(200)
-      expect(response.body).to.deep.equal([{ namespace: 'test', path: 'example' }])
+  it('caches manifest data when configuration changes', async function () {
+    const response = await request(app.server).get('/manifests').parse(brotliParser)
+    expect(response.statusCode).to.equal(200)
+    expect(response.body).to.deep.equal([{ namespace: 'test', path: 'example' }])
 
-      fetchConfig['http://ui-server'] = {
-        '/manifest.json': generateSimpleViteManifest({ 'example.js': 'other' }),
-        '/example.js': ''
-      }
+    fetchConfig['http://ui-server'] = {
+      '/manifest.json': generateSimpleViteManifest({ 'example.js': 'other' }),
+      '/example.js': ''
+    }
 
-      await new Promise(resolve => setTimeout(resolve, 150))
+    await new Promise(resolve => setTimeout(resolve, 150))
 
-      const response2 = await request(app.server).get('/manifests').parse(brotliParser)
-      expect(response2.statusCode).to.equal(200)
-      expect(response2.body).to.deep.equal([{ namespace: 'test', path: 'example' }])
-    })
+    const response2 = await request(app.server).get('/manifests').parse(brotliParser)
+    expect(response2.statusCode).to.equal(200)
+    expect(response2.body).to.deep.equal([{ namespace: 'test', path: 'example' }])
   })
 
   describe('multiple configurations', function () {
-    let prevApp
     beforeEach(async function () {
-      mockConfig({ urls: ['http://ui-server/', 'http://ui-server2/'] })
+      mockConfig({ baseUrls: ['http://ui-server/', 'http://ui-server2/'] })
       fetchConfig['http://ui-server2'] = {
         '/manifest.json': generateSimpleViteManifest({ 'example2.js': 'thing' }),
         '/example2.js': ''
       }
-      prevApp = app
       app = await mockApp()
     })
 
-    afterEach(function () {
-      delete fetchConfig['http://ui-server2']
-      app = prevApp
-    })
-
     it('can load multiple configurations', async function () {
       await request(app.server)
         .get('/manifests')
diff --git a/spec/util.js b/spec/util.js
index dbfe0e81806e53b0f03a6764cc0c600a5c675d95..23c361cf9272fe67621f6167b1b7d47769b857e9 100644
--- a/spec/util.js
+++ b/spec/util.js
@@ -2,6 +2,7 @@ import * as td from 'testdouble'
 import { register } from 'prom-client'
 import RedisMock from 'ioredis-mock'
 import zlib from 'node:zlib'
+import yaml from 'js-yaml'
 
 export function generateSimpleViteManifest (mapping) {
   const viteManifest = {}
@@ -18,7 +19,7 @@ export function generateSimpleViteManifest (mapping) {
 export function mockConfig (obj = {}) {
   td.replaceEsm('fs/promises', {}, {
     readFile () {
-      return `baseUrls:\n${obj.urls.map(u => `  - ${u}`).join('\n')}`
+      return yaml.dump(obj)
     }
   })
 }