diff --git a/BoardConfigCommon.mk b/BoardConfigCommon.mk
index 25b0115..90c8cca 100644
--- a/BoardConfigCommon.mk
+++ b/BoardConfigCommon.mk
@@ -74,10 +74,6 @@
 # Recovery
 BOARD_HAS_DOWNLOAD_MODE := true
 
-# Releasetools
-TARGET_RECOVERY_UPDATER_LIBS := librecovery_updater_universal7904
-TARGET_RELEASETOOLS_EXTENSIONS := $(COMMON_PATH)
-
 # RIL
 ENABLE_VENDOR_RIL_SERVICE := true
 
diff --git a/recovery/Android.bp b/recovery/Android.bp
deleted file mode 100644
index b8dca40..0000000
--- a/recovery/Android.bp
+++ /dev/null
@@ -1,28 +0,0 @@
-//
-// Copyright (C) 2021 The LineageOS Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-cc_library_static {
-    name: "librecovery_updater_universal7904",
-    srcs: [
-        "recovery_updater.cpp",
-    ],
-    header_libs: ["libbase_headers"],
-    include_dirs: [
-        "bootable/recovery",
-        "bootable/recovery/edify/include",
-        "bootable/recovery/otautil/include"
-    ],
-}
diff --git a/recovery/recovery_updater.cpp b/recovery/recovery_updater.cpp
deleted file mode 100644
index c1e522f..0000000
--- a/recovery/recovery_updater.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2021, The LineageOS Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <android-base/properties.h>
-
-#include "edify/expr.h"
-#include "otautil/error_code.h"
-
-Value *VerifyBootloader(const char *name, State *state,
-                        const std::vector<std::unique_ptr<Expr>> &argv) {
-  int ret = 0;
-  std::string bootloader = android::base::GetProperty("ro.boot.bootloader", "");
-  if (bootloader.empty()) {
-    return ErrorAbort(state, kFileGetPropFailure,
-                      "%s() failed to read current bootloader version", name);
-  }
-
-  std::string min_supported_bootloader_arg;
-  if (argv.empty() || !Evaluate(state, argv[0], &min_supported_bootloader_arg)) {
-    return ErrorAbort(state, kArgsParsingFailure,
-                      "%s() error parsing arguments", name);
-  }
-  int min_supported_bootloader = int(min_supported_bootloader_arg[0]);
-
-  int version = 0;
-  if (bootloader.length() >= 4)
-    version = int(bootloader[bootloader.length() - 4]);
-
-  if (version >= min_supported_bootloader) {
-    ret = 1;
-  }
-
-  return StringValue(std::to_string(ret));
-}
-
-void Register_librecovery_updater_universal7904() {
-  RegisterFunction("universal7904.verify_bootloader_min", VerifyBootloader);
-}
diff --git a/releasetools.py b/releasetools.py
deleted file mode 100644
index dc89f10..0000000
--- a/releasetools.py
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/bin/env python3
-#
-# Copyright (C) 2021 The LineageOS Project
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import common
-import re
-
-def FullOTA_Assertions(info):
-  android_info = info.input_zip.read("OTA/android-info.txt")
-  m = re.search(r'require\s+version-bootloader-min\s*=\s*(\S+)', android_info)
-  if m:
-    bootloader_version = m.group(1)
-    cmd = ('assert(universal7904.verify_bootloader_min("{}") == "1" || abort("ERROR: This package requires Android 10 or 11 based firmware. Please upgrade firmware and retry!"););').format(bootloader_version)
-    info.script.AppendExtra(cmd)
