diff --git a/patch/all/build/xpidl-makefile.sh b/patch/all/build/xpidl-makefile.sh
new file mode 100644
index 0000000000000000000000000000000000000000..368350d9fe4a8ecbb56d67cc296d4425054e6e46
--- /dev/null
+++ b/patch/all/build/xpidl-makefile.sh
@@ -0,0 +1,3 @@
+MYLOC=$(dirname ${BASH_SOURCE[0]})
+cp ${MYLOC}/xpidl.mk core/
+git_add core/xpidl.mk
diff --git a/patch/all/build/xpidl.mk b/patch/all/build/xpidl.mk
new file mode 100644
index 0000000000000000000000000000000000000000..347e9bf5dd3534d4444cc8c58a9229974441b4fa
--- /dev/null
+++ b/patch/all/build/xpidl.mk
@@ -0,0 +1,99 @@
+
+#
+# Makefile to hook into Android.mk for building XPCOM IDLs
+# and typelibs, along with installing build artifacts into Gecko
+#
+
+ifneq ($(LOCAL_XPCOM_IDLS),)
+
+XPIDL_MODULE := $(LOCAL_MODULE)
+# The directory where this component's intermediates will be put by Android build system
+XPIDL_MODULE_OBJDIR := $(TARGET_OUT_INTERMEDIATES)/SHARED_LIBRARIES/$(XPIDL_MODULE)_intermediates
+# The directory where all the objs generated by idl compilation will go
+XPIDL_OUT := $(XPIDL_MODULE_OBJDIR)/xpidl_obj
+
+# Home directory of the module source
+XPIDL_PATH := $(LOCAL_PATH)
+
+# Make sure Gecko is built prior to the component
+LOCAL_REQUIRED_MODULES := $(LOCAL_REQUIRED_MODULES) gecko
+
+# Add Gecko headers to include path
+LOCAL_C_INCLUDES := $(LOCAL_C_INCLUDES) $(ANDROID_PRODUCT_OUT)/obj/objdir-gecko/dist/include
+# Standard libraries required by all XPCOM components
+LOCAL_SHARED_LIBRARIES := $(LOCAL_SHARED_LIBRARIES) libxpcom
+LOCAL_STATIC_LIBRARIES := $(LOCAL_STATIC_LIBRARIES) libxpcomglue_s libmozalloc
+# Gecko locations
+GECKO_DIR := $(ANDROID_BUILD_TOP)/gecko
+GECKO_OBJDIR := $(ANDROID_PRODUCT_OUT)/obj/objdir-gecko
+LIBXUL_DIST := $(GECKO_OBJDIR)/dist
+
+# Flags to be used by idl compilation
+XPIDL_FLAGS := -I$(XPIDL_PATH) -I$(LIBXUL_DIST)/idl
+
+xpidl_prereqs:
+	@mkdir -p $(XPIDL_OUT)
+
+XPIDL_DEPS := $(TARGET_OUT_INTERMEDIATES)/lib/libxpcom.so \
+              $(LIBXUL_DIST)/sdk/bin/header.py \
+              $(LIBXUL_DIST)/sdk/bin/typelib.py \
+              $(LIBXUL_DIST)/sdk/bin/xpidl.py \
+
+PLY_INCLUDE := -I$(GECKO_DIR)/other-licenses/ply
+
+# When used within make target rule, prints out the
+# filename of the first dependency
+REPORT_BUILD = @echo $(notdir $<)
+
+# When used within make target rule, expands the first pre-requisite
+# to its absolute path.
+CURRENT_IDLS = $(abspath $<)
+
+PYTHON := python
+PYTHON_PATH := $(PYTHON) $(GECKO_DIR)/config/pythonpath.py
+XPIDL_LINK := $(PYTHON) $(LIBXUL_DIST)/sdk/bin/xpt.py link
+FINAL_TARGET := $(LIBXUL_DIST)/bin
+
+INSTALL := install
+INSTALL_FLAGS := -m 644
+
+# Make the module being built by Android.mk depend on the following:
+# 1. The .h corresponding to the .idls found in the directory
+# 2. The corresponding .xpt files
+# 3. The overall module .xpt file
+# 4. The export rules to copy idls and headers to $(LIBXUL_DIST)
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_ADDITIONAL_DEPENDENCIES) $(patsubst %.idl,$(XPIDL_OUT)/%.h,$(LOCAL_XPCOM_IDLS))
+LOCAL_ADDITIONAL_DEPENDENCIES :=	$(LOCAL_ADDITIONAL_DEPENDENCIES) $(patsubst %.idl,$(XPIDL_OUT)/%.xpt,$(LOCAL_XPCOM_IDLS))
+LOCAL_ADDITIONAL_DEPENDENCIES :=	$(LOCAL_ADDITIONAL_DEPENDENCIES) $(XPIDL_OUT)/$(XPIDL_MODULE).xpt
+LOCAL_ADDITIONAL_DEPENDENCIES := $(LOCAL_ADDITIONAL_DEPENDENCIES) export_headers export_idls
+
+$(XPIDL_OUT)/%.h: $(XPIDL_PATH)/%.idl $(XPIDL_DEPS) xpidl_prereqs
+	$(warning XPIDL_OUT: $(XPIDL_OUT), LOCAL_MODULE: $(LOCAL_MODULE))
+	$(warning XPIDL_PATH is $(XPIDL_PATH))
+	$(REPORT_BUILD)
+	$(PYTHON_PATH) $(PLY_INCLUDE) $(LIBXUL_DIST)/sdk/bin/header.py $(XPIDL_FLAGS) $(CURRENT_IDLS) -o $@
+
+# generate intermediate .xpt files into $(XPIDL_OUT), then link
+# into $(XPIDL_MODULE).xpt and export it to $(FINAL_TARGET)/components.
+$(XPIDL_OUT)/%.xpt: $(XPIDL_PATH)/%.idl $(XPIDL_DEPS) xpidl_prereqs
+	$(REPORT_BUILD)
+	$(PYTHON_PATH) $(PLY_INCLUDE) -I$(GECKO_DIR)/xpcom/typelib/xpt/tools $(LIBXUL_DIST)/sdk/bin/typelib.py $(XPIDL_FLAGS) $(CURRENT_IDLS) -o $@
+
+$(XPIDL_OUT)/$(XPIDL_MODULE).xpt: $(patsubst %.idl,$(XPIDL_OUT)/%.xpt,$(LOCAL_XPCOM_IDLS))
+	$(XPIDL_LINK) $(XPIDL_OUT)/$(XPIDL_MODULE).xpt $(patsubst %.idl,$(XPIDL_OUT)/%.xpt,$(LOCAL_XPCOM_IDLS))
+	$(INSTALL) $(INSTALL_FLAGS) $(XPIDL_OUT)/$(XPIDL_MODULE).xpt $(FINAL_TARGET)/components
+	@$(PYTHON) $(GECKO_DIR)/config/buildlist.py $(FINAL_TARGET)/components/interfaces.manifest "interfaces $(XPIDL_MODULE).xpt"
+	@$(PYTHON) $(GECKO_DIR)/config/buildlist.py $(FINAL_TARGET)/chrome.manifest "manifest components/interfaces.manifest"
+	@$(PYTHON) $(GECKO_DIR)/config/buildlist.py $(FINAL_TARGET)/chrome.manifest "manifest components/$(XPIDL_MODULE).manifest"
+
+include $(BUILD_SHARED_LIBRARY)
+
+# export .idl files to dist idl dir
+export_idls: $(XPIDL_PATH)/$(LOCAL_XPCOM_IDLS) $(LIBXUL_DIST)/idl
+	$(INSTALL) $(INSTALL_FLAGS) $^
+
+export_headers: $(XPIDL_OUT)/$(patsubst %.idl,%.h, $(LOCAL_XPCOM_IDLS)) $(LIBXUL_DIST)/include
+	$(INSTALL) $(INSTALL_FLAGS) $^
+
+
+endif # LOCAL_XPCOM_IDLS
diff --git a/patch/all/gonk-misc/gonk-add-xpcom-libs.patch b/patch/all/gonk-misc/gonk-add-xpcom-libs.patch
index 702942625a89a12dd2ff87d973be13789db6f5b4..e7f0133370165880fe94c0643bfa81b5394d8c34 100644
--- a/patch/all/gonk-misc/gonk-add-xpcom-libs.patch
+++ b/patch/all/gonk-misc/gonk-add-xpcom-libs.patch
@@ -1,19 +1,25 @@
 diff --git a/Android.mk b/Android.mk
