Simplified algorithm used to generate the preloaded-classes list. Generated a new preloaded-classes file.
diff --git a/preloaded-classes b/preloaded-classes
index 7d1f960..69c596c 100644
--- a/preloaded-classes
+++ b/preloaded-classes
@@ -1,119 +1,66 @@
 # Classes which are preloaded by com.android.internal.os.ZygoteInit.
-# Automatically generated by /frameworks/base/tools/preload.
-# percent=75, weight=500, bucket_size=5
+# Automatically generated by frameworks/base/tools/preload/WritePreloadedClassFile.java.
+# MIN_LOAD_TIME_MICROS=1250
 SQLite.Blob
 SQLite.Database
 SQLite.FunctionContext
 SQLite.Stmt
 SQLite.Vm
 android.R$styleable
-android.accounts.AccountMonitor
-android.accounts.AccountMonitor$AccountUpdater
-android.accounts.AccountMonitorListener
-android.accounts.AccountsServiceConstants
-android.accounts.IAccountsService
 android.accounts.IAccountsService$Stub
 android.app.Activity
-android.app.Activity$ManagedCursor
 android.app.ActivityGroup
+android.app.ActivityManager
+android.app.ActivityManager$MemoryInfo
 android.app.ActivityManagerNative
 android.app.ActivityManagerProxy
 android.app.ActivityThread
-android.app.ActivityThread$ActivityRecord
-android.app.ActivityThread$AppBindData
 android.app.ActivityThread$ApplicationThread
-android.app.ActivityThread$BindServiceData
-android.app.ActivityThread$ContextCleanupInfo
-android.app.ActivityThread$CreateServiceData
-android.app.ActivityThread$GcIdler
 android.app.ActivityThread$H
-android.app.ActivityThread$Idler
-android.app.ActivityThread$NewIntentData
-android.app.ActivityThread$PackageInfo
-android.app.ActivityThread$PackageInfo$ReceiverDispatcher
-android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args
-android.app.ActivityThread$PackageInfo$ReceiverDispatcher$InnerReceiver
-android.app.ActivityThread$PackageInfo$ServiceDispatcher
-android.app.ActivityThread$PackageInfo$ServiceDispatcher$ConnectionInfo
-android.app.ActivityThread$PackageInfo$ServiceDispatcher$DeathMonitor
-android.app.ActivityThread$PackageInfo$ServiceDispatcher$InnerConnection
-android.app.ActivityThread$PackageInfo$ServiceDispatcher$RunConnection
-android.app.ActivityThread$ProviderRecord
-android.app.ActivityThread$ProviderRefCount
-android.app.ActivityThread$ReceiverData
-android.app.ActivityThread$ResourcesKey
-android.app.ActivityThread$ResultData
-android.app.ActivityThread$ServiceArgsData
-android.app.ActivityThread$StopInfo
 android.app.AlertDialog
-android.app.AlertDialog$Builder
 android.app.Application
 android.app.ApplicationContext
 android.app.ApplicationContext$ApplicationContentResolver
 android.app.ApplicationContext$ApplicationPackageManager
-android.app.ApplicationContext$ApplicationPackageManager$PackageRemovedReceiver
-android.app.ApplicationContext$ApplicationPackageManager$ResourceName
-android.app.ApplicationContext$SharedPreferencesImpl
-android.app.ApplicationContext$SharedPreferencesImpl$EditorImpl
-android.app.ApplicationLoaders
+android.app.ApplicationContext$WallpaperCallback
 android.app.ApplicationThreadNative
+android.app.DatePickerDialog
 android.app.Dialog
-android.app.Dialog$1
-android.app.Dialog$ListenersHandler
 android.app.ExpandableListActivity
 android.app.IActivityManager
 android.app.IActivityManager$ContentProviderHolder
-android.app.IActivityManager$ContentProviderHolder$1
-android.app.IAlarmManager
 android.app.IAlarmManager$Stub
-android.app.IAlarmManager$Stub$Proxy
-android.app.IApplicationThread
-android.app.IInstrumentationWatcher
-android.app.IInstrumentationWatcher$Stub
-android.app.INotificationManager
 android.app.INotificationManager$Stub
-android.app.INotificationManager$Stub$Proxy
-android.app.ISearchManager
 android.app.ISearchManager$Stub
-android.app.ISearchManager$Stub$Proxy
-android.app.ISearchManagerCallback
 android.app.ISearchManagerCallback$Stub
-android.app.IServiceConnection
-android.app.IServiceConnection$Stub
-android.app.ITransientNotification
+android.app.IStatusBar$Stub
 android.app.ITransientNotification$Stub
+android.app.IWallpaperService$Stub
+android.app.IWallpaperServiceCallback$Stub
 android.app.Instrumentation
-android.app.IntentReceiverLeaked
+android.app.IntentService
 android.app.ListActivity
-android.app.ListActivity$1
-android.app.ListActivity$2
 android.app.LocalActivityManager
-android.app.LocalActivityManager$LocalActivityRecord
 android.app.Notification
-android.app.Notification$1
-android.app.NotificationManager
 android.app.PendingIntent
-android.app.PendingIntent$1
 android.app.ProgressDialog
-android.app.ReceiverRestrictedContext
 android.app.ResultInfo
-android.app.ResultInfo$1
 android.app.SearchManager$SearchManagerCallback
-android.app.SearchManager$SearchManagerCallback$1
-android.app.SearchManager$SearchManagerCallback$2
 android.app.Service
-android.app.ServiceConnectionLeaked
+android.app.StatusBarManager
 android.app.TabActivity
+android.app.TimePickerDialog
+android.appwidget.AppWidgetHost
 android.appwidget.AppWidgetHostView
 android.appwidget.AppWidgetManager
 android.appwidget.AppWidgetProvider
+android.appwidget.AppWidgetProviderInfo
 android.backup.BackupDataInput
 android.backup.BackupDataInput$EntityHeader
 android.backup.BackupDataOutput
 android.backup.BackupHelperDispatcher
 android.backup.BackupHelperDispatcher$Header
 android.backup.FileBackupHelperBase
-android.bluetooth.BluetoothA2dp
 android.bluetooth.BluetoothAudioGateway
 android.bluetooth.BluetoothDevice
 android.bluetooth.Database
@@ -125,89 +72,44 @@
 android.bluetooth.IBluetoothDevice$Stub$Proxy
 android.bluetooth.RfcommSocket
 android.bluetooth.ScoSocket
-android.content.AsyncQueryHandler
-android.content.AsyncQueryHandler$WorkerArgs
-android.content.AsyncQueryHandler$WorkerHandler
-android.content.BroadcastReceiver
-android.content.ComponentCallbacks
+android.content.AbstractSyncableContentProvider
+android.content.AbstractTableMerger
 android.content.ComponentName
-android.content.ComponentName$1
-android.content.ContentProvider
 android.content.ContentProvider$Transport
-android.content.ContentProviderNative
-android.content.ContentProviderProxy
-android.content.ContentQueryMap
-android.content.ContentQueryMap$1
 android.content.ContentResolver
 android.content.ContentResolver$CursorWrapperInner
-android.content.ContentResolver$ParcelFileDescriptorInner
-android.content.ContentUris
 android.content.ContentValues
-android.content.ContentValues$1
 android.content.Context
 android.content.ContextWrapper
-android.content.DialogInterface
-android.content.DialogInterface$OnCancelListener
-android.content.DialogInterface$OnClickListener
-android.content.DialogInterface$OnDismissListener
-android.content.DialogInterface$OnKeyListener
 android.content.DialogInterface$OnMultiChoiceClickListener
-android.content.IContentProvider
-android.content.IContentService
 android.content.IContentService$Stub
-android.content.IContentService$Stub$Proxy
-android.content.IIntentReceiver
-android.content.IIntentReceiver$Stub
-android.content.IIntentSender
-android.content.IIntentSender$Stub
-android.content.IIntentSender$Stub$Proxy
-android.content.ISyncAdapter
 android.content.ISyncAdapter$Stub
 android.content.Intent
-android.content.Intent$1
+android.content.Intent$ShortcutIconResource
 android.content.IntentFilter
-android.content.IntentFilter$1
-android.content.SearchRecentSuggestionsProvider
-android.content.SearchRecentSuggestionsProvider$DatabaseHelper
-android.content.ServiceConnection
-android.content.SharedPreferences
-android.content.SharedPreferences$Editor
-android.content.SharedPreferences$OnSharedPreferenceChangeListener
-android.content.SyncAdapter
 android.content.SyncAdapter$Transport
-android.content.SyncContext
 android.content.SyncResult
+android.content.SyncStateContentProviderHelper
 android.content.SyncStats
+android.content.SyncableContentProvider
+android.content.TempProviderSyncAdapter
 android.content.UriMatcher
 android.content.pm.ActivityInfo
-android.content.pm.ActivityInfo$1
 android.content.pm.ApplicationInfo
-android.content.pm.ApplicationInfo$1
-android.content.pm.ComponentInfo
 android.content.pm.ConfigurationInfo
-android.content.pm.ConfigurationInfo$1
+android.content.pm.IPackageDataObserver$Stub
 android.content.pm.IPackageDeleteObserver$Stub
-android.content.pm.IPackageManager
 android.content.pm.IPackageManager$Stub
 android.content.pm.IPackageManager$Stub$Proxy
+android.content.pm.IPackageStatsObserver$Stub
 android.content.pm.InstrumentationInfo
-android.content.pm.InstrumentationInfo$1
 android.content.pm.PackageInfo
-android.content.pm.PackageInfo$1
-android.content.pm.PackageItemInfo
 android.content.pm.PackageManager
+android.content.pm.PackageStats
 android.content.pm.PathPermission
-android.content.pm.PathPermission$1
 android.content.pm.PermissionInfo
-android.content.pm.PermissionInfo$1
-android.content.pm.ProviderInfo
-android.content.pm.ProviderInfo$1
 android.content.pm.ResolveInfo
-android.content.pm.ResolveInfo$1
-android.content.pm.ServiceInfo
-android.content.pm.ServiceInfo$1
 android.content.pm.Signature
-android.content.pm.Signature$1
 android.content.res.AssetFileDescriptor
 android.content.res.AssetFileDescriptor$1
 android.content.res.AssetManager
@@ -216,65 +118,38 @@
 android.content.res.ColorStateList$1
 android.content.res.CompatibilityInfo
 android.content.res.CompatibilityInfo$1
-android.content.res.CompatibilityInfo$Translator
 android.content.res.Configuration
 android.content.res.Configuration$1
-android.content.res.PluralRules
-android.content.res.PluralRules$en
 android.content.res.Resources
 android.content.res.Resources$1
-android.content.res.Resources$Theme
 android.content.res.StringBlock
-android.content.res.StringBlock$StyleIDs
 android.content.res.TypedArray
 android.content.res.XmlBlock
 android.content.res.XmlBlock$Parser
 android.content.res.XmlResourceParser
 android.database.AbstractCursor
-android.database.AbstractCursor$SelfContentObserver
 android.database.AbstractWindowedCursor
-android.database.BulkCursorNative
-android.database.BulkCursorProxy
 android.database.BulkCursorToCursorAdaptor
 android.database.CharArrayBuffer
-android.database.ContentObservable
-android.database.ContentObserver
-android.database.ContentObserver$NotificationRunnable
-android.database.ContentObserver$Transport
-android.database.CrossProcessCursor
-android.database.Cursor
+android.database.CursorJoiner$Result
 android.database.CursorToBulkCursorAdaptor
-android.database.CursorToBulkCursorAdaptor$ContentObserverProxy
 android.database.CursorWindow
 android.database.CursorWindow$1
 android.database.CursorWrapper
-android.database.DataSetObservable
-android.database.DataSetObserver
 android.database.DatabaseUtils
-android.database.DatabaseUtils$InsertHelper
-android.database.IBulkCursor
-android.database.IContentObserver
-android.database.IContentObserver$Stub
-android.database.IContentObserver$Stub$Proxy
 android.database.MatrixCursor
-android.database.Observable
-android.database.SQLException
+android.database.MergeCursor
 android.database.sqlite.SQLiteClosable
 android.database.sqlite.SQLiteCursor
-android.database.sqlite.SQLiteCursorDriver
 android.database.sqlite.SQLiteDatabase
-android.database.sqlite.SQLiteDatabase$CursorFactory
+android.database.sqlite.SQLiteDatabase$ConflictAlgorithm
 android.database.sqlite.SQLiteDebug
 android.database.sqlite.SQLiteDebug$PagerStats
 android.database.sqlite.SQLiteDirectCursorDriver
-android.database.sqlite.SQLiteException
-android.database.sqlite.SQLiteOpenHelper
 android.database.sqlite.SQLiteProgram
 android.database.sqlite.SQLiteQuery
 android.database.sqlite.SQLiteQueryBuilder
 android.database.sqlite.SQLiteStatement
-android.ddm.DdmHandleAppName
-android.ddm.DdmHandleExit
 android.ddm.DdmHandleHeap
 android.ddm.DdmHandleHello
 android.ddm.DdmHandleNativeHeap
@@ -294,7 +169,6 @@
 android.graphics.BlurMaskFilter
 android.graphics.Camera
 android.graphics.Canvas
-android.graphics.Canvas$EdgeType
 android.graphics.Color
 android.graphics.ColorFilter
 android.graphics.ColorMatrixColorFilter
@@ -311,7 +185,6 @@
 android.graphics.LinearGradient
 android.graphics.MaskFilter
 android.graphics.Matrix
-android.graphics.Matrix$ScaleToFit
 android.graphics.Movie
 android.graphics.NinePatch
 android.graphics.Paint
@@ -323,7 +196,6 @@
 android.graphics.Paint$Style
 android.graphics.PaintFlagsDrawFilter
 android.graphics.Path
-android.graphics.Path$Direction
 android.graphics.Path$FillType
 android.graphics.PathDashPathEffect
 android.graphics.PathEffect
@@ -350,7 +222,6 @@
 android.graphics.Shader$TileMode
 android.graphics.SumPathEffect
 android.graphics.SweepGradient
-android.graphics.TemporaryBuffer
 android.graphics.Typeface
 android.graphics.Xfermode
 android.graphics.drawable.Animatable
@@ -370,7 +241,6 @@
 android.graphics.drawable.DrawableContainer
 android.graphics.drawable.DrawableContainer$DrawableContainerState
 android.graphics.drawable.GradientDrawable
-android.graphics.drawable.GradientDrawable$1
 android.graphics.drawable.GradientDrawable$GradientState
 android.graphics.drawable.GradientDrawable$Orientation
 android.graphics.drawable.LayerDrawable
@@ -379,55 +249,38 @@
 android.graphics.drawable.NinePatchDrawable
 android.graphics.drawable.NinePatchDrawable$NinePatchState
 android.graphics.drawable.PaintDrawable
+android.graphics.drawable.RotateDrawable
 android.graphics.drawable.ShapeDrawable
-android.graphics.drawable.ShapeDrawable$ShapeState
 android.graphics.drawable.StateListDrawable
 android.graphics.drawable.StateListDrawable$StateListState
 android.graphics.drawable.TransitionDrawable
 android.graphics.drawable.TransitionDrawable$TransitionState
-android.graphics.drawable.shapes.RectShape
 android.graphics.drawable.shapes.RoundRectShape
-android.graphics.drawable.shapes.Shape
 android.hardware.Camera
-android.hardware.ISensorService
 android.hardware.ISensorService$Stub
-android.hardware.ISensorService$Stub$Proxy
-android.hardware.Sensor
-android.hardware.SensorEvent
-android.hardware.SensorEventListener
-android.hardware.SensorListener
 android.hardware.SensorManager
-android.hardware.SensorManager$1
-android.hardware.SensorManager$LegacyListener
-android.hardware.SensorManager$ListenerDelegate
-android.hardware.SensorManager$ListenerDelegate$1
-android.hardware.SensorManager$LmsFilter
-android.hardware.SensorManager$SensorThread
-android.hardware.SensorManager$SensorThread$SensorThreadRunnable
+android.inputmethodservice.AbstractInputMethodService
+android.inputmethodservice.AbstractInputMethodService$AbstractInputMethodSessionImpl
+android.inputmethodservice.ExtractButton
 android.inputmethodservice.ExtractEditText
+android.inputmethodservice.IInputMethodSessionWrapper
+android.inputmethodservice.IInputMethodSessionWrapper$InputMethodEventCallbackWrapper
+android.inputmethodservice.IInputMethodWrapper
 android.inputmethodservice.InputMethodService
+android.inputmethodservice.Keyboard
+android.inputmethodservice.Keyboard$Key
 android.inputmethodservice.KeyboardView
+android.inputmethodservice.KeyboardView$2
 android.location.Address
-android.location.Address$1
-android.location.Geocoder
-android.location.GpsSatellite
-android.location.GpsStatus
-android.location.GpsStatus$1
-android.location.ILocationListener
-android.location.ILocationListener$Stub
-android.location.ILocationManager
+android.location.Criteria
 android.location.ILocationManager$Stub
 android.location.ILocationManager$Stub$Proxy
 android.location.ILocationProvider
 android.location.ILocationProvider$Stub
 android.location.Location
-android.location.Location$1
-android.location.LocationListener
 android.location.LocationManager
 android.location.LocationManager$ListenerTransport
-android.location.LocationManager$ListenerTransport$1
-android.location.LocationProvider
-android.media.AmrInputStream
+android.location.LocationManager$LpPowerComparator
 android.media.AudioFormat
 android.media.AudioManager
 android.media.AudioRecord
@@ -435,70 +288,56 @@
 android.media.AudioTrack
 android.media.ExifInterface
 android.media.FaceDetector
-android.media.IAudioService
+android.media.FaceDetector$Face
 android.media.IAudioService$Stub
 android.media.IAudioService$Stub$Proxy
 android.media.JetPlayer
 android.media.MediaMetadataRetriever
 android.media.MediaPlayer
-android.media.MediaPlayer$EventHandler
-android.media.MediaPlayer$OnBufferingUpdateListener
-android.media.MediaPlayer$OnCompletionListener
-android.media.MediaPlayer$OnErrorListener
-android.media.MediaPlayer$OnPreparedListener
 android.media.MediaRecorder
 android.media.MediaScanner
-android.media.ResampleInputStream
+android.media.MediaScanner$MyMediaScannerClient
+android.media.Ringtone
 android.media.RingtoneManager
 android.media.ToneGenerator
 android.net.ConnectivityManager
 android.net.Credentials
 android.net.DhcpInfo
 android.net.DhcpInfo$1
-android.net.IConnectivityManager
 android.net.IConnectivityManager$Stub
-android.net.IConnectivityManager$Stub$Proxy
 android.net.LocalServerSocket
 android.net.LocalSocket
+android.net.LocalSocketAddress$Namespace
 android.net.LocalSocketImpl
 android.net.LocalSocketImpl$SocketInputStream
 android.net.LocalSocketImpl$SocketOutputStream
 android.net.NetworkConnectivityListener
-android.net.NetworkConnectivityListener$ConnectivityBroadcastReceiver
-android.net.NetworkConnectivityListener$State
 android.net.NetworkInfo
-android.net.NetworkInfo$1
 android.net.NetworkInfo$DetailedState
-android.net.NetworkInfo$State
 android.net.NetworkUtils
 android.net.Uri
-android.net.Uri$1
-android.net.Uri$AbstractHierarchicalUri
-android.net.Uri$AbstractPart
-android.net.Uri$Builder
 android.net.Uri$HierarchicalUri
 android.net.Uri$OpaqueUri
 android.net.Uri$Part
-android.net.Uri$Part$EmptyPart
-android.net.Uri$PathPart
-android.net.Uri$PathSegments
-android.net.Uri$PathSegmentsBuilder
 android.net.Uri$StringUri
 android.net.WebAddress
 android.net.http.AndroidHttpClient
-android.net.http.AndroidHttpClient$1
 android.net.http.AndroidHttpClient$2
-android.net.http.AndroidHttpClient$CurlLogger
-android.net.http.AndroidHttpClient$LoggingConfiguration
 android.net.http.CertificateChainValidator
+android.net.http.Connection
+android.net.http.DomainNameChecker
 android.net.http.EventHandler
 android.net.http.Headers
-android.net.http.Headers$HeaderCallback
 android.net.http.HttpsConnection
+android.net.http.Request
+android.net.http.RequestQueue
+android.net.http.SslCertificate
 android.net.vpn.IVpnService$Stub
