diff --git a/recipes/src/rom_fallback/content.mk b/recipes/src/rom_fallback/content.mk
deleted file mode 100644
index 047072d..0000000
--- a/recipes/src/rom_fallback/content.mk
+++ /dev/null
@@ -1,2 +0,0 @@
-SRC_DIR = src/server/rom_fallback
-include $(GENODE_DIR)/repos/base/recipes/src/content.inc
diff --git a/recipes/src/rom_fallback/hash b/recipes/src/rom_fallback/hash
deleted file mode 100644
index a39cae5..0000000
--- a/recipes/src/rom_fallback/hash
+++ /dev/null
@@ -1 +0,0 @@
-2017-08-28 20b7a65bfac6aed1c94285006623a5f35169e8bb
diff --git a/recipes/src/rom_fallback/used_apis b/recipes/src/rom_fallback/used_apis
deleted file mode 100644
index df967b9..0000000
--- a/recipes/src/rom_fallback/used_apis
+++ /dev/null
@@ -1 +0,0 @@
-base
diff --git a/run/rom_fallback.run b/run/rom_fallback.run
deleted file mode 100644
index f896314..0000000
--- a/run/rom_fallback.run
+++ /dev/null
@@ -1,86 +0,0 @@
-#
-# \brief Test of 'rom_fallback' server
-# \author Emery Hemingway
-# \date 2016-07-21
-#
-
-create_boot_directory
-
-import_from_depot \
- genodelabs/src/[base_src] \
- genodelabs/src/init \
- genodelabs/src/report_rom \
- genodelabs/src/rom_fallback \
-
-build { server/rom_fallback test/libc }
-
-append config {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-}
-
-install_config $config
-
-set boot_modules {
- rom_fallback
- libc.lib.so vfs.lib.so
- libm.lib.so
- posix.lib.so
- test-libc
-}
-
-build_boot_image $boot_modules
-
-append qemu_args " -nographic"
-
-run_genode_until {--- libC test ---} 60
diff --git a/src/server/rom_fallback/README b/src/server/rom_fallback/README
deleted file mode 100644
index 83d5fe1..0000000
--- a/src/server/rom_fallback/README
+++ /dev/null
@@ -1,22 +0,0 @@
-Rom_fallback serves ROM sessions by opening sessions at its parent using
-a list of labels and returning the first successfully opened session.
-
-In the following configuration example an attempt is made to forward
-sessions from the parent with a fallback at the sibling 'fs_rom'.
-!
-! <.../>
-!
-!
-!
-!
-!
-!
-!
-!
-!
-!
-!
-!
-! <.../>
-!
-!
diff --git a/src/server/rom_fallback/component.cc b/src/server/rom_fallback/component.cc
deleted file mode 100644
index 4a76d18..0000000
--- a/src/server/rom_fallback/component.cc
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * \brief Service fallback server
- * \author Emery Hemingway
- * \date 2016-07-21
- */
-
-/*
- * Copyright (C) 2016 Genode Labs GmbH
- *
- * This file is part of the Genode OS framework, which is distributed
- * under the terms of the GNU General Public License version 2.
- */
-
-/* TODO: ambiguated services */
-
-/* Genode includes */
-#include
-#include
-#include
-#include
-#include
-#include
-
-namespace Rom_fallback {
- using namespace Genode;
- struct Main;
-}
-
-struct Rom_fallback::Main
-{
- struct Fallback_label;
- typedef List Fallback_labels;
-
- struct Fallback_label : Session_label, Fallback_labels::Element
- {
- using Session_label::Session_label;
- };
-
- Fallback_labels fallbacks;
-
- struct Session : Parent::Server
- {
- Parent::Client parent_client;
-
- Id_space::Element client_id;
- Id_space::Element server_id;
-
- Session(Id_space &client_space,
- Id_space &server_space,
- Parent::Server::Id server_id)
- :
- client_id(parent_client, client_space),
- server_id(*this, server_space, server_id) { }
- };
-
- Id_space server_id_space;
-
- Env &env;
-
- Attached_rom_dataspace config_rom { env, "config" };
- Attached_rom_dataspace session_requests { env, "session_requests" };
-
- Heap heap { env.ram(), env.rm() };
-
- void load_config()
- {
- while (Fallback_label *f = fallbacks.first()) {
- fallbacks.remove(f);
- destroy(heap, f);
- }
-
- /* keep a pointer to last element of the list for inserting */
- Fallback_label *last = nullptr;
- config_rom.xml().for_each_sub_node("fallback", [&] (Xml_node node) {
- typedef String Label;
-
- Fallback_label *fallback = new (heap)
- Fallback_label(node.attribute_value("label", Label()).string());
- fallbacks.insert(fallback, last);
- last = fallback;
- });
- }
-
- void handle_session_request(Xml_node request);
-
- void handle_session_requests()
- {
- if (config_sig_rec.pending()) {
- do { config_sig_rec.pending_signal(); }
- while (config_sig_rec.pending());
- config_rom.update();
- load_config();
- }
-
- session_requests.update();
-
- Xml_node const requests = session_requests.xml();
-
- requests.for_each_sub_node([&] (Xml_node request) {
- handle_session_request(request);
- });
- }
-
- Signal_handler session_request_handler {
- env.ep(), *this, &Main::handle_session_requests };
-
- Signal_context config_sig_ctx;
- Signal_receiver config_sig_rec;
-
- Main(Genode::Env &env) : env(env)
- {
- load_config();
-
- config_rom.sigh(config_sig_rec.manage(&config_sig_ctx));
- session_requests.sigh(session_request_handler);
-
- /* handle requests that have queued before or during construction */
- handle_session_requests();
- }
-
- ~Main() {
- config_sig_rec.dissolve(&config_sig_ctx); }
-};
-
-
-void Rom_fallback::Main::handle_session_request(Xml_node request)
-{
- if (!request.has_attribute("id"))
- return;
-
- Parent::Server::Id const server_id { request.attribute_value("id", 0UL) };
-
- if (request.has_type("create")) {
-
- if (!request.has_sub_node("args"))
- return;
-
- typedef Session_state::Args Args;
- Args const args = request.sub_node("args").decoded_content();
-
- Session_label const original = label_from_args(args.string());
-
- enum { ARGS_MAX_LEN = 256 };
- char new_args[ARGS_MAX_LEN];
-
- for (Fallback_label *f = fallbacks.first(); f; f = f->next()) {
- Session_label &prefix = *f;
-
- /* create new label */
- Session_label const new_label = prefix == "" ?
- original : prefixed_label(prefix, original);
-
- /* create a new argument set */
- strncpy(new_args, args.string(), sizeof(new_args));
- Arg_string::set_arg_string(new_args, sizeof(new_args), "label",
- new_label.string());
-
- /* try this service */
- Session *session = nullptr;
- try {
- session = new (heap)
- Session(env.id_space(), server_id_space, server_id);
-
- Affinity aff;
- Session_capability cap =
- env.session("ROM", session->client_id.id(), new_args, aff);
-
- env.parent().deliver_session_cap(server_id, cap);
- return;
- }
-
- catch (Service_denied) {
- warning("'", new_label, "' was denied"); }
-
- catch (Insufficient_ram_quota) {
- warning("'", new_label, "' RAM quota donation was insufficient"); }
-
- catch (Insufficient_cap_quota) {
- warning("'", new_label, "' cap quota donation was insufficient"); }
-
- if (session)
- destroy(heap, session);
- }
-
- error("no service found for ROM '", original.string(), "'");
- env.parent().session_response(server_id, Parent::SERVICE_DENIED);
- }
-
- if (request.has_type("upgrade")) {
-
- server_id_space.apply(server_id, [&] (Session &session) {
-
- Ram_quota ram_quota { request.attribute_value("ram_quota", 0UL) };
- Cap_quota cap_quota { request.attribute_value("cap_quota", 0UL) };
-
- String<80> args("ram_quota=", ram_quota, ", cap_quota=", cap_quota);
-
- env.upgrade(session.client_id.id(), args.string());
- env.parent().session_response(server_id, Parent::SESSION_OK);
- });
- }
-
- if (request.has_type("close")) {
- server_id_space.apply(server_id, [&] (Session &session) {
- env.close(session.client_id.id());
- destroy(heap, &session);
- env.parent().session_response(server_id, Parent::SESSION_CLOSED);
- });
- }
-
-}
-
-
-void Component::construct(Genode::Env &env)
-{
- static Rom_fallback::Main inst(env);
-
- env.parent().announce("ROM");
-}
diff --git a/src/server/rom_fallback/target.mk b/src/server/rom_fallback/target.mk
deleted file mode 100644
index 5479894..0000000
--- a/src/server/rom_fallback/target.mk
+++ /dev/null
@@ -1,5 +0,0 @@
-TARGET = rom_fallback
-SRC_CC = component.cc
-LIBS = base
-
-CC_CXX_WARN_STRICT =