-index ff70708..2e863ac 100644
+index 0d5315e..895e988 100644
 --- a/Android.mk
 +++ b/Android.mk
-@@ -96,6 +96,10 @@ GECKO_LIB_DEPS := \
+@@ -117,8 +117,16 @@ GECKO_LIB_DEPS := \
  	libsensorservice.so \
  	libsysutils.so \
  
++$(TARGET_OUT_INTERMEDIATES)/lib/libxpcomglue_s.a: $(LOCAL_BUILT_MODULE)
 +$(TARGET_OUT_INTERMEDIATES)/STATIC_LIBRARIES/libxpcomglue_s_intermediates/libxpcomglue_s.a: $(LOCAL_BUILT_MODULE)
++$(TARGET_OUT_INTERMEDIATES)/lib/libxpcom.so: $(LOCAL_BUILT_MODULE)
 +$(TARGET_OUT_INTERMEDIATES)/SHARED_LIBRARIES/libxpcom_intermediates/libxpcom.so: $(LOCAL_BUILT_MODULE)
++$(TARGET_OUT_INTERMEDIATES)/lib/libmozalloc.a: $(LOCAL_BUILT_MODULE)
 +$(TARGET_OUT_INTERMEDIATES)/STATIC_LIBRARIES/libmozalloc_intermediates/libmozalloc.a: $(LOCAL_BUILT_MODULE)
 +
  .PHONY: $(LOCAL_BUILT_MODULE)
  $(LOCAL_BUILT_MODULE): $(TARGET_CRTBEGIN_DYNAMIC_O) $(TARGET_CRTEND_O) $(addprefix $(TARGET_OUT_SHARED_LIBRARIES)/,$(GECKO_LIB_DEPS))