+android.net.vpn.PptpProfile
 android.net.vpn.VpnManager
+android.net.vpn.VpnProfile
+android.net.vpn.VpnState
 android.net.vpn.VpnType
-android.net.wifi.IWifiManager
 android.net.wifi.IWifiManager$Stub
 android.net.wifi.IWifiManager$Stub$Proxy
 android.net.wifi.WifiManager
@@ -507,6 +346,7 @@
 android.opengl.GLES10Ext
 android.opengl.GLES11
 android.opengl.GLES11Ext
+android.opengl.GLU
 android.opengl.GLUtils
 android.opengl.Matrix
 android.opengl.Visibility
@@ -516,7 +356,7 @@
 android.os.Build
 android.os.Build$VERSION
 android.os.Bundle
-android.os.Bundle$1
+android.os.DeadObjectException
 android.os.Debug
 android.os.Debug$MemoryInfo
 android.os.Environment
@@ -525,126 +365,111 @@
 android.os.FileUtils
 android.os.FileUtils$FileStatus
 android.os.Handler
-android.os.HandlerThread
 android.os.Hardware
 android.os.IBinder
-android.os.IBinder$DeathRecipient
-android.os.ICheckinService
 android.os.ICheckinService$Stub
-android.os.ICheckinService$Stub$Proxy
-android.os.IHardwareService
 android.os.IHardwareService$Stub
-android.os.IHardwareService$Stub$Proxy
 android.os.IInterface
-android.os.IMessenger
-android.os.IPowerManager
+android.os.IMountService$Stub
+android.os.IParentalControlCallback$Stub
 android.os.IPowerManager$Stub
-android.os.IPowerManager$Stub$Proxy
-android.os.IServiceManager
 android.os.Looper
 android.os.MemoryFile
 android.os.Message
-android.os.Message$1
-android.os.MessageQueue
-android.os.MessageQueue$IdleHandler
 android.os.NetStat
 android.os.Parcel
 android.os.Parcel$1
 android.os.ParcelFileDescriptor
 android.os.ParcelFileDescriptor$1
-android.os.ParcelFileDescriptor$AutoCloseInputStream
 android.os.Parcelable
 android.os.Parcelable$Creator
 android.os.PatternMatcher
-android.os.PatternMatcher$1
 android.os.Power
-android.os.PowerManager
-android.os.PowerManager$WakeLock
-android.os.PowerManager$WakeLock$1
 android.os.Process
-android.os.RemoteException
-android.os.ServiceManager
-android.os.ServiceManagerNative
-android.os.ServiceManagerProxy
+android.os.ResultReceiver
 android.os.StatFs
 android.os.SystemClock
 android.os.SystemProperties
 android.os.UEventObserver
-android.os.Vibrator
 android.pim.EventRecurrence
 android.preference.CheckBoxPreference
+android.preference.CheckBoxPreference$SavedState
 android.preference.DialogPreference
 android.preference.EditTextPreference
-android.preference.GenericInflater
-android.preference.GenericInflater$Parent
 android.preference.ListPreference
-android.preference.ListPreference$1
-android.preference.OnDependencyChangeListener
+android.preference.ListPreference$SavedState
 android.preference.Preference
-android.preference.Preference$BaseSavedState
-android.preference.Preference$BaseSavedState$1
-android.preference.Preference$OnPreferenceChangeInternalListener
-android.preference.Preference$OnPreferenceChangeListener
-android.preference.Preference$OnPreferenceClickListener
 android.preference.PreferenceActivity
-android.preference.PreferenceActivity$1
-android.preference.PreferenceCategory
 android.preference.PreferenceGroup
 android.preference.PreferenceGroupAdapter
-android.preference.PreferenceGroupAdapter$1
 android.preference.PreferenceInflater
 android.preference.PreferenceManager
-android.preference.PreferenceManager$OnActivityDestroyListener
-android.preference.PreferenceManager$OnActivityResultListener
-android.preference.PreferenceManager$OnPreferenceTreeClickListener
 android.preference.PreferenceScreen
 android.preference.RingtonePreference
-android.provider.BaseColumns
+android.preference.VolumePreference
+android.preference.VolumePreference$SeekBarVolumizer
 android.provider.Browser
-android.provider.Checkin
+android.provider.Calendar$Attendees
+android.provider.Calendar$BusyBits
+android.provider.Calendar$CalendarAlerts
+android.provider.Calendar$Calendars
+android.provider.Calendar$Events
+android.provider.Calendar$Instances
+android.provider.CallLog$Calls
 android.provider.Checkin$Events$Tag
+android.provider.Checkin$Properties
 android.provider.Checkin$Properties$Tag
-android.provider.Checkin$Stats
 android.provider.Checkin$Stats$Tag
+android.provider.Contacts
 android.provider.Contacts$ContactMethods
-android.provider.Contacts$ContactMethodsColumns
 android.provider.Contacts$People
-android.provider.Contacts$PeopleColumns
 android.provider.Contacts$Phones
-android.provider.Contacts$PhonesColumns
-android.provider.Contacts$PresenceColumns
+android.provider.Contacts$Presence
+android.provider.Contacts$Settings
 android.provider.Downloads
 android.provider.Gmail
+android.provider.Gmail$AttachmentOrigin
+android.provider.Gmail$AttachmentRendition
+android.provider.Gmail$ConversationCursor
+android.provider.Gmail$CursorStatus
 android.provider.Gmail$LabelMap
+android.provider.Gmail$MessageCursor
 android.provider.Gmail$PersonalLevel
 android.provider.Gmail$Settings
-android.provider.Im$CommonPresenceColumns
+android.provider.Im$Account
+android.provider.Im$Avatars
+android.provider.Im$Chats
+android.provider.Im$Contacts
+android.provider.Im$LastRmqId
+android.provider.Im$Messages
+android.provider.Im$OutgoingRmq
+android.provider.Im$Presence
 android.provider.Im$Provider
-android.provider.MediaStore$Audio$AudioColumns
+android.provider.Im$ProviderSettings
+android.provider.MediaStore
+android.provider.MediaStore$Audio$Albums
+android.provider.MediaStore$Audio$Artists
+android.provider.MediaStore$Audio$Artists$Albums
 android.provider.MediaStore$Audio$Media
+android.provider.MediaStore$Audio$Playlists
 android.provider.MediaStore$Images$Media
-android.provider.MediaStore$MediaColumns
+android.provider.MediaStore$Images$Thumbnails
 android.provider.SearchRecentSuggestions
 android.provider.Settings$Gservices
-android.provider.Settings$NameValueCache
-android.provider.Settings$NameValueTable
 android.provider.Settings$Secure
 android.provider.Settings$System
-android.provider.SubscribedFeeds$FeedColumns
 android.provider.SubscribedFeeds$Feeds
-android.provider.SyncConstValue
+android.provider.Telephony$Carriers
 android.provider.Telephony$Mms
 android.provider.Telephony$MmsSms
 android.provider.Telephony$MmsSms$PendingMessages
+android.provider.Telephony$Sms
+android.provider.Telephony$Sms$Conversations
 android.provider.Telephony$Threads
+android.provider.UserDictionary
 android.provider.UserDictionary$Words
-android.sax.Children
-android.sax.Children$Child
-android.sax.Element
-android.sax.EndTextElementListener
 android.sax.RootElement
 android.sax.RootElement$Handler
-android.sax.StartElementListener
 android.security.Keystore
 android.security.Keystore$FileKeystore
 android.security.Md5MessageDigest
@@ -656,681 +481,324 @@
 android.server.BluetoothEventLoop
 android.server.data.BuildData
 android.server.data.CrashData
-android.server.data.StackTraceElementData
 android.server.data.ThrowableData
 android.server.search.SearchableInfo
-android.server.search.SearchableInfo$1
+android.server.search.Searchables
+android.speech.IRecognitionListener$Stub
 android.speech.IRecognitionService$Stub
+android.speech.RecognitionResult
+android.speech.RecognitionServiceUtil
+android.speech.srec.MicrophoneInputStream
 android.speech.srec.Recognizer
 android.speech.tts.ITts$Stub
 android.speech.tts.ITts$Stub$Proxy
 android.speech.tts.TextToSpeech
-android.telephony.CellLocation
 android.telephony.PhoneNumberUtils
-android.telephony.PhoneStateListener
 android.telephony.PhoneStateListener$1
-android.telephony.PhoneStateListener$2
 android.telephony.ServiceState
-android.telephony.ServiceState$1
 android.telephony.SignalStrength
+android.telephony.SmsMessage
 android.telephony.TelephonyManager
-android.telephony.gsm.GsmCellLocation
 android.text.AndroidCharacter
 android.text.Annotation
 android.text.AutoText
 android.text.BoringLayout
-android.text.BoringLayout$Metrics
 android.text.DynamicLayout
-android.text.DynamicLayout$ChangeWatcher
-android.text.Editable
-android.text.Editable$Factory
-android.text.GetChars
-android.text.GraphicsOperations
+android.text.Html
 android.text.Html$HtmlParser
+android.text.HtmlToSpannedConverter
 android.text.IClipboard$Stub
-android.text.InputFilter
-android.text.InputType
 android.text.Layout
-android.text.Layout$Alignment
-android.text.Layout$Directions
-android.text.Layout$Ellipsizer
-android.text.NoCopySpan
-android.text.NoCopySpan$Concrete
-android.text.PackedIntVector
-android.text.PackedObjectVector
-android.text.ParcelableSpan
 android.text.Selection
-android.text.Selection$END
-android.text.Selection$START
-android.text.SpanWatcher
-android.text.Spannable
-android.text.Spannable$Factory
-android.text.SpannableString
 android.text.SpannableStringBuilder
-android.text.SpannableStringInternal
-android.text.Spanned
 android.text.SpannedString
 android.text.StaticLayout
-android.text.Styled
-android.text.TextPaint
 android.text.TextUtils
-android.text.TextUtils$1
-android.text.TextUtils$EllipsizeCallback
-android.text.TextUtils$SimpleStringSplitter
-android.text.TextUtils$StringSplitter
-android.text.TextUtils$TruncateAt
-android.text.TextWatcher
-android.text.format.DateFormat
 android.text.format.DateUtils
 android.text.format.Formatter
 android.text.format.Time
 android.text.method.ArrowKeyMovementMethod
 android.text.method.BaseKeyListener
-android.text.method.KeyListener
+android.text.method.DialerKeyListener
+android.text.method.DigitsKeyListener
+android.text.method.LinkMovementMethod
 android.text.method.MetaKeyKeyListener
-android.text.method.MovementMethod
-android.text.method.NumberKeyListener
-android.text.method.PasswordTransformationMethod
-android.text.method.PasswordTransformationMethod$PasswordCharSequence
-android.text.method.PasswordTransformationMethod$ViewReference
-android.text.method.PasswordTransformationMethod$Visible
 android.text.method.QwertyKeyListener
-android.text.method.QwertyKeyListener$Replaced
-android.text.method.ReplacementTransformationMethod
-android.text.method.ReplacementTransformationMethod$ReplacementCharSequence
 android.text.method.ReplacementTransformationMethod$SpannedReplacementCharSequence
 android.text.method.SingleLineTransformationMethod
 android.text.method.TextKeyListener
-android.text.method.TextKeyListener$Capitalize
-android.text.method.TextKeyListener$SettingsObserver
-android.text.method.Touch
-android.text.method.Touch$DragState
-android.text.method.TransformationMethod
-android.text.style.AlignmentSpan
-android.text.style.CharacterStyle
-android.text.style.ClickableSpan
-android.text.style.ForegroundColorSpan
-android.text.style.LeadingMarginSpan
-android.text.style.LineBackgroundSpan
-android.text.style.LineHeightSpan
+android.text.style.BulletSpan
+android.text.style.ImageSpan
 android.text.style.MetricAffectingSpan
-android.text.style.ParagraphStyle
-android.text.style.ReplacementSpan
 android.text.style.StyleSpan
+android.text.style.TextAppearanceSpan
 android.text.style.URLSpan
-android.text.style.UnderlineSpan
-android.text.style.UpdateAppearance
-android.text.style.UpdateLayout
-android.text.style.WrapTogetherSpan
 android.text.util.Linkify
-android.text.util.Linkify$1
-android.text.util.Linkify$2
-android.text.util.Linkify$3
-android.text.util.Linkify$4
-android.text.util.Linkify$MatchFilter
-android.text.util.Linkify$TransformFilter
 android.text.util.Regex
 android.text.util.Rfc822Validator
-android.util.AndroidException
-android.util.AndroidRuntimeException
 android.util.AttributeSet
 android.util.DisplayMetrics
 android.util.EventLog
 android.util.EventLog$Event
 android.util.EventLog$List
-android.util.FinitePool
 android.util.FloatMath
 android.util.Log
 android.util.LongSparseArray
-android.util.Pool
-android.util.Poolable
-android.util.PoolableManager
-android.util.Pools
-android.util.Printer
 android.util.SparseArray
-android.util.SparseBooleanArray
-android.util.SparseIntArray
 android.util.StateSet
-android.util.SynchronizedPool
 android.util.TypedValue
 android.util.Xml
+android.util.Xml$Encoding
 android.view.AbsSavedState
-android.view.AbsSavedState$1
-android.view.AbsSavedState$2
-android.view.ContextMenu
-android.view.ContextMenu$ContextMenuInfo
 android.view.ContextThemeWrapper
 android.view.Display
-android.view.Display$CompatibleDisplay
 android.view.FocusFinder
-android.view.FocusFinder$1
 android.view.GestureDetector
-android.view.GestureDetector$GestureHandler
-android.view.GestureDetector$OnDoubleTapListener
-android.view.GestureDetector$OnGestureListener
 android.view.GestureDetector$SimpleOnGestureListener
-android.view.Gravity
-android.view.IRotationWatcher
 android.view.IRotationWatcher$Stub
-android.view.IWindow
-android.view.IWindow$Stub
-android.view.IWindowManager
 android.view.IWindowManager$Stub
 android.view.IWindowManager$Stub$Proxy
-android.view.IWindowSession
 android.view.IWindowSession$Stub
-android.view.IWindowSession$Stub$Proxy
 android.view.KeyCharacterMap
 android.view.KeyCharacterMap$KeyData
 android.view.KeyEvent
-android.view.KeyEvent$1
-android.view.KeyEvent$Callback
 android.view.LayoutInflater
-android.view.LayoutInflater$Factory
-android.view.LayoutInflater$Filter
-android.view.Menu
-android.view.MenuInflater
 android.view.MenuInflater$MenuState
-android.view.MenuItem
 android.view.MotionEvent
-android.view.MotionEvent$1
 android.view.Surface
 android.view.Surface$1
-android.view.Surface$CompatibleCanvas
-android.view.SurfaceHolder
-android.view.SurfaceHolder$Callback
 android.view.SurfaceSession
 android.view.SurfaceView
-android.view.SurfaceView$1
-android.view.SurfaceView$2
-android.view.SurfaceView$MyWindow
-android.view.TouchDelegate
 android.view.VelocityTracker
-android.view.VelocityTracker$1
 android.view.View
-android.view.View$AttachInfo
 android.view.View$AttachInfo$Callbacks
+android.view.View$AttachInfo$InvalidateInfo
 android.view.View$BaseSavedState
-android.view.View$BaseSavedState$1
-android.view.View$CheckForLongPress
-android.view.View$MeasureSpec
-android.view.View$OnClickListener
-android.view.View$OnCreateContextMenuListener
-android.view.View$OnFocusChangeListener
-android.view.View$OnKeyListener
-android.view.View$OnLongClickListener
-android.view.View$OnTouchListener
-android.view.View$ScrollabilityCache
-android.view.View$UnsetPressedState
-android.view.ViewConfiguration
 android.view.ViewGroup
-android.view.ViewGroup$LayoutParams
-android.view.ViewGroup$MarginLayoutParams
-android.view.ViewGroup$OnHierarchyChangeListener
-android.view.ViewManager
 android.view.ViewParent
 android.view.ViewRoot
-android.view.ViewRoot$1
-android.view.ViewRoot$InputMethodCallback
-android.view.ViewRoot$RunQueue
-android.view.ViewRoot$RunQueue$HandlerAction
-android.view.ViewRoot$TrackballAxis
-android.view.ViewRoot$W
-android.view.ViewTreeObserver
-android.view.ViewTreeObserver$InternalInsetsInfo
-android.view.ViewTreeObserver$OnGlobalFocusChangeListener
-android.view.ViewTreeObserver$OnGlobalLayoutListener
-android.view.ViewTreeObserver$OnPreDrawListener
-android.view.ViewTreeObserver$OnScrollChangedListener
-android.view.ViewTreeObserver$OnTouchModeChangeListener
+android.view.ViewStub
 android.view.Window
-android.view.Window$Callback
-android.view.Window$LocalWindowManager
-android.view.WindowLeaked
-android.view.WindowManager
 android.view.WindowManager$LayoutParams
-android.view.WindowManager$LayoutParams$1
 android.view.WindowManagerImpl
 android.view.accessibility.AccessibilityEvent
 android.view.accessibility.AccessibilityEvent$1
-android.view.accessibility.AccessibilityEventSource
-android.view.accessibility.AccessibilityManager
-android.view.accessibility.AccessibilityManager$1
-android.view.accessibility.AccessibilityManager$MyHandler
-android.view.accessibility.IAccessibilityManager
-android.view.accessibility.IAccessibilityManager$Stub
-android.view.accessibility.IAccessibilityManager$Stub$Proxy
-android.view.accessibility.IAccessibilityManagerClient
-android.view.accessibility.IAccessibilityManagerClient$Stub
-android.view.animation.AccelerateDecelerateInterpolator
-android.view.animation.AccelerateInterpolator
-android.view.animation.AlphaAnimation
 android.view.animation.Animation
-android.view.animation.Animation$AnimationListener
-android.view.animation.Animation$Description
 android.view.animation.AnimationSet
-android.view.animation.AnimationUtils
-android.view.animation.Interpolator
-android.view.animation.LayoutAnimationController
-android.view.animation.ScaleAnimation
-android.view.animation.Transformation
-android.view.animation.TranslateAnimation
 android.view.inputmethod.BaseInputConnection
 android.view.inputmethod.CompletionInfo
-android.view.inputmethod.CompletionInfo$1
-android.view.inputmethod.ComposingText
 android.view.inputmethod.EditorInfo
-android.view.inputmethod.EditorInfo$1
 android.view.inputmethod.ExtractedText
-android.view.inputmethod.ExtractedText$1
-android.view.inputmethod.ExtractedTextRequest
-android.view.inputmethod.ExtractedTextRequest$1
-android.view.inputmethod.InputConnection
-android.view.inputmethod.InputConnectionWrapper
+android.view.inputmethod.InputMethodInfo
 android.view.inputmethod.InputMethodManager
 android.view.inputmethod.InputMethodManager$1
-android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper
-android.view.inputmethod.InputMethodManager$H
 android.webkit.BrowserFrame
-android.webkit.ByteArrayBuilder
-android.webkit.ByteArrayBuilder$Chunk
+android.webkit.CacheLoader
 android.webkit.CacheManager
 android.webkit.CallbackProxy
+android.webkit.CallbackProxy$ResultTransport
 android.webkit.CookieManager
 android.webkit.CookieSyncManager
 android.webkit.DataLoader
-android.webkit.FrameLoader
-android.webkit.HttpAuthHandler
+android.webkit.GearsPermissionsManager
 android.webkit.HttpDateTime
 android.webkit.JWebCoreJavaBridge
 android.webkit.LoadListener
-android.webkit.LoadListener$1
 android.webkit.MimeTypeMap
-android.webkit.PerfChecker
-android.webkit.SslErrorHandler
-android.webkit.StreamLoader
 android.webkit.TextDialog
 android.webkit.URLUtil
-android.webkit.WebBackForwardList
-android.webkit.WebHistoryItem
-android.webkit.WebIconDatabase
-android.webkit.WebIconDatabase$EventHandler
-android.webkit.WebIconDatabase$EventHandler$1
+android.webkit.WebIconDatabase$IconListener
 android.webkit.WebSettings
-android.webkit.WebSettings$EventHandler
-android.webkit.WebSettings$EventHandler$1
-android.webkit.WebSettings$LayoutAlgorithm
-android.webkit.WebSettings$RenderPriority
 android.webkit.WebSettings$TextSize
-android.webkit.WebSettings$ZoomDensity
-android.webkit.WebSyncManager
-android.webkit.WebSyncManager$SyncHandler
 android.webkit.WebView
