diff --git a/CHANGELOG.mkdn b/CHANGELOG.mkdn
index d476d6a..3bf8c2e 100644
--- a/CHANGELOG.mkdn
+++ b/CHANGELOG.mkdn
@@ -93,6 +93,11 @@
 * Common: Add FM Seek for TI devices - KalimochoAz
 * Common: Add FM support for SI4708 devices (Blade, V9, Racer) - Stéphane Konstantaropoulos
 * Common: Add FM seek implementation to FM application - Tom Giordano
+* Common: Show current FM status on lockscreen - Tom Giordano
+* Common: Camera touch-to-focus - cyanogen, arcee, m0viefreak, Danny Baumann
+* Common: Screenshot feature via power menu - arcee
+* Common: WEBP backport - Vikas Arora
+* Common: Add CM copyright noticies - arcee
 * Click, Motorola: Speed up photo recording - Emilio López
 * Click, Motorola: Add Geolocation to photo app - KalimochoAz
 * Vision/Glacier/Ace/Speedy/Vivo: 2.6.35 kernel and updated userspace
diff --git a/get-google-files b/get-google-files
deleted file mode 100755
index 009e169..0000000
--- a/get-google-files
+++ /dev/null
@@ -1,62 +0,0 @@
-#!/usr/bin/env python
-import sys, random, urllib2, zipfile, StringIO, os
-from optparse import OptionParser
-
-FILENAME=["gapps-gb-20110613-signed.zip","gapps-hdpi-20101114-signed.zip","gapps-mdpi-20110501-signed.zip","gapps-mdpi-tiny-20101020-signed.zip","gapps-mdpi-tegra-20101020-signed.zip","gapps-passion-EPE54B-signed.zip","gapps-ds-ERE36B-signed.zip","DRC83_base_defanged.zip"]
-VERSIONS=["gb","hdpi","mdpi","mdpi-tiny","tegra","cm5hdpi","cm5mdpi","cm4"]
-MIRRORS=["http://goo-inside.me/gapps/","http://android.d3xt3r01.tk/cyanogen/gapps/"]
-
-def device():
-    print "usage: get-google-files -m [method] -v [version]"
-    print "Note:  Device method is currently not implemented, please use download"
-    sys.exit(1)
-
-def download(version):
-    try:
-        os.makedirs(os.path.join(os.path.dirname(__file__), "proprietary"))
-    except:
-        pass
-    if len(MIRRORS) > 1:
-        i = random.randrange(0, len(MIRRORS)-1)
-    else:
-        i = 0
-
-    try:
-        j = VERSIONS.index(version.lower())
-    except ValueError:
-	print "GApps version not found, defaulting to HDPI"
-        j = 0
-
-    url = MIRRORS[i] + FILENAME[j]
-
-    print "Fetching %s GApps from %s" % (version.upper(),url)
-
-    data = urllib2.urlopen(url).read()
-    zip = zipfile.ZipFile(StringIO.StringIO(data),'r')
-    
-    for filename in zip.namelist():
-        if filename.split("/")[0] == "system" and filename[-1] != "/":
-            print "Extracting %s" % filename
-            try:
-                bytes = zip.read(filename)
-                fd = open(os.path.join(os.path.dirname(__file__), "proprietary", os.path.basename(filename)),"wb")
-                fd.write(bytes)
-                fd.close()
-            except Exception, e:
-                print e
-                pass
-
-def main():
-    parser = OptionParser(usage="usage: %prog [options]")
-    parser.add_option("-m", "--method", dest='method', default="download", help="Extraction Method: download")
-    parser.add_option("-v", "--version", dest='version', default="gb", help="GApps Version: gb, hdpi, mdpi, mdpi-tiny, tegra, cm5hdpi, cm5mdpi, cm4 [default: gb]")
-    (options, args) = parser.parse_args()
-
-    if options.method == "device":
-        return device()
-
-    if options.method == "download":
-        return download(options.version)
-
-if __name__ == '__main__':
-    main()