++	$(warning Building gecko)
  	export CONFIGURE_ARGS="$(GECKO_CONFIGURE_ARGS)" && \
-@@ -112,4 +116,10 @@ $(LOCAL_BUILT_MODULE): $(TARGET_CRTBEGIN_DYNAMIC_O) $(TARGET_CRTEND_O) $(addpref
+ 	export GONK_PRODUCT="$(TARGET_DEVICE)" && \
+ 	export TARGET_ARCH="$(TARGET_ARCH)" && \
+@@ -133,4 +141,13 @@ $(LOCAL_BUILT_MODULE): $(TARGET_CRTBEGIN_DYNAMIC_O) $(TARGET_CRTEND_O) $(addpref
  	echo $(MAKE) -C $(GECKO_PATH) -f client.mk -s && \
  	$(MAKE) -C $(GECKO_PATH) -f client.mk -s && \
  	$(MAKE) -C $(GECKO_OBJDIR) package && \
@@ -21,7 +27,10 @@ index ff70708..2e863ac 100644
 +	mkdir -p $(@D) && cp $(GECKO_OBJDIR)/dist/b2g-*.tar.gz $@ && \
 +	mkdir -p $(TARGET_OUT_INTERMEDIATES)/STATIC_LIBRARIES/libxpcomglue_s_intermediates && \
 +	cp $(GECKO_OBJDIR)/dist/lib/libxpcomglue_s.a $(TARGET_OUT_INTERMEDIATES)/STATIC_LIBRARIES/libxpcomglue_s_intermediates/libxpcomglue_s.a && \
++	cp $(GECKO_OBJDIR)/dist/lib/libxpcomglue_s.a $(TARGET_OUT_INTERMEDIATES)/lib/libxpcomglue_s.a && \
 +	mkdir -p $(TARGET_OUT_INTERMEDIATES)/SHARED_LIBRARIES/libxpcom_intermediates && \
 +	cp $(GECKO_OBJDIR)/dist/lib/libxpcom.so $(TARGET_OUT_INTERMEDIATES)/SHARED_LIBRARIES/libxpcom_intermediates/libxpcom.so && \
++	cp $(GECKO_OBJDIR)/dist/lib/libxpcom.so $(TARGET_OUT_INTERMEDIATES)/lib/libxpcom.so && \
 +	mkdir -p $(TARGET_OUT_INTERMEDIATES)/STATIC_LIBRARIES/libmozalloc_intermediates && \
 +	cp $(GECKO_OBJDIR)/dist/lib/libmozalloc.a $(TARGET_OUT_INTERMEDIATES)/STATIC_LIBRARIES/libmozalloc_intermediates/libmozalloc.a
++	cp $(GECKO_OBJDIR)/dist/lib/libmozalloc.a $(TARGET_OUT_INTERMEDIATES)/lib/libmozalloc.a
diff --git a/vendorsetup.sh b/vendorsetup.sh
index 72fb8955011f5dbd93b0602778579b2dd8b67b3b..08226eee1d74ae030627cf00923e5f90afe9899b 100644
--- a/vendorsetup.sh
+++ b/vendorsetup.sh
@@ -161,7 +161,6 @@ __patch_tree()
                      case $P in
                      *.patch)  apply ${ROOT_DIR}/$P ;;
                      *.sh)     source ${ROOT_DIR}/$P ;;
-                     *)        echo Warning: Ignoring $P
                      esac
                   done
                   commit