-android.webkit.WebView$1
-android.webkit.WebView$2
-android.webkit.WebView$FocusNode
 android.webkit.WebView$HitTestResult
-android.webkit.WebView$PrivateHandler
 android.webkit.WebViewCore
-android.webkit.WebViewCore$DrawData
-android.webkit.WebViewCore$EventHub
-android.webkit.WebViewCore$EventHub$1
-android.webkit.WebViewCore$FocusData
-android.webkit.WebViewCore$WebCoreThread
-android.webkit.WebViewCore$WebCoreThread$1
 android.webkit.WebViewDatabase
+android.webkit.gears.ApacheHttpRequestAndroid
+android.webkit.gears.ApacheHttpRequestAndroid$Buffer
+android.webkit.gears.NativeDialog
 android.widget.AbsListView
-android.widget.AbsListView$1
-android.widget.AbsListView$2
 android.widget.AbsListView$3
-android.widget.AbsListView$CheckForLongPress
-android.widget.AbsListView$CheckForTap
-android.widget.AbsListView$FlingRunnable
-android.widget.AbsListView$LayoutParams
-android.widget.AbsListView$OnScrollListener
 android.widget.AbsListView$PerformClick
-android.widget.AbsListView$RecycleBin
-android.widget.AbsListView$RecyclerListener
 android.widget.AbsListView$SavedState
-android.widget.AbsListView$SavedState$1
-android.widget.AbsListView$WindowRunnnable
 android.widget.AbsSeekBar
 android.widget.AbsSpinner
-android.widget.AbsSpinner$RecycleBin
 android.widget.AbsSpinner$SavedState
-android.widget.AbsSpinner$SavedState$1
 android.widget.AbsoluteLayout
-android.widget.Adapter
 android.widget.AdapterView
-android.widget.AdapterView$AdapterDataSetObserver
-android.widget.AdapterView$OnItemClickListener
-android.widget.AdapterView$OnItemLongClickListener
-android.widget.AdapterView$OnItemSelectedListener
 android.widget.AnalogClock
 android.widget.AppSecurityPermissions
+android.widget.AppSecurityPermissions$State
 android.widget.ArrayAdapter
 android.widget.AutoCompleteTextView
-android.widget.AutoCompleteTextView$1
-android.widget.AutoCompleteTextView$2
-android.widget.AutoCompleteTextView$DropDownItemClickListener
 android.widget.AutoCompleteTextView$DropDownListView
-android.widget.AutoCompleteTextView$ListSelectorHider
-android.widget.AutoCompleteTextView$MyWatcher
-android.widget.AutoCompleteTextView$PassThroughClickListener
-android.widget.AutoCompleteTextView$PopupTouchIntercepter
-android.widget.AutoCompleteTextView$Validator
 android.widget.BaseAdapter
-android.widget.Button
+android.widget.BaseExpandableListAdapter
 android.widget.CheckBox
-android.widget.Checkable
 android.widget.CheckedTextView
 android.widget.Chronometer
 android.widget.CompoundButton
-android.widget.CompoundButton$OnCheckedChangeListener
 android.widget.CompoundButton$SavedState
-android.widget.CompoundButton$SavedState$1
 android.widget.CursorAdapter
-android.widget.CursorAdapter$ChangeObserver
-android.widget.CursorAdapter$MyDataSetObserver
-android.widget.CursorFilter
-android.widget.CursorFilter$CursorFilterClient
 android.widget.CursorTreeAdapter
 android.widget.DatePicker
 android.widget.EditText
 android.widget.ExpandableListConnector
+android.widget.ExpandableListConnector$GroupMetadata
 android.widget.ExpandableListView
 android.widget.FastScroller
-android.widget.Filter
-android.widget.Filter$FilterListener
-android.widget.Filter$FilterResults
-android.widget.Filter$RequestArguments
-android.widget.Filter$RequestHandler
-android.widget.Filter$ResultsHandler
-android.widget.FilterQueryProvider
-android.widget.Filterable
 android.widget.FrameLayout
-android.widget.FrameLayout$LayoutParams
 android.widget.Gallery
 android.widget.GridView
 android.widget.HeaderViewListAdapter
-android.widget.ImageButton
 android.widget.ImageView
 android.widget.ImageView$ScaleType
 android.widget.LinearLayout
-android.widget.LinearLayout$LayoutParams
-android.widget.ListAdapter
 android.widget.ListView
-android.widget.ListView$ArrowScrollFocusResult
-android.widget.ListView$FixedViewInfo
 android.widget.ListView$SavedState
-android.widget.ListView$SavedState$1
 android.widget.MediaController
 android.widget.MultiAutoCompleteTextView
 android.widget.PopupWindow
-android.widget.PopupWindow$1
 android.widget.PopupWindow$PopupViewContainer
 android.widget.ProgressBar
 android.widget.ProgressBar$SavedState
-android.widget.ProgressBar$SavedState$1
+android.widget.RadioButton
 android.widget.RadioGroup
 android.widget.RatingBar
 android.widget.RelativeLayout
-android.widget.RelativeLayout$DependencyGraph
 android.widget.RelativeLayout$DependencyGraph$Node
-android.widget.RelativeLayout$DependencyGraph$Node$1
-android.widget.RelativeLayout$LayoutParams
 android.widget.RemoteViews
-android.widget.RemoteViews$1
-android.widget.RemoteViews$Action
-android.widget.RemoteViews$ReflectionAction
-android.widget.RemoteViews$SetOnClickPendingIntent
 android.widget.ResourceCursorAdapter
+android.widget.ResourceCursorTreeAdapter
 android.widget.ScrollBarDrawable
 android.widget.ScrollView
-android.widget.Scroller
 android.widget.SeekBar
-android.widget.SeekBar$OnSeekBarChangeListener
+android.widget.SimpleAdapter
 android.widget.SimpleCursorAdapter
+android.widget.SimpleCursorTreeAdapter
 android.widget.SlidingDrawer
 android.widget.Spinner
-android.widget.SpinnerAdapter
+android.widget.Spinner$DropDownAdapter
 android.widget.TabHost
-android.widget.TabHost$1
-android.widget.TabHost$2
-android.widget.TabHost$ContentStrategy
-android.widget.TabHost$IndicatorStrategy
-android.widget.TabHost$IntentContentStrategy
-android.widget.TabHost$LabelAndIconIndicatorStrategy
-android.widget.TabHost$OnTabChangeListener
-android.widget.TabHost$TabSpec
-android.widget.TabHost$ViewIndicatorStrategy
 android.widget.TabWidget
-android.widget.TabWidget$OnTabSelectionChanged
-android.widget.TabWidget$TabClickListener
 android.widget.TableLayout
-android.widget.TableLayout$LayoutParams
-android.widget.TableLayout$PassThroughHierarchyChangeListener
 android.widget.TableRow
-android.widget.TableRow$ChildrenTracker
-android.widget.TableRow$LayoutParams
 android.widget.TextView
-android.widget.TextView$2
-android.widget.TextView$3
-android.widget.TextView$Blink
 android.widget.TextView$BufferType
-android.widget.TextView$ChangeWatcher
-android.widget.TextView$CharWrapper
-android.widget.TextView$Drawables
-android.widget.TextView$InputContentType
-android.widget.TextView$InputMethodState
-android.widget.TextView$OnEditorActionListener
+android.widget.TextView$CommitSelectionReceiver
 android.widget.TextView$SavedState
-android.widget.TextView$SavedState$1
 android.widget.TimePicker
+android.widget.TimePicker$SavedState
 android.widget.Toast
 android.widget.Toast$TN
-android.widget.Toast$TN$1
-android.widget.Toast$TN$2
+android.widget.TwoLineListItem
 android.widget.VideoView
 android.widget.ViewAnimator
 android.widget.ViewSwitcher
-android.widget.WrapperListAdapter
 android.widget.ZoomButton
-android.widget.ZoomButton$1
 android.widget.ZoomButtonsController
-android.widget.ZoomButtonsController$1
-android.widget.ZoomButtonsController$2
-android.widget.ZoomButtonsController$3
-android.widget.ZoomButtonsController$4
-android.widget.ZoomButtonsController$Container
-android.widget.ZoomButtonsController$OnZoomListener
 android.widget.ZoomControls
 com.android.internal.R$drawable
 com.android.internal.R$styleable
 com.android.internal.app.AlertActivity
 com.android.internal.app.AlertController
-com.android.internal.app.AlertController$1
 com.android.internal.app.AlertController$AlertParams
-com.android.internal.app.AlertController$AlertParams$3
-com.android.internal.app.AlertController$ButtonHandler
+com.android.internal.app.AlertController$AlertParams$1
 com.android.internal.app.AlertController$RecycleListView
 com.android.internal.app.ChooserActivity
 com.android.internal.app.ResolverActivity
+com.android.internal.app.ResolverActivity$ResolveListAdapter
 com.android.internal.app.RingtonePickerActivity
-com.android.internal.appwidget.IAppWidgetService
+com.android.internal.appwidget.IAppWidgetHost$Stub
 com.android.internal.appwidget.IAppWidgetService$Stub
-com.android.internal.appwidget.IAppWidgetService$Stub$Proxy
+com.android.internal.database.ArrayListCursor
 com.android.internal.database.SortCursor
+com.android.internal.database.SortCursor$1
 com.android.internal.graphics.NativeUtils
 com.android.internal.location.DummyLocationProvider
 com.android.internal.location.GpsLocationProvider
-com.android.internal.logging.AndroidConfig
 com.android.internal.logging.AndroidHandler
-com.android.internal.logging.AndroidHandler$1
 com.android.internal.os.AndroidPrintStream
 com.android.internal.os.BinderInternal
 com.android.internal.os.BinderInternal$GcWatcher
 com.android.internal.os.LoggingPrintStream
-com.android.internal.os.LoggingPrintStream$1
 com.android.internal.os.RuntimeInit
 com.android.internal.os.RuntimeInit$1
-com.android.internal.os.RuntimeInit$UncaughtHandler
 com.android.internal.os.ZygoteConnection
 com.android.internal.os.ZygoteConnection$Arguments
 com.android.internal.os.ZygoteInit
-com.android.internal.os.ZygoteInit$MethodAndArgsCaller
-com.android.internal.policy.IPolicy
 com.android.internal.policy.PolicyManager
 com.android.internal.policy.impl.PhoneLayoutInflater
 com.android.internal.policy.impl.PhoneWindow
-com.android.internal.policy.impl.PhoneWindow$1
-com.android.internal.policy.impl.PhoneWindow$ContextMenuCallback
 com.android.internal.policy.impl.PhoneWindow$DecorView
-com.android.internal.policy.impl.PhoneWindow$DrawableFeatureState
-com.android.internal.policy.impl.PhoneWindow$PanelFeatureState
 com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState
-com.android.internal.policy.impl.PhoneWindow$PanelFeatureState$SavedState$1
 com.android.internal.policy.impl.PhoneWindowManager
 com.android.internal.policy.impl.Policy
-com.android.internal.telephony.BaseCommands
-com.android.internal.telephony.Connection$DisconnectCause
 com.android.internal.telephony.GsmAlphabet
-com.android.internal.telephony.IPhoneStateListener
 com.android.internal.telephony.IPhoneStateListener$Stub
-com.android.internal.telephony.IPhoneSubInfo
 com.android.internal.telephony.IPhoneSubInfo$Stub
-com.android.internal.telephony.IPhoneSubInfo$Stub$Proxy
-com.android.internal.telephony.ITelephony
 com.android.internal.telephony.ITelephony$Stub
 com.android.internal.telephony.ITelephony$Stub$Proxy
-com.android.internal.telephony.ITelephonyRegistry
 com.android.internal.telephony.ITelephonyRegistry$Stub
-com.android.internal.telephony.ITelephonyRegistry$Stub$Proxy
-com.android.internal.telephony.IccCardApplication$PersoSubState
-com.android.internal.telephony.IccProvider
+com.android.internal.telephony.IccCard$State
 com.android.internal.telephony.Phone$State
-com.android.internal.telephony.PhoneBase
-com.android.internal.telephony.PhoneProxy
 com.android.internal.telephony.PhoneStateIntentReceiver
-com.android.internal.telephony.RIL
 com.android.internal.telephony.SmsMessageBase
-com.android.internal.telephony.gsm.GSMPhone
-com.android.internal.telephony.gsm.GsmDataConnectionTracker
-com.android.internal.telephony.gsm.GsmMmiCode
-com.android.internal.telephony.gsm.MccTable
+com.android.internal.telephony.gsm.GsmSmsAddress
 com.android.internal.telephony.gsm.SmsMessage
-com.android.internal.telephony.gsm.stk.CommandDetails
-com.android.internal.telephony.gsm.stk.ResultCode
+com.android.internal.telephony.gsm.SmsMessage$SubmitPdu
 com.android.internal.util.ArrayUtils
 com.android.internal.util.FastXmlSerializer
-com.android.internal.util.XmlUtils
 com.android.internal.view.IInputConnectionWrapper
-com.android.internal.view.IInputConnectionWrapper$MyHandler
-com.android.internal.view.IInputConnectionWrapper$SomeArgs
-com.android.internal.view.IInputContext
 com.android.internal.view.IInputContext$Stub
-com.android.internal.view.IInputContextCallback
-com.android.internal.view.IInputContextCallback$Stub
-com.android.internal.view.IInputContextCallback$Stub$Proxy
-com.android.internal.view.IInputMethodCallback
-com.android.internal.view.IInputMethodCallback$Stub
-com.android.internal.view.IInputMethodClient
-com.android.internal.view.IInputMethodClient$Stub
-com.android.internal.view.IInputMethodManager
+com.android.internal.view.IInputMethod$Stub
 com.android.internal.view.IInputMethodManager$Stub
-com.android.internal.view.IInputMethodManager$Stub$Proxy
-com.android.internal.view.IInputMethodSession
-com.android.internal.view.IInputMethodSession$Stub
-com.android.internal.view.IInputMethodSession$Stub$Proxy
-com.android.internal.view.InputBindResult
-com.android.internal.view.InputBindResult$1
+com.android.internal.view.InputConnectionWrapper$InputContextCallback
 com.android.internal.view.menu.ExpandedMenuView
 com.android.internal.view.menu.IconMenuItemView
 com.android.internal.view.menu.IconMenuView
-com.android.internal.view.menu.IconMenuView$1
-com.android.internal.view.menu.IconMenuView$LayoutParams
 com.android.internal.view.menu.IconMenuView$SavedState
-com.android.internal.view.menu.IconMenuView$SavedState$1
 com.android.internal.view.menu.ListMenuItemView
 com.android.internal.view.menu.MenuBuilder
-com.android.internal.view.menu.MenuBuilder$Callback
-com.android.internal.view.menu.MenuBuilder$ItemInvoker
-com.android.internal.view.menu.MenuBuilder$MenuAdapter
-com.android.internal.view.menu.MenuBuilder$MenuType
 com.android.internal.view.menu.MenuItemImpl
-com.android.internal.view.menu.MenuView
-com.android.internal.view.menu.MenuView$ItemView
 com.android.internal.view.menu.SubMenuBuilder
-com.android.internal.widget.DialogTitle
-com.android.internal.widget.EditableInputConnection
 com.android.internal.widget.LockPatternUtils
 com.android.internal.widget.NumberPicker
-com.google.android.collect.Lists
-com.google.android.collect.Maps
-com.google.android.collect.Sets
+com.android.internal.widget.NumberPickerButton
+com.android.internal.widget.Smileys
 com.google.android.gdata.client.AndroidGDataClient
+com.google.android.gdata.client.AndroidXmlParserFactory
 com.google.android.gles_jni.EGLImpl
 com.google.android.gles_jni.GLImpl
 com.google.android.mms.pdu.PduPersister
 com.google.android.mms.util.PduCache
 com.google.android.net.GoogleHttpClient
-com.google.android.net.GoogleHttpClient$WrappedLayeredSocketFactory
-com.google.android.net.GoogleHttpClient$WrappedSocketFactory
 com.google.android.net.NetworkStatsEntity
-com.google.android.net.SSLClientSessionCacheFactory
 com.google.android.net.UrlRules
 com.google.android.net.UrlRules$Rule
-com.google.common.Clock
 com.google.common.Config
-com.google.common.GenericClock
-com.google.common.I18n
 com.google.common.Log
-com.google.common.StaticUtil
-com.google.common.android.AndroidClock
 com.google.common.android.AndroidConfig
-com.google.common.android.AndroidConfig$1
-com.google.common.graphics.FontFactory
-com.google.common.graphics.ImageFactory
-com.google.common.graphics.InterpolatedFontFactory
-com.google.common.graphics.android.AndroidFontFactory
-com.google.common.graphics.android.AndroidImageFactory
-com.google.common.io.BaseConnectionFactory
+com.google.common.async.AsyncHttpRequestFactory$AsyncHttpRequestImpl
+com.google.common.graphics.android.AndroidGraphics
 com.google.common.io.BaseHttpConnectionFactory
-com.google.common.io.BasePersistentStore
-com.google.common.io.BaseTcpConnectionFactory
-com.google.common.io.ConnectionFactory
-com.google.common.io.GoogleHttpConnection
-com.google.common.io.Gunzipper
-com.google.common.io.Gunzipper$GunzipInterface
-com.google.common.io.HttpConnectionFactory
-com.google.common.io.InMemoryPersistentStore
-com.google.common.io.PersistentStore
-com.google.common.io.PersistentStore$PersistentStoreException
-com.google.common.io.PreferenceStore
-com.google.common.io.TcpConnectionFactory
-com.google.common.io.android.AndroidFixedPersistentStore
+com.google.common.io.IoUtil
 com.google.common.io.android.AndroidHttpClient
-com.google.common.io.android.AndroidHttpClient$1
-com.google.common.io.android.AndroidHttpClient$2
-com.google.common.io.android.AndroidHttpClient$CurlLogger
-com.google.common.io.android.AndroidHttpClient$LoggingConfiguration
 com.google.common.io.android.AndroidHttpConnectionFactory
-com.google.common.io.android.AndroidHttpConnectionFactory$1
-com.google.common.io.android.AndroidHttpConnectionFactory$AndroidGoogleHttpConnection
 com.google.common.io.android.AndroidPersistentStore
-com.google.common.io.android.AndroidTcpConnectionFactory
-com.google.common.io.android.CountingByteChannel$Counter
-com.google.common.io.android.GoogleHttpClient
-com.google.common.io.android.J2SeTcpConnectionFactory
 com.google.common.io.protocol.ProtoBuf
 com.google.common.io.protocol.ProtoBufType
 com.google.common.util.text.TextUtil
-com.google.debug.DebugUtil
+com.google.masf.BlockingByteQueue
 com.google.masf.MobileServiceMux
+com.google.masf.protocol.PlainRequest
+com.google.masf.services.EventLogService
 com.google.masf.services.LogserviceMessageTypes
 com.google.masf.services.resume.WindowResumeService
 com.google.wireless.gdata.calendar.client.CalendarClient
+com.google.wireless.gdata.client.GDataServiceClient
 com.google.wireless.gdata.contacts.client.ContactsClient
+com.google.wireless.gdata.contacts.parser.xml.XmlContactsGDataParserFactory
 com.ibm.icu4jni.charset.CharsetDecoderICU
 com.ibm.icu4jni.charset.CharsetEncoderICU
 com.ibm.icu4jni.charset.CharsetICU
@@ -1339,23 +807,14 @@
 com.ibm.icu4jni.common.ErrorCode
 com.ibm.icu4jni.lang.UCharacter
 com.ibm.icu4jni.regex.NativeRegEx
-com.ibm.icu4jni.text.CollationAttribute
-com.ibm.icu4jni.text.Collator
 com.ibm.icu4jni.text.DecimalFormat
-com.ibm.icu4jni.text.DecimalFormatSymbols
-com.ibm.icu4jni.text.DecimalFormatSymbols$1
 com.ibm.icu4jni.text.NativeBreakIterator
 com.ibm.icu4jni.text.NativeCollation
 com.ibm.icu4jni.text.NativeDecimalFormat
 com.ibm.icu4jni.text.NativeDecimalFormat$UNumberFormatAttribute
 com.ibm.icu4jni.text.NativeDecimalFormat$UNumberFormatSymbol
-com.ibm.icu4jni.text.RuleBasedCollator
 com.ibm.icu4jni.text.RuleBasedNumberFormat
 com.ibm.icu4jni.util.Resources
