diff --git a/util/docker/stations/icecast/web/fallback-[128].mp3 b/util/docker/stations/icecast/web/fallback-[128].mp3
new file mode 100644
index 000000000..b56dba968
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[128].mp3 differ
diff --git a/util/docker/stations/icecast/web/fallback-[128].mp4 b/util/docker/stations/icecast/web/fallback-[128].mp4
new file mode 100644
index 000000000..e366ce9d9
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[128].mp4 differ
diff --git a/util/docker/stations/icecast/web/fallback-[128].ogg b/util/docker/stations/icecast/web/fallback-[128].ogg
new file mode 100644
index 000000000..340ef0ba9
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[128].ogg differ
diff --git a/util/docker/stations/icecast/web/fallback-[128].opus b/util/docker/stations/icecast/web/fallback-[128].opus
new file mode 100644
index 000000000..9be9ad788
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[128].opus differ
diff --git a/util/docker/stations/icecast/web/fallback-[192].mp3 b/util/docker/stations/icecast/web/fallback-[192].mp3
new file mode 100644
index 000000000..3d6e79097
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[192].mp3 differ
diff --git a/util/docker/stations/icecast/web/fallback-[192].mp4 b/util/docker/stations/icecast/web/fallback-[192].mp4
new file mode 100644
index 000000000..53baf7b98
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[192].mp4 differ
diff --git a/util/docker/stations/icecast/web/fallback-[192].ogg b/util/docker/stations/icecast/web/fallback-[192].ogg
new file mode 100644
index 000000000..ded0c408d
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[192].ogg differ
diff --git a/util/docker/stations/icecast/web/fallback-[192].opus b/util/docker/stations/icecast/web/fallback-[192].opus
new file mode 100644
index 000000000..9b1e8dd1c
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[192].opus differ
diff --git a/util/docker/stations/icecast/web/fallback-[256].mp3 b/util/docker/stations/icecast/web/fallback-[256].mp3
new file mode 100644
index 000000000..102b8b234
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[256].mp3 differ
diff --git a/util/docker/stations/icecast/web/fallback-[256].mp4 b/util/docker/stations/icecast/web/fallback-[256].mp4
new file mode 100644
index 000000000..5618a8176
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[256].mp4 differ
diff --git a/util/docker/stations/icecast/web/fallback-[256].ogg b/util/docker/stations/icecast/web/fallback-[256].ogg
new file mode 100644
index 000000000..7babd91c1
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[256].ogg differ
diff --git a/util/docker/stations/icecast/web/fallback-[256].opus b/util/docker/stations/icecast/web/fallback-[256].opus
new file mode 100644
index 000000000..b355bc618
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[256].opus differ
diff --git a/util/docker/stations/icecast/web/fallback-[320].mp3 b/util/docker/stations/icecast/web/fallback-[320].mp3
new file mode 100644
index 000000000..c0cf9cbdb
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[320].mp3 differ
diff --git a/util/docker/stations/icecast/web/fallback-[320].mp4 b/util/docker/stations/icecast/web/fallback-[320].mp4
new file mode 100644
index 000000000..c014b4553
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[320].mp4 differ
diff --git a/util/docker/stations/icecast/web/fallback-[320].ogg b/util/docker/stations/icecast/web/fallback-[320].ogg
new file mode 100644
index 000000000..995b00fb9
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[320].ogg differ
diff --git a/util/docker/stations/icecast/web/fallback-[320].opus b/util/docker/stations/icecast/web/fallback-[320].opus
new file mode 100644
index 000000000..9180e0cc6
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[320].opus differ
diff --git a/util/docker/stations/icecast/web/fallback-[32].mp3 b/util/docker/stations/icecast/web/fallback-[32].mp3
new file mode 100644
index 000000000..31ccc5a11
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[32].mp3 differ
diff --git a/util/docker/stations/icecast/web/fallback-[32].mp4 b/util/docker/stations/icecast/web/fallback-[32].mp4
new file mode 100644
index 000000000..0093c5a3b
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[32].mp4 differ
diff --git a/util/docker/stations/icecast/web/fallback-[32].opus b/util/docker/stations/icecast/web/fallback-[32].opus
new file mode 100644
index 000000000..6ed2a8adc
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[32].opus differ
diff --git a/util/docker/stations/icecast/web/fallback-[48].mp3 b/util/docker/stations/icecast/web/fallback-[48].mp3
new file mode 100644
index 000000000..d6da644ed
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[48].mp3 differ
diff --git a/util/docker/stations/icecast/web/fallback-[48].mp4 b/util/docker/stations/icecast/web/fallback-[48].mp4
new file mode 100644
index 000000000..2bd44c6c2
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[48].mp4 differ
diff --git a/util/docker/stations/icecast/web/fallback-[48].ogg b/util/docker/stations/icecast/web/fallback-[48].ogg
new file mode 100644
index 000000000..45c5b3ea8
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[48].ogg differ
diff --git a/util/docker/stations/icecast/web/fallback-[48].opus b/util/docker/stations/icecast/web/fallback-[48].opus
new file mode 100644
index 000000000..ae8e33e14
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[48].opus differ
diff --git a/util/docker/stations/icecast/web/fallback-[64].mp3 b/util/docker/stations/icecast/web/fallback-[64].mp3
new file mode 100644
index 000000000..48c4eedb1
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[64].mp3 differ
diff --git a/util/docker/stations/icecast/web/fallback-[64].mp4 b/util/docker/stations/icecast/web/fallback-[64].mp4
new file mode 100644
index 000000000..90aed5533
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[64].mp4 differ
diff --git a/util/docker/stations/icecast/web/fallback-[64].ogg b/util/docker/stations/icecast/web/fallback-[64].ogg
new file mode 100644
index 000000000..5913bc0a6
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[64].ogg differ
diff --git a/util/docker/stations/icecast/web/fallback-[64].opus b/util/docker/stations/icecast/web/fallback-[64].opus
new file mode 100644
index 000000000..ffc0bc90c
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[64].opus differ
diff --git a/util/docker/stations/icecast/web/fallback-[96].mp3 b/util/docker/stations/icecast/web/fallback-[96].mp3
new file mode 100644
index 000000000..b4ad52e69
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[96].mp3 differ
diff --git a/util/docker/stations/icecast/web/fallback-[96].mp4 b/util/docker/stations/icecast/web/fallback-[96].mp4
new file mode 100644
index 000000000..58034bc16
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[96].mp4 differ
diff --git a/util/docker/stations/icecast/web/fallback-[96].ogg b/util/docker/stations/icecast/web/fallback-[96].ogg
new file mode 100644
index 000000000..5635d6145
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[96].ogg differ
diff --git a/util/docker/stations/icecast/web/fallback-[96].opus b/util/docker/stations/icecast/web/fallback-[96].opus
new file mode 100644
index 000000000..6d521937d
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback-[96].opus differ
diff --git a/util/docker/stations/icecast/web/fallback.flac b/util/docker/stations/icecast/web/fallback.flac
new file mode 100644
index 000000000..d3abdc19e
Binary files /dev/null and b/util/docker/stations/icecast/web/fallback.flac differ
diff --git a/util/docker/stations/icecast/web/status-json.xsl b/util/docker/stations/icecast/web/status-json.xsl
new file mode 100644
index 000000000..d2cbfcba8
--- /dev/null
+++ b/util/docker/stations/icecast/web/status-json.xsl
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+true
+
+
+"dummy":null}
+"dummy":null}
+"dummy":null}
+"dummy":null}
+"dummy":null}
+"dummy":null}
+"dummy":null}
+
+
+"dummy":null}
+"dummy":null}
+"dummy":null}
+"dummy":null}
+"dummy":null}
+
+
diff --git a/util/docker/stations/icecast/web/xml2json.xslt b/util/docker/stations/icecast/web/xml2json.xslt
new file mode 100644
index 000000000..96233be9d
--- /dev/null
+++ b/util/docker/stations/icecast/web/xml2json.xslt
@@ -0,0 +1,215 @@
+
+
+
+
+
+
+
+ false
+
+
+ 0123456789
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ "
+
+
+
+ "
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ false
+
+
+
+
+
+
+
+
+ [
+
+ ,
+
+
+ null
+
+
+
+
+
+
+ ]
+
+
+
+
+
+ {
+
+
+
+
+
+ :[
+
+ ,
+
+
+ null
+
+
+
+
+
+
+ ]
+ ,
+
+ }
+
+
+
+
+ {
+
+
+
+ :
+
+
+
+ null
+
+
+
+
+
+
+ ,
+ }
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/util/docker/stations/liquidsoap/generate_fallback_files.liq b/util/docker/stations/liquidsoap/generate_fallback_files.liq
new file mode 100644
index 000000000..00d54d5e6
--- /dev/null
+++ b/util/docker/stations/liquidsoap/generate_fallback_files.liq
@@ -0,0 +1,35 @@
+input = once(single("fallback.flac"));
+
+clock.assign_new(sync="none",[input])
+
+output.file(%mp3(samplerate=44100, stereo=true, bitrate=32, id3v2=true), "fallback-[32].mp3", input, fallible=true)
+output.file(%mp3(samplerate=44100, stereo=true, bitrate=48, id3v2=true), "fallback-[48].mp3", input, fallible=true)
+output.file(%mp3(samplerate=44100, stereo=true, bitrate=64, id3v2=true), "fallback-[64].mp3", input, fallible=true)
+output.file(%mp3(samplerate=44100, stereo=true, bitrate=96, id3v2=true), "fallback-[96].mp3", input, fallible=true)
+output.file(%mp3(samplerate=44100, stereo=true, bitrate=128, id3v2=true), "fallback-[128].mp3", input, fallible=true)
+output.file(%mp3(samplerate=44100, stereo=true, bitrate=192, id3v2=true), "fallback-[192].mp3", input, fallible=true)
+output.file(%mp3(samplerate=44100, stereo=true, bitrate=256, id3v2=true), "fallback-[256].mp3", input, fallible=true)
+output.file(%mp3(samplerate=44100, stereo=true, bitrate=320, id3v2=true), "fallback-[320].mp3", input, fallible=true)
+output.file(%vorbis.cbr(samplerate=44100, channels=2, bitrate=48), "fallback-[48].ogg", input, fallible=true)
+output.file(%vorbis.cbr(samplerate=44100, channels=2, bitrate=64), "fallback-[64].ogg", input, fallible=true)
+output.file(%vorbis.cbr(samplerate=44100, channels=2, bitrate=96), "fallback-[96].ogg", input, fallible=true)
+output.file(%vorbis.cbr(samplerate=44100, channels=2, bitrate=128), "fallback-[128].ogg", input, fallible=true)
+output.file(%vorbis.cbr(samplerate=44100, channels=2, bitrate=192), "fallback-[192].ogg", input, fallible=true)
+output.file(%vorbis.cbr(samplerate=44100, channels=2, bitrate=256), "fallback-[256].ogg", input, fallible=true)
+output.file(%vorbis.cbr(samplerate=44100, channels=2, bitrate=320), "fallback-[320].ogg", input, fallible=true)
+output.file(%fdkaac(channels=2, samplerate=44100, bitrate=32, afterburner=false, aot="mpeg4_he_aac_v2", sbr_mode=true), "fallback-[32].mp4", input, fallible=true)
+output.file(%fdkaac(channels=2, samplerate=44100, bitrate=48, afterburner=false, aot="mpeg4_he_aac_v2", sbr_mode=true), "fallback-[48].mp4", input, fallible=true)
+output.file(%fdkaac(channels=2, samplerate=44100, bitrate=64, afterburner=false, aot="mpeg4_he_aac_v2", sbr_mode=true), "fallback-[64].mp4", input, fallible=true)
+output.file(%fdkaac(channels=2, samplerate=44100, bitrate=96, afterburner=false, aot="mpeg4_aac_lc", sbr_mode=true), "fallback-[96].mp4", input, fallible=true)
+output.file(%fdkaac(channels=2, samplerate=44100, bitrate=128, afterburner=false, aot="mpeg4_aac_lc", sbr_mode=true), "fallback-[128].mp4", input, fallible=true)
+output.file(%fdkaac(channels=2, samplerate=44100, bitrate=192, afterburner=true, aot="mpeg4_aac_lc", sbr_mode=true), "fallback-[192].mp4", input, fallible=true)
+output.file(%fdkaac(channels=2, samplerate=44100, bitrate=256, afterburner=true, aot="mpeg4_aac_lc", sbr_mode=true), "fallback-[256].mp4", input, fallible=true)
+output.file(%fdkaac(channels=2, samplerate=44100, bitrate=320, afterburner=true, aot="mpeg4_aac_lc", sbr_mode=true), "fallback-[320].mp4", input, fallible=true)
+output.file(%opus(samplerate=48000, bitrate=32, vbr="constrained", application="audio", channels=2, signal="music", complexity=10, max_bandwidth="full_band"), "fallback-[32].opus", input, fallible=true)
+output.file(%opus(samplerate=48000, bitrate=48, vbr="constrained", application="audio", channels=2, signal="music", complexity=10, max_bandwidth="full_band"), "fallback-[48].opus", input, fallible=true)
+output.file(%opus(samplerate=48000, bitrate=64, vbr="constrained", application="audio", channels=2, signal="music", complexity=10, max_bandwidth="full_band"), "fallback-[64].opus", input, fallible=true)
+output.file(%opus(samplerate=48000, bitrate=96, vbr="constrained", application="audio", channels=2, signal="music", complexity=10, max_bandwidth="full_band"), "fallback-[96].opus", input, fallible=true)
+output.file(%opus(samplerate=48000, bitrate=128, vbr="constrained", application="audio", channels=2, signal="music", complexity=10, max_bandwidth="full_band"), "fallback-[128].opus", input, fallible=true)
+output.file(%opus(samplerate=48000, bitrate=192, vbr="constrained", application="audio", channels=2, signal="music", complexity=10, max_bandwidth="full_band"), "fallback-[192].opus", input, fallible=true)
+output.file(%opus(samplerate=48000, bitrate=256, vbr="constrained", application="audio", channels=2, signal="music", complexity=10, max_bandwidth="full_band"), "fallback-[256].opus", input, fallible=true)
+output.file(%opus(samplerate=48000, bitrate=320, vbr="constrained", application="audio", channels=2, signal="music", complexity=10, max_bandwidth="full_band"), "fallback-[320].opus", input, fallible=true)
diff --git a/util/docker/stations/setup/icecast.sh b/util/docker/stations/setup/icecast.sh
index 568365c3e..f665880f6 100644
--- a/util/docker/stations/setup/icecast.sh
+++ b/util/docker/stations/setup/icecast.sh
@@ -6,13 +6,18 @@ set -x
apt-get install -q -y --no-install-recommends \
build-essential libxml2 libxslt1-dev libvorbis-dev libssl-dev libcurl4-openssl-dev openssl
-mkdir -p /bd_build/stations/icecast
-cd /bd_build/stations/icecast
+mkdir -p /bd_build/stations/icecast_build
+cd /bd_build/stations/icecast_build
+
+git clone https://github.com/karlheyes/icecast-kh.git .
+git checkout 4e3a1ae935c2d002aa54f218465125989e563dd5
-curl -fsSL -o icecast.tar.gz https://github.com/AzuraCast/icecast-kh-ac/archive/refs/tags/2.4.0-kh15-ac2.tar.gz
-tar -xzvf icecast.tar.gz --strip-components=1
./configure
make
make install
+# Remove build tools
apt-get remove --purge -y build-essential libssl-dev libcurl4-openssl-dev
+
+# Copy AzuraCast Icecast customizations
+cp -r /bd_build/stations/icecast/web /usr/local/share/icecast/web