<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>db/create.sql</filename>
    </added>
    <added>
      <filename>db/db1.4.sql</filename>
    </added>
    <added>
      <filename>db/update_v12_to_v13.sql</filename>
    </added>
    <added>
      <filename>db/update_v13_to_v14.sql</filename>
    </added>
    <added>
      <filename>etc/test/error.json</filename>
    </added>
    <added>
      <filename>etc/test/friends_timeline.json</filename>
    </added>
    <added>
      <filename>etc/test/naan_db1.2.sql</filename>
    </added>
    <added>
      <filename>etc/test/naantest_db1.2.sql</filename>
    </added>
    <added>
      <filename>etc/test/null_friends_timelne.json</filename>
    </added>
    <added>
      <filename>etc/test/replies.json</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -20,6 +20,7 @@
     TwitterClient*      twitterClient;
     NSString*           screenName;
     BOOL                isRestored;
+    int                 page;
 }
 
 - (void)loadTimeline:(NSString*)screenName;</diff>
      <filename>Classes/Controllers/FavoritesViewController.h</filename>
    </modified>
    <modified>
      <diff>@@ -25,6 +25,7 @@
 
 - (void)viewDidLoad
 {
+    page = 1;
     if (timeline == nil) {
         timeline = [[Timeline alloc] init];
     }
@@ -97,8 +98,12 @@
     int count = 0;
     while ([stmt step] == SQLITE_ROW) {
         Status* sts = [Status initWithStatement:stmt type:TWEET_TYPE_FAVORITES];
-        [timeline appendStatus:sts];
-        ++count;
+        if (sts) {
+            if ([timeline indexOfObject:sts] == -1) {
+                [timeline appendStatus:sts];
+                ++count;
+            }
+        }
     }
     isRestored = all;
     return count;
@@ -185,7 +190,7 @@
         if (twitterClient) return;
         [loadCell.spinner startAnimating];
         twitterClient = [[TwitterClient alloc] initWithTarget:self action:@selector(favoritesDidReceive:obj:)];
-        int page = ([timeline countStatuses] / 20) + 1;
+        ++page;
         [twitterClient favorites:screenName page:page];
     }
     else {
@@ -242,9 +247,21 @@
     else {
         return;
     }
+
+    int received = [ary count];
+    NSLog(@&quot;Received %d favorites&quot;, received);
+    if (screenName == nil) {
+        int count = [timeline countStatuses];
+        if (count &gt; received) {
+            NSRange r;
+            r.location = received;
+            r.length = [timeline countStatuses] - received;
+            [timeline removeStatusesInRange:r];
+        }
+    }
     
     // Add messages to the timeline
-    for (int i = 0; i &lt; [ary count]; ++i) {
+    for (int i = 0; i &lt; received; ++i) {
         NSDictionary *dic = (NSDictionary*)[ary objectAtIndex:i];
         if (![dic isKindOfClass:[NSDictionary class]]) {
             continue;
@@ -266,13 +283,22 @@
                 [sts updateFavoriteState];
             }
             else {
-                Status* sts = [Status statusWithJsonDictionary:[ary objectAtIndex:i] type:TWEET_TYPE_FAVORITES];
+                sts = [Status statusWithJsonDictionary:[ary objectAtIndex:i] type:TWEET_TYPE_FAVORITES];
                 sts.unread = false;
                 [sts insertDB];
             }
+            [timeline removeStatus:sts];
         }
     }
+    
     if (screenName == nil) {
+        for (int i = 0; i &lt; [timeline countStatuses]; ++i) {
+            Status *sts = [timeline statusAtIndex:i];
+            NSLog(@&quot;Remove favorite:%lld:%@:%@&quot;, sts.statusId, sts.user.screenName, sts.text);
+            sts.favorited = false;
+            [sts updateFavoriteState];
+        }
+    
         [timeline removeAllStatuses];
         [self restore:isRestored];
     }</diff>
      <filename>Classes/Controllers/FavoritesViewController.m</filename>
    </modified>
    <modified>
      <diff>@@ -102,7 +102,10 @@
     timelineDataSource = [[FriendsTimelineDataSource alloc] initWithController:self tweetType:tab];
     self.tableView.dataSource = timelineDataSource;
     self.tableView.delegate   = timelineDataSource;
-    if (load) [self loadTimeline];
+    if (load) {
+        [self performSelector:@selector(loadTimeline) withObject:nil afterDelay:0.01];
+    }
+    [self.tableView reloadData];
 }
 
 - (IBAction) reload:(id) sender
@@ -170,6 +173,9 @@
     BOOL flag = [[NSUserDefaults standardUserDefaults] boolForKey:@&quot;autoScrollToFirstUnread&quot;];
     if (flag == false) return;
     