-com.ibm.icu4jni.util.Resources$ISO4Currencies
-com.ibm.icu4jni.util.Resources$ISO4CurrenciesToDigits
-com.ibm.icu4jni.util.Resources$Locale
-dalvik.system.DexFile
 dalvik.system.NativeStart
 dalvik.system.PathClassLoader
 dalvik.system.TouchDex
@@ -1364,53 +823,39 @@
 dalvik.system.VMStack
 dalvik.system.Zygote
 java.beans.PropertyChangeEvent
-java.beans.PropertyChangeListener
 java.beans.PropertyChangeSupport
 java.io.BufferedInputStream
-java.io.BufferedOutputStream
 java.io.BufferedReader
-java.io.ByteArrayInputStream
-java.io.ByteArrayOutputStream
 java.io.Closeable
 java.io.DataInput
-java.io.DataInputStream
 java.io.DataOutput
 java.io.DataOutputStream
-java.io.Externalizable
+java.io.EmulatedFieldsForDumping
+java.io.EmulatedFieldsForLoading
 java.io.File
 java.io.FileDescriptor
 java.io.FileInputStream
 java.io.FileInputStream$RepositioningLock
-java.io.FileNotFoundException
 java.io.FileOutputStream
-java.io.FilterInputStream
 java.io.FilterOutputStream
 java.io.Flushable
-java.io.IOException
 java.io.InputStream
 java.io.InputStreamReader
-java.io.InterruptedIOException
 java.io.ObjectInput
 java.io.ObjectInputStream
 java.io.ObjectOutput
 java.io.ObjectOutputStream
 java.io.ObjectStreamClass
 java.io.ObjectStreamConstants
-java.io.ObjectStreamException
 java.io.ObjectStreamField
-java.io.ObjectStreamField$1
 java.io.OutputStream
 java.io.PrintStream
 java.io.PrintWriter
+java.io.PushbackReader
 java.io.RandomAccessFile
-java.io.RandomAccessFile$RepositionLock
 java.io.Reader
 java.io.Serializable
-java.io.StreamCorruptedException
-java.io.StringReader
 java.io.StringWriter
-java.io.UnsupportedEncodingException
-java.io.Writer
 java.lang.AbstractStringBuilder
 java.lang.Appendable
 java.lang.ArrayIndexOutOfBoundsException
@@ -1423,23 +868,16 @@
 java.lang.Class
 java.lang.ClassCache
 java.lang.ClassCache$EnumComparator
-java.lang.ClassCastException
 java.lang.ClassLoader
 java.lang.ClassLoader$SystemClassLoader
-java.lang.ClassNotFoundException
-java.lang.CloneNotSupportedException
 java.lang.Cloneable
 java.lang.Comparable
 java.lang.Double
 java.lang.Enum
 java.lang.Error
 java.lang.Exception
-java.lang.ExceptionInInitializerError
 java.lang.Float
 java.lang.IllegalArgumentException
-java.lang.IllegalStateException
-java.lang.IncompatibleClassChangeError
-java.lang.IndexOutOfBoundsException
 java.lang.Integer
 java.lang.Integer$valueOfCache
 java.lang.InternalError
@@ -1451,9 +889,6 @@
 java.lang.Long$valueOfCache
 java.lang.Math
 java.lang.NoClassDefFoundError
-java.lang.NoSuchFieldException
-java.lang.NoSuchMethodException
-java.lang.NullPointerException
 java.lang.Number
 java.lang.NumberFormatException
 java.lang.Object
@@ -1481,8 +916,6 @@
 java.lang.ThreadGroup
 java.lang.ThreadGroup$ChildrenGroupsLock
 java.lang.ThreadGroup$ChildrenThreadsLock
-java.lang.ThreadLocal
-java.lang.ThreadLocal$Values
 java.lang.Throwable
 java.lang.UnsatisfiedLinkError
 java.lang.UnsupportedOperationException
@@ -1510,45 +943,26 @@
 java.lang.reflect.Type
 java.math.BigDecimal
 java.math.BigInt
-java.math.BigInt$Context
 java.math.BigInteger
 java.math.Multiplication
-java.net.ContentHandler
 java.net.DatagramPacket
 java.net.HttpURLConnection
 java.net.Inet4Address
-java.net.Inet6Address
 java.net.InetAddress
-java.net.InetAddress$Cache
-java.net.InetAddress$CacheElement
 java.net.InetAddress$WaitReachable
 java.net.InetSocketAddress
 java.net.JarURLConnection
-java.net.NegativeCache
-java.net.NetPermission
 java.net.NetworkInterface
 java.net.Proxy
-java.net.Proxy$Type
 java.net.ProxySelector
 java.net.ProxySelectorImpl
-java.net.ProxySelectorImpl$1
-java.net.ResponseCache
 java.net.ServerSocket
 java.net.Socket
-java.net.Socket$ConnectLock
-java.net.SocketAddress
 java.net.SocketImpl
 java.net.SocketOptions
-java.net.SocketTimeoutException
 java.net.URI
-java.net.URI$Helper
-java.net.URIEncoderDecoder
-java.net.URISyntaxException
 java.net.URL
 java.net.URLConnection
-java.net.URLConnection$DefaultContentHandler
-java.net.URLEncoder
-java.net.URLStreamHandler
 java.nio.BaseByteBuffer
 java.nio.Buffer
 java.nio.BufferFactory
@@ -1557,13 +971,18 @@
 java.nio.CharArrayBuffer
 java.nio.CharBuffer
 java.nio.CharSequenceAdapter
+java.nio.CharToByteBufferAdapter
 java.nio.DirectByteBuffer
+java.nio.FloatBuffer
+java.nio.FloatToByteBufferAdapter
 java.nio.HeapByteBuffer
 java.nio.IntToByteBufferAdapter
 java.nio.NIOAccess
 java.nio.ReadWriteCharArrayBuffer
 java.nio.ReadWriteDirectByteBuffer
 java.nio.ReadWriteHeapByteBuffer
+java.nio.ReadWriteIntArrayBuffer
+java.nio.ShortToByteBufferAdapter
 java.nio.channels.ByteChannel
 java.nio.channels.Channel
 java.nio.channels.FileChannel
@@ -1581,248 +1000,127 @@
 java.nio.charset.CoderResult
 java.nio.charset.CodingErrorAction
 java.nio.charset.spi.CharsetProvider
-java.security.AccessControlContext
 java.security.AccessController
 java.security.BasicPermission
-java.security.GeneralSecurityException
 java.security.Guard
-java.security.Key
-java.security.KeyFactory
-java.security.KeyFactorySpi
 java.security.KeyStore
-java.security.KeyStore$1
-java.security.KeyStoreSpi
 java.security.MessageDigest
-java.security.MessageDigestSpi
 java.security.Permission
-java.security.Principal
 java.security.PrivilegedAction
 java.security.PrivilegedExceptionAction
-java.security.ProtectionDomain
 java.security.Provider
-java.security.Provider$Service
-java.security.Provider$Service$1
-java.security.PublicKey
 java.security.SecureRandom
-java.security.SecureRandomSpi
 java.security.Security
-java.security.Security$1
-java.security.Security$SecurityDoor
-java.security.cert.CertPath
-java.security.cert.CertPathParameters
-java.security.cert.CertPathValidator
-java.security.cert.CertPathValidatorResult
-java.security.cert.CertPathValidatorSpi
-java.security.cert.CertSelector
-java.security.cert.Certificate
-java.security.cert.CertificateFactory
-java.security.cert.CertificateFactorySpi
-java.security.cert.PKIXCertPathValidatorResult
+java.security.cert.CertificateParsingException
 java.security.cert.PKIXParameters
-java.security.cert.PolicyNode
-java.security.cert.TrustAnchor
 java.security.cert.X509CertSelector
 java.security.cert.X509Certificate
-java.security.cert.X509Extension
-java.security.interfaces.RSAKey
-java.security.interfaces.RSAPublicKey
-java.security.spec.EncodedKeySpec
-java.security.spec.KeySpec
-java.security.spec.X509EncodedKeySpec
-java.text.AttributedCharacterIterator$Attribute
 java.text.Collator
 java.text.DateFormat
 java.text.DateFormat$Field
-java.text.DateFormatSymbols
 java.text.DecimalFormat
-java.text.DecimalFormat$2
 java.text.DecimalFormatSymbols
-java.text.FieldPosition
 java.text.Format
-java.text.Format$1
-java.text.Format$Field
 java.text.NumberFormat
-java.text.RuleBasedCollator
 java.text.SimpleDateFormat
 java.util.AbstractCollection
 java.util.AbstractList
-java.util.AbstractList$FullListIterator
-java.util.AbstractList$SimpleListIterator
 java.util.AbstractMap
-java.util.AbstractQueue
-java.util.AbstractSequentialList
 java.util.AbstractSet
 java.util.ArrayList
 java.util.Arrays
-java.util.Arrays$ArrayList
+java.util.BitSet
 java.util.Calendar
 java.util.Collection
 java.util.Collections
 java.util.Collections$EmptyList
 java.util.Collections$EmptyMap
 java.util.Collections$EmptySet
-java.util.Collections$SynchronizedCollection
-java.util.Collections$SynchronizedSet
+java.util.Collections$SynchronizedList
+java.util.Collections$SynchronizedRandomAccessList
 java.util.Collections$UnmodifiableCollection
 java.util.Collections$UnmodifiableCollection$1
 java.util.Collections$UnmodifiableList
-java.util.Collections$UnmodifiableMap
-java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet
-java.util.Collections$UnmodifiableMap$UnmodifiableEntrySet$1
 java.util.Collections$UnmodifiableRandomAccessList
 java.util.Collections$UnmodifiableSet
-java.util.ComparableTimSort
 java.util.Comparator
-java.util.Currency
 java.util.Date
 java.util.Dictionary
 java.util.EnumMap
 java.util.EnumSet
 java.util.Enumeration
-java.util.EventListener
-java.util.EventObject
-java.util.Formattable
 java.util.Formatter
-java.util.Formatter$FloatUtil
-java.util.Formatter$FormatToken
-java.util.Formatter$ParserStateMachine
-java.util.Formatter$Transformer
 java.util.GregorianCalendar
 java.util.HashMap
 java.util.HashMap$1
 java.util.HashMap$1$1
-java.util.HashMap$2
-java.util.HashMap$2$1
 java.util.HashMap$Entry
-java.util.HashMap$HashMapEntrySet
-java.util.HashMap$HashMapEntrySet$1
 java.util.HashMap$HashMapIterator
 java.util.HashSet
 java.util.Hashtable
 java.util.Hashtable$1
-java.util.Hashtable$2
-java.util.Hashtable$2$1
-java.util.Hashtable$4
-java.util.Hashtable$4$1
 java.util.Hashtable$Entry
-java.util.Hashtable$HashEnumerator
-java.util.Hashtable$HashIterator
 java.util.IdentityHashMap
 java.util.Iterator
-java.util.LinkedHashMap
-java.util.LinkedHashMap$1
-java.util.LinkedHashMap$1$1
-java.util.LinkedHashMap$LinkedHashIterator
-java.util.LinkedHashMap$LinkedHashMapEntry
-java.util.LinkedHashMap$LinkedHashMapEntrySet
-java.util.LinkedHashMap$LinkedHashMapEntrySet$1
 java.util.LinkedList
-java.util.LinkedList$Link
-java.util.LinkedList$LinkIterator
 java.util.List
-java.util.ListIterator
-java.util.ListResourceBundle
 java.util.Locale
-java.util.Locale$1
 java.util.Map
 java.util.Map$Entry
 java.util.MapEntry
 java.util.MapEntry$Type
-java.util.Observable
-java.util.Observer
 java.util.PriorityQueue
 java.util.Properties
 java.util.PropertyPermission
-java.util.PropertyResourceBundle
-java.util.Queue
-java.util.Random
 java.util.RandomAccess
 java.util.ResourceBundle
-java.util.ResourceBundle$1
-java.util.ResourceBundle$MissingBundle
 java.util.Scanner
 java.util.Set
 java.util.SimpleTimeZone
 java.util.SortedMap
 java.util.SortedSet
+java.util.SpecialAccess
 java.util.Stack
 java.util.StringTokenizer
-java.util.TimSort
 java.util.TimeZone
 java.util.Timer
 java.util.TreeMap
-java.util.TreeMap$2
-java.util.TreeMap$AbstractMapIterator
-java.util.TreeMap$Entry
-java.util.TreeMap$UnboundedKeyIterator
 java.util.TreeSet
 java.util.Vector
+java.util.Vector$1
 java.util.WeakHashMap
-java.util.WeakHashMap$1
-java.util.WeakHashMap$1$1
-java.util.WeakHashMap$2
-java.util.WeakHashMap$2$1
 java.util.WeakHashMap$Entry
-java.util.WeakHashMap$Entry$Type
-java.util.WeakHashMap$HashIterator
 java.util.concurrent.AbstractExecutorService
-java.util.concurrent.BlockingQueue
-java.util.concurrent.Callable
+java.util.concurrent.ArrayBlockingQueue
 java.util.concurrent.ConcurrentHashMap
+java.util.concurrent.ConcurrentHashMap$Segment
 java.util.concurrent.CopyOnWriteArrayList
-java.util.concurrent.CopyOnWriteArrayList$ListIteratorImpl
-java.util.concurrent.Executor
-java.util.concurrent.ExecutorService
-java.util.concurrent.Executors
-java.util.concurrent.Executors$DefaultThreadFactory
-java.util.concurrent.Future
-java.util.concurrent.FutureTask
-java.util.concurrent.FutureTask$Sync
+java.util.concurrent.DelayQueue
+java.util.concurrent.Executors$DelegatedExecutorService
+java.util.concurrent.Executors$DelegatedScheduledExecutorService
 java.util.concurrent.LinkedBlockingQueue
-java.util.concurrent.LinkedBlockingQueue$Node
-java.util.concurrent.RejectedExecutionHandler
 java.util.concurrent.ScheduledThreadPoolExecutor
+java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue
+java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask
+java.util.concurrent.Semaphore
 java.util.concurrent.SynchronousQueue
-java.util.concurrent.ThreadFactory
+java.util.concurrent.SynchronousQueue$Node
 java.util.concurrent.ThreadPoolExecutor
-java.util.concurrent.ThreadPoolExecutor$AbortPolicy
-java.util.concurrent.ThreadPoolExecutor$Worker
 java.util.concurrent.TimeUnit
 java.util.concurrent.atomic.AtomicInteger
 java.util.concurrent.atomic.AtomicLong
+java.util.concurrent.atomic.AtomicReference
 java.util.concurrent.atomic.UnsafeAccess
 java.util.concurrent.locks.AbstractQueuedSynchronizer
-java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject
-java.util.concurrent.locks.AbstractQueuedSynchronizer$Node
-java.util.concurrent.locks.Condition
-java.util.concurrent.locks.Lock
-java.util.concurrent.locks.LockSupport
 java.util.concurrent.locks.ReentrantLock
-java.util.concurrent.locks.ReentrantLock$FairSync
-java.util.concurrent.locks.ReentrantLock$NonfairSync
 java.util.concurrent.locks.ReentrantLock$Sync
-java.util.concurrent.locks.UnsafeAccess
-java.util.jar.Attributes
 java.util.jar.Attributes$Name
-java.util.jar.InitManifest
-java.util.jar.JarEntry
 java.util.jar.JarFile
-java.util.jar.JarFile$1JarFileEnumerator
-java.util.jar.JarFile$JarFileInputStream
-java.util.jar.JarVerifier
 java.util.jar.Manifest
-java.util.logging.ErrorManager
-java.util.logging.Formatter
-java.util.logging.Handler
 java.util.logging.Level
 java.util.logging.LogManager
-java.util.logging.LogManager$1
-java.util.logging.LogManager$2
-java.util.logging.LogManager$2$1
-java.util.logging.LogManager$3
 java.util.logging.LogRecord
 java.util.logging.Logger
-java.util.logging.LoggingPermission
 java.util.regex.MatchResult
 java.util.regex.Matcher
 java.util.regex.Pattern
@@ -1831,102 +1129,47 @@
 java.util.zip.Checksum
 java.util.zip.Deflater
 java.util.zip.DeflaterOutputStream
-java.util.zip.GZIPInputStream
-java.util.zip.GZIPOutputStream
 java.util.zip.Inflater
-java.util.zip.InflaterInputStream
-java.util.zip.ZipConstants
-java.util.zip.ZipEntry
-java.util.zip.ZipEntry$LittleEndianReader
 java.util.zip.ZipFile
-java.util.zip.ZipFile$2
-java.util.zip.ZipFile$RAFStream
+javax.crypto.Cipher
+javax.crypto.spec.SecretKeySpec
 javax.microedition.khronos.egl.EGL
 javax.microedition.khronos.egl.EGL10
+javax.microedition.khronos.egl.EGLContext
 javax.microedition.khronos.opengles.GL
 javax.microedition.khronos.opengles.GL10
 javax.microedition.khronos.opengles.GL10Ext
 javax.microedition.khronos.opengles.GL11
 javax.microedition.khronos.opengles.GL11Ext
 javax.microedition.khronos.opengles.GL11ExtensionPack
-javax.net.SocketFactory
 javax.net.ssl.DefaultHostnameVerifier
-javax.net.ssl.HostnameVerifier
 javax.net.ssl.HttpsURLConnection
-javax.net.ssl.KeyManager
-javax.net.ssl.KeyManagerFactory
-javax.net.ssl.KeyManagerFactory$1
-javax.net.ssl.KeyManagerFactorySpi
-javax.net.ssl.SSLContextSpi
+javax.net.ssl.SSLContext
+javax.net.ssl.SSLHandshakeException
 javax.net.ssl.SSLServerSocket
 javax.net.ssl.SSLSession
-javax.net.ssl.SSLSessionContext
 javax.net.ssl.SSLSocket
-javax.net.ssl.SSLSocketFactory
-javax.net.ssl.SSLSocketFactory$1
-javax.net.ssl.TrustManager
-javax.net.ssl.TrustManagerFactory
-javax.net.ssl.TrustManagerFactory$1
-javax.net.ssl.TrustManagerFactorySpi
-javax.net.ssl.X509ExtendedKeyManager
-javax.net.ssl.X509KeyManager
-javax.net.ssl.X509TrustManager
-javax.security.auth.x500.X500Principal
-javax.security.cert.Certificate
 javax.security.cert.X509Certificate
-javax.security.cert.X509Certificate$1
-javax.security.cert.X509Certificate$2
-javax.xml.parsers.DocumentBuilder
-javax.xml.parsers.DocumentBuilderFactory
 junit.framework.Assert
-org.apache.commons.codec.BinaryDecoder
-org.apache.commons.codec.BinaryEncoder
-org.apache.commons.codec.Decoder
-org.apache.commons.codec.Encoder
 org.apache.commons.codec.binary.Base64
 org.apache.commons.codec.binary.Hex
-org.apache.commons.logging.Log
 org.apache.commons.logging.LogFactory
 org.apache.commons.logging.impl.Jdk14Logger
-org.apache.commons.logging.impl.WeakHashtable
-org.apache.harmony.archive.util.Util
 org.apache.harmony.dalvik.NativeTestTarget
-org.apache.harmony.dalvik.ddmc.Chunk
 org.apache.harmony.dalvik.ddmc.ChunkHandler
 org.apache.harmony.dalvik.ddmc.DdmServer
 org.apache.harmony.kernel.vm.LangAccess
 org.apache.harmony.kernel.vm.ReflectionAccess
 org.apache.harmony.lang.annotation.AnnotationFactory
 org.apache.harmony.lang.annotation.AnnotationMember
-org.apache.harmony.luni.internal.net.www.protocol.file.FileURLConnection
-org.apache.harmony.luni.internal.net.www.protocol.file.Handler
-org.apache.harmony.luni.internal.net.www.protocol.http.Handler
-org.apache.harmony.luni.internal.net.www.protocol.http.Header
-org.apache.harmony.luni.internal.net.www.protocol.http.HttpConfiguration
-org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnection
-org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionManager
-org.apache.harmony.luni.internal.net.www.protocol.http.HttpConnectionManager$ConnectionPool
+org.apache.harmony.lang.annotation.AnnotationMember$DefaultValues
 org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection
-org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection$1
-org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnection$LimitedInputStream
 org.apache.harmony.luni.internal.net.www.protocol.https.Handler
 org.apache.harmony.luni.internal.net.www.protocol.jar.Handler
 org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnection
