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()
diff --git a/prebuilt/common/etc/apns-conf.xml b/prebuilt/common/etc/apns-conf.xml
index accb91f..f9dff7a 100644
--- a/prebuilt/common/etc/apns-conf.xml
+++ b/prebuilt/common/etc/apns-conf.xml
@@ -194,8 +194,7 @@
   <apn carrier="O2 MOBILE WEB" mcc="234" mnc="02" apn="mobile.o2.co.uk" user="O2web" password="O2web" type="default,supl" />
   <apn carrier="O2 MMS Prepay" mcc="234" mnc="02" apn="payandgo.o2.co.uk" user="payandgo" password="password" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="mms" />
   <apn carrier="O2 MMS Postpay" mcc="234" mnc="02" apn="wap.o2.co.uk" user="o2wap" password="password" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="mms" />
-  <apn carrier="GiffGaff" mcc="234" mnc="10" apn="giffgaff.com" user="giffgaff" password="password" proxy="193.113.200.195" port="8080" type="default,supl" />
-  <apn carrier="GiffGaff MMS" mcc="234" mnc="10" apn="giffgaff.com" user="giffgaff" password="password" server="http://mmsc.mediamessaging.co.uk:8002" mmsc="http://mmsc.mediamessaging.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="mms" />
+  <apn name="Giffgaff" numeric="23410" mcc="234" mnc="10" apn="giffgaff.com" user="giffgaff" server="http://mmsc.mediamessaging.co.uk:8002" password="password" proxy="" port="" mmsproxy="193.113.200.195" mmsport="8080" mmsprotocol="null" mmsc="http://mmsc.mediamessaging.co.uk:8002" type="default,supl,mms" />
   <apn carrier="O2 UK MMS" mcc="234" mnc="10" apn="idata.o2.co.uk" user="vertigo" password="password" mmsc="http://mmsc.mms.o2.co.uk:8002" mmsproxy="193.113.200.195" mmsport="8080" type="mms" />
   <apn carrier="O2 UK" mcc="234" mnc="10" apn="mobile.o2.co.uk" user="O2web" password="O2web" type="default,supl" />
   <apn carrier="O2 UK" mcc="234" mnc="10" apn="mobile.o2.co.uk" user="vertigo" type="default,supl,mms" />
@@ -535,6 +534,7 @@
   <apn carrier="PLATWEB" mcc="310" mnc="100" apn="plateauweb" type="default,supl" />
   <apn carrier="CDMA" mcc="310" mnc="120" apn="0" type="default,supl" />
   <apn carrier="CDMA" mcc="310" mnc="120" apn="1" mmsc="http://mms.sprintpcs.com" type="default,supl" />
+  <apn carrier="Virgin Mobile US" mcc="200" mnc="053" apn="0" port="" mmsproxy="205.239.233.136" mmsport="81" mmsc="http://mmsc.vmobl.com:8088/mms?" type="mms" />
   <apn carrier="My Multi Media" mcc="310" mnc="130" apn="mms.c1.ama" user="cell1mms" password="cell1" mmsc="http://mms.iot1.com/amarillo/mms.php" type="mms" />
   <apn carrier="T-Mobile US 160" mcc="310" mnc="160" apn="epc.tmobile.com" user="none" password="none" server="*" mmsc="http://mms.msg.eng.t-mobile.com/mms/wapenc" type="default,supl,mms" />
   <apn carrier="DataConnect" mcc="310" mnc="170" apn="isp.cingular" type="default,supl" />