+    CGPoint offset = [self.tableView contentOffset];
+    if (offset.y != 0) return;
+    
     if (unread) {
         if (unread &lt; [timelineDataSource.timeline countStatuses]) {
             NSIndexPath *indexPath = [NSIndexPath indexPathForRow:unread inSection:0];</diff>
      <filename>Classes/Controllers/FriendsTimelineController.m</filename>
    </modified>
    <modified>
      <diff>@@ -148,7 +148,7 @@
         if (![dic isKindOfClass:[NSDictionary class]]) {
             continue;
         }
-        User *user = [[User alloc] initWithJsonDictionary:dic];
+        User *user = [User userWithJsonDictionary:dic];
         if (ownFriendsList) {
             [Followee insertDB:user];
         }</diff>
      <filename>Classes/Controllers/FriendsViewController.m</filename>
    </modified>
    <modified>
      <diff>@@ -227,6 +227,7 @@ enum {
         dic = (NSDictionary*)obj;
 
         [user updateWithJSonDictionary:dic];
+        [user updateDB];
         [userView setUser:user];
         detailLoaded = true;
 #ifndef USE_FRIENDSHIP_EXISTS_METHOD        </diff>
      <filename>Classes/Controllers/ProfileViewController.m</filename>
    </modified>
    <modified>
      <diff>@@ -26,6 +26,7 @@
 
 - (void)removeStatus:(Status*)status;
 - (void)removeStatusAtIndex:(int)index;
+- (void)removeStatusesInRange:(NSRange)r;
 - (void)removeLastStatus;
 - (void)removeAllStatuses;
 </diff>
      <filename>Classes/Controllers/Timeline.h</filename>
    </modified>
    <modified>
      <diff>@@ -68,6 +68,11 @@ static NSInteger sortByDate(id a, id b, void *context)
     [statuses removeObjectAtIndex:index];
 }
 
+- (void)removeStatusesInRange:(NSRange)r
+{
+    [statuses removeObjectsInRange:r];
+}
+
 - (void)removeAllStatuses
 {
     [statuses removeAllObjects];</diff>
      <filename>Classes/Controllers/Timeline.m</filename>
    </modified>
    <modified>
      <diff>@@ -253,6 +253,7 @@
     for (int i = 0; i &lt; [ary count]; ++i) {
         Status* sts = [Status statusWithJsonDictionary:[ary objectAtIndex:i] type:TWEET_TYPE_FRIENDS];
         sts.cellType = TWEET_CELL_TYPE_USER;
+        [sts insertDBIfFollowing];
         [sts updateAttribute];
         [timeline appendStatus:sts];
     }</diff>
      <filename>Classes/Controllers/UserTimelineController.m</filename>
    </modified>
    <modified>
      <diff>@@ -9,8 +9,7 @@
 }
 
 + (void)createEditableCopyOfDatabaseIfNeeded:(BOOL)force;
-+ (void)deleteMessageCache;
-+ (void)deleteImageCache;
++ (void)migrate:(NSString*)dbname to:(NSString*)newdbname queries:(NSString*)query_file;
 
 + (sqlite3*)getSharedDatabase;
 + (void)closeDatabase;</diff>
      <filename>Classes/Models/DBConnection.h</filename>
    </modified>
    <modified>
      <diff>@@ -1,10 +1,11 @@
 #import &quot;DBConnection.h&quot;
 #import &quot;Statement.h&quot;
+#import &quot;TimeUtils.h&quot;
 #import &quot;TwitterFonAppDelegate.h&quot;
 
 static sqlite3*             theDatabase = nil;
 
-#define MAIN_DATABASE_NAME @&quot;db1.3.sql&quot;
+#define MAIN_DATABASE_NAME @&quot;db1.4.sql&quot;
 
 //#define TEST_DELETE_TWEET
 
@@ -32,23 +33,27 @@ const char *delete_tweets =
     // Open the database. The database was prepared outside the application.
     if (sqlite3_open([path UTF8String], &amp;instance) != SQLITE_OK) {
         // Even though the open failed, call close to properly clean up resources.
+        NSString *msg = [NSString stringWithUTF8String:sqlite3_errmsg(instance)];
+        [[TwitterFonAppDelegate getAppDelegate] alert:@&quot;Failed to open database&quot; message:msg];
+        NSLog(@&quot;Failed to open database. (%@)&quot;, msg);
         sqlite3_close(instance);
-        NSLog(@&quot;Failed to open database. (%s)&quot;, sqlite3_errmsg(instance));
-        return nil;
-    }        
+        instance = nil;
+    }
+    
     return instance;
 }
 
 + (sqlite3*)getSharedDatabase
 {
     if (theDatabase == nil) {
+
         theDatabase = [self openDatabase:MAIN_DATABASE_NAME];
         if (theDatabase == nil) {
             [DBConnection createEditableCopyOfDatabaseIfNeeded:true];
             [[TwitterFonAppDelegate getAppDelegate] alert:@&quot;Local cache error&quot; 
                                                   message:@&quot;Local cache database has been corrupted. Re-created new database.&quot;];
         }
-        
+
 #ifdef TEST_DELETE_TWEET
         char *errmsg;
         if (sqlite3_exec(theDatabase, delete_tweets, NULL, NULL, &amp;errmsg) != SQLITE_OK) {
@@ -59,110 +64,54 @@ const char *delete_tweets =
     return theDatabase;
 }
 
-//
-// delete caches
-//
-const char *delete_message_cache_sql = 
-&quot;BEGIN;&quot;
-&quot;DELETE FROM statuses;&quot;
-&quot;DELETE FROM direct_messages;&quot;
-&quot;DELETE FROM users;&quot;
-&quot;DELETE FROM followees;&quot;
-&quot;COMMIT;&quot;
-&quot;VACUUM;&quot;;
-
-+ (void)deleteMessageCache
-{
-    char *errmsg;
-    [self getSharedDatabase];
-    
-    if (sqlite3_exec(theDatabase, delete_message_cache_sql, NULL, NULL, &amp;errmsg) != SQLITE_OK) {
-        // ignore error
-        NSLog(@&quot;Error: failed to cleanup chache (%s)&quot;, errmsg);
-    }
-}
-
-+ (void)deleteImageCache
-{
-    char *errmsg;
-    [self getSharedDatabase];
-    
-    if (sqlite3_exec(theDatabase, &quot;DELETE FROM images; VACUUM;&quot;, NULL, NULL, &amp;errmsg) != SQLITE_OK) {
-        // ignore error
-        NSLog(@&quot;Error: failed to cleanup chache (%s)&quot;, errmsg);
-    }
-}
-
-//
-// cleanup and optimize
-//
-const char *cleanup_sql =
-&quot;BEGIN;&quot;
-&quot;DELETE FROM images WHERE updated_at &lt;= (SELECT updated_at FROM images order by updated_at LIMIT 1 OFFSET 5000);&quot;
-&quot;DELETE FROM statuses WHERE type = 0 and id &lt;= (SELECT id FROM statuses WHERE type = 0 ORDER BY id DESC LIMIT 1 OFFSET 4000);&quot;
-&quot;DELETE FROM statuses WHERE type = 1 and id &lt;= (SELECT id FROM statuses WHERE type = 1 ORDER BY id DESC LIMIT 1 OFFSET 1000);&quot;
-&quot;COMMIT&quot;;
-
-
-const char *optimize_sql = &quot;VACUUM; ANALYZE&quot;;
-
 + (void)closeDatabase
 {
-    char *errmsg;
-    if (theDatabase) {
-        if (sqlite3_exec(theDatabase, cleanup_sql, NULL, NULL, &amp;errmsg) != SQLITE_OK) {
-            // ignore error
-            NSLog(@&quot;Error: failed to cleanup chache (%s)&quot;, errmsg);
-        }
-        
-      	int launchCount = [[NSUserDefaults standardUserDefaults] integerForKey:@&quot;launchCount&quot;];
-        NSLog(@&quot;launchCount %d&quot;, launchCount);
-        if (launchCount-- &lt;= 0) {
-            NSLog(@&quot;Optimize database...&quot;);
-            if (sqlite3_exec(theDatabase, optimize_sql, NULL, NULL, &amp;errmsg) != SQLITE_OK) {
-                NSLog(@&quot;Error: failed to cleanup chache (%s)&quot;, errmsg);
-            }
-            launchCount = 50;
-        }
-        [[NSUserDefaults standardUserDefaults] setInteger:launchCount forKey:@&quot;launchCount&quot;];
-        [[NSUserDefaults standardUserDefaults] synchronize];        
+    if (theDatabase) {       
         sqlite3_close(theDatabase);
     }
 }
 
-// Creates a writable copy of the bundled default database in the application Documents directory.
-+ (void)createEditableCopyOfDatabaseIfNeeded:(BOOL)force
++ (void)migrate:(NSString*)dbname to:(NSString*)newdbname queries:(NSString*)query_file
 {
-    // First, test for existence.
-    BOOL success;
     NSFileManager *fileManager = [NSFileManager defaultManager];
     NSError *error;
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
     NSString *documentsDirectory = [paths objectAtIndex:0];
-    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:MAIN_DATABASE_NAME];
     
-    //
-    // migration
-    //
-    // Update from version 1.2.*
-    //
-    NSString *oldDBPath = [documentsDirectory stringByAppendingPathComponent:@&quot;db1.2.sql&quot;];
-    success = [fileManager fileExistsAtPath:oldDBPath];
+    NSString *oldDBPath = [documentsDirectory stringByAppendingPathComponent:dbname];
+    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:newdbname];    
+    
+    BOOL success = [fileManager fileExistsAtPath:oldDBPath];
     if (success) {
-        sqlite3 *db12 = [DBConnection openDatabase:@&quot;db1.2.sql&quot;];
+        sqlite3 *oldDB = [DBConnection openDatabase:dbname];
         char *errmsg;
-        NSString *migrateSQL = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@&quot;update_v12_to_v13.sql&quot;];
+        NSString *migrateSQL = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:query_file];
         NSData *sqldata = [fileManager contentsAtPath:migrateSQL];
         NSString *sql = [[[NSString alloc] initWithData:sqldata encoding:NSUTF8StringEncoding] autorelease];
-        if (sqlite3_exec(db12, [sql UTF8String], NULL, NULL, &amp;errmsg) == SQLITE_OK) {
+        if (sqlite3_exec(oldDB, [sql UTF8String], NULL, NULL, &amp;errmsg) == SQLITE_OK) {
             // succeeded to update.
             [fileManager moveItemAtPath:oldDBPath toPath:writableDBPath error:&amp;error];
-            NSLog(@&quot;Updated database from version 1.2 to 1.3.&quot;);
+            NSLog(@&quot;Updated database (%@)&quot;, query_file);
             return;
         }
-        NSLog(@&quot;Failed to update database (Reason: %s). Discard version 1.2 data...&quot;, errmsg);
+        NSLog(@&quot;Failed to update database (Reason: %s). Discard %@ data...&quot;, errmsg, dbname);
         [fileManager removeItemAtPath:oldDBPath error:&amp;error];
-    }
+    }    
+}
+
+// Creates a writable copy of the bundled default database in the application Documents directory.
++ (void)createEditableCopyOfDatabaseIfNeeded:(BOOL)force
+{
+    // First, test for existence.
+    BOOL success;
+    NSFileManager *fileManager = [NSFileManager defaultManager];
+    NSError *error;
+    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
+    NSString *documentsDirectory = [paths objectAtIndex:0];
+    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:MAIN_DATABASE_NAME];
+    
+    [DBConnection migrate:@&quot;db1.2.sql&quot; to:@&quot;db1.3.sql&quot; queries:@&quot;update_v12_to_v13.sql&quot;];
+    [DBConnection migrate:@&quot;db1.3.sql&quot; to:@&quot;db1.4.sql&quot; queries:@&quot;update_v13_to_v14.sql&quot;];
     
     if (force) {
         [fileManager removeItemAtPath:writableDBPath error:&amp;error];
@@ -188,8 +137,10 @@ const char *optimize_sql = &quot;VACUUM; ANALYZE&quot;;
 
 + (void)commitTransaction
 {
-    char *errmsg;     
+    char *errmsg;
+    Stopwatch *sw = [Stopwatch stopwatch];
     sqlite3_exec(theDatabase, &quot;COMMIT&quot;, NULL, NULL, &amp;errmsg);     
+    [sw lap:@&quot;COMMIT&quot;];
 }
 
 + (Statement*)statementWithQuery:(const char *)sql</diff>
      <filename>Classes/Models/DBConnection.m</filename>
    </modified>
    <modified>
      <diff>@@ -50,9 +50,41 @@
     }
 }
 