-org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnection$1
-org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnection$CacheEntry
-org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnection$JarURLConnectionInputStream
-org.apache.harmony.luni.internal.net.www.protocol.jar.JarURLConnection$LRUComparator
-org.apache.harmony.luni.internal.util.TimezoneGetter
-org.apache.harmony.luni.internal.util.ZoneInfo
 org.apache.harmony.luni.internal.util.ZoneInfoDB
 org.apache.harmony.luni.net.GenericIPMreq
-org.apache.harmony.luni.net.NetUtil
-org.apache.harmony.luni.net.NetUtil$Action
 org.apache.harmony.luni.net.PlainSocketImpl
-org.apache.harmony.luni.net.PlainSocketImpl2
-org.apache.harmony.luni.net.SocketImplProvider
-org.apache.harmony.luni.net.SocketInputStream
-org.apache.harmony.luni.net.SocketOutputStream
 org.apache.harmony.luni.platform.AdapterManager
 org.apache.harmony.luni.platform.Endianness
 org.apache.harmony.luni.platform.IAdaptable
@@ -1944,19 +1187,9 @@
 org.apache.harmony.luni.platform.Platform
 org.apache.harmony.luni.platform.PlatformAddress
 org.apache.harmony.luni.platform.PlatformAddressFactory
-org.apache.harmony.luni.util.Base64
 org.apache.harmony.luni.util.FloatingPointParser
-org.apache.harmony.luni.util.FloatingPointParser$StringExponentPair
-org.apache.harmony.luni.util.Inet6Util
-org.apache.harmony.luni.util.MsgHelp
-org.apache.harmony.luni.util.MsgHelp$1
 org.apache.harmony.luni.util.NumberConverter
 org.apache.harmony.luni.util.PriviAction
-org.apache.harmony.luni.util.TwoKeyHashMap
-org.apache.harmony.luni.util.TwoKeyHashMap$Entry
-org.apache.harmony.luni.util.TwoKeyHashMap$EntryIteratorImpl
-org.apache.harmony.luni.util.TwoKeyHashMap$ValueIteratorImpl
-org.apache.harmony.luni.util.TwoKeyHashMap$ValuesCollectionImpl
 org.apache.harmony.luni.util.Util
 org.apache.harmony.nio.AddressUtil
 org.apache.harmony.nio.FileChannelFactory
@@ -1966,508 +1199,160 @@
 org.apache.harmony.nio.internal.LockManager
 org.apache.harmony.nio.internal.LockManager$1
 org.apache.harmony.nio.internal.WriteOnlyFileChannel
-org.apache.harmony.security.asn1.ASN1Any
-org.apache.harmony.security.asn1.ASN1BitString
-org.apache.harmony.security.asn1.ASN1BitString$ASN1NamedBitList
-org.apache.harmony.security.asn1.ASN1Boolean
-org.apache.harmony.security.asn1.ASN1Choice
-org.apache.harmony.security.asn1.ASN1Constants
-org.apache.harmony.security.asn1.ASN1Constructured
-org.apache.harmony.security.asn1.ASN1Explicit
 org.apache.harmony.security.asn1.ASN1GeneralizedTime
-org.apache.harmony.security.asn1.ASN1Implicit
 org.apache.harmony.security.asn1.ASN1Integer
-org.apache.harmony.security.asn1.ASN1OctetString
 org.apache.harmony.security.asn1.ASN1Oid
-org.apache.harmony.security.asn1.ASN1Oid$1
-org.apache.harmony.security.asn1.ASN1Primitive
 org.apache.harmony.security.asn1.ASN1Sequence
-org.apache.harmony.security.asn1.ASN1SequenceOf
-org.apache.harmony.security.asn1.ASN1SetOf
 org.apache.harmony.security.asn1.ASN1StringType
-org.apache.harmony.security.asn1.ASN1StringType$1
-org.apache.harmony.security.asn1.ASN1StringType$2
-org.apache.harmony.security.asn1.ASN1StringType$3
-org.apache.harmony.security.asn1.ASN1StringType$4
-org.apache.harmony.security.asn1.ASN1StringType$5
-org.apache.harmony.security.asn1.ASN1StringType$6
-org.apache.harmony.security.asn1.ASN1StringType$7
-org.apache.harmony.security.asn1.ASN1Time
-org.apache.harmony.security.asn1.ASN1Type
-org.apache.harmony.security.asn1.ASN1TypeCollection
-org.apache.harmony.security.asn1.ASN1UTCTime
-org.apache.harmony.security.asn1.ASN1ValueCollection
-org.apache.harmony.security.asn1.BerInputStream
-org.apache.harmony.security.asn1.BerOutputStream
-org.apache.harmony.security.asn1.BitString
 org.apache.harmony.security.asn1.DerInputStream
 org.apache.harmony.security.asn1.DerOutputStream
-org.apache.harmony.security.asn1.ObjectIdentifier
-org.apache.harmony.security.fortress.Engine
-org.apache.harmony.security.fortress.SecurityAccess
-org.apache.harmony.security.fortress.SecurityUtils
 org.apache.harmony.security.fortress.Services
-org.apache.harmony.security.fortress.Services$1
-org.apache.harmony.security.internal.nls.Messages
 org.apache.harmony.security.pkcs7.ContentInfo
-org.apache.harmony.security.pkcs7.ContentInfo$1
-org.apache.harmony.security.provider.cert.Cache
 org.apache.harmony.security.provider.cert.DRLCertFactory
-org.apache.harmony.security.provider.cert.DRLCertFactory$1
 org.apache.harmony.security.provider.cert.X509CertFactoryImpl
 org.apache.harmony.security.provider.cert.X509CertImpl
 org.apache.harmony.security.provider.cert.X509CertPathImpl
-org.apache.harmony.security.provider.cert.X509CertPathImpl$1
-org.apache.harmony.security.provider.cert.X509CertPathImpl$2
-org.apache.harmony.security.provider.cert.X509CertPathImpl$3
-org.apache.harmony.security.provider.crypto.CryptoProvider
-org.apache.harmony.security.provider.crypto.CryptoProvider$1
 org.apache.harmony.security.provider.crypto.RandomBitsSupplier
-org.apache.harmony.security.provider.crypto.RandomBitsSupplier$1
-org.apache.harmony.security.provider.crypto.SHA1Impl
 org.apache.harmony.security.provider.crypto.SHA1PRNG_SecureRandomImpl
-org.apache.harmony.security.provider.crypto.SHA1_Data
+org.apache.harmony.security.provider.crypto.SHA1_MessageDigestImpl
 org.apache.harmony.security.utils.AlgNameMapper
-org.apache.harmony.security.utils.ObjectIdentifier
 org.apache.harmony.security.x501.AttributeTypeAndValue
-org.apache.harmony.security.x501.AttributeTypeAndValue$1
-org.apache.harmony.security.x501.AttributeTypeAndValue$2
-org.apache.harmony.security.x501.AttributeTypeAndValueComparator
-org.apache.harmony.security.x501.AttributeValue
 org.apache.harmony.security.x501.DirectoryString
-org.apache.harmony.security.x501.DirectoryString$1
 org.apache.harmony.security.x501.Name
-org.apache.harmony.security.x501.Name$1
 org.apache.harmony.security.x509.AlgorithmIdentifier
-org.apache.harmony.security.x509.AlgorithmIdentifier$1
 org.apache.harmony.security.x509.BasicConstraints
-org.apache.harmony.security.x509.BasicConstraints$1
 org.apache.harmony.security.x509.Certificate
-org.apache.harmony.security.x509.Certificate$1
-org.apache.harmony.security.x509.DNParser
 org.apache.harmony.security.x509.EDIPartyName
-org.apache.harmony.security.x509.EDIPartyName$1
 org.apache.harmony.security.x509.Extension
-org.apache.harmony.security.x509.Extension$1
-org.apache.harmony.security.x509.Extension$2
-org.apache.harmony.security.x509.ExtensionValue
 org.apache.harmony.security.x509.Extensions
-org.apache.harmony.security.x509.Extensions$1
 org.apache.harmony.security.x509.GeneralName
-org.apache.harmony.security.x509.GeneralName$1
 org.apache.harmony.security.x509.GeneralNames
-org.apache.harmony.security.x509.GeneralNames$1
 org.apache.harmony.security.x509.KeyUsage
 org.apache.harmony.security.x509.ORAddress
-org.apache.harmony.security.x509.ORAddress$1
-org.apache.harmony.security.x509.ORAddress$2
 org.apache.harmony.security.x509.OtherName
-org.apache.harmony.security.x509.OtherName$1
+org.apache.harmony.security.x509.PolicyQualifierInfo
 org.apache.harmony.security.x509.SubjectPublicKeyInfo
-org.apache.harmony.security.x509.SubjectPublicKeyInfo$1
 org.apache.harmony.security.x509.TBSCertificate
-org.apache.harmony.security.x509.TBSCertificate$1
 org.apache.harmony.security.x509.Time
-org.apache.harmony.security.x509.Time$1
-org.apache.harmony.security.x509.Utils
 org.apache.harmony.security.x509.Validity
-org.apache.harmony.security.x509.Validity$1
 org.apache.harmony.text.BidiWrapper
 org.apache.harmony.xml.ExpatAttributes
 org.apache.harmony.xml.ExpatParser
-org.apache.harmony.xml.ExpatParser$ClonedAttributes
-org.apache.harmony.xml.ExpatParser$CurrentAttributes
-org.apache.harmony.xml.ExpatParser$ExpatLocator
 org.apache.harmony.xml.ExpatPullParser
 org.apache.harmony.xml.ExpatPullParser$ByteDocument
-org.apache.harmony.xml.ExpatPullParser$Document
-org.apache.harmony.xml.ExpatPullParser$Document$SaxHandler
-org.apache.harmony.xml.ExpatPullParser$EndTagEvent
-org.apache.harmony.xml.ExpatPullParser$Event
-org.apache.harmony.xml.ExpatPullParser$NamespaceStack
-org.apache.harmony.xml.ExpatPullParser$NamespaceStack$Builder
-org.apache.harmony.xml.ExpatPullParser$StartDocumentEvent
-org.apache.harmony.xml.ExpatPullParser$StartTagEvent
-org.apache.harmony.xml.ExpatPullParser$TextEvent
 org.apache.harmony.xml.ExpatReader
-org.apache.harmony.xml.dom.DOMImplementationImpl
+org.apache.harmony.xml.dom.AttrImpl
+org.apache.harmony.xml.dom.CharacterDataImpl
+org.apache.harmony.xml.dom.CommentImpl
 org.apache.harmony.xml.dom.DocumentImpl
+org.apache.harmony.xml.dom.ElementImpl
+org.apache.harmony.xml.dom.InnerNodeImpl
+org.apache.harmony.xml.dom.NodeImpl
+org.apache.harmony.xml.dom.TextImpl
 org.apache.harmony.xml.parsers.DocumentBuilderFactoryImpl
 org.apache.harmony.xml.parsers.DocumentBuilderImpl
+org.apache.harmony.xml.parsers.SAXParserFactoryImpl
 org.apache.harmony.xnet.provider.jsse.AbstractSessionContext
-org.apache.harmony.xnet.provider.jsse.ClientSessionContext
-org.apache.harmony.xnet.provider.jsse.ClientSessionContext$1
-org.apache.harmony.xnet.provider.jsse.ClientSessionContext$HostAndPort
 org.apache.harmony.xnet.provider.jsse.FileClientSessionCache
-org.apache.harmony.xnet.provider.jsse.FileClientSessionCache$Impl
-org.apache.harmony.xnet.provider.jsse.JSSEProvider
-org.apache.harmony.xnet.provider.jsse.JSSEProvider$1
-org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl
-org.apache.harmony.xnet.provider.jsse.KeyManagerFactoryImpl$1
-org.apache.harmony.xnet.provider.jsse.KeyManagerImpl
 org.apache.harmony.xnet.provider.jsse.NativeCrypto
-org.apache.harmony.xnet.provider.jsse.OpenSSLMessageDigest
 org.apache.harmony.xnet.provider.jsse.OpenSSLServerSocketImpl
 org.apache.harmony.xnet.provider.jsse.OpenSSLSessionImpl
 org.apache.harmony.xnet.provider.jsse.OpenSSLSocketFactoryImpl
 org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl
 org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$Finalizer
 org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$LoggerHolder
-org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream
-org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLOutputStream
 org.apache.harmony.xnet.provider.jsse.ProtocolVersion
-org.apache.harmony.xnet.provider.jsse.SSLClientSessionCache
 org.apache.harmony.xnet.provider.jsse.SSLContextImpl
 org.apache.harmony.xnet.provider.jsse.SSLParameters
 org.apache.harmony.xnet.provider.jsse.ServerSessionContext
-org.apache.harmony.xnet.provider.jsse.ServerSessionContext$1
-org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl
-org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl$1
-org.apache.harmony.xnet.provider.jsse.TrustManagerFactoryImpl$2
-org.apache.harmony.xnet.provider.jsse.TrustManagerImpl
-org.apache.http.ConnectionReuseStrategy
-org.apache.http.FormattedHeader
-org.apache.http.Header
-org.apache.http.HeaderElement
-org.apache.http.HeaderElementIterator
-org.apache.http.HeaderIterator
-org.apache.http.HttpClientConnection
-org.apache.http.HttpConnection
-org.apache.http.HttpConnectionMetrics
-org.apache.http.HttpEntity
-org.apache.http.HttpEntityEnclosingRequest
-org.apache.http.HttpException
-org.apache.http.HttpHost
-org.apache.http.HttpInetConnection
-org.apache.http.HttpMessage
-org.apache.http.HttpRequest
-org.apache.http.HttpRequestInterceptor
-org.apache.http.HttpResponse
-org.apache.http.HttpResponseFactory
-org.apache.http.HttpResponseInterceptor
 org.apache.http.HttpVersion
-org.apache.http.NameValuePair
+org.apache.http.NoHttpResponseException
 org.apache.http.ProtocolException
-org.apache.http.ProtocolVersion
-org.apache.http.ReasonPhraseCatalog
-org.apache.http.RequestLine
-org.apache.http.StatusLine
-org.apache.http.TokenIterator
-org.apache.http.auth.AuthSchemeFactory
-org.apache.http.auth.AuthSchemeRegistry
-org.apache.http.auth.AuthState
-org.apache.http.client.AuthenticationHandler
-org.apache.http.client.ClientProtocolException
-org.apache.http.client.CookieStore
-org.apache.http.client.CredentialsProvider
 org.apache.http.client.HttpClient
-org.apache.http.client.HttpRequestRetryHandler
-org.apache.http.client.RedirectHandler
-org.apache.http.client.RequestDirector
-org.apache.http.client.ResponseHandler
-org.apache.http.client.UserTokenHandler
-org.apache.http.client.methods.AbortableHttpRequest
 org.apache.http.client.methods.HttpEntityEnclosingRequestBase
 org.apache.http.client.methods.HttpGet
 org.apache.http.client.methods.HttpPost
 org.apache.http.client.methods.HttpRequestBase
-org.apache.http.client.methods.HttpUriRequest
-org.apache.http.client.params.HttpClientParams
-org.apache.http.client.protocol.RequestAddCookies
-org.apache.http.client.protocol.RequestDefaultHeaders
-org.apache.http.client.protocol.RequestProxyAuthentication
-org.apache.http.client.protocol.RequestTargetAuthentication
-org.apache.http.client.protocol.ResponseProcessCookies
-org.apache.http.client.utils.URIUtils
 org.apache.http.conn.BasicManagedEntity
-org.apache.http.conn.ClientConnectionManager
-org.apache.http.conn.ClientConnectionOperator
-org.apache.http.conn.ClientConnectionRequest
-org.apache.http.conn.ConnectionKeepAliveStrategy
-org.apache.http.conn.ConnectionReleaseTrigger
-org.apache.http.conn.EofSensorInputStream
-org.apache.http.conn.EofSensorWatcher
-org.apache.http.conn.ManagedClientConnection
-org.apache.http.conn.OperatedClientConnection
-org.apache.http.conn.params.ConnManagerPNames
 org.apache.http.conn.params.ConnManagerParams
-org.apache.http.conn.params.ConnManagerParams$1
-org.apache.http.conn.params.ConnPerRoute
-org.apache.http.conn.params.ConnPerRouteBean
-org.apache.http.conn.params.ConnRoutePNames
 org.apache.http.conn.params.ConnRouteParams
-org.apache.http.conn.routing.BasicRouteDirector
 org.apache.http.conn.routing.HttpRoute
-org.apache.http.conn.routing.HttpRouteDirector
-org.apache.http.conn.routing.HttpRoutePlanner
-org.apache.http.conn.routing.RouteInfo
-org.apache.http.conn.routing.RouteInfo$LayerType
-org.apache.http.conn.routing.RouteInfo$TunnelType
-org.apache.http.conn.routing.RouteTracker
-org.apache.http.conn.scheme.LayeredSocketFactory
 org.apache.http.conn.scheme.PlainSocketFactory
-org.apache.http.conn.scheme.Scheme
-org.apache.http.conn.scheme.SchemeRegistry
-org.apache.http.conn.scheme.SocketFactory
 org.apache.http.conn.ssl.AbstractVerifier
-org.apache.http.conn.ssl.AllowAllHostnameVerifier
-org.apache.http.conn.ssl.BrowserCompatHostnameVerifier
 org.apache.http.conn.ssl.SSLSocketFactory
-org.apache.http.conn.ssl.StrictHostnameVerifier
-org.apache.http.conn.ssl.X509HostnameVerifier
-org.apache.http.cookie.ClientCookie
-org.apache.http.cookie.Cookie
-org.apache.http.cookie.CookieAttributeHandler
-org.apache.http.cookie.CookieIdentityComparator
-org.apache.http.cookie.CookieOrigin
-org.apache.http.cookie.CookiePathComparator
-org.apache.http.cookie.CookieSpec
-org.apache.http.cookie.CookieSpecFactory
-org.apache.http.cookie.CookieSpecRegistry
-org.apache.http.cookie.SetCookie
-org.apache.http.entity.AbstractHttpEntity
+org.apache.http.conn.util.InetAddressUtils
 org.apache.http.entity.BasicHttpEntity
-org.apache.http.entity.ByteArrayEntity
-org.apache.http.entity.ContentLengthStrategy
-org.apache.http.entity.HttpEntityWrapper
+org.apache.http.entity.InputStreamEntity
 org.apache.http.entity.StringEntity
 org.apache.http.impl.AbstractHttpClientConnection
-org.apache.http.impl.DefaultConnectionReuseStrategy
-org.apache.http.impl.DefaultHttpResponseFactory
 org.apache.http.impl.EnglishReasonPhraseCatalog
 org.apache.http.impl.HttpConnectionMetricsImpl
 org.apache.http.impl.SocketHttpClientConnection
-org.apache.http.impl.auth.BasicSchemeFactory
-org.apache.http.impl.auth.DigestSchemeFactory
 org.apache.http.impl.client.AbstractAuthenticationHandler
 org.apache.http.impl.client.AbstractHttpClient
-org.apache.http.impl.client.BasicCookieStore
-org.apache.http.impl.client.BasicCredentialsProvider
-org.apache.http.impl.client.ClientParamsStack
-org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy
 org.apache.http.impl.client.DefaultHttpClient
-org.apache.http.impl.client.DefaultHttpRequestRetryHandler
-org.apache.http.impl.client.DefaultProxyAuthenticationHandler
-org.apache.http.impl.client.DefaultRedirectHandler
-org.apache.http.impl.client.DefaultRequestDirector
-org.apache.http.impl.client.DefaultTargetAuthenticationHandler
-org.apache.http.impl.client.DefaultUserTokenHandler
 org.apache.http.impl.client.EntityEnclosingRequestWrapper
-org.apache.http.impl.client.RequestWrapper
-org.apache.http.impl.client.RoutedRequest
 org.apache.http.impl.conn.AbstractClientConnAdapter
-org.apache.http.impl.conn.AbstractPoolEntry
 org.apache.http.impl.conn.AbstractPooledConnAdapter
 org.apache.http.impl.conn.DefaultClientConnection
-org.apache.http.impl.conn.DefaultClientConnectionOperator
-org.apache.http.impl.conn.DefaultHttpRoutePlanner
-org.apache.http.impl.conn.DefaultResponseParser
-org.apache.http.impl.conn.IdleConnectionHandler
-org.apache.http.impl.conn.IdleConnectionHandler$TimeValues
 org.apache.http.impl.conn.SingleClientConnManager
