diff --git a/build/tools/roomservice.py b/build/tools/roomservice.py
index 8f3641f..60fccd0 100755
--- a/build/tools/roomservice.py
+++ b/build/tools/roomservice.py
@@ -113,6 +113,22 @@
                 yield project
 
 
+def iterate_manifests_remove_project():
+    files = []
+    for file in os.listdir(local_manifest_dir):
+        if file.endswith(".xml"):
+            files.append(os.path.join(local_manifest_dir, file))
+    files.append('.repo/manifest.xml')
+    for file in files:
+        try:
+            man = ES.parse(file)
+            man = man.getroot()
+        except (IOError, ES.ParseError):
+            print("WARNING: error while parsing %s" % file)
+        else:
+            for project in man.findall("remove-project"):
+                yield project
+
 def check_project_exists(url, revision, path):
     for project in iterate_manifests():
         if project.get("name") == url \
@@ -122,6 +138,12 @@
     return False
 
 
+def check_remove_project_exists(url):
+    for project in iterate_manifests_remove_project():
+        if project.get("name") == url:
+            return True
+    return False
+
 def check_target_exists(directory):
     return os.path.isdir(directory)
 
@@ -160,6 +182,17 @@
                          })
     return project
 
+def create_remove_project(url):
+    remove_project_exists = check_remove_project_exists(url)
+
+    if remove_project_exists:
+        return None
+
+    project = ES.Element("remove-project",
+                         attrib={
+                             "name": url
+                         })
+    return project
 
 def append_to_manifest(project):
     try:
@@ -259,6 +292,15 @@
         target_path = dependency.get("target_path")
         revision = dependency.get("revision", default_rev)
         remote = dependency.get("remote", default_rem)
+        override = dependency.get("override", None)
+        
+        if override is not None:
+            #print("found override in ", repository)
+            project = create_remove_project(repository)
+            if project is not None:
+                manifest = append_to_manifest(project)
+                #print(ES.tostring(manifest).decode())
+                write_to_manifest(manifest)
 
         # not adding an organization should default to android_team
         # only apply this to github