++ (BOOL)needUpdate:(User*)user
+{
+    static Statement *stmt = nil;
+    if (stmt == nil) {
+        stmt = [DBConnection statementWithQuery:&quot;SELECT * FROM followees WHERE user_id = ?&quot;];
+        [stmt retain];
+    }
+    [stmt bindInt32:user.userId forIndex:1];
+    int ret = [stmt step];
+    if (ret != SQLITE_ROW) {
+        [stmt reset];
+        return true;
+    }
+    
+    Followee *f = [Followee initWithStatement:stmt];
+    [f autorelease];
+    [stmt reset];
+
+    if ([f.profileImageUrl isEqualToString:user.profileImageUrl] &amp;&amp;
+        [f.screenName isEqualToString:user.screenName] &amp;&amp;
+        [f.name isEqualToString:user.name]) {
+        return false;
+    }
+    else {
+        return true;
+    }
+}
+
 + (void)insertDB:(User*)user
 {
     static Statement *stmt = nil;
+    
+    if (![Followee needUpdate:user]) {
+        return;
+    }
     if (stmt == nil) {
         stmt = [DBConnection statementWithQuery:&quot;REPLACE INTO followees VALUES(?, ?, ?, ?)&quot;];
         [stmt retain];</diff>
      <filename>Classes/Models/Followee.m</filename>
    </modified>
    <modified>
      <diff>@@ -13,6 +13,7 @@
 //
 @interface Statement : NSObject
 {
+    NSString*       query;
     sqlite3_stmt*   stmt;
 }
 </diff>
      <filename>Classes/Models/Statement.h</filename>
    </modified>
    <modified>
      <diff>@@ -6,17 +6,23 @@
 //  Copyright 2008 naan studio. All rights reserved.
 //
 
+#import &quot;DBConnection.h&quot;
 #import &quot;Statement.h&quot;
+#import &quot;TimeUtils.h&quot;
 
+//#define DEBUG_QUERY
 
 @implementation Statement
 
 - (id)initWithDB:(sqlite3*)db query:(const char*)sql
 {
     self = [super init];
-    
+#ifdef DEBUG_QUERY    
+    query = [[NSString alloc] initWithUTF8String:sql];
+#endif
     if (sqlite3_prepare_v2(db, sql, -1, &amp;stmt, NULL) != SQLITE_OK) {
-        NSAssert2(0, @&quot;Failed to prepare statement '%s' (%s)&quot;, sql, sqlite3_errmsg(db));
+        NSLog(@&quot;Failed to prepare statement '%s' (SQL Error: %s)&quot;, sql, sqlite3_errmsg(db));
+        [DBConnection alert];
     }
     return self;
 }
@@ -28,7 +34,16 @@
 
 - (int)step
 {
-    return sqlite3_step(stmt);
+#ifdef DEBUG_QUERY
+    Stopwatch *sw = [Stopwatch stopwatch];
+#endif
+    int result = sqlite3_step(stmt);
+#ifdef DEBUG_QUERY
+    if ([sw diff] &gt; 100 * 1000) {
+        [sw lap:query];
+    }
+#endif
+    return result;
 }
 
 - (void)reset
@@ -38,6 +53,9 @@
 
 - (void)dealloc
 {
+#ifdef DEBUG_QUERY
+    [query release];
+#endif
     sqlite3_finalize(stmt);
     [super dealloc];
 }</diff>
      <filename>Classes/Models/Statement.m</filename>
    </modified>
    <modified>
      <diff>@@ -266,15 +266,18 @@ int sTextWidth[] = {
     
     if (inReplyTo == 0) inReplyTo = -1;
 
-//    static char *sql = &quot;SELECT count(*) FROM statuses WHERE id = ? OR in_reply_to_status_id = ?&quot;;
-    static char *sql = &quot;SELECT count(*) FROM statuses WHERE id = ?&quot;;
+//    static char *sql = &quot;SELECT id FROM statuses WHERE id = ? OR in_reply_to_status_id = ?&quot;;
+    static char *sql = &quot;SELECT id FROM statuses WHERE id = ?&quot;;
     Statement *stmt = [DBConnection statementWithQuery:sql];
         
     [stmt bindInt64:inReplyToStatusId       forIndex:1];
 //    [stmt bindInt64:tweetId                 forIndex:2];
-    [stmt step];
-        
-    return [stmt getInt32:0];
+    if ([stmt step] == SQLITE_ROW) {
+        return true;
+    }
+    else {
+        return false;
+    }
 }
 
 - (int)getConversation:(NSMutableArray*)messages
@@ -294,20 +297,15 @@ int sTextWidth[] = {
     INIT_STOPWATCH(s);
     
     while ([idArray count]) {
-
-        NSString *replies = [idArray componentsJoinedByString:@&quot;,&quot;];
-        NSString *ids = [replyArray componentsJoinedByString:@&quot;,&quot;];
         
+        NSString *replies = [idArray componentsJoinedByString:@&quot;,&quot;];
         [idArray removeAllObjects];
-        [replyArray removeAllObjects];
 
-        NSString *sql = [NSString stringWithFormat:@&quot;SELECT * FROM statuses WHERE id IN (%@) OR in_reply_to_status_id IN (%@)&quot;, ids, replies];
+        NSString* sql = [NSString stringWithFormat:@&quot;SELECT * FROM statuses WHERE in_reply_to_status_id IN (%@)&quot;, replies];        
         Statement *stmt = [DBConnection statementWithQuery:[sql UTF8String]];
         
-        //NSLog(@&quot;Exec %@&quot;, sql);
         while ([stmt step] == SQLITE_ROW) {
             NSString *idStr = [NSString stringWithFormat:@&quot;%lld&quot;, [stmt getInt64:0]];
-            //NSLog(@&quot;Found %@&quot;, idStr);
             if (![hash objectForKey:idStr]) {
                 Status *s = [Status initWithStatement:stmt type:TWEET_TYPE_FRIENDS];
                 [hash setObject:s forKey:idStr];
@@ -317,11 +315,33 @@ int sTextWidth[] = {
                     [replyArray addObject:[NSNumber numberWithLongLong:s.inReplyToStatusId]];
                 }
                 
-                // Up to 100 messages
                 if (++count &gt;= 100) break;
             }
         }
         [stmt reset];
+        
+        if ([replyArray count]) {
+            NSString *ids = [replyArray componentsJoinedByString:@&quot;,&quot;];
+            [replyArray removeAllObjects];            
+            sql = [NSString stringWithFormat:@&quot;SELECT * FROM statuses WHERE id IN (%@)&quot;, ids];
+            stmt = [DBConnection statementWithQuery:[sql UTF8String]];
+            
+            while ([stmt step] == SQLITE_ROW) {
+                NSString *idStr = [NSString stringWithFormat:@&quot;%lld&quot;, [stmt getInt64:0]];
+                if (![hash objectForKey:idStr]) {
+                    Status *s = [Status initWithStatement:stmt type:TWEET_TYPE_FRIENDS];
+                    [hash setObject:s forKey:idStr];
+                    [messages addObject:s];
+                    [idArray addObject:[NSNumber numberWithLongLong:s.tweetId]];
+                    if (s.inReplyToStatusId) {
+                        [replyArray addObject:[NSNumber numberWithLongLong:s.inReplyToStatusId]];
+                    }
+                    
+                    if (++count &gt;= 100) break;
+                }
+            }
+            [stmt reset];   
+        }
     }
     
     LAP(s, @&quot;Decode conversation&quot;);
@@ -387,10 +407,16 @@ int sTextWidth[] = {
 
 - (void)updateFavoriteState
 {
-    Statement *stmt = [DBConnection statementWithQuery:&quot;UPDATE statuses SET favorited = ? WHERE id = ?&quot;];
+    static Statement *stmt = nil;
+    if (stmt == nil) {
+        stmt = [DBConnection statementWithQuery:&quot;UPDATE statuses SET favorited = ? WHERE id = ?&quot;];
+        [stmt retain];
+    }
+    
     [stmt bindInt32:favorited forIndex:1];
     [stmt bindInt64:tweetId forIndex:2];
     [stmt step]; // ignore error
+    [stmt reset];
 }
 
 @end</diff>
      <filename>Classes/Models/Status.m</filename>
    </modified>
    <modified>
      <diff>@@ -18,6 +18,8 @@
     BOOL        notifications;
     BOOL        protected;
     BOOL        following;
+    
+    BOOL        needUpdate;
 }
 
 @property (nonatomic, assign) uint32_t  userId;
@@ -35,12 +37,12 @@
 @property (nonatomic, assign) BOOL      following;
 @property (nonatomic, assign) BOOL      notifications;
 
+@property (nonatomic, assign) BOOL      needUpdate;
+
 + (User*)userWithId:(int)id;
 + (User*)userWithJsonDictionary:(NSDictionary*)dic;
 + (User*)userWithSearchResult:(NSDictionary*)dic;
 
-- (User*)initWithJsonDictionary:(NSDictionary*)dic;
-- (User*)initWithSearchResult:(NSDictionary*)dic;
 - (void)updateWithJSonDictionary:(NSDictionary*)dic;
 - (void)updateDB;
 </diff>
      <filename>Classes/Models/User.h</filename>
    </modified>
    <modified>
      <diff>@@ -19,8 +19,52 @@
 @synthesize favoritesCount;
 @synthesize following;
 @synthesize notifications;
+@synthesize needUpdate;
 
-- (void)updateWithJSonDictionary:(NSDictionary*)dic
+- (void)checkUpdate:(User*)user
+{
+    needUpdate = false;
+    
+    if (![profileImageUrl isEqualToString:user.profileImageUrl]) {
+        self.profileImageUrl = user.profileImageUrl;
+        needUpdate = true;
+    }
+    if (![screenName isEqualToString:user.screenName]) {
+        self.screenName = user.screenName;
+        needUpdate = true;
+    }
+    if (![name isEqualToString:user.name]) {
+        self.name = user.name;
+        needUpdate = true;
+    }
+    if (![location isEqualToString:user.location]) {
+        self.location = user.location;
+        needUpdate = true;
+    }
+    if (![description isEqualToString:user.description]) {
+        self.description = user.description;
+        needUpdate = true;
+    }
+    if (![url isEqualToString:user.url]) {
+        self.url = user.url;
+        needUpdate = true;
+    }
+    if (protected != user.protected) {
+        self.protected = user.protected;
+        needUpdate = true;
+    }
+    if (followersCount != user.followersCount) {
+        self.followersCount = user.followersCount;
+        needUpdate = true;
+    }
+    
+    self.friendsCount   = user.friendsCount;
+    self.statusesCount  = user.statusesCount;
+    self.favoritesCount = user.favoritesCount;
+    self.following      = user.following;
+}
+
+- (void)initWithJsonDictionary:(NSDictionary*)dic
 {
     [name release];
     [screenName release];
@@ -62,13 +106,12 @@
     [profileImageUrl retain];
 }
 
-- (User*)initWithJsonDictionary:(NSDictionary*)dic
+- (void)updateWithJSonDictionary:(NSDictionary*)dic
 {
-	self = [super init];
-    
-    [self updateWithJSonDictionary:dic];
-	
-	return self;
+    User *u = [[User alloc] init];
+    [u initWithJsonDictionary:dic];
+    [self checkUpdate:u];
+    [u release];
 }
 
 - (User*)initWithSearchResult:(NSDictionary*)dic
@@ -139,7 +182,17 @@
         return u;
     }
     
-    u = [[User alloc] initWithJsonDictionary:dic];
+    u = [User userWithId:[[dic objectForKey:@&quot;id&quot;] longValue]];
+    
+    if (u) {
+        [UserStore setUser:u];
+        [u updateWithJSonDictionary:dic];
+        return u;
+    }
+    
+    u = [[User alloc] init];
+    [u initWithJsonDictionary:dic];
+    u.needUpdate = true;
     [UserStore setUser:u];
     return u;
 }
@@ -156,6 +209,8 @@
 
 - (void)updateDB
 {
+    if (!needUpdate) return;
+    
     static Statement *stmt = nil;
     if (stmt == nil) {
         stmt = [DBConnection statementWithQuery:&quot;REPLACE INTO users VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?)&quot;];</diff>
      <filename>Classes/Models/User.m</filename>
    </modified>
    <modified>
      <diff>@@ -15,6 +15,7 @@
 }
 
 + (Stopwatch*) stopwatch;
+- (uint64_t)diff;
 - (void) lap:(NSString*)message;
 
 @end</diff>
      <filename>Classes/OtherSources/TimeUtils.h</filename>
    </modified>
    <modified>
      <diff>@@ -25,14 +25,19 @@
     return [[[Stopwatch alloc] init] autorelease];
 }
 