-org.apache.http.impl.conn.SingleClientConnManager$1
-org.apache.http.impl.conn.SingleClientConnManager$ConnAdapter
-org.apache.http.impl.conn.SingleClientConnManager$PoolEntry
-org.apache.http.impl.conn.tsccm.AbstractConnPool
-org.apache.http.impl.conn.tsccm.BasicPoolEntry
-org.apache.http.impl.conn.tsccm.BasicPoolEntryRef
-org.apache.http.impl.conn.tsccm.BasicPooledConnAdapter
 org.apache.http.impl.conn.tsccm.ConnPoolByRoute
-org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1
-org.apache.http.impl.conn.tsccm.PoolEntryRequest
-org.apache.http.impl.conn.tsccm.RefQueueHandler
-org.apache.http.impl.conn.tsccm.RefQueueWorker
-org.apache.http.impl.conn.tsccm.RouteSpecificPool
 org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager
-org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1
-org.apache.http.impl.conn.tsccm.WaitingThreadAborter
-org.apache.http.impl.cookie.AbstractCookieAttributeHandler
-org.apache.http.impl.cookie.AbstractCookieSpec
 org.apache.http.impl.cookie.BasicClientCookie
-org.apache.http.impl.cookie.BasicCommentHandler
-org.apache.http.impl.cookie.BasicDomainHandler
-org.apache.http.impl.cookie.BasicExpiresHandler
-org.apache.http.impl.cookie.BasicMaxAgeHandler
-org.apache.http.impl.cookie.BasicPathHandler
-org.apache.http.impl.cookie.BasicSecureHandler
-org.apache.http.impl.cookie.BestMatchSpec
-org.apache.http.impl.cookie.BestMatchSpecFactory
 org.apache.http.impl.cookie.BrowserCompatSpec
-org.apache.http.impl.cookie.BrowserCompatSpecFactory
-org.apache.http.impl.cookie.CookieSpecBase
 org.apache.http.impl.cookie.DateUtils
-org.apache.http.impl.cookie.NetscapeDraftSpecFactory
-org.apache.http.impl.cookie.RFC2109DomainHandler
 org.apache.http.impl.cookie.RFC2109Spec
-org.apache.http.impl.cookie.RFC2109SpecFactory
-org.apache.http.impl.cookie.RFC2109VersionHandler
-org.apache.http.impl.cookie.RFC2965CommentUrlAttributeHandler
-org.apache.http.impl.cookie.RFC2965DiscardAttributeHandler
-org.apache.http.impl.cookie.RFC2965DomainAttributeHandler
-org.apache.http.impl.cookie.RFC2965PortAttributeHandler
 org.apache.http.impl.cookie.RFC2965Spec
-org.apache.http.impl.cookie.RFC2965SpecFactory
-org.apache.http.impl.cookie.RFC2965VersionAttributeHandler
-org.apache.http.impl.entity.EntityDeserializer
-org.apache.http.impl.entity.EntitySerializer
-org.apache.http.impl.entity.LaxContentLengthStrategy
-org.apache.http.impl.entity.StrictContentLengthStrategy
-org.apache.http.impl.io.AbstractMessageParser
-org.apache.http.impl.io.AbstractMessageWriter
 org.apache.http.impl.io.AbstractSessionInputBuffer
-org.apache.http.impl.io.AbstractSessionOutputBuffer
-org.apache.http.impl.io.ChunkedInputStream
-org.apache.http.impl.io.ContentLengthInputStream
-org.apache.http.impl.io.ContentLengthOutputStream
-org.apache.http.impl.io.HttpRequestWriter
-org.apache.http.impl.io.HttpTransportMetricsImpl
 org.apache.http.impl.io.SocketInputBuffer
-org.apache.http.impl.io.SocketOutputBuffer
-org.apache.http.io.HttpMessageParser
-org.apache.http.io.HttpMessageWriter
-org.apache.http.io.HttpTransportMetrics
-org.apache.http.io.SessionInputBuffer
-org.apache.http.io.SessionOutputBuffer
 org.apache.http.message.AbstractHttpMessage
-org.apache.http.message.BasicHeader
 org.apache.http.message.BasicHeaderElement
-org.apache.http.message.BasicHeaderElementIterator
-org.apache.http.message.BasicHeaderValueParser
+org.apache.http.message.BasicHttpEntityEnclosingRequest
+org.apache.http.message.BasicHttpRequest
 org.apache.http.message.BasicHttpResponse
 org.apache.http.message.BasicLineFormatter
 org.apache.http.message.BasicLineParser
-org.apache.http.message.BasicListHeaderIterator
-org.apache.http.message.BasicNameValuePair
-org.apache.http.message.BasicRequestLine
-org.apache.http.message.BasicStatusLine
 org.apache.http.message.BasicTokenIterator
-org.apache.http.message.BufferedHeader
-org.apache.http.message.HeaderGroup
-org.apache.http.message.HeaderValueParser
-org.apache.http.message.LineFormatter
-org.apache.http.message.LineParser
-org.apache.http.message.ParserCursor
 org.apache.http.params.AbstractHttpParams
 org.apache.http.params.BasicHttpParams
-org.apache.http.params.CoreConnectionPNames
-org.apache.http.params.CoreProtocolPNames
-org.apache.http.params.HttpConnectionParams
-org.apache.http.params.HttpParams
-org.apache.http.params.HttpProtocolParams
-org.apache.http.protocol.BasicHttpContext
 org.apache.http.protocol.BasicHttpProcessor
 org.apache.http.protocol.HTTP
-org.apache.http.protocol.HttpContext
-org.apache.http.protocol.HttpProcessor
-org.apache.http.protocol.HttpRequestExecutor
-org.apache.http.protocol.HttpRequestInterceptorList
-org.apache.http.protocol.HttpResponseInterceptorList
-org.apache.http.protocol.RequestConnControl
-org.apache.http.protocol.RequestContent
-org.apache.http.protocol.RequestExpectContinue
-org.apache.http.protocol.RequestTargetHost
-org.apache.http.protocol.RequestUserAgent
-org.apache.http.util.ByteArrayBuffer
-org.apache.http.util.CharArrayBuffer
-org.apache.http.util.EntityUtils
-org.apache.http.util.LangUtils
-org.apache.http.util.VersionInfo
-org.bouncycastle.asn1.ASN1Choice
-org.bouncycastle.asn1.ASN1Collection
-org.bouncycastle.asn1.ASN1Collection$ASN1CollectionEnumeration
-org.bouncycastle.asn1.ASN1Encodable
-org.bouncycastle.asn1.ASN1EncodableVector
-org.bouncycastle.asn1.ASN1InputStream
-org.bouncycastle.asn1.ASN1InputStream$1
-org.bouncycastle.asn1.ASN1Null
-org.bouncycastle.asn1.ASN1OctetString
-org.bouncycastle.asn1.ASN1OutputStream
-org.bouncycastle.asn1.ASN1Sequence
-org.bouncycastle.asn1.ASN1Set
-org.bouncycastle.asn1.ASN1TaggedObject
-org.bouncycastle.asn1.DERBitString
-org.bouncycastle.asn1.DERBoolean
-org.bouncycastle.asn1.DEREncodable
-org.bouncycastle.asn1.DEREncodableVector
-org.bouncycastle.asn1.DERIA5String
-org.bouncycastle.asn1.DERInteger
 org.bouncycastle.asn1.DERNull
 org.bouncycastle.asn1.DERObject
 org.bouncycastle.asn1.DERObjectIdentifier
-org.bouncycastle.asn1.DEROctetString
-org.bouncycastle.asn1.DEROutputStream
-org.bouncycastle.asn1.DERPrintableString
-org.bouncycastle.asn1.DERSequence
-org.bouncycastle.asn1.DERSet
-org.bouncycastle.asn1.DERString
-org.bouncycastle.asn1.DERTaggedObject
-org.bouncycastle.asn1.DERTags
-org.bouncycastle.asn1.DERUTCTime
-org.bouncycastle.asn1.DERUTF8String
-org.bouncycastle.asn1.OIDTokenizer
-org.bouncycastle.asn1.OrderedTable
 org.bouncycastle.asn1.iana.IANAObjectIdentifiers
 org.bouncycastle.asn1.nist.NISTObjectIdentifiers
 org.bouncycastle.asn1.oiw.OIWObjectIdentifiers
 org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers
-org.bouncycastle.asn1.x509.AlgorithmIdentifier
-org.bouncycastle.asn1.x509.BasicConstraints
-org.bouncycastle.asn1.x509.RSAPublicKeyStructure
-org.bouncycastle.asn1.x509.SubjectPublicKeyInfo
-org.bouncycastle.asn1.x509.TBSCertificateStructure
-org.bouncycastle.asn1.x509.Time
-org.bouncycastle.asn1.x509.X509CertificateStructure
-org.bouncycastle.asn1.x509.X509Extension
 org.bouncycastle.asn1.x509.X509Extensions
 org.bouncycastle.asn1.x509.X509Name
-org.bouncycastle.asn1.x509.X509NameElementList
-org.bouncycastle.asn1.x509.X509ObjectIdentifiers
-org.bouncycastle.crypto.CipherParameters
-org.bouncycastle.crypto.Digest
-org.bouncycastle.crypto.ExtendedDigest
-org.bouncycastle.crypto.Mac
-org.bouncycastle.crypto.PBEParametersGenerator
+org.bouncycastle.crypto.digests.SHA1Digest
 org.bouncycastle.crypto.engines.AESFastEngine
 org.bouncycastle.crypto.generators.PKCS12ParametersGenerator
-org.bouncycastle.crypto.io.MacInputStream
 org.bouncycastle.crypto.macs.HMac
-org.bouncycastle.crypto.params.KeyParameter
-org.bouncycastle.jce.interfaces.BCKeyStore
-org.bouncycastle.jce.interfaces.PKCS12BagAttributeCarrier
 org.bouncycastle.jce.provider.BouncyCastleProvider
 org.bouncycastle.jce.provider.CertPathValidatorUtilities
+org.bouncycastle.jce.provider.JCEBlockCipher
 org.bouncycastle.jce.provider.JCEBlockCipher$AES
-org.bouncycastle.jce.provider.JCERSAPublicKey
+org.bouncycastle.jce.provider.JCEMac
 org.bouncycastle.jce.provider.JDKKeyFactory
 org.bouncycastle.jce.provider.JDKKeyFactory$RSA
 org.bouncycastle.jce.provider.JDKKeyStore
-org.bouncycastle.jce.provider.JDKKeyStore$StoreEntry
 org.bouncycastle.jce.provider.JDKX509CertificateFactory
 org.bouncycastle.jce.provider.PKIXCertPathValidatorSpi
-org.bouncycastle.jce.provider.PKIXPolicyNode
-org.bouncycastle.jce.provider.RSAUtil
+org.bouncycastle.jce.provider.WrapCipherSpi
 org.bouncycastle.jce.provider.X509CertificateObject
-org.bouncycastle.util.Strings
+org.ccil.cowan.tagsoup.AttributesImpl
 org.ccil.cowan.tagsoup.HTMLScanner
+org.ccil.cowan.tagsoup.HTMLSchema
 org.ccil.cowan.tagsoup.Parser
-org.json.JSONArray
 org.json.JSONObject
-org.json.JSONObject$Null
-org.json.JSONTokener
 org.kxml2.io.KXmlParser
 org.kxml2.io.KXmlSerializer
 org.openssl.NativeBN
-org.w3c.dom.DOMImplementation
 org.xml.sax.Attributes
-org.xml.sax.ContentHandler
-org.xml.sax.DTDHandler
-org.xml.sax.EntityResolver
-org.xml.sax.ErrorHandler
-org.xml.sax.InputSource
-org.xml.sax.Locator
-org.xml.sax.XMLReader
 org.xml.sax.helpers.DefaultHandler
 org.xmlpull.v1.XmlPullParser
-org.xmlpull.v1.XmlPullParserFactory
-org.xmlpull.v1.XmlSerializer
+org.xmlpull.v1.XmlPullParserException
+org.xmlpull.v1.sax2.Driver
 sun.misc.Unsafe
diff --git a/tools/preload/20090811.compiled b/tools/preload/20090811.compiled
index dd61487..6dbeca0 100644
--- a/tools/preload/20090811.compiled
+++ b/tools/preload/20090811.compiled
Binary files differ
diff --git a/tools/preload/Android.mk b/tools/preload/Android.mk
index e6fa103..f325870 100644
--- a/tools/preload/Android.mk
+++ b/tools/preload/Android.mk
@@ -3,13 +3,13 @@
 include $(CLEAR_VARS)
 
 LOCAL_SRC_FILES := \
-	ClassRank.java \
 	Compile.java  \
 	LoadedClass.java \
 	MemoryUsage.java \
 	Operation.java \
 	Policy.java \
 	PrintCsv.java \
+	PrintHtmlDiff.java \
 	PrintPsTree.java \
 	Proc.java \
 	Record.java \
diff --git a/tools/preload/ClassRank.java b/tools/preload/ClassRank.java
deleted file mode 100644
index c562d5c..0000000
--- a/tools/preload/ClassRank.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-import java.util.Comparator;
-
-/**
- * Ranks classes for preloading based on how long their operations took
- * and how early the operations happened. Higher ranked classes come first.
- */
-class ClassRank implements Comparator<Operation> {
-
-    /**
-     * Increase this number to add more weight to classes which were loaded
-     * earlier.
-     */
-    static final int SEQUENCE_WEIGHT = 500; // 0.5ms
-
-    static final int BUCKET_SIZE = 5;
-
-    public int compare(Operation a, Operation b) {
-        // Higher ranked operations should come first.
-        int result = rankOf(b) - rankOf(a);
-        if (result != 0) {
-            return result;
-        }
-
-        // Make sure we don't drop one of two classes w/ the same rank.
-        // If a load and an initialization have the same rank, it's OK
-        // to treat the operations equally.
-        return a.loadedClass.name.compareTo(b.loadedClass.name);
-    }
-
-    /** Ranks the given operation. */
-    private static int rankOf(Operation o) {
-        return o.medianExclusiveTimeMicros()
-                + SEQUENCE_WEIGHT / (o.index / BUCKET_SIZE + 1);
-    }
-}
-
-
diff --git a/tools/preload/LoadedClass.java b/tools/preload/LoadedClass.java
index 9ef17f5..86e5dfc 100644
--- a/tools/preload/LoadedClass.java
+++ b/tools/preload/LoadedClass.java
@@ -51,7 +51,7 @@
     }
 
     void measureMemoryUsage() {
-//        this.memoryUsage = MemoryUsage.forClass(name);
+        this.memoryUsage = MemoryUsage.forClass(name);
     }
 
     int mlt = -1;
@@ -76,6 +76,10 @@
         return mit = calculateMedian(initializations);
     }
 
+    int medianTimeMicros() {
+        return medianInitTimeMicros() + medianLoadTimeMicros();
+    }
+
     /** Calculates the median duration for a list of operations. */
     private static int calculateMedian(List<Operation> operations) {
         int size = operations.size();
@@ -99,18 +103,18 @@
         }
     }
 
-    /** Returns names of apps that loaded this class. */
-    Set<String> applicationNames() {
-        Set<String> appNames = new HashSet<String>();
-        addProcessNames(loads, appNames);
-        addProcessNames(initializations, appNames);
-        return appNames;
+    /** Returns names of processes that loaded this class. */
+    Set<String> processNames() {
+        Set<String> names = new HashSet<String>();
+        addProcessNames(loads, names);
+        addProcessNames(initializations, names);
+        return names;
     }
 
-    private void addProcessNames(List<Operation> ops, Set<String> appNames) {
+    private void addProcessNames(List<Operation> ops, Set<String> names) {
         for (Operation operation : ops) {
-            if (operation.process.isApplication()) {
-                appNames.add(operation.process.name);
+            if (operation.process.fromZygote()) {
+                names.add(operation.process.name);
             }
         }
     }
@@ -123,31 +127,4 @@
     public String toString() {
         return name;
     }
-
-    /**
-     * Returns true if this class's initialization causes the given class to
-     * initialize.
-     */
-    public boolean initializes(LoadedClass clazz, Set<LoadedClass> visited) {
-        // Avoid infinite recursion.
-        if (!visited.add(this)) {
-            return false;
-        }
-
-        if (clazz == this) {
-            return true;
-        }
-
-        for (Operation initialization : initializations) {
-            if (initialization.loadedClass.initializes(clazz, visited)) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-    public boolean isPreloadable() {
-        return systemClass && Policy.isPreloadableClass(name);
-    }
 }
diff --git a/tools/preload/MemoryUsage.java b/tools/preload/MemoryUsage.java
index e5dfb2a..bc21b6f 100644
--- a/tools/preload/MemoryUsage.java
+++ b/tools/preload/MemoryUsage.java
@@ -34,8 +34,8 @@
     static final MemoryUsage NOT_AVAILABLE = new MemoryUsage();
     
     static int errorCount = 0;
-    static final int MAXIMUM_ERRORS = 10;        // give up after this many fails
 
+    // These values are in 1kB increments (not 4kB like you'd expect).
     final int nativeSharedPages;
     final int javaSharedPages;
     final int otherSharedPages;
@@ -123,15 +123,24 @@
         return allocSize - freedSize;
     }
 
+    int totalHeap() {
+        return javaHeapSize() + (int) nativeHeapSize;
+    }
+
     int javaPagesInK() {
-        return (javaSharedPages + javaPrivatePages) * 4;
+        return javaSharedPages + javaPrivatePages;
     }
 
     int nativePagesInK() {
-        return (nativeSharedPages + nativePrivatePages) * 4;
+        return nativeSharedPages + nativePrivatePages;
     }
     int otherPagesInK() {
-        return (otherSharedPages + otherPrivatePages) * 4;
+        return otherSharedPages + otherPrivatePages;
+    }
+
+    int totalPages() {
+        return javaSharedPages + javaPrivatePages + nativeSharedPages +
+                nativePrivatePages + otherSharedPages + otherPrivatePages;
     }
 
     /**
@@ -163,13 +172,6 @@
      * Measures memory usage for the given class.
      */
     static MemoryUsage forClass(String className) {
-        
-        // This is a coarse approximation for determining that no device is connected,
-        // or that the communication protocol has changed, but we'll keep going and stop whining.
-        if (errorCount >= MAXIMUM_ERRORS) {
-            return NOT_AVAILABLE;
-        }
-        
         MeasureWithTimeout measurer = new MeasureWithTimeout(className);
 
         new Thread(measurer).start();
@@ -280,4 +282,17 @@
             e.printStackTrace();
         }
     }
+
+    /** Measures memory usage information and stores it in the model. */
+    public static void main(String[] args) throws IOException,
+            ClassNotFoundException {
+        Root root = Root.fromFile(args[0]);
+        root.baseline = baseline();
+        for (LoadedClass loadedClass : root.loadedClasses.values()) {
+            if (loadedClass.systemClass) {
+                loadedClass.measureMemoryUsage();
+            }
+        }
+        root.toFile(args[0]);
+    }
 }
diff --git a/tools/preload/Policy.java b/tools/preload/Policy.java
index ade889e3..7a190ac 100644
--- a/tools/preload/Policy.java
+++ b/tools/preload/Policy.java
@@ -19,10 +19,10 @@
 import java.util.Set;
 
 /**
- * This is not instantiated - we just provide data for other classes to use
+ * Policy that governs which classes are preloaded.
  */
 public class Policy {
-    
+
     /**
      * No constructor - use static methods only
      */
@@ -31,18 +31,24 @@
     /**
      * This location (in the build system) of the preloaded-classes file.
      */
-    private static final String PRELOADED_CLASS_FILE
+    static final String PRELOADED_CLASS_FILE
             = "frameworks/base/preloaded-classes";
 
     /**
      * Long running services. These are restricted in their contribution to the 
      * preloader because their launch time is less critical.
      */
+    // TODO: Generate this automatically from package manager.
     private static final Set<String> SERVICES = new HashSet<String>(Arrays.asList(
-            "system_server",
-            "com.google.process.content",
-            "android.process.media",
-            "com.google.process.gapps"
+        "system_server",
+        "com.google.process.content",
+        "android.process.media",
+        "com.android.phone",
+        "com.google.android.apps.maps.FriendService",
+        "com.google.android.apps.maps.LocationFriendService",
+        "com.google.android.googleapps",
+        "com.google.process.gapps",
+        "android.tts"
     ));
 
     /**
@@ -63,24 +69,15 @@
     ));
 
     /**
-     * Returns the path/file name of the preloaded classes file that will be written 
-     * by WritePreloadedClassFile.
-     */
-    public static String getPreloadedClassFileName() {
-        return PRELOADED_CLASS_FILE;
-    }
-    
-    /**
-     * Reports if the given process name is a "long running" process or service
+     * Returns true if the given process name is a "long running" process or
+     * service.
      */
     public static boolean isService(String processName) {
         return SERVICES.contains(processName);
     }
-    
-    /**
-     * Reports if the given class should never be preloaded
-     */
-    public static boolean isPreloadableClass(String className) {
-        return !EXCLUDED_CLASSES.contains(className);
+
+    /**Reports if the given class should be preloaded. */
+    public static boolean isPreloadable(LoadedClass clazz) {
+        return clazz.systemClass && !EXCLUDED_CLASSES.contains(clazz.name);
     }
 }
diff --git a/tools/preload/PrintCsv.java b/tools/preload/PrintCsv.java
index 62f4271..1820830 100644
--- a/tools/preload/PrintCsv.java
+++ b/tools/preload/PrintCsv.java
@@ -18,9 +18,12 @@
 import java.io.FileInputStream;
 import java.io.ObjectInputStream;
 import java.io.BufferedInputStream;
+import java.io.Writer;
+import java.io.PrintStream;
 import java.util.Set;
 import java.util.HashSet;
 import java.util.TreeSet;
+import java.util.Iterator;
 
 /**
  * Prints raw information in CSV format.
@@ -36,71 +39,89 @@
 
         Root root = Root.fromFile(args[0]);
 
-        System.out.println("Name"
-                + ",Preloaded"
-                + ",Median Load Time (us)"
-                + ",Median Init Time (us)"
-                + ",Process Names"
-                + ",Load Count"
-                + ",Init Count");
-//                + ",Managed Heap (B)"
-//                + ",Native Heap (B)"
-//                + ",Managed Pages (kB)"
-//                + ",Native Pages (kB)"
-//                + ",Other Pages (kB)");
+        printHeaders(System.out);
 
-        MemoryUsage baseline = root.baseline;
+        MemoryUsage baseline = MemoryUsage.baseline();
 
         for (LoadedClass loadedClass : root.loadedClasses.values()) {
             if (!loadedClass.systemClass) {
                 continue;
             }
 
-            System.out.print(loadedClass.name);
-            System.out.print(',');
-            System.out.print(loadedClass.preloaded);
-            System.out.print(',');
-            System.out.print(loadedClass.medianLoadTimeMicros());
-            System.out.print(',');
-            System.out.print(loadedClass.medianInitTimeMicros());
-            System.out.print(',');
-            System.out.print('"');
-
-            Set<String> procNames = new TreeSet<String>();
-            for (Operation op : loadedClass.loads)
-                procNames.add(op.process.name);
-            for (Operation op : loadedClass.initializations)
-                procNames.add(op.process.name);
-            for (String name : procNames) {
-                System.out.print(name + "\n");
-            }
-            
-            System.out.print('"');
-            System.out.print(',');
-            System.out.print(loadedClass.loads.size());
-            System.out.print(',');
-            System.out.print(loadedClass.initializations.size());
-/*
-            if (loadedClass.memoryUsage.isAvailable()) {
-                MemoryUsage subtracted
-                        = loadedClass.memoryUsage.subtract(baseline);
-
-                System.out.print(',');
-                System.out.print(subtracted.javaHeapSize());
-                System.out.print(',');
-                System.out.print(subtracted.nativeHeapSize);
-                System.out.print(',');
-                System.out.print(subtracted.javaPagesInK());
-                System.out.print(',');
-                System.out.print(subtracted.nativePagesInK());
-                System.out.print(',');
-                System.out.print(subtracted.otherPagesInK());
-
-            } else {
-                System.out.print(",n/a,n/a,n/a,n/a,n/a");
-            }
-*/
-            System.out.println();
+            printRow(System.out, baseline, loadedClass);
         }
     }
