diff --git a/cm/Android.mk b/cm/Android.mk
new file mode 100644
index 0000000..1e92f4a
--- /dev/null
+++ b/cm/Android.mk
@@ -0,0 +1,10 @@
+LOCAL_PATH:= $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := optional
+
+LOCAL_SRC_FILES := $(call all-java-files-under, src)
+
+LOCAL_MODULE := org.cyanogenmod.support
+
+include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/cm/src/org/cyanogenmod/support/ui/LiveFolder.java b/cm/src/org/cyanogenmod/support/ui/LiveFolder.java
new file mode 100644
index 0000000..ba43154
--- /dev/null
+++ b/cm/src/org/cyanogenmod/support/ui/LiveFolder.java
@@ -0,0 +1,229 @@
+package org.cyanogenmod.support.ui;
+
+import java.util.ArrayList;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.os.UserHandle;
+import android.text.TextUtils;
+import android.util.Log;
+
+public class LiveFolder {
+
+    private static final String TAG = "LiveFolder";
+
+    public static final class Constants {
+
+        public static final String CREATE_LIVE_FOLDER =
+                "cyanogenmod.intent.action.CREATE_LIVE_FOLDER";
+        public static final String UPDATE_LIVE_FOLDER =
+                "cyanogenmod.intent.action.UPDATE_LIVE_FOLDER";
+        public static final String LIVE_FOLDER_UPDATES =
+                "cyanogenmod.intent.action.LIVE_FOLDER_UPDATES";
+
+        public static final String FOLDER_UPDATE_TYPE_EXTRA = "update_type";
+
+        public static final String NEW_FOLDER_CREATED =
+                "cyanogenmod.intent.action.NEW_LIVE_FOLDER_CREATED";
+        public static final String EXISTING_FOLDERS_CREATED =
+                "cyanogenmod.intent.action.EXISTING_LIVE_FOLDERS_CREATED";
+        public static final String FOLDER_DELETED =
+                "cyanogenmod.intent.action.LIVE_FOLDER_DELETED";
+        public static final String FOLDER_ITEM_SELECTED =
+                "cyanogenmod.intent.action.LIVE_FOLDER_ITEM_SELECTED";
+        public static final String FOLDER_ITEM_REMOVED =
+                "cyanogenmod.intent.action.LIVE_FOLDER_ITEM_REMOVED";
+
+        public static final String FOLDER_RECEIVER_EXTRA = "folder_receiver";
+        public static final String FOLDER_TITLE_EXTRA = "folder_title";
+
+        public static final int MAX_ITEMS = 9;
+
+        public static final String FOLDER_ID_EXTRA = "folder_id";
+        public static final String FOLDER_ENTRIES_EXTRA = "folder_entries";
+        public static final String FOLDER_ITEM_TITLE_EXTRA = "item_title";
+        public static final String FOLDER_ITEM_ID_EXTRA = "item_id";
+        public static final String FOLDER_UPDATE_ALL = "update_all";
+        public static final String EXISTING_FOLDER_IDS_EXTRA = "existing_folder_ids";
+
+        private static final String LAUNCHER_PERMISSION =
+                "com.cyanogenmod.trebuchet.permission.MANAGE_LIVE_FOLDERS";
+    }
+
+    /**
+     * Renames a live folder under the assumption that the folderId
+     * is valid and belongs to the calling package
+     */
+    public static void renameLiveFolder(Context ctx, long folderId, String folderName) {
+        String errorMsg = null;
+
+        if (TextUtils.isEmpty(folderName)) {
+            errorMsg = "Folder name cannot be empty";
+        } else if (folderId <= 0) {
+            errorMsg = "Invalid folder id " + folderId;
+        }
+
+        if (errorMsg != null) {
+            Log.e(TAG, errorMsg);
+            return;
+        }
+
+        Intent i = new Intent(Constants.UPDATE_LIVE_FOLDER);
+        i.putExtra(Constants.FOLDER_TITLE_EXTRA, folderName);
+        i.putExtra(Constants.FOLDER_ID_EXTRA, folderId);
+        ctx.sendBroadcastAsUser(i, UserHandle.CURRENT_OR_SELF, Constants.LAUNCHER_PERMISSION);
+    }
+
+    /**
+     * Updates a single live folder with the items provided
+     * under the assumption that the folderId is valid and
+     * belongs to the calling package
+     */
+    public static void updateSingleFolder(Context ctx, long folderId, ArrayList<Item> folderItems) {
+        updateFolder(ctx, folderItems, false, folderId);
+    }
+
+    /**
+     * Updates all live folders that belong to the calling package
+     * with the items provided
+     */
+    public static void updateAllFolders(Context ctx, ArrayList<Item> folderItems) {
+        updateFolder(ctx, folderItems, true, 0);
+    }
+
+    private static void updateFolder(Context ctx, ArrayList<Item> folderItems, boolean updateAll, long folderId) {
+        String errorMsg = null;
+
+        if (folderItems == null) {
+            errorMsg = "Folder items not specified";
+        } else if (folderItems.size() > Constants.MAX_ITEMS) {
+            errorMsg = "Folder cannot contain more than " + Constants.MAX_ITEMS;
+        } else if (folderId <= 0 && !updateAll) {
+            errorMsg = "Invalid folder id " + folderId;
+        }
+
+        if (errorMsg != null) {
+            Log.e(TAG, errorMsg);
+            return;
+        }
+
+        Intent i = new Intent(Constants.UPDATE_LIVE_FOLDER);
+        if (updateAll) {
+            i.putExtra(Constants.FOLDER_UPDATE_ALL, updateAll);
+        } else {
+            i.putExtra(Constants.FOLDER_ID_EXTRA, folderId);
+        }
+        i.putParcelableArrayListExtra(Constants.FOLDER_ENTRIES_EXTRA, folderItems);
+        ctx.sendBroadcastAsUser(i, UserHandle.CURRENT_OR_SELF, Constants.LAUNCHER_PERMISSION);
+    }
+
+    /**
+     * A live folder is populated with objects of this class
+     */
+    public static final class Item implements Parcelable {
+        /**
+         * (Optional) Bitmap to visually represent live folder item
+         * If null, default_resource_id is used
+         */
+        private Bitmap mIcon;
+
+        /**
+         * Title of the live folder item
+         */
+        private String mLabel;
+
+        /**
+         * (Optional) Intent to launch on select.
+         * If null, LIVE_FOLDER_ITEM_SELECTED is invoked
+         * to the assigned receiver
+         */
+        private Intent mIntent;
+
+        /**
+         * (Optional) Identifier for item
+         * If value is (<= 0) LIVE_FOLDER_ITEM_SELECTED is not invoked
+         */
+        private int mId;
+
+        public Bitmap getIcon() {
+            return mIcon;
+        }
+
+        public void setIcon(Bitmap mIcon) {
+            this.mIcon = mIcon;
+        }
+
+        public String getLabel() {
+            return mLabel;
+        }
+
+        public void setLabel(String mLabel) {
+            this.mLabel = mLabel;
+        }
+
+        public Intent getIntent() {
+            return mIntent;
+        }
+
+        public void setIntent(Intent mIntent) {
+            this.mIntent = mIntent;
+        }
+
+        public int getId() {
+            return mId;
+        }
+
+        public void setId(int mId) {
+            this.mId = mId;
+        }
+
+        public Item() {
+        }
+
+        Item(Parcel in) {
+            if (in.readInt() == 1) {
+                mIcon = Bitmap.CREATOR.createFromParcel(in);
+            }
+            mLabel = in.readString();
+            if (in.readInt() == 1) {
+                mIntent = Intent.CREATOR.createFromParcel(in);
+            }
+            mId = in.readInt();
+        }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel dest, int flags) {
+            if (mIcon == null) {
+                dest.writeInt(0);
+            } else {
+                dest.writeInt(1);
+                mIcon.writeToParcel(dest, 0);
+            }
+            dest.writeString(mLabel);
+            if (mIntent == null) {
+                dest.writeInt(0);
+            } else {
+                dest.writeInt(1);
+                mIntent.writeToParcel(dest, 0);
+            }
+            dest.writeInt(mId);
+        }
+
+        public static final Parcelable.Creator<Item> CREATOR = new Parcelable.Creator<Item>() {
+            public Item createFromParcel(Parcel in) {
+                return new Item(in);
+            }
+            public Item[] newArray(int size) {
+                return new Item[size];
+            }
+        };
+    }
+}
diff --git a/v4/v4.iml b/v4/v4.iml
new file mode 100644
index 0000000..6c054f3
--- /dev/null
+++ b/v4/v4.iml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/eclair" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/eclair-mr1" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/froyo" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/gingerbread" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/honeycomb" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/honeycomb_mr2" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/ics" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/ics-mr1" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/jellybean" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/jellybean-mr1" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/jellybean-mr2" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/kitkat" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
+
diff --git a/v7/appcompat/appcompat.iml b/v7/appcompat/appcompat.iml
new file mode 100644
index 0000000..071bf66
--- /dev/null
+++ b/v7/appcompat/appcompat.iml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="android" name="Android">
+      <configuration>
+        <option name="LIBRARY_PROJECT" value="true" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 19 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="v4" exported="" />
+  </component>
+</module>
+
diff --git a/v7/mediarouter/mediarouter.iml b/v7/mediarouter/mediarouter.iml
new file mode 100644
index 0000000..6f667c7
--- /dev/null
+++ b/v7/mediarouter/mediarouter.iml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="android" name="Android">
+      <configuration>
+        <option name="LIBRARY_PROJECT" value="true" />
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/gen" isTestSource="false" generated="true" />
+      <sourceFolder url="file://$MODULE_DIR$/jellybean" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/jellybean-mr1" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/jellybean-mr2" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="jdk" jdkName="Android API 19 Platform" jdkType="Android SDK" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="module" module-name="appcompat" exported="" />
+  </component>
+</module>
+
diff --git a/v8/renderscript/Android.mk b/v8/renderscript/Android.mk
index d8f3ce5..34a8a7e 100644
--- a/v8/renderscript/Android.mk
+++ b/v8/renderscript/Android.mk
@@ -28,7 +28,8 @@
 include $(BUILD_STATIC_JAVA_LIBRARY)
 
 # TODO: Build the tests as an APK here
-
+ifneq ($(WITH_GMS),true)
 include $(call all-makefiles-under, $(LOCAL_PATH))
+endif
 
 endif