-- (void) lap:(NSString*)message
+- (uint64_t)diff
 {
-#ifndef DISTRIBUTION
     gettimeofday(&amp;tv2, NULL);
-
-    uint64_t sec = tv2.tv_sec - tv1.tv_sec;
-    uint64_t diff = sec * 1000 * 1000 + (tv2.tv_usec - tv1.tv_usec);
     
+    uint64_t sec = tv2.tv_sec - tv1.tv_sec;
+    uint64_t diff = sec * 1000 * 1000 + (tv2.tv_usec - tv1.tv_usec);    
+    return diff;
+}
+
+- (void) lap:(NSString*)message
+{
+#ifndef DISTRIBUTION
+    uint64_t diff = [self diff];
     NSLog(@&quot;%@ (%lld.%06lld)&quot;, message, diff / 1000000, diff % 1000000);
 #endif
 }</diff>
      <filename>Classes/OtherSources/TimeUtils.m</filename>
    </modified>
    <modified>
      <diff>@@ -36,6 +36,10 @@ typedef enum {
     NSDate*                         lastRefreshDate;
     
     NSString*                       screenName;
+
+    BOOL                                needOptimizeDB;
+    IBOutlet UIWindow*                  HUD;
+    IBOutlet UIActivityIndicatorView*   spinner;
 }
 
 - (IBAction)post:(id)sender;</diff>
      <filename>Classes/OtherSources/TwitterFonAppDelegate.h</filename>
    </modified>
    <modified>
      <diff>@@ -18,7 +18,6 @@
 #import &quot;ColorUtils.h&quot;
 #import &quot;REString.h&quot;
 
-
 @interface NSObject (TwitterFonAppDelegateDelegate)
 - (void)didLeaveTab:(UINavigationController*)navigationController;
 - (void)didSelectTab:(UINavigationController*)navigationController;
@@ -45,29 +44,24 @@
     [self initializeUserDefaults];
 
  	BOOL forceCreate = [[NSUserDefaults standardUserDefaults] boolForKey:@&quot;clearLocalCache&quot;];
-    [DBConnection createEditableCopyOfDatabaseIfNeeded:forceCreate];
-    [DBConnection getSharedDatabase];
     [[NSUserDefaults standardUserDefaults] setBool:false forKey:@&quot;clearLocalCache&quot;];
     
 	NSString *username = [[NSUserDefaults standardUserDefaults] stringForKey:@&quot;username&quot;];
 	NSString *prevUsername = [[NSUserDefaults standardUserDefaults] stringForKey:@&quot;prevUsername&quot;];
 	NSString *password = [[NSUserDefaults standardUserDefaults] stringForKey:@&quot;password&quot;];
-    
-    BOOL needDeleteMessageCache = false;
 
     if (prevUsername != nil &amp;&amp; [username caseInsensitiveCompare:prevUsername] != NSOrderedSame) {
-        needDeleteMessageCache = true;
+        forceCreate = true;
     }
 
     NSString *versionStr = [[[NSBundle mainBundle] infoDictionary] objectForKey:@&quot;CFBundleVersion&quot;];
     [[NSUserDefaults standardUserDefaults] setObject:versionStr forKey:@&quot;appVersion&quot;];
-    
     [[NSUserDefaults standardUserDefaults] setObject:username forKey:@&quot;prevUsername&quot;];
-    [[NSUserDefaults standardUserDefaults] synchronize];
+
+    [DBConnection createEditableCopyOfDatabaseIfNeeded:forceCreate];
+    [DBConnection getSharedDatabase];
     
-    if (needDeleteMessageCache) {
-        [DBConnection deleteMessageCache];
-    }
+    [[NSUserDefaults standardUserDefaults] synchronize];
     
     [UIColor initTwitterFonColorScheme];
     imageStore = [[ImageStore alloc] init];
@@ -76,37 +70,14 @@
     tabBarController.selectedIndex = TAB_FRIENDS;
     
   	[window addSubview:tabBarController.view];
+    [window makeKeyAndVisible];
+    HUD.hidden = true;
     
     if ([username length] == 0 || [password length] == 0) {
         [self openSettingsView];
     }
     else {
-        [self postInit];
-    }
-}
-
-- (void)initializeUserDefaults
-{
-    NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys:
-                         @&quot;&quot;,                             @&quot;username&quot;,
-                         @&quot;&quot;,                             @&quot;password&quot;,
-                         [NSNumber numberWithBool:false], @&quot;clearLocalCache&quot;,
-                         [NSNumber numberWithBool:true],  @&quot;loadAllTabOnLaunch&quot;,
-                         [NSNumber numberWithBool:true],  @&quot;autoScrollToFirstUnread&quot;,
-                         [NSNumber numberWithInt:5],      @&quot;autoRefresh&quot;,
-                         @&quot;&quot;,                             @&quot;tweet&quot;,
-                         [NSNumber numberWithLongLong:0], @&quot;inReplyToStatusId&quot;,
-                         @&quot;&quot;,                             @&quot;to&quot;,
-                         @&quot;&quot;,                             @&quot;recipient&quot;,
-                         [NSNumber numberWithInt:2],      @&quot;searchDistance&quot;,
-                         [NSNumber numberWithInt:50],     @&quot;launchCount&quot;,
-                         [NSNumber numberWithInt:13],     @&quot;fontSize&quot;,
-                         nil];
-
-    for (id key in dic) {
-        if ([[NSUserDefaults standardUserDefaults] objectForKey:key] == nil) {
-            [[NSUserDefaults standardUserDefaults] setObject:[dic objectForKey:key] forKey:key];
-        }
+        [self performSelector:@selector(postInit) withObject:nil afterDelay:0.01];
     }
 }
 
@@ -141,6 +112,30 @@
     initialized = true;
 }
 
+- (void)initializeUserDefaults
+{
+    NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys:
+                         @&quot;&quot;,                             @&quot;username&quot;,
+                         @&quot;&quot;,                             @&quot;password&quot;,
+                         [NSNumber numberWithBool:false], @&quot;clearLocalCache&quot;,
+                         [NSNumber numberWithBool:true],  @&quot;loadAllTabOnLaunch&quot;,
+                         [NSNumber numberWithBool:true],  @&quot;autoScrollToFirstUnread&quot;,
+                         [NSNumber numberWithInt:5],      @&quot;autoRefresh&quot;,
+                         @&quot;&quot;,                             @&quot;tweet&quot;,
+                         [NSNumber numberWithLongLong:0], @&quot;inReplyToStatusId&quot;,
+                         @&quot;&quot;,                             @&quot;to&quot;,
+                         @&quot;&quot;,                             @&quot;recipient&quot;,
+                         [NSNumber numberWithInt:2],      @&quot;searchDistance&quot;,
+                         [NSNumber numberWithInt:13],     @&quot;fontSize&quot;,
+                         nil];
+
+    for (id key in dic) {
+        if ([[NSUserDefaults standardUserDefaults] objectForKey:key] == nil) {
+            [[NSUserDefaults standardUserDefaults] setObject:[dic objectForKey:key] forKey:key];
+        }
+    }
+}
+
 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
 {
     UINavigationController* nav = (UINavigationController*)[tabBarController.viewControllers objectAtIndex:selectedTab];
@@ -168,6 +163,7 @@
     if ([method isEqualToString:@&quot;search&quot;]) {
         [self search:[url query]];
     }
+    
     return YES;
 }
 