+
+    static void printHeaders(PrintStream out) {
+        out.println("Name"
+                + ",Preloaded"
+                + ",Median Load Time (us)"
+                + ",Median Init Time (us)"
+                + ",Process Names"
+                + ",Load Count"
+                + ",Init Count"
+                + ",Managed Heap (B)"
+                + ",Native Heap (B)"
+                + ",Managed Pages (kB)"
+                + ",Native Pages (kB)"
+                + ",Other Pages (kB)");
+    }
+
+    static void printRow(PrintStream out, MemoryUsage baseline,
+            LoadedClass loadedClass) {
+        out.print(loadedClass.name);
+        out.print(',');
+        out.print(loadedClass.preloaded);
+        out.print(',');
+        out.print(loadedClass.medianLoadTimeMicros());
+        out.print(',');
+        out.print(loadedClass.medianInitTimeMicros());
+        out.print(',');
+        out.print('"');
+
+        Set<String> procNames = new TreeSet<String>();
+        for (Operation op : loadedClass.loads)
+            procNames.add(op.process.name);
+        for (Operation op : loadedClass.initializations)
+            procNames.add(op.process.name);
+
+        if (procNames.size() <= 3) {
+            for (String name : procNames) {
+                out.print(name + "\n");
+            }
+        } else {
+            Iterator<String> i = procNames.iterator();
+            out.print(i.next() + "\n");
+            out.print(i.next() + "\n");
+            out.print("...and " + (procNames.size() - 2)
+                    + " others.");
+        }
+
+        out.print('"');
+        out.print(',');
+        out.print(loadedClass.loads.size());
+        out.print(',');
+        out.print(loadedClass.initializations.size());
+
+        if (loadedClass.memoryUsage.isAvailable()) {
+            MemoryUsage subtracted
+                    = loadedClass.memoryUsage.subtract(baseline);
+
+            out.print(',');
+            out.print(subtracted.javaHeapSize());
+            out.print(',');
+            out.print(subtracted.nativeHeapSize);
+            out.print(',');
+            out.print(subtracted.javaPagesInK());
+            out.print(',');
+            out.print(subtracted.nativePagesInK());
+            out.print(',');
+            out.print(subtracted.otherPagesInK());
+
+        } else {
+            out.print(",n/a,n/a,n/a,n/a,n/a");
+        }
+
+        out.println();
+    }
 }
diff --git a/tools/preload/PrintHtmlDiff.java b/tools/preload/PrintHtmlDiff.java
new file mode 100644
index 0000000..b101c85
--- /dev/null
+++ b/tools/preload/PrintHtmlDiff.java
@@ -0,0 +1,142 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.IOException;
+import java.io.FileReader;
+import java.io.BufferedReader;
+import java.io.PrintStream;
+import java.util.Set;
+import java.util.TreeSet;
+import java.util.HashSet;
+import java.util.Iterator;
+
+/**
+ * Prints HTML containing removed and added files.
+ */
+public class PrintHtmlDiff {
+
+    private static final String OLD_PRELOADED_CLASSES
+            = "old-preloaded-classes";
+
+    public static void main(String[] args) throws IOException,
+            ClassNotFoundException {
+        Root root = Root.fromFile(args[0]);
+
+        BufferedReader oldClasses = new BufferedReader(
+            new FileReader(OLD_PRELOADED_CLASSES));
+
+        // Classes loaded implicitly by the zygote.
+        Set<LoadedClass> zygote = new HashSet<LoadedClass>();
+        for (Proc proc : root.processes.values()) {
+            if (proc.name.equals("zygote")) {
+                for (Operation op : proc.operations) {
+                    zygote.add(op.loadedClass);
+                }
+                break;
+            }
+        }
+
+        Set<LoadedClass> removed = new TreeSet<LoadedClass>();
+        Set<LoadedClass> added = new TreeSet<LoadedClass>();
+
+        for (LoadedClass loadedClass : root.loadedClasses.values()) {
+            if (loadedClass.preloaded && !zygote.contains(loadedClass)) {
+                added.add(loadedClass);
+            }
+        }
+
+        String line;
+        while ((line = oldClasses.readLine()) != null) {
+            line = line.trim();
+            LoadedClass clazz = root.loadedClasses.get(line);
+            if (clazz != null) {
+                added.remove(clazz);
+                if (!clazz.preloaded) removed.add(clazz);
+            }
+        }
+
+        PrintStream out = System.out;
+
+        out.println("<html><body>");
+        out.println("<style>");
+        out.println("a, th, td, h2 { font-family: arial }");
+        out.println("th, td { font-size: small }");
+        out.println("</style>");
+        out.println("<script src=\"sorttable.js\"></script>");
+        out.println("<p><a href=\"#removed\">Removed</a>");
+        out.println("<a name=\"added\"/><h2>Added</h2>");
+        printTable(out, root.baseline, added);
+        out.println("<a name=\"removed\"/><h2>Removed</h2>");
+        printTable(out, root.baseline, removed);
+        out.println("</body></html>");
+    }
+
+    static void printTable(PrintStream out, MemoryUsage baseline,
+            Iterable<LoadedClass> classes) {
+        out.println("<table border=\"1\" cellpadding=\"5\""
+                + " class=\"sortable\">");
+
+        out.println("<thead><tr>");
+        out.println("<th>Name</th>");
+        out.println("<th>Load Time (us)</th>");
+        out.println("<th>Loaded By</th>");
+        out.println("<th>Heap (B)</th>");
+        out.println("<th>Pages</th>");
+        out.println("</tr></thead>");
+
+        for (LoadedClass clazz : classes) {
+            out.println("<tr>");
+            out.println("<td>" + clazz.name + "</td>");
+            out.println("<td>" + clazz.medianTimeMicros() + "</td>");
+
+            out.println("<td>");
+            Set<String> procNames = new TreeSet<String>();
+            for (Operation op : clazz.loads) procNames.add(op.process.name);
+            for (Operation op : clazz.initializations) {
+                procNames.add(op.process.name);
+            }
+            if (procNames.size() <= 3) {
+                for (String name : procNames) {
+                    out.print(name + "<br/>");
+                }
+            } else {
+                Iterator<String> i = procNames.iterator();
+                out.print(i.next() + "<br/>");
+                out.print(i.next() + "<br/>");
+                out.print("...and " + (procNames.size() - 2)
+                        + " others.");
+            }
+            out.println("</td>");
+
+            if (clazz.memoryUsage.isAvailable()) {
+                MemoryUsage subtracted
+                        = clazz.memoryUsage.subtract(baseline);
+
+                out.println("<td>" + (subtracted.javaHeapSize()
+                        + subtracted.nativeHeapSize) + "</td>");
+                out.println("<td>" + subtracted.totalPages() + "</td>");
+            } else {
+                for (int i = 0; i < 2; i++) {
+                    out.println("<td>n/a</td>");                    
+                }
+            }
+
+            out.println("</tr>");
+        }
+
+        out.println("</table>");
+    }
+}
diff --git a/tools/preload/Proc.java b/tools/preload/Proc.java
index 66e04dc..2105021 100644
--- a/tools/preload/Proc.java
+++ b/tools/preload/Proc.java
@@ -14,13 +14,11 @@
  * limitations under the License.
  */
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.Map;
 import java.util.HashMap;
-import java.util.Collections;
 import java.io.Serializable;
 
 /**
@@ -30,11 +28,6 @@
 
     private static final long serialVersionUID = 0;
 
-    /**
-     * Default percentage of time to cut off of app class loading times.
-     */
-    static final int PERCENTAGE_TO_PRELOAD = 75;
-
     /** Parent process. */
     final Proc parent;
 
@@ -80,72 +73,11 @@
     }
 
     /**
-     * Returns the percentage of time we should cut by preloading for this
-     * app.
+     * Returns true if this process comes from the zygote.
      */
