diff --git a/releasetools.py b/releasetools.py
deleted file mode 100644
index 72af732..0000000
--- a/releasetools.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright (C) 2015 The CyanogenMod 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.
-
-"""Emit commands needed for TCL devices during OTA installation
-(installing images)."""
-
-import common
-import re
-import sha
-
-def FullOTA_Assertions(info):
-  print "FullOTA_Assertions not implemented"
-
-def IncrementalOTA_Assertions(info):
-  print "IncrementalOTA_Assertions not implemented"
-
-def InstallImage(img_name, img_file, partition, info):
-  common.ZipWriteStr(info.output_zip, img_name, img_file)
-  info.script.AppendExtra(('package_extract_file("' + img_name + '", "/dev/block/bootdevice/by-name/' + partition + '");'))
-
-image_partitions = {
-   'emmc_appsboot.mbn' : 'aboot',
-   'hyp.mbn'           : 'hyp',
-   'rpm.mbn'           : 'rpm',
-   'sbl1.mbn'          : 'sbl1',
-   'tz.mbn'            : 'tz'
-}
-
-def FullOTA_InstallEnd(info):
-  info.script.Print("Writing radio image...")
-  for k, v in image_partitions.iteritems():
-    try:
-      img_file = info.input_zip.read("RADIO/" + k)
-      info.script.Print("update image " + k + "...")
-      InstallImage(k, img_file, v, info)
-    except KeyError:
-      print "warning: no " + k + " image in input target_files; not flashing " + k
-
-
-def IncrementalOTA_InstallEnd(info):
-  for k, v in image_partitions.iteritems():
-    try:
-      source_file = info.source_zip.read("RADIO/" + k)
-      target_file = info.target_zip.read("RADIO/" + k)
-      if source_file != target_file:
-        InstallImage(k, target_file, v, info)
-      else:
-        print k + " image unchanged; skipping"
-    except KeyError:
-      print "warning: " + k + " image missing from target; not flashing " + k
\ No newline at end of file