@@ -179,7 +175,8 @@
 
 - (void)postURLWithoutConvert:(NSURL*)url
 {
-    [self.postView editWithMessage:[url query]];
+    NSString* message = [url query];
+    [self.postView editWithMessage:[message stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
     [url release];
 }
 </diff>
      <filename>Classes/OtherSources/TwitterFonAppDelegate.m</filename>
    </modified>
    <modified>
      <diff>@@ -32,7 +32,7 @@
 	&lt;key&gt;CFBundleSignature&lt;/key&gt;
 	&lt;string&gt;????&lt;/string&gt;
 	&lt;key&gt;CFBundleVersion&lt;/key&gt;
-	&lt;string&gt;1.4.1&lt;/string&gt;
+	&lt;string&gt;1.4.4&lt;/string&gt;
 	&lt;key&gt;LSRequiresIPhoneOS&lt;/key&gt;
 	&lt;true/&gt;
 	&lt;key&gt;NSMainNibFile&lt;/key&gt;</diff>
      <filename>Info.plist</filename>
    </modified>
    <modified>
      <diff>@@ -1,19 +1,29 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;archive type=&quot;com.apple.InterfaceBuilder3.CocoaTouch.XIB&quot; version=&quot;7.02&quot;&gt;
+&lt;archive type=&quot;com.apple.InterfaceBuilder3.CocoaTouch.XIB&quot; version=&quot;7.03&quot;&gt;
 	&lt;data&gt;
 		&lt;int key=&quot;IBDocument.SystemTarget&quot;&gt;512&lt;/int&gt;
 		&lt;string key=&quot;IBDocument.SystemVersion&quot;&gt;9G55&lt;/string&gt;
-		&lt;string key=&quot;IBDocument.InterfaceBuilderVersion&quot;&gt;672&lt;/string&gt;
+		&lt;string key=&quot;IBDocument.InterfaceBuilderVersion&quot;&gt;677&lt;/string&gt;
 		&lt;string key=&quot;IBDocument.AppKitVersion&quot;&gt;949.43&lt;/string&gt;
 		&lt;string key=&quot;IBDocument.HIToolboxVersion&quot;&gt;353.00&lt;/string&gt;
 		&lt;object class=&quot;NSMutableArray&quot; key=&quot;IBDocument.EditedObjectIDs&quot;&gt;
 			&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
 			&lt;integer value=&quot;421&quot;/&gt;
+			&lt;integer value=&quot;423&quot;/&gt;
 		&lt;/object&gt;
 		&lt;object class=&quot;NSArray&quot; key=&quot;IBDocument.PluginDependencies&quot;&gt;
 			&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
 			&lt;string&gt;com.apple.InterfaceBuilder.IBCocoaTouchPlugin&lt;/string&gt;
 		&lt;/object&gt;
+		&lt;object class=&quot;NSMutableDictionary&quot; key=&quot;IBDocument.Metadata&quot;&gt;
+			&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+			&lt;object class=&quot;NSArray&quot; key=&quot;dict.sortedKeys&quot;&gt;
+				&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+			&lt;/object&gt;
+			&lt;object class=&quot;NSMutableArray&quot; key=&quot;dict.values&quot;&gt;
+				&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+			&lt;/object&gt;
+		&lt;/object&gt;
 		&lt;object class=&quot;NSMutableArray&quot; key=&quot;IBDocument.RootObjects&quot; id=&quot;1000&quot;&gt;
 			&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
 			&lt;object class=&quot;IBProxyObject&quot; id=&quot;841351856&quot;&gt;
@@ -233,6 +243,63 @@
 				&lt;object class=&quot;IBUISimulatedStatusBarMetrics&quot; key=&quot;IBUISimulatedStatusBarMetrics&quot;/&gt;
 				&lt;bool key=&quot;IBUIVisibleAtLaunch&quot;&gt;YES&lt;/bool&gt;
 			&lt;/object&gt;
+			&lt;object class=&quot;IBUIWindow&quot; id=&quot;768687225&quot;&gt;
+				&lt;reference key=&quot;NSNextResponder&quot;/&gt;
+				&lt;int key=&quot;NSvFlags&quot;&gt;1316&lt;/int&gt;
+				&lt;object class=&quot;NSMutableArray&quot; key=&quot;NSSubviews&quot;&gt;
+					&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+					&lt;object class=&quot;IBUIActivityIndicatorView&quot; id=&quot;890556410&quot;&gt;
+						&lt;reference key=&quot;NSNextResponder&quot; ref=&quot;768687225&quot;/&gt;
+						&lt;int key=&quot;NSvFlags&quot;&gt;1316&lt;/int&gt;
+						&lt;string key=&quot;NSFrame&quot;&gt;{{140, 218}, {37, 37}}&lt;/string&gt;
+						&lt;reference key=&quot;NSSuperview&quot; ref=&quot;768687225&quot;/&gt;
+						&lt;bool key=&quot;IBUIOpaque&quot;&gt;NO&lt;/bool&gt;
+						&lt;bool key=&quot;IBUIClearsContextBeforeDrawing&quot;&gt;NO&lt;/bool&gt;
+						&lt;bool key=&quot;IBUIHidesWhenStopped&quot;&gt;NO&lt;/bool&gt;
+						&lt;bool key=&quot;IBUIAnimating&quot;&gt;YES&lt;/bool&gt;
+						&lt;int key=&quot;IBUIStyle&quot;&gt;0&lt;/int&gt;
+					&lt;/object&gt;
+					&lt;object class=&quot;IBUILabel&quot; id=&quot;731558494&quot;&gt;
+						&lt;reference key=&quot;NSNextResponder&quot; ref=&quot;768687225&quot;/&gt;
+						&lt;int key=&quot;NSvFlags&quot;&gt;1316&lt;/int&gt;
+						&lt;string key=&quot;NSFrame&quot;&gt;{{41, 129}, {235, 63}}&lt;/string&gt;
+						&lt;reference key=&quot;NSSuperview&quot; ref=&quot;768687225&quot;/&gt;
+						&lt;bool key=&quot;IBUIOpaque&quot;&gt;NO&lt;/bool&gt;
+						&lt;bool key=&quot;IBUIClipsSubviews&quot;&gt;YES&lt;/bool&gt;
+						&lt;bool key=&quot;IBUIUserInteractionEnabled&quot;&gt;NO&lt;/bool&gt;
+						&lt;string key=&quot;IBUIText&quot;&gt;Optimizing local cache database. Please wait...&lt;/string&gt;
+						&lt;object class=&quot;NSFont&quot; key=&quot;IBUIFont&quot;&gt;
+							&lt;string key=&quot;NSName&quot;&gt;Helvetica&lt;/string&gt;
+							&lt;double key=&quot;NSSize&quot;&gt;2.000000e+01&lt;/double&gt;
+							&lt;int key=&quot;NSfFlags&quot;&gt;16&lt;/int&gt;
+						&lt;/object&gt;
+						&lt;object class=&quot;NSColor&quot; key=&quot;IBUITextColor&quot;&gt;
+							&lt;int key=&quot;NSColorSpace&quot;&gt;1&lt;/int&gt;
+							&lt;bytes key=&quot;NSRGB&quot;&gt;MSAxIDEAA&lt;/bytes&gt;
+							&lt;object class=&quot;NSColorSpace&quot; key=&quot;NSCustomColorSpace&quot;&gt;
+								&lt;int key=&quot;NSID&quot;&gt;1&lt;/int&gt;
+							&lt;/object&gt;
+						&lt;/object&gt;
+						&lt;nil key=&quot;IBUIHighlightedColor&quot;/&gt;
+						&lt;int key=&quot;IBUIBaselineAdjustment&quot;&gt;1&lt;/int&gt;
+						&lt;bool key=&quot;IBUIAdjustsFontSizeToFit&quot;&gt;NO&lt;/bool&gt;
+						&lt;float key=&quot;IBUIMinimumFontSize&quot;&gt;2.000000e+01&lt;/float&gt;
+						&lt;int key=&quot;IBUINumberOfLines&quot;&gt;3&lt;/int&gt;
+						&lt;int key=&quot;IBUITextAlignment&quot;&gt;1&lt;/int&gt;
+					&lt;/object&gt;
+				&lt;/object&gt;
+				&lt;object class=&quot;NSPSMatrix&quot; key=&quot;NSFrameMatrix&quot;/&gt;
+				&lt;string key=&quot;NSFrameSize&quot;&gt;{320, 480}&lt;/string&gt;
+				&lt;reference key=&quot;NSSuperview&quot;/&gt;
+				&lt;object class=&quot;NSColor&quot; key=&quot;IBUIBackgroundColor&quot;&gt;
+					&lt;int key=&quot;NSColorSpace&quot;&gt;1&lt;/int&gt;
+					&lt;bytes key=&quot;NSRGB&quot;&gt;MCAwIDAgMC43NQA&lt;/bytes&gt;
+				&lt;/object&gt;
+				&lt;bool key=&quot;IBUIClipsSubviews&quot;&gt;YES&lt;/bool&gt;
+				&lt;bool key=&quot;IBUIClearsContextBeforeDrawing&quot;&gt;NO&lt;/bool&gt;
+				&lt;object class=&quot;IBUISimulatedStatusBarMetrics&quot; key=&quot;IBUISimulatedStatusBarMetrics&quot;/&gt;
+				&lt;bool key=&quot;IBUIVisibleAtLaunch&quot;&gt;YES&lt;/bool&gt;
+			&lt;/object&gt;
 		&lt;/object&gt;
 		&lt;object class=&quot;IBObjectContainer&quot; key=&quot;IBDocument.Objects&quot;&gt;
 			&lt;object class=&quot;NSMutableArray&quot; key=&quot;connectionRecords&quot;&gt;
@@ -341,6 +408,22 @@
 					&lt;/object&gt;
 					&lt;int key=&quot;connectionID&quot;&gt;422&lt;/int&gt;
 				&lt;/object&gt;
+				&lt;object class=&quot;IBConnectionRecord&quot;&gt;
+					&lt;object class=&quot;IBCocoaTouchOutletConnection&quot; key=&quot;connection&quot;&gt;
+						&lt;string key=&quot;label&quot;&gt;HUD&lt;/string&gt;
+						&lt;reference key=&quot;source&quot; ref=&quot;664661524&quot;/&gt;
+						&lt;reference key=&quot;destination&quot; ref=&quot;768687225&quot;/&gt;
+					&lt;/object&gt;
+					&lt;int key=&quot;connectionID&quot;&gt;426&lt;/int&gt;
+				&lt;/object&gt;
+				&lt;object class=&quot;IBConnectionRecord&quot;&gt;
+					&lt;object class=&quot;IBCocoaTouchOutletConnection&quot; key=&quot;connection&quot;&gt;
+						&lt;string key=&quot;label&quot;&gt;spinner&lt;/string&gt;
+						&lt;reference key=&quot;source&quot; ref=&quot;664661524&quot;/&gt;
+						&lt;reference key=&quot;destination&quot; ref=&quot;890556410&quot;/&gt;
+					&lt;/object&gt;
+					&lt;int key=&quot;connectionID&quot;&gt;427&lt;/int&gt;
+				&lt;/object&gt;
 			&lt;/object&gt;
 			&lt;object class=&quot;IBMutableOrderedSet&quot; key=&quot;objectRecords&quot;&gt;
 				&lt;object class=&quot;NSArray&quot; key=&quot;orderedObjects&quot;&gt;
@@ -444,6 +527,7 @@
 						&lt;int key=&quot;objectID&quot;&gt;2&lt;/int&gt;
 						&lt;reference key=&quot;object&quot; ref=&quot;380026005&quot;/&gt;
 						&lt;reference key=&quot;parent&quot; ref=&quot;957960031&quot;/&gt;
+						&lt;string key=&quot;objectName&quot;&gt;MainWindow&lt;/string&gt;
 					&lt;/object&gt;
 					&lt;object class=&quot;IBObjectRecord&quot;&gt;
 						&lt;int key=&quot;objectID&quot;&gt;193&lt;/int&gt;
@@ -637,6 +721,27 @@
 						&lt;reference key=&quot;object&quot; ref=&quot;205447070&quot;/&gt;
 						&lt;reference key=&quot;parent&quot; ref=&quot;619424054&quot;/&gt;
 					&lt;/object&gt;
+					&lt;object class=&quot;IBObjectRecord&quot;&gt;
+						&lt;int key=&quot;objectID&quot;&gt;423&lt;/int&gt;
+						&lt;reference key=&quot;object&quot; ref=&quot;768687225&quot;/&gt;
+						&lt;object class=&quot;NSMutableArray&quot; key=&quot;children&quot;&gt;
+							&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+							&lt;reference ref=&quot;890556410&quot;/&gt;
+							&lt;reference ref=&quot;731558494&quot;/&gt;
+						&lt;/object&gt;
+						&lt;reference key=&quot;parent&quot; ref=&quot;957960031&quot;/&gt;
+						&lt;string key=&quot;objectName&quot;&gt;HUD&lt;/string&gt;
+					&lt;/object&gt;
+					&lt;object class=&quot;IBObjectRecord&quot;&gt;
+						&lt;int key=&quot;objectID&quot;&gt;425&lt;/int&gt;
+						&lt;reference key=&quot;object&quot; ref=&quot;890556410&quot;/&gt;
+						&lt;reference key=&quot;parent&quot; ref=&quot;768687225&quot;/&gt;
+					&lt;/object&gt;
+					&lt;object class=&quot;IBObjectRecord&quot;&gt;
+						&lt;int key=&quot;objectID&quot;&gt;424&lt;/int&gt;
+						&lt;reference key=&quot;object&quot; ref=&quot;731558494&quot;/&gt;
+						&lt;reference key=&quot;parent&quot; ref=&quot;768687225&quot;/&gt;
+					&lt;/object&gt;
 				&lt;/object&gt;
 			&lt;/object&gt;
 			&lt;object class=&quot;NSMutableDictionary&quot; key=&quot;flattenedProperties&quot;&gt;
@@ -672,6 +777,12 @@
 					&lt;string&gt;416.IBPluginDependency&lt;/string&gt;
 					&lt;string&gt;418.IBPluginDependency&lt;/string&gt;
 					&lt;string&gt;421.IBPluginDependency&lt;/string&gt;
+					&lt;string&gt;423.IBAttributePlaceholdersKey&lt;/string&gt;
+					&lt;string&gt;423.IBEditorWindowLastContentRect&lt;/string&gt;
+					&lt;string&gt;423.IBPluginDependency&lt;/string&gt;
+					&lt;string&gt;423.UIWindow.visibleAtLaunch&lt;/string&gt;
+					&lt;string&gt;424.IBPluginDependency&lt;/string&gt;
+					&lt;string&gt;425.IBPluginDependency&lt;/string&gt;
 				&lt;/object&gt;
 				&lt;object class=&quot;NSMutableArray&quot; key=&quot;dict.values&quot;&gt;
 					&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
@@ -712,6 +823,20 @@
 					&lt;string&gt;com.apple.InterfaceBuilder.IBCocoaTouchPlugin&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.IBCocoaTouchPlugin&lt;/string&gt;
 					&lt;string&gt;com.apple.InterfaceBuilder.IBCocoaTouchPlugin&lt;/string&gt;
+					&lt;object class=&quot;NSMutableDictionary&quot;&gt;
+						&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+						&lt;object class=&quot;NSArray&quot; key=&quot;dict.sortedKeys&quot;&gt;
+							&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+						&lt;/object&gt;
+						&lt;object class=&quot;NSMutableArray&quot; key=&quot;dict.values&quot;&gt;
+							&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+						&lt;/object&gt;
+					&lt;/object&gt;
+					&lt;string&gt;{{645, 551}, {320, 480}}&lt;/string&gt;
+					&lt;string&gt;com.apple.InterfaceBuilder.IBCocoaTouchPlugin&lt;/string&gt;
+					&lt;integer value=&quot;1&quot;/&gt;
+					&lt;string&gt;com.apple.InterfaceBuilder.IBCocoaTouchPlugin&lt;/string&gt;
+					&lt;string&gt;com.apple.InterfaceBuilder.IBCocoaTouchPlugin&lt;/string&gt;
 				&lt;/object&gt;
 			&lt;/object&gt;
 			&lt;object class=&quot;NSMutableDictionary&quot; key=&quot;unlocalizedProperties&quot;&gt;
@@ -734,7 +859,7 @@
 				&lt;/object&gt;
 			&lt;/object&gt;
 			&lt;nil key=&quot;sourceID&quot;/&gt;
-			&lt;int key=&quot;maxID&quot;&gt;422&lt;/int&gt;
+			&lt;int key=&quot;maxID&quot;&gt;427&lt;/int&gt;
 		&lt;/object&gt;
 		&lt;object class=&quot;IBClassDescriber&quot; key=&quot;IBDocument.Classes&quot;&gt;
 			&lt;object class=&quot;NSMutableArray&quot; key=&quot;referencedPartialClassDescriptions&quot;&gt;
@@ -813,11 +938,15 @@
 						&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
 						&lt;object class=&quot;NSMutableArray&quot; key=&quot;dict.sortedKeys&quot;&gt;
 							&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+							&lt;string&gt;HUD&lt;/string&gt;
+							&lt;string&gt;spinner&lt;/string&gt;
 							&lt;string&gt;tabBarController&lt;/string&gt;
 							&lt;string&gt;window&lt;/string&gt;
 						&lt;/object&gt;
 						&lt;object class=&quot;NSMutableArray&quot; key=&quot;dict.values&quot;&gt;
 							&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+							&lt;string&gt;UIWindow&lt;/string&gt;
+							&lt;string&gt;UIActivityIndicatorView&lt;/string&gt;
 							&lt;string&gt;UITabBarController&lt;/string&gt;
 							&lt;string&gt;UIWindow&lt;/string&gt;
 						&lt;/object&gt;</diff>
      <filename>Interfaces/MainWindow.xib</filename>
    </modified>
    <modified>
      <diff>@@ -1,11 +1,11 @@
 &lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
-&lt;archive type=&quot;com.apple.InterfaceBuilder3.CocoaTouch.XIB&quot; version=&quot;7.02&quot;&gt;
+&lt;archive type=&quot;com.apple.InterfaceBuilder3.CocoaTouch.XIB&quot; version=&quot;7.03&quot;&gt;
 	&lt;data&gt;
 		&lt;int key=&quot;IBDocument.SystemTarget&quot;&gt;512&lt;/int&gt;
-		&lt;string key=&quot;IBDocument.SystemVersion&quot;&gt;9F33&lt;/string&gt;
-		&lt;string key=&quot;IBDocument.InterfaceBuilderVersion&quot;&gt;672&lt;/string&gt;
-		&lt;string key=&quot;IBDocument.AppKitVersion&quot;&gt;949.34&lt;/string&gt;
-		&lt;string key=&quot;IBDocument.HIToolboxVersion&quot;&gt;352.00&lt;/string&gt;
+		&lt;string key=&quot;IBDocument.SystemVersion&quot;&gt;9G55&lt;/string&gt;
+		&lt;string key=&quot;IBDocument.InterfaceBuilderVersion&quot;&gt;677&lt;/string&gt;
+		&lt;string key=&quot;IBDocument.AppKitVersion&quot;&gt;949.43&lt;/string&gt;
+		&lt;string key=&quot;IBDocument.HIToolboxVersion&quot;&gt;353.00&lt;/string&gt;
 		&lt;object class=&quot;NSMutableArray&quot; key=&quot;IBDocument.EditedObjectIDs&quot;&gt;
 			&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
 			&lt;integer value=&quot;65&quot;/&gt;
@@ -16,6 +16,15 @@
 			&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
 			&lt;string&gt;com.apple.InterfaceBuilder.IBCocoaTouchPlugin&lt;/string&gt;
 		&lt;/object&gt;
+		&lt;object class=&quot;NSMutableDictionary&quot; key=&quot;IBDocument.Metadata&quot;&gt;
+			&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+			&lt;object class=&quot;NSArray&quot; key=&quot;dict.sortedKeys&quot;&gt;
+				&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+			&lt;/object&gt;
+			&lt;object class=&quot;NSMutableArray&quot; key=&quot;dict.values&quot;&gt;
+				&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
+			&lt;/object&gt;
+		&lt;/object&gt;
 		&lt;object class=&quot;NSMutableArray&quot; key=&quot;IBDocument.RootObjects&quot; id=&quot;1000&quot;&gt;
 			&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
 			&lt;object class=&quot;IBProxyObject&quot; id=&quot;372490531&quot;&gt;
@@ -69,6 +78,8 @@
 								&lt;/object&gt;
 								&lt;float key=&quot;IBUIMinimumFontSize&quot;&gt;1.700000e+01&lt;/float&gt;
 								&lt;object class=&quot;IBUITextInputTraits&quot; key=&quot;IBUITextInputTraits&quot;&gt;
+									&lt;int key=&quot;IBUIAutocorrectionType&quot;&gt;1&lt;/int&gt;
+									&lt;int key=&quot;IBUIKeyboardType&quot;&gt;1&lt;/int&gt;
 									&lt;bool key=&quot;IBUIEnablesReturnKeyAutomatically&quot;&gt;YES&lt;/bool&gt;
 								&lt;/object&gt;
 							&lt;/object&gt;
@@ -431,32 +442,21 @@
 					&lt;string key=&quot;className&quot;&gt;NSObject&lt;/string&gt;
 					&lt;object class=&quot;IBClassDescriptionSource&quot; key=&quot;sourceIdentifier&quot;&gt;
 						&lt;string key=&quot;majorKey&quot;&gt;IBProjectSource&lt;/string&gt;
-						&lt;string key=&quot;minorKey&quot;&gt;Classes/JSON/NSObject+SBJSON.h&lt;/string&gt;
+						&lt;string key=&quot;minorKey&quot;&gt;Classes/OtherSources/JSON/NSObject+SBJSON.h&lt;/string&gt;
 					&lt;/object&gt;
 				&lt;/object&gt;
 				&lt;object class=&quot;IBPartialClassDescription&quot;&gt;
 					&lt;string key=&quot;className&quot;&gt;SettingsViewController&lt;/string&gt;
 					&lt;string key=&quot;superclassName&quot;&gt;UIViewController&lt;/string&gt;
 					&lt;object class=&quot;NSMutableDictionary&quot; key=&quot;actions&quot;&gt;
-						&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
-						&lt;object class=&quot;NSMutableArray&quot; key=&quot;dict.sortedKeys&quot;&gt;
-							&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
-							&lt;string&gt;done:&lt;/string&gt;
-							&lt;string&gt;toggleLoadAlltab:&lt;/string&gt;
-						&lt;/object&gt;
-						&lt;object class=&quot;NSMutableArray&quot; key=&quot;dict.values&quot;&gt;
-							&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
-							&lt;string&gt;id&lt;/string&gt;
-							&lt;string&gt;id&lt;/string&gt;
-						&lt;/object&gt;
+						&lt;string key=&quot;NS.key.0&quot;&gt;done:&lt;/string&gt;
+						&lt;string key=&quot;NS.object.0&quot;&gt;id&lt;/string&gt;
 					&lt;/object&gt;
 					&lt;object class=&quot;NSMutableDictionary&quot; key=&quot;outlets&quot;&gt;
 						&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
 						&lt;object class=&quot;NSMutableArray&quot; key=&quot;dict.sortedKeys&quot;&gt;
 							&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
-							&lt;string&gt;autoRefresh&lt;/string&gt;
 							&lt;string&gt;doneButton&lt;/string&gt;
-							&lt;string&gt;loadAllTab&lt;/string&gt;
 							&lt;string&gt;password&lt;/string&gt;
 							&lt;string&gt;passwordField&lt;/string&gt;
 							&lt;string&gt;username&lt;/string&gt;
@@ -464,10 +464,8 @@
 						&lt;/object&gt;
 						&lt;object class=&quot;NSMutableArray&quot; key=&quot;dict.values&quot;&gt;
 							&lt;bool key=&quot;EncodedWithXMLCoder&quot;&gt;YES&lt;/bool&gt;
-							&lt;string&gt;UITableViewCell&lt;/string&gt;
 							&lt;string&gt;UIBarButtonItem&lt;/string&gt;
 							&lt;string&gt;UITableViewCell&lt;/string&gt;
-							&lt;string&gt;UITableViewCell&lt;/string&gt;
 							&lt;string&gt;UITextField&lt;/string&gt;
 							&lt;string&gt;UITableViewCell&lt;/string&gt;
 							&lt;string&gt;UITextField&lt;/string&gt;</diff>
      <filename>Interfaces/SettingsView.xib</filename>
    </modified>
    <modified>
      <diff>@@ -37,7 +37,9 @@
 		6E1C730B0EB5AEC800E34D9B /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E1C730A0EB5AEC800E34D9B /* CoreLocation.framework */; };
 		6E1C73C20EB5B77700E34D9B /* location.png in Resources */ = {isa = PBXBuildFile; fileRef = 6E1C73C10EB5B77700E34D9B /* location.png */; };
 		6E1C78890EB7063900E34D9B /* trends.png in Resources */ = {isa = PBXBuildFile; fileRef = 6E1C78880EB7063900E34D9B /* trends.png */; };
-		6E1FAE8D0EDAC4D7009407F6 /* db1.3.sql in Resources */ = {isa = PBXBuildFile; fileRef = 6E1FAE8C0EDAC4D7009407F6 /* db1.3.sql */; };
+		6E209B510F53DC7F00B32E7B /* db1.4.sql in Resources */ = {isa = PBXBuildFile; fileRef = 6E209B4E0F53DC7F00B32E7B /* db1.4.sql */; };
+		6E209B520F53DC7F00B32E7B /* update_v12_to_v13.sql in Resources */ = {isa = PBXBuildFile; fileRef = 6E209B4F0F53DC7F00B32E7B /* update_v12_to_v13.sql */; };
+		6E209B530F53DC7F00B32E7B /* update_v13_to_v14.sql in Resources */ = {isa = PBXBuildFile; fileRef = 6E209B500F53DC7F00B32E7B /* update_v13_to_v14.sql */; };
 		6E2BCF260E3596D4003A8F69 /* friends.png in Resources */ = {isa = PBXBuildFile; fileRef = 6E2BCF250E3596D4003A8F69 /* friends.png */; };
 		6E2BD0C10E35AE04003A8F69 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E2BD0C00E35AE04003A8F69 /* QuartzCore.framework */; };
 		6E2BD11F0E35B3D2003A8F69 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 6E2BD11E0E35B3D2003A8F69 /* Default.png */; };