-    int percentageToPreload() {
-        return PERCENTAGE_TO_PRELOAD;
-    }
-
-    /**
-     * Returns a list of classes which should be preloaded.
-     */
-    List<LoadedClass> highestRankedClasses() {
-        if (!isApplication() || Policy.isService(this.name)) {
-            return Collections.emptyList();
-        }
-
-        // Sort by rank.
-        Operation[] ranked = new Operation[operations.size()];
-        ranked = operations.toArray(ranked);
-        Arrays.sort(ranked, new ClassRank());
-
-        // The percentage of time to save by preloading.
-        int timeToSave = totalTimeMicros() * percentageToPreload() / 100;
-        int timeSaved = 0;
-
-        int count = 0;
-        List<LoadedClass> highest = new ArrayList<LoadedClass>();
-        for (Operation operation : ranked) {
-            if (timeSaved >= timeToSave || count++ > 100) {
-                break;
-            }
-
-            if (!Policy.isPreloadableClass(operation.loadedClass.name)) {
-                continue;
-            }
-            
-            if (!operation.loadedClass.systemClass) {
-                continue;
-            }
-    
-            highest.add(operation.loadedClass);
-            timeSaved += operation.medianExclusiveTimeMicros();
-        }
-
-        return highest;
-    }
-
-    /**
-     * Total time spent class loading and initializing.
-     */
-    int totalTimeMicros() {
-        int totalTime = 0;
-        for (Operation operation : operations) {
-            totalTime += operation.medianExclusiveTimeMicros();
-        }
-        return totalTime;
-    }
-
-    /** 
-     * Returns true if this process is an app.
-     */
-    public boolean isApplication() {
-        if (name.equals("com.android.development")) {
-            return false;
-        }
-
-        return parent != null && parent.name.equals("zygote");
+    public boolean fromZygote() {
+        return parent != null && parent.name.equals("zygote")
+                && !name.equals("com.android.development");
     }
 
     /**
diff --git a/tools/preload/Root.java b/tools/preload/Root.java
index 949f9b7..0bc29bf 100644
--- a/tools/preload/Root.java
+++ b/tools/preload/Root.java
@@ -46,7 +46,7 @@
     final Map<String, LoadedClass> loadedClasses
             = new HashMap<String, LoadedClass>();
 
-    final MemoryUsage baseline = MemoryUsage.baseline();
+    MemoryUsage baseline = MemoryUsage.baseline();
 
     /**
      * Records class loads and initializations.
diff --git a/tools/preload/WritePreloadedClassFile.java b/tools/preload/WritePreloadedClassFile.java
index b209af0..96c539b 100644
--- a/tools/preload/WritePreloadedClassFile.java
+++ b/tools/preload/WritePreloadedClassFile.java
@@ -24,12 +24,18 @@
 import java.util.TreeSet;
 
 /**
- * Writes /frameworks/base/preloaded-classes. Also updates LoadedClass.preloaded
- * fields and writes over compiled log file.
+ * Writes /frameworks/base/preloaded-classes. Also updates
+ * {@link LoadedClass#preloaded} fields and writes over compiled log file.
  */
 public class WritePreloadedClassFile {
 
-    public static void main(String[] args) throws IOException, ClassNotFoundException {
+    /**
+     * Preload any class that take longer to load than MIN_LOAD_TIME_MICROS us.
+     */
+    static final int MIN_LOAD_TIME_MICROS = 1250;
+
+    public static void main(String[] args) throws IOException,
+            ClassNotFoundException {
         if (args.length != 1) {
             System.err.println("Usage: WritePreloadedClassFile [compiled log]");
             System.exit(-1);
@@ -44,48 +50,64 @@
 
         // Open preloaded-classes file for output.
         Writer out = new BufferedWriter(new OutputStreamWriter(
-                new FileOutputStream(Policy.getPreloadedClassFileName()),
+                new FileOutputStream(Policy.PRELOADED_CLASS_FILE),
                 Charset.forName("US-ASCII")));
 
-        out.write("# Classes which are preloaded by com.android.internal.os.ZygoteInit.\n");
-        out.write("# Automatically generated by /frameworks/base/tools/preload.\n");
-        out.write("# percent=" + Proc.PERCENTAGE_TO_PRELOAD
-                + ", weight=" + ClassRank.SEQUENCE_WEIGHT
-                + ", bucket_size=" + ClassRank.BUCKET_SIZE
-                + "\n");
+        out.write("# Classes which are preloaded by"
+                + " com.android.internal.os.ZygoteInit.\n");
+        out.write("# Automatically generated by frameworks/base/tools/preload/"
+            + WritePreloadedClassFile.class.getSimpleName() + ".java.\n");
+        out.write("# MIN_LOAD_TIME_MICROS=" + MIN_LOAD_TIME_MICROS + "\n");
 
+        /*
+         * The set of classes to preload. We preload a class if:
+         *
+         *  a) it's loaded in the bootclasspath (i.e., is a system class)
+         *  b) it takes > MIN_LOAD_TIME_MICROS us to load, and
+         *  c) it's loaded by more than one process, or it's loaded by an
+         *     application (i.e., not a long running service)
+         */
         Set<LoadedClass> toPreload = new TreeSet<LoadedClass>();
 
-        // Preload all classes that were loaded by at least 2 apps, if both
-        // apps run at the same time, they'll share memory.
+        // Preload classes that were loaded by at least 2 processes. Hopefully,
+        // the memory associated with these classes will be shared.
         for (LoadedClass loadedClass : root.loadedClasses.values()) {
-            if (!loadedClass.isPreloadable()) {
-                continue;
-            }
-
-            Set<String> appNames = loadedClass.applicationNames();
-
-            if (appNames.size() > 3) {
+            Set<String> names = loadedClass.processNames();
+            if (shouldPreload(loadedClass) && names.size() > 1) {
                 toPreload.add(loadedClass);
             }
         }
 
-        // Try to make individual apps start faster by preloading slowest
-        // classes.
+        int initialSize = toPreload.size();
+        System.out.println(initialSize
+                + " classses were loaded by more than one app.");
+
+        // Preload eligable classes from applications (not long-running
+        // services).
         for (Proc proc : root.processes.values()) {
-            toPreload.addAll(proc.highestRankedClasses());
+            if (proc.fromZygote() && !Policy.isService(proc.name)) {
+                for (Operation operation : proc.operations) {
+                    LoadedClass loadedClass = operation.loadedClass;
+                    if (shouldPreload(loadedClass)) {
+                        toPreload.add(loadedClass);
+                    }
+                }
+            }
         }
 
-        System.out.println(toPreload.size() + " classes will be preloaded.");
+        System.out.println("Added " + (toPreload.size() - initialSize)
+                + " more to speed up applications.");
 
-        // Make classes that were already loaded by the zygote explicit.
+        System.out.println(toPreload.size()
+                + " total classes will be preloaded.");
+
+        // Make classes that were implicitly loaded by the zygote explicit.
         // This adds minimal overhead but avoid confusion about classes not
         // appearing in the list.
-        addAllClassesFor("zygote", root, toPreload);
+        addAllClassesFrom("zygote", root, toPreload);
 
         for (LoadedClass loadedClass : toPreload) {
-            out.write(loadedClass.name);
-            out.write('\n');
+            out.write(loadedClass.name + "\n");
         }
 
         out.close();
@@ -97,18 +119,26 @@
         root.toFile(rootFile);
     }
 
-    private static void addAllClassesFor(String packageName, Root root,
-                                         Set<LoadedClass> toPreload) {
+    private static void addAllClassesFrom(String processName, Root root,
+            Set<LoadedClass> toPreload) {
         for (Proc proc : root.processes.values()) {
-            if (proc.name.equals(packageName)) {
+            if (proc.name.equals(processName)) {
                 for (Operation operation : proc.operations) {
-                    // TODO: I'm not sure how the zygote loaded classes that
-                    // aren't supposed to be preloadable...
-                    if (operation.loadedClass.isPreloadable()) {
+                    boolean preloadable
+                            = Policy.isPreloadable(operation.loadedClass);
+                    if (preloadable) {
                         toPreload.add(operation.loadedClass);
                     }
                 }
             }
         }
     }
+
+    /**
+     * Returns true if the class should be preloaded.
+     */
+    private static boolean shouldPreload(LoadedClass clazz) {
+        return Policy.isPreloadable(clazz)
+                && clazz.medianTimeMicros() > MIN_LOAD_TIME_MICROS;
+    }
 }
diff --git a/tools/preload/loadclass/LoadClass.java b/tools/preload/loadclass/LoadClass.java
index 471cc84..a71b6a8 100644
--- a/tools/preload/loadclass/LoadClass.java
+++ b/tools/preload/loadclass/LoadClass.java
@@ -35,7 +35,11 @@
 
         if (args.length > 0) {
             try {
+                long start = System.currentTimeMillis();
                 Class.forName(args[0]);
+                long elapsed = System.currentTimeMillis() - start;
+                Log.i("LoadClass", "Loaded " + args[0] + " in " + elapsed
+                        + "ms.");
             } catch (ClassNotFoundException e) {
                 Log.w("LoadClass", e);
                 return;
diff --git a/tools/preload/preload.ipr b/tools/preload/preload.ipr
index f78bf76..0c9621c 100644
--- a/tools/preload/preload.ipr
+++ b/tools/preload/preload.ipr
@@ -25,7 +25,28 @@
     <option name="USE_PROJECT_LEVEL_SETTINGS" value="false" />
   </component>
   <component name="CodeStyleSettingsManager">
-    <option name="PER_PROJECT_SETTINGS" />
+    <option name="PER_PROJECT_SETTINGS">
+      <value>
+        <ADDITIONAL_INDENT_OPTIONS fileType="java">
+          <option name="INDENT_SIZE" value="4" />
+          <option name="CONTINUATION_INDENT_SIZE" value="8" />
+          <option name="TAB_SIZE" value="4" />
+          <option name="USE_TAB_CHARACTER" value="false" />
+          <option name="SMART_TABS" value="false" />
+          <option name="LABEL_INDENT_SIZE" value="0" />
+          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
+        </ADDITIONAL_INDENT_OPTIONS>
+        <ADDITIONAL_INDENT_OPTIONS fileType="xml">
+          <option name="INDENT_SIZE" value="4" />
+          <option name="CONTINUATION_INDENT_SIZE" value="8" />
+          <option name="TAB_SIZE" value="4" />
+          <option name="USE_TAB_CHARACTER" value="false" />
+          <option name="SMART_TABS" value="false" />
+          <option name="LABEL_INDENT_SIZE" value="0" />
+          <option name="LABEL_INDENT_ABSOLUTE" value="false" />
+        </ADDITIONAL_INDENT_OPTIONS>
+      </value>
+    </option>
     <option name="USE_PER_PROJECT_SETTINGS" value="false" />
   </component>
   <component name="CompilerConfiguration">
@@ -405,6 +426,7 @@
   </component>
   <component name="VcsDirectoryMappings">
     <mapping directory="" vcs="Perforce" />
+    <mapping directory="/Volumes/Android/donut/frameworks/base" vcs="Git" />
   </component>
   <component name="VssConfiguration">
     <option name="CLIENT_PATH" value="" />
diff --git a/tools/preload/sorttable.js b/tools/preload/sorttable.js
new file mode 100644
index 0000000..25bccb2
--- /dev/null
+++ b/tools/preload/sorttable.js
@@ -0,0 +1,493 @@
+/*
+  SortTable
+  version 2
+  7th April 2007
+  Stuart Langridge, http://www.kryogenix.org/code/browser/sorttable/
+  
+  Instructions:
+  Download this file
+  Add <script src="sorttable.js"></script> to your HTML
+  Add class="sortable" to any table you'd like to make sortable
+  Click on the headers to sort
+  
+  Thanks to many, many people for contributions and suggestions.
+  Licenced as X11: http://www.kryogenix.org/code/browser/licence.html
+  This basically means: do what you want with it.
+*/
+
+ 
+var stIsIE = /*@cc_on!@*/false;
+
+sorttable = {
+  init: function() {
+    // quit if this function has already been called
+    if (arguments.callee.done) return;
+    // flag this function so we don't do the same thing twice
+    arguments.callee.done = true;
+    // kill the timer
+    if (_timer) clearInterval(_timer);
+    
+    if (!document.createElement || !document.getElementsByTagName) return;
+    
+    sorttable.DATE_RE = /^(\d\d?)[\/\.-](\d\d?)[\/\.-]((\d\d)?\d\d)$/;
+    
+    forEach(document.getElementsByTagName('table'), function(table) {
+      if (table.className.search(/\bsortable\b/) != -1) {
+        sorttable.makeSortable(table);
+      }
+    });
+    
+  },
+  
+  makeSortable: function(table) {
+    if (table.getElementsByTagName('thead').length == 0) {
+      // table doesn't have a tHead. Since it should have, create one and
+      // put the first table row in it.
+      the = document.createElement('thead');
+      the.appendChild(table.rows[0]);
+      table.insertBefore(the,table.firstChild);
+    }
+    // Safari doesn't support table.tHead, sigh
+    if (table.tHead == null) table.tHead = table.getElementsByTagName('thead')[0];
+    
+    if (table.tHead.rows.length != 1) return; // can't cope with two header rows
+    
+    // Sorttable v1 put rows with a class of "sortbottom" at the bottom (as
+    // "total" rows, for example). This is B&R, since what you're supposed
+    // to do is put them in a tfoot. So, if there are sortbottom rows,
+    // for backwards compatibility, move them to tfoot (creating it if needed).
+    sortbottomrows = [];
+    for (var i=0; i<table.rows.length; i++) {
+      if (table.rows[i].className.search(/\bsortbottom\b/) != -1) {
+        sortbottomrows[sortbottomrows.length] = table.rows[i];
+      }
+    }
+    if (sortbottomrows) {
+      if (table.tFoot == null) {
+        // table doesn't have a tfoot. Create one.
+        tfo = document.createElement('tfoot');
+        table.appendChild(tfo);
+      }
+      for (var i=0; i<sortbottomrows.length; i++) {
+        tfo.appendChild(sortbottomrows[i]);
+      }
+      delete sortbottomrows;
+    }
+    
+    // work through each column and calculate its type
+    headrow = table.tHead.rows[0].cells;
+    for (var i=0; i<headrow.length; i++) {
+      // manually override the type with a sorttable_type attribute
+      if (!headrow[i].className.match(/\bsorttable_nosort\b/)) { // skip this col
+        mtch = headrow[i].className.match(/\bsorttable_([a-z0-9]+)\b/);
+        if (mtch) { override = mtch[1]; }
+	      if (mtch && typeof sorttable["sort_"+override] == 'function') {
+	        headrow[i].sorttable_sortfunction = sorttable["sort_"+override];
+	      } else {
+	        headrow[i].sorttable_sortfunction = sorttable.guessType(table,i);
+	      }
+	      // make it clickable to sort
+	      headrow[i].sorttable_columnindex = i;
+	      headrow[i].sorttable_tbody = table.tBodies[0];
+	      dean_addEvent(headrow[i],"click", function(e) {
+
+          if (this.className.search(/\bsorttable_sorted\b/) != -1) {
+            // if we're already sorted by this column, just 
+            // reverse the table, which is quicker
+            sorttable.reverse(this.sorttable_tbody);
+            this.className = this.className.replace('sorttable_sorted',
+                                                    'sorttable_sorted_reverse');
+            this.removeChild(document.getElementById('sorttable_sortfwdind'));
+            sortrevind = document.createElement('span');
+            sortrevind.id = "sorttable_sortrevind";
+            sortrevind.innerHTML = stIsIE ? '&nbsp<font face="webdings">5</font>' : '&nbsp;&#x25B4;';
+            this.appendChild(sortrevind);
+            return;
+          }
+          if (this.className.search(/\bsorttable_sorted_reverse\b/) != -1) {
+            // if we're already sorted by this column in reverse, just 
+            // re-reverse the table, which is quicker
+            sorttable.reverse(this.sorttable_tbody);
+            this.className = this.className.replace('sorttable_sorted_reverse',
+                                                    'sorttable_sorted');
+            this.removeChild(document.getElementById('sorttable_sortrevind'));
+            sortfwdind = document.createElement('span');
+            sortfwdind.id = "sorttable_sortfwdind";
+            sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+            this.appendChild(sortfwdind);
+            return;
+          }
+          
+          // remove sorttable_sorted classes
+          theadrow = this.parentNode;
+          forEach(theadrow.childNodes, function(cell) {
+            if (cell.nodeType == 1) { // an element
+              cell.className = cell.className.replace('sorttable_sorted_reverse','');
+              cell.className = cell.className.replace('sorttable_sorted','');
+            }
+          });
+          sortfwdind = document.getElementById('sorttable_sortfwdind');
+          if (sortfwdind) { sortfwdind.parentNode.removeChild(sortfwdind); }
+          sortrevind = document.getElementById('sorttable_sortrevind');
+          if (sortrevind) { sortrevind.parentNode.removeChild(sortrevind); }
+          
+          this.className += ' sorttable_sorted';
+          sortfwdind = document.createElement('span');
+          sortfwdind.id = "sorttable_sortfwdind";
+          sortfwdind.innerHTML = stIsIE ? '&nbsp<font face="webdings">6</font>' : '&nbsp;&#x25BE;';
+          this.appendChild(sortfwdind);
+
+	        // build an array to sort. This is a Schwartzian transform thing,
+	        // i.e., we "decorate" each row with the actual sort key,
+	        // sort based on the sort keys, and then put the rows back in order
+	        // which is a lot faster because you only do getInnerText once per row
+	        row_array = [];
+	        col = this.sorttable_columnindex;
+	        rows = this.sorttable_tbody.rows;
+	        for (var j=0; j<rows.length; j++) {
+	          row_array[row_array.length] = [sorttable.getInnerText(rows[j].cells[col]), rows[j]];
+	        }
+	        /* If you want a stable sort, uncomment the following line */
+	        //sorttable.shaker_sort(row_array, this.sorttable_sortfunction);
+	        /* and comment out this one */
+	        row_array.sort(this.sorttable_sortfunction);
+	        
+	        tb = this.sorttable_tbody;
+	        for (var j=0; j<row_array.length; j++) {
+	          tb.appendChild(row_array[j][1]);
+	        }
+	        
+	        delete row_array;
+	      });
+	    }
+    }
+  },
+  
+  guessType: function(table, column) {
+    // guess the type of a column based on its first non-blank row
+    sortfn = sorttable.sort_alpha;
+    for (var i=0; i<table.tBodies[0].rows.length; i++) {
+      text = sorttable.getInnerText(table.tBodies[0].rows[i].cells[column]);
+      if (text != '') {
+        if (text.match(/^-?[£$¤]?[\d,.]+%?$/)) {
+          return sorttable.sort_numeric;
+        }
+        // check for a date: dd/mm/yyyy or dd/mm/yy 
+        // can have / or . or - as separator
+        // can be mm/dd as well
+        possdate = text.match(sorttable.DATE_RE)
+        if (possdate) {
+          // looks like a date
+          first = parseInt(possdate[1]);
+          second = parseInt(possdate[2]);
+          if (first > 12) {
+            // definitely dd/mm
+            return sorttable.sort_ddmm;
+          } else if (second > 12) {
+            return sorttable.sort_mmdd;
+          } else {
+            // looks like a date, but we can't tell which, so assume
+            // that it's dd/mm (English imperialism!) and keep looking
+            sortfn = sorttable.sort_ddmm;
+          }
+        }
+      }
+    }
+    return sortfn;
+  },
+  
+  getInnerText: function(node) {
+    // gets the text we want to use for sorting for a cell.
+    // strips leading and trailing whitespace.
+    // this is *not* a generic getInnerText function; it's special to sorttable.
+    // for example, you can override the cell text with a customkey attribute.
+    // it also gets .value for <input> fields.
+    
+    hasInputs = (typeof node.getElementsByTagName == 'function') &&
+                 node.getElementsByTagName('input').length;
+    
+    if (node.getAttribute("sorttable_customkey") != null) {
+      return node.getAttribute("sorttable_customkey");
+    }
+    else if (typeof node.textContent != 'undefined' && !hasInputs) {
+      return node.textContent.replace(/^\s+|\s+$/g, '');
+    }
+    else if (typeof node.innerText != 'undefined' && !hasInputs) {
+      return node.innerText.replace(/^\s+|\s+$/g, '');
+    }
+    else if (typeof node.text != 'undefined' && !hasInputs) {
+      return node.text.replace(/^\s+|\s+$/g, '');
+    }
+    else {
+      switch (node.nodeType) {
+        case 3:
+          if (node.nodeName.toLowerCase() == 'input') {
+            return node.value.replace(/^\s+|\s+$/g, '');
+          }
+        case 4:
+          return node.nodeValue.replace(/^\s+|\s+$/g, '');
+          break;
+        case 1:
+        case 11:
+          var innerText = '';
+          for (var i = 0; i < node.childNodes.length; i++) {
+            innerText += sorttable.getInnerText(node.childNodes[i]);
+          }
+          return innerText.replace(/^\s+|\s+$/g, '');
+          break;
+        default:
+          return '';
+      }
+    }
+  },
+  
+  reverse: function(tbody) {
+    // reverse the rows in a tbody
+    newrows = [];
+    for (var i=0; i<tbody.rows.length; i++) {
+      newrows[newrows.length] = tbody.rows[i];
+    }
+    for (var i=newrows.length-1; i>=0; i--) {
+       tbody.appendChild(newrows[i]);
+    }
+    delete newrows;
+  },
+  
+  /* sort functions
+     each sort function takes two parameters, a and b
+     you are comparing a[0] and b[0] */
+  sort_numeric: function(a,b) {
+    aa = parseFloat(a[0].replace(/[^0-9.-]/g,''));
+    if (isNaN(aa)) aa = 0;
+    bb = parseFloat(b[0].replace(/[^0-9.-]/g,'')); 
+    if (isNaN(bb)) bb = 0;
+    return aa-bb;
+  },
+  sort_alpha: function(a,b) {
+    if (a[0]==b[0]) return 0;
+    if (a[0]<b[0]) return -1;
+    return 1;
+  },
+  sort_ddmm: function(a,b) {
+    mtch = a[0].match(sorttable.DATE_RE);
+    y = mtch[3]; m = mtch[2]; d = mtch[1];
+    if (m.length == 1) m = '0'+m;
+    if (d.length == 1) d = '0'+d;
+    dt1 = y+m+d;
+    mtch = b[0].match(sorttable.DATE_RE);
+    y = mtch[3]; m = mtch[2]; d = mtch[1];
+    if (m.length == 1) m = '0'+m;
+    if (d.length == 1) d = '0'+d;
+    dt2 = y+m+d;
+    if (dt1==dt2) return 0;
+    if (dt1<dt2) return -1;
+    return 1;
+  },
+  sort_mmdd: function(a,b) {
+    mtch = a[0].match(sorttable.DATE_RE);
+    y = mtch[3]; d = mtch[2]; m = mtch[1];
+    if (m.length == 1) m = '0'+m;
+    if (d.length == 1) d = '0'+d;
+    dt1 = y+m+d;
+    mtch = b[0].match(sorttable.DATE_RE);
+    y = mtch[3]; d = mtch[2]; m = mtch[1];
+    if (m.length == 1) m = '0'+m;
+    if (d.length == 1) d = '0'+d;
+    dt2 = y+m+d;
+    if (dt1==dt2) return 0;
+    if (dt1<dt2) return -1;
+    return 1;
+  },
+  
+  shaker_sort: function(list, comp_func) {
+    // A stable sort function to allow multi-level sorting of data
+    // see: http://en.wikipedia.org/wiki/Cocktail_sort
+    // thanks to Joseph Nahmias
+    var b = 0;
+    var t = list.length - 1;
+    var swap = true;
+
+    while(swap) {
+        swap = false;
+        for(var i = b; i < t; ++i) {
+            if ( comp_func(list[i], list[i+1]) > 0 ) {
+                var q = list[i]; list[i] = list[i+1]; list[i+1] = q;
+                swap = true;
+            }
+        } // for
+        t--;
+
+        if (!swap) break;
+
+        for(var i = t; i > b; --i) {
+            if ( comp_func(list[i], list[i-1]) < 0 ) {
+                var q = list[i]; list[i] = list[i-1]; list[i-1] = q;
+                swap = true;
+            }
+        } // for
+        b++;
+
+    } // while(swap)
+  }  
+}
+
+/* ******************************************************************
+   Supporting functions: bundled here to avoid depending on a library
+   ****************************************************************** */
+
+// Dean Edwards/Matthias Miller/John Resig
+
+/* for Mozilla/Opera9 */
+if (document.addEventListener) {
+    document.addEventListener("DOMContentLoaded", sorttable.init, false);
+}
+
+/* for Internet Explorer */
+/*@cc_on @*/
+/*@if (@_win32)
+    document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
+    var script = document.getElementById("__ie_onload");
+    script.onreadystatechange = function() {
+        if (this.readyState == "complete") {
+            sorttable.init(); // call the onload handler
+        }
+    };
+/*@end @*/
+
+/* for Safari */
+if (/WebKit/i.test(navigator.userAgent)) { // sniff
+    var _timer = setInterval(function() {
+        if (/loaded|complete/.test(document.readyState)) {
+            sorttable.init(); // call the onload handler
+        }
+    }, 10);
+}
+
+/* for other browsers */
+window.onload = sorttable.init;
+
+// written by Dean Edwards, 2005
+// with input from Tino Zijdel, Matthias Miller, Diego Perini
+
+// http://dean.edwards.name/weblog/2005/10/add-event/
+
+function dean_addEvent(element, type, handler) {
+	if (element.addEventListener) {
+		element.addEventListener(type, handler, false);
+	} else {
+		// assign each event handler a unique ID
+		if (!handler.$$guid) handler.$$guid = dean_addEvent.guid++;
+		// create a hash table of event types for the element
+		if (!element.events) element.events = {};
+		// create a hash table of event handlers for each element/event pair
+		var handlers = element.events[type];
+		if (!handlers) {
+			handlers = element.events[type] = {};
+			// store the existing event handler (if there is one)
+			if (element["on" + type]) {
+				handlers[0] = element["on" + type];
+			}
+		}
+		// store the event handler in the hash table
+		handlers[handler.$$guid] = handler;
+		// assign a global event handler to do all the work
+		element["on" + type] = handleEvent;
+	}
+};
+// a counter used to create unique IDs
+dean_addEvent.guid = 1;
+
+function removeEvent(element, type, handler) {
+	if (element.removeEventListener) {
+		element.removeEventListener(type, handler, false);
+	} else {
+		// delete the event handler from the hash table
+		if (element.events && element.events[type]) {
+			delete element.events[type][handler.$$guid];
+		}
+	}
+};
+
+function handleEvent(event) {
+	var returnValue = true;
+	// grab the event object (IE uses a global event object)
+	event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
+	// get a reference to the hash table of event handlers
+	var handlers = this.events[event.type];
+	// execute each event handler
+	for (var i in handlers) {
+		this.$$handleEvent = handlers[i];
+		if (this.$$handleEvent(event) === false) {
+			returnValue = false;
+		}
+	}
+	return returnValue;
+};
+
+function fixEvent(event) {
+	// add W3C standard event methods
+	event.preventDefault = fixEvent.preventDefault;
+	event.stopPropagation = fixEvent.stopPropagation;
+	return event;
+};
+fixEvent.preventDefault = function() {
+	this.returnValue = false;
+};
+fixEvent.stopPropagation = function() {
+  this.cancelBubble = true;
+}
+
+// Dean's forEach: http://dean.edwards.name/base/forEach.js
+/*
+	forEach, version 1.0
+	Copyright 2006, Dean Edwards
+	License: http://www.opensource.org/licenses/mit-license.php
+*/
+
+// array-like enumeration
+if (!Array.forEach) { // mozilla already supports this
+	Array.forEach = function(array, block, context) {
+		for (var i = 0; i < array.length; i++) {
+			block.call(context, array[i], i, array);
+		}
+	};
+}
+
+// generic enumeration
+Function.prototype.forEach = function(object, block, context) {
+	for (var key in object) {
+		if (typeof this.prototype[key] == "undefined") {
+			block.call(context, object[key], key, object);
+		}
+	}
+};
+
+// character enumeration
+String.forEach = function(string, block, context) {
+	Array.forEach(string.split(""), function(chr, index) {
+		block.call(context, chr, index, string);
+	});
+};
+
+// globally resolve forEach enumeration
+var forEach = function(object, block, context) {
+	if (object) {
+		var resolve = Object; // default
+		if (object instanceof Function) {
+			// functions have a "length" property
+			resolve = Function;
+		} else if (object.forEach instanceof Function) {
+			// the object implements a custom forEach method so use that
+			object.forEach(block, context);
+			return;
+		} else if (typeof object == "string") {
+			// the object is a string
+			resolve = String;
+		} else if (typeof object.length == "number") {
+			// the object is array-like
+			resolve = Array;
+		}
+		resolve.forEach(object, block, context);
+	}
+};
+