@@ -88,7 +90,6 @@
 		6E97ABBE0EF91F6C00168291 /* Balloon_2.png in Resources */ = {isa = PBXBuildFile; fileRef = 6E97ABBC0EF91F6C00168291 /* Balloon_2.png */; };
 		6E97ABBF0EF91F6C00168291 /* Balloon_1.png in Resources */ = {isa = PBXBuildFile; fileRef = 6E97ABBD0EF91F6C00168291 /* Balloon_1.png */; };
 		6E97ABE40EF920FE00168291 /* ChatBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E97ABE30EF920FE00168291 /* ChatBubbleView.m */; };
-		6E97AD160EF93AB800168291 /* update_v12_to_v13.sql in Resources */ = {isa = PBXBuildFile; fileRef = 6E97AD150EF93AB800168291 /* update_v12_to_v13.sql */; };
 		6E97AD680EF94B5000168291 /* DirectMessageCellView.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E97AD670EF94B5000168291 /* DirectMessageCellView.m */; };
 		6E97AD750EF94CE800168291 /* DirectMessageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 6E97AD740EF94CE800168291 /* DirectMessageCell.m */; };
 		6EA0C19C0EBB1305000C0CD4 /* friends_small.png in Resources */ = {isa = PBXBuildFile; fileRef = 6EA0C19B0EBB1305000C0CD4 /* friends_small.png */; };
@@ -189,7 +190,9 @@
 		6E1C730A0EB5AEC800E34D9B /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; };
 		6E1C73C10EB5B77700E34D9B /* location.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = location.png; sourceTree = &quot;&lt;group&gt;&quot;; };
 		6E1C78880EB7063900E34D9B /* trends.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = trends.png; sourceTree = &quot;&lt;group&gt;&quot;; };
-		6E1FAE8C0EDAC4D7009407F6 /* db1.3.sql */ = {isa = PBXFileReference; lastKnownFileType = file; path = db1.3.sql; sourceTree = &quot;&lt;group&gt;&quot;; };
+		6E209B4E0F53DC7F00B32E7B /* db1.4.sql */ = {isa = PBXFileReference; lastKnownFileType = file; name = db1.4.sql; path = db/db1.4.sql; sourceTree = &quot;&lt;group&gt;&quot;; };
+		6E209B4F0F53DC7F00B32E7B /* update_v12_to_v13.sql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = update_v12_to_v13.sql; path = db/update_v12_to_v13.sql; sourceTree = &quot;&lt;group&gt;&quot;; };
+		6E209B500F53DC7F00B32E7B /* update_v13_to_v14.sql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = update_v13_to_v14.sql; path = db/update_v13_to_v14.sql; sourceTree = &quot;&lt;group&gt;&quot;; };
 		6E2BCF250E3596D4003A8F69 /* friends.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = friends.png; sourceTree = &quot;&lt;group&gt;&quot;; };
 		6E2BD0C00E35AE04003A8F69 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
 		6E2BD11E0E35B3D2003A8F69 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = &quot;&lt;group&gt;&quot;; };
@@ -262,7 +265,6 @@
 		6E97ABBD0EF91F6C00168291 /* Balloon_1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Balloon_1.png; sourceTree = &quot;&lt;group&gt;&quot;; };
 		6E97ABE20EF920FE00168291 /* ChatBubbleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ChatBubbleView.h; path = Controllers/ChatBubbleView.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		6E97ABE30EF920FE00168291 /* ChatBubbleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = ChatBubbleView.m; path = Controllers/ChatBubbleView.m; sourceTree = &quot;&lt;group&gt;&quot;; };
-		6E97AD150EF93AB800168291 /* update_v12_to_v13.sql */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = update_v12_to_v13.sql; sourceTree = &quot;&lt;group&gt;&quot;; };
 		6E97AD660EF94B5000168291 /* DirectMessageCellView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectMessageCellView.h; path = Controllers/DirectMessageCellView.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		6E97AD670EF94B5000168291 /* DirectMessageCellView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DirectMessageCellView.m; path = Controllers/DirectMessageCellView.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		6E97AD730EF94CE800168291 /* DirectMessageCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DirectMessageCell.h; path = Controllers/DirectMessageCell.h; sourceTree = &quot;&lt;group&gt;&quot;; };
@@ -435,12 +437,11 @@
 		29B97317FDCFA39411CA2CEA /* Resources */ = {
 			isa = PBXGroup;
 			children = (
+				8D1107310486CEB800E47090 /* Info.plist */,
 				6E3EAB9F0EC8782400599954 /* dist.plist */,
 				6ECCAD9D0EBE5B53002B39F6 /* interfaces */,
 				6EED14400E33E5BF00C71EA4 /* Images */,
-				8D1107310486CEB800E47090 /* Info.plist */,
-				6E1FAE8C0EDAC4D7009407F6 /* db1.3.sql */,
-				6E97AD150EF93AB800168291 /* update_v12_to_v13.sql */,
+				6E209B550F53DC8900B32E7B /* db */,
 				6E382E930EB41E9000B0CE69 /* Settings.bundle */,
 			);
 			name = Resources;
@@ -561,6 +562,16 @@
 			name = Profile;
 			sourceTree = &quot;&lt;group&gt;&quot;;
 		};
+		6E209B550F53DC8900B32E7B /* db */ = {
+			isa = PBXGroup;
+			children = (
+				6E209B4E0F53DC7F00B32E7B /* db1.4.sql */,
+				6E209B4F0F53DC7F00B32E7B /* update_v12_to_v13.sql */,
+				6E209B500F53DC7F00B32E7B /* update_v13_to_v14.sql */,
+			);
+			name = db;
+			sourceTree = &quot;&lt;group&gt;&quot;;
+		};
 		6E38EF7F0E38275300887690 /* Web */ = {
 			isa = PBXGroup;
 			children = (
@@ -964,7 +975,6 @@
 				6E6DC5A50EC077FD00F9EB74 /* FolloweesView.xib in Resources */,
 				6E6DC6240EC07F3D00F9EB74 /* camera.png in Resources */,
 				6E3EABA00EC8782400599954 /* dist.plist in Resources */,
-				6E1FAE8D0EDAC4D7009407F6 /* db1.3.sql in Resources */,
 				6E89F34A0EDD230A00778242 /* search_shadow.png in Resources */,
 				6E89F5EC0EDD58BF00778242 /* location_small.png in Resources */,
 				6E89F8A90EDE33B600778242 /* BookmarksPressed.png in Resources */,
@@ -986,10 +996,12 @@
 				6E97A8820EF8F7DA00168291 /* DirectMessage.xib in Resources */,
 				6E97ABBE0EF91F6C00168291 /* Balloon_2.png in Resources */,
 				6E97ABBF0EF91F6C00168291 /* Balloon_1.png in Resources */,
-				6E97AD160EF93AB800168291 /* update_v12_to_v13.sql in Resources */,
 				6E79DE330F0DB173006E0525 /* EarlierButton.png in Resources */,
 				6E79DE3D0F0DB746006E0525 /* EalierButtonPressed.png in Resources */,
 				6EC2637C0F0F989500C31A13 /* FavoritesView.xib in Resources */,
+				6E209B510F53DC7F00B32E7B /* db1.4.sql in Resources */,
+				6E209B520F53DC7F00B32E7B /* update_v12_to_v13.sql in Resources */,
+				6E209B530F53DC7F00B32E7B /* update_v13_to_v14.sql in Resources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -1131,7 +1143,7 @@
 				OTHER_CFLAGS = &quot;-DDISTRIBUTION&quot;;
 				PREBINDING = NO;
 				PROVISIONING_PROFILE = &quot;42A792DA-77DF-44D4-881C-8298379DD187&quot;;
-				&quot;PROVISIONING_PROFILE[sdk=iphoneos*]&quot; = &quot;42A792DA-77DF-44D4-881C-8298379DD187&quot;;
+				&quot;PROVISIONING_PROFILE[sdk=iphoneos*]&quot; = &quot;C6EA6298-E7AA-4BF7-B32F-79E98AFE1081&quot;;
 				SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = NO;
 				SDKROOT = iphoneos2.0;
 			};
@@ -1167,6 +1179,7 @@
 				PREBINDING = NO;
 				PROVISIONING_PROFILE = &quot;0F74D6AA-1337-43EC-9E34-0AFB081302DE&quot;;
 				&quot;PROVISIONING_PROFILE[sdk=iphoneos*]&quot; = &quot;0F74D6AA-1337-43EC-9E34-0AFB081302DE&quot;;
+				&quot;PROVISIONING_PROFILE[sdk=iphoneos2.0]&quot; = &quot;C6EA6298-E7AA-4BF7-B32F-79E98AFE1081&quot;;
 				SCAN_ALL_SOURCE_FILES_FOR_INCLUDES = NO;
 				SDKROOT = iphoneos2.0;
 			};</diff>
      <filename>TwitterFon.xcodeproj/project.pbxproj</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>58905d4036362db9732eebd06e90e182b1200652</id>
    </parent>
  </parents>
  <author>
    <name>Robert Gogolok</name>
    <email>gogolok@googlemail.com</email>
  </author>
  <url>http://github.com/jpick/gogotwitter/commit/7e40e2645656e9866a5773478be6bd36bd443b90</url>
  <id>7e40e2645656e9866a5773478be6bd36bd443b90</id>
  <committed-date>2009-04-17T10:57:50-07:00</committed-date>
  <authored-date>2009-04-17T10:57:50-07:00</authored-date>
  <message>Last kown GPL 2 code of TwitterFon by kaz
Should be version 1.4.4</message>
  <tree>3066024f703f696ef1f7e2224886aaf0bfa5fc42</tree>
  <committer>
    <name>Robert Gogolok</name>
    <email>gogolok@googlemail.com</email>
  </committer>
</commit>
