<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -9,7 +9,6 @@
 #import &quot;LexikonAppDelegate.h&quot;
 #import &quot;MainViewController.h&quot;
 #import &quot;FMDatabase.h&quot;
-#import &quot;Beacon.h&quot;
 
 @class Word;
 
@@ -26,8 +25,6 @@
 - (void)applicationDidFinishLaunching:(UIApplication *)application {
   [window addSubview:navigationController.view];
   [window makeKeyAndVisible];
-  
-  [Beacon initAndStartBeaconWithApplicationCode:APPLICATION_CODE useCoreLocation:NO useOnlyWiFi:NO];
 }
 
 - (void)awakeFromNib {
@@ -57,15 +54,9 @@
 	// save user state
 	[[NSUserDefaults standardUserDefaults] setBool:swedishToEnglish forKey:@&quot;swedishToEnglish&quot;];
   [[NSUserDefaults standardUserDefaults] setObject:currentWord forKey:@&quot;word&quot;];
-  
-  // stop the analytics
-  [[Beacon shared] endBeacon];
 }
 
 - (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
-#ifdef DEBUG      
-  NSLog(@&quot;MEMORY WARNING&quot;);
-#endif
   // dehydrate each word's translation from memory
   for (NSString *letter in swedishWords) {
     [[swedishWords objectForKey:letter] makeObjectsPerformSelector:@selector(dehydrate)];
@@ -109,6 +100,7 @@
   [englishWords release];
   [swedishWords release];
   [currentWord release];
+  [database release];
   [super dealloc];
 }
 </diff>
      <filename>Classes/LexikonAppDelegate.m</filename>
    </modified>
    <modified>
      <diff>@@ -1,5 +1,5 @@
 #import &lt;Foundation/Foundation.h&gt;
-#import &lt;sqlite3.h&gt;
+#import &quot;sqlite3.h&quot;
 #import &quot;FMResultSet.h&quot;
 
 @interface FMDatabase : NSObject </diff>
      <filename>Classes/fmdb/FMDatabase.h</filename>
    </modified>
    <modified>
      <diff>@@ -161,7 +161,7 @@
     NSLog(@&quot;The FMDatabase %@ is currently in use.&quot;, self);
     
     if (crashOnErrors) {
-        *(long*)0 = 0xDEADBEEF;
+        NSAssert1(false, @&quot;The FMDatabase %@ is currently in use.&quot;, self);
     }
 }
 
@@ -194,8 +194,12 @@
 
 - (void) bindObject:(id)obj toColumn:(int)idx inStatement:(sqlite3_stmt*)pStmt; {
     
+    if ((!obj) || ((NSNull *)obj == [NSNull null])) {
+        sqlite3_bind_null(pStmt, idx);
+    }
+    
     // FIXME - someday check the return codes on these binds.
-    if ([obj isKindOfClass:[NSData class]]) {
+    else if ([obj isKindOfClass:[NSData class]]) {
         sqlite3_bind_blob(pStmt, idx, [obj bytes], [obj length], SQLITE_STATIC);
     }
     else if ([obj isKindOfClass:[NSDate class]]) {
@@ -273,7 +277,6 @@
             }
             else if (SQLITE_OK != rc) {
                 
-                rc = sqlite3_finalize(pStmt);
                 
                 if (logsErrors) {
                     NSLog(@&quot;DB Error: %d \&quot;%@\&quot;&quot;, [self lastErrorCode], [self lastErrorMessage]);
@@ -282,10 +285,12 @@
 #ifdef __BIG_ENDIAN__
                         asm{ trap };
 #endif
-                        *(long*)0 = 0xDEADBEEF;
+                        NSAssert2(false, @&quot;DB Error: %d \&quot;%@\&quot;&quot;, [self lastErrorCode], [self lastErrorMessage]);
                     }
                 }
                 
+                sqlite3_finalize(pStmt);
+                
                 [self setInUse:NO];
                 return nil;
             }
@@ -300,10 +305,6 @@
     while (idx &lt; queryCount) {
         obj = va_arg(args, id);
         
-        if (!obj) {
-            break;
-        }
-        
         if (traceExecution) {
             NSLog(@&quot;obj: %@&quot;, obj);
         }
@@ -339,6 +340,8 @@
     
     [statement release];    
     
+    [self setInUse:NO];
+    
     return rs;
 }
 
@@ -396,8 +399,7 @@
                 }
             }
             else if (SQLITE_OK != rc) {
-                int ret = rc;
-                rc = sqlite3_finalize(pStmt);
+                
                 
                 if (logsErrors) {
                     NSLog(@&quot;DB Error: %d \&quot;%@\&quot;&quot;, [self lastErrorCode], [self lastErrorMessage]);
@@ -406,12 +408,14 @@
 #ifdef __BIG_ENDIAN__
                         asm{ trap };
 #endif
-                        *(long*)0 = 0xDEADBEEF;
+                        NSAssert2(false, @&quot;DB Error: %d \&quot;%@\&quot;&quot;, [self lastErrorCode], [self lastErrorMessage]);
                     }
                 }
                 
+                sqlite3_finalize(pStmt);
                 [self setInUse:NO];
-                return ret;
+                
+                return NO;
             }
         }
         while (retry);
@@ -426,10 +430,6 @@
         
         obj = va_arg(args, id);
         
-        if (!obj) {
-            break;
-        }
-        
         if (traceExecution) {
             NSLog(@&quot;obj: %@&quot;, obj);
         }
@@ -470,12 +470,12 @@
             // all is well, let's return.
         }
         else if (SQLITE_ERROR == rc) {
-            NSLog(@&quot;Error calling sqlite3_step (%d: %s) eu&quot;, rc, sqlite3_errmsg(db));
+            NSLog(@&quot;Error calling sqlite3_step (%d: %s) SQLITE_ERROR&quot;, rc, sqlite3_errmsg(db));
             NSLog(@&quot;DB Query: %@&quot;, sql);
         }
         else if (SQLITE_MISUSE == rc) {
             // uh oh.
-            NSLog(@&quot;Error calling sqlite3_step (%d: %s) eu&quot;, rc, sqlite3_errmsg(db));
+            NSLog(@&quot;Error calling sqlite3_step (%d: %s) SQLITE_MISUSE&quot;, rc, sqlite3_errmsg(db));
             NSLog(@&quot;DB Query: %@&quot;, sql);
         }
         else {</diff>
      <filename>Classes/fmdb/FMDatabase.m</filename>
    </modified>
    <modified>
      <diff>@@ -14,8 +14,11 @@
 - (long) longForQuery:(NSString*)objs, ...; 
 - (BOOL) boolForQuery:(NSString*)objs, ...;
 - (double) doubleForQuery:(NSString*)objs, ...;
-- (NSData*) dataForQuery:(NSString*)objs, ...;
 - (NSString*) stringForQuery:(NSString*)objs, ...; 
+- (NSData*) dataForQuery:(NSString*)objs, ...;
 
+// Notice that there's no dataNoCopyForQuery:.
+// That would be a bad idea, because we close out the result set, and then what
+// happens to the data that we just didn't copy?  Who knows, not I.
 
 @end</diff>
      <filename>Classes/fmdb/FMDatabaseAdditions.h</filename>
    </modified>
    <modified>
      <diff>@@ -47,4 +47,5 @@ return ret;
     RETURN_RESULT_FOR_QUERY_WITH_SELECTOR(NSData *, dataForColumnIndex);
 }
 
+
 @end</diff>
      <filename>Classes/fmdb/FMDatabaseAdditions.m</filename>
    </modified>
    <modified>
      <diff>@@ -34,6 +34,9 @@
 - (long) longForColumn:(NSString*)columnName;
 - (long) longForColumnIndex:(int)columnIdx;
 
+- (long long int) longLongIntForColumn:(NSString*)columnName;
+- (long long int) longLongIntForColumnIndex:(int)columnIdx;
+
 - (BOOL) boolForColumn:(NSString*)columnName;
 - (BOOL) boolForColumnIndex:(int)columnIdx;
 
@@ -49,6 +52,14 @@
 - (NSData*) dataForColumn:(NSString*)columnName;
 - (NSData*) dataForColumnIndex:(int)columnIdx;
 
+/*
+If you are going to use this data after you iterate over the next row, or after you close the
+result set, make sure to make a copy of the data first (or just use dataForColumn:/dataForColumnIndex:)
+If you don't, you're going to be in a world of hurt when you try and use the data.
+*/
+- (NSData*) dataNoCopyForColumn:(NSString*)columnName;
+- (NSData*) dataNoCopyForColumnIndex:(int)columnIdx;
+
 - (void) kvcMagic:(id)object;
 
 @end</diff>
      <filename>Classes/fmdb/FMResultSet.h</filename>
    </modified>
    <modified>
      <diff>@@ -18,16 +18,6 @@
     return [rs autorelease];
 }
 
-- (id)init {
-	self = [super init];
-    if (self) {
-        [self setColumnNameToIndexMap:[NSMutableDictionary dictionary]];
-    }
-	
-	return self;
-}
-
-
 - (void)dealloc {
     [self close];
     
@@ -46,12 +36,17 @@
     [statement release];
     statement = nil;
     
-    [parentDB setInUse:NO];
-    parentDB = nil; // parentDB is never retained, so no need for a release.
+    // we don't need this anymore... (i think)
+    //[parentDB setInUse:NO];
+    parentDB = nil;
 }
 
 - (void) setupColumnNames {
     
+    if (!columnNameToIndexMap) {
+        [self setColumnNameToIndexMap:[NSMutableDictionary dictionary]];
+    }	
+    
     int columnCount = sqlite3_column_count(statement.statement);
     
     int columnIdx = 0;
@@ -184,10 +179,29 @@
         return 0;
     }
     
-    return sqlite3_column_int64(statement.statement, columnIdx);
+    return (long)sqlite3_column_int64(statement.statement, columnIdx);
 }
 
 - (long) longForColumnIndex:(int)columnIdx {
+    return (long)sqlite3_column_int64(statement.statement, columnIdx);
+}
+
+- (long long int) longLongIntForColumn:(NSString*)columnName {
+    
+    if (!columnNamesSetup) {
+        [self setupColumnNames];
+    }
+    
+    int columnIdx = [self columnIndexForName:columnName];
+    
+    if (columnIdx == -1) {
+        return 0;
+    }
+    
+    return sqlite3_column_int64(statement.statement, columnIdx);
+}
+
+- (long long int) longLongIntForColumnIndex:(int)columnIdx {
     return sqlite3_column_int64(statement.statement, columnIdx);
 }
 
@@ -283,6 +297,12 @@
         return nil;
     }
     
+    
+    return [self dataForColumnIndex:columnIdx];
+}
+
+- (NSData*) dataForColumnIndex:(int)columnIdx {
+    
     int dataSize = sqlite3_column_bytes(statement.statement, columnIdx);
     
     NSMutableData *data = [NSMutableData dataWithLength:dataSize];
@@ -292,18 +312,36 @@
     return data;
 }
 
-- (NSData*) dataForColumnIndex:(int)columnIdx {
+
+- (NSData*) dataNoCopyForColumn:(NSString*)columnName {
     
-    int dataSize = sqlite3_column_bytes(statement.statement, columnIdx);
+    if (!columnNamesSetup) {
+        [self setupColumnNames];
+    }
     
-    NSMutableData *data = [NSMutableData dataWithLength:dataSize];
+    int columnIdx = [self columnIndexForName:columnName];
     
-    memcpy([data mutableBytes], sqlite3_column_blob(statement.statement, columnIdx), dataSize);
+    if (columnIdx == -1) {
+        return nil;
+    }
+    
+    
+    return [self dataNoCopyForColumnIndex:columnIdx];
+}
+
+- (NSData*) dataNoCopyForColumnIndex:(int)columnIdx {
+    
+    int dataSize = sqlite3_column_bytes(statement.statement, columnIdx);
+    
+    NSData *data = [NSData dataWithBytesNoCopy:(void *)sqlite3_column_blob(statement.statement, columnIdx) length:dataSize freeWhenDone:NO];
     
     return data;
 }
 
 
+
+
+
 - (void)setParentDB:(FMDatabase *)newDb {
     parentDB = newDb;
 }</diff>
      <filename>Classes/fmdb/FMResultSet.m</filename>
    </modified>
    <modified>
      <diff>@@ -23,7 +23,7 @@
 	&lt;key&gt;CFBundleSignature&lt;/key&gt;
 	&lt;string&gt;????&lt;/string&gt;
 	&lt;key&gt;CFBundleVersion&lt;/key&gt;
-	&lt;string&gt;19&lt;/string&gt;
+	&lt;string&gt;20&lt;/string&gt;
 	&lt;key&gt;CFBundleShortVersionString&lt;/key&gt;
 	&lt;string&gt;1.2&lt;/string&gt;
 	&lt;key&gt;LSRequiresIPhoneOS&lt;/key&gt;</diff>
      <filename>Info.plist</filename>
    </modified>
    <modified>
      <diff>@@ -16,11 +16,13 @@
 		3C0911FF0EDDA7AF00A982E9 /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C0911FE0EDDA7AF00A982E9 /* libsqlite3.dylib */; };
 		3C0B82520F420FBA005AB976 /* MainViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C0B82510F420FBA005AB976 /* MainViewController.m */; };
 		3C3C29C60EE6DC0800028066 /* Icon.png in Resources */ = {isa = PBXBuildFile; fileRef = 3C3C29C50EE6DC0800028066 /* Icon.png */; };
+		3C3D99120F447ECD0015EAB1 /* FMResultSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C3D990C0F447ECD0015EAB1 /* FMResultSet.m */; };
+		3C3D99130F447ECD0015EAB1 /* FMDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C3D990E0F447ECD0015EAB1 /* FMDatabase.m */; };
+		3C3D99140F447ECD0015EAB1 /* FMDatabaseAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3C3D99100F447ECD0015EAB1 /* FMDatabaseAdditions.m */; };
 		3C52BB490F0EB69D006C34C1 /* Default.png in Resources */ = {isa = PBXBuildFile; fileRef = 3C52BB480F0EB69D006C34C1 /* Default.png */; };
 		3C7E70890ED5F2B50022B3A9 /* database.sqlite3 in Resources */ = {isa = PBXBuildFile; fileRef = 3C7E70880ED5F2B50022B3A9 /* database.sqlite3 */; };
 		3CAD0D450EE7EFBB003C1C97 /* DetailViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CAD0D440EE7EFBB003C1C97 /* DetailViewController.m */; };
 		3CB9C87D0EED4674001753BD /* translationTemplate.html in Resources */ = {isa = PBXBuildFile; fileRef = 3CB9C87C0EED4674001753BD /* translationTemplate.html */; };
-		3CD1B3300F12754A000D44AD /* libPMAnalytics.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CD1B32F0F12754A000D44AD /* libPMAnalytics.a */; };
 		3CD1B33E0F128B96000D44AD /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CD1B33D0F128B96000D44AD /* CoreLocation.framework */; };
 		3CD1B3420F128BA2000D44AD /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3CD1B3410F128BA2000D44AD /* SystemConfiguration.framework */; };
 		3CDAEC670F0FECB2000A0C6E /* AboutView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3CDAEC660F0FECB2000A0C6E /* AboutView.xib */; };
@@ -31,9 +33,6 @@
 		3CEE1E580F3F8284000AE3F6 /* SearchSuggestionsController.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CEE1E570F3F8284000AE3F6 /* SearchSuggestionsController.m */; };
 		3CEE1E5C0F3F837D000AE3F6 /* SearchSuggestions.xib in Resources */ = {isa = PBXBuildFile; fileRef = 3CEE1E5B0F3F837D000AE3F6 /* SearchSuggestions.xib */; };
 		3CEE1E7A0F404D99000AE3F6 /* searchSuggestionsDropShadow.png in Resources */ = {isa = PBXBuildFile; fileRef = 3CEE1E790F404D99000AE3F6 /* searchSuggestionsDropShadow.png */; };
-		3CF7D64E0EE555030086D98C /* FMDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CF7D6480EE555030086D98C /* FMDatabase.m */; };
-		3CF7D64F0EE555030086D98C /* FMDatabaseAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CF7D64A0EE555030086D98C /* FMDatabaseAdditions.m */; };
-		3CF7D6500EE555030086D98C /* FMResultSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CF7D64C0EE555030086D98C /* FMResultSet.m */; };
 		3CF7D6510EE555030086D98C /* LICENSE.txt in Resources */ = {isa = PBXBuildFile; fileRef = 3CF7D64D0EE555030086D98C /* LICENSE.txt */; };
 		3CF7D6570EE555120086D98C /* Word.m in Sources */ = {isa = PBXBuildFile; fileRef = 3CF7D6550EE555120086D98C /* Word.m */; };
 /* End PBXBuildFile section */
@@ -51,13 +50,17 @@
 		3C0911FE0EDDA7AF00A982E9 /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = &quot;compiled.mach-o.dylib&quot;; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
 		3C0B82510F420FBA005AB976 /* MainViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainViewController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		3C3C29C50EE6DC0800028066 /* Icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Icon.png; sourceTree = &quot;&lt;group&gt;&quot;; };
+		3C3D990C0F447ECD0015EAB1 /* FMResultSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FMResultSet.m; path = Classes/fmdb/FMResultSet.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		3C3D990D0F447ECD0015EAB1 /* FMResultSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FMResultSet.h; path = Classes/fmdb/FMResultSet.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		3C3D990E0F447ECD0015EAB1 /* FMDatabase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FMDatabase.m; path = Classes/fmdb/FMDatabase.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		3C3D990F0F447ECD0015EAB1 /* FMDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FMDatabase.h; path = Classes/fmdb/FMDatabase.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		3C3D99100F447ECD0015EAB1 /* FMDatabaseAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseAdditions.m; path = Classes/fmdb/FMDatabaseAdditions.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		3C3D99110F447ECD0015EAB1 /* FMDatabaseAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FMDatabaseAdditions.h; path = Classes/fmdb/FMDatabaseAdditions.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		3C52BB480F0EB69D006C34C1 /* Default.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Default.png; sourceTree = &quot;&lt;group&gt;&quot;; };
 		3C7E70880ED5F2B50022B3A9 /* database.sqlite3 */ = {isa = PBXFileReference; lastKnownFileType = file; path = database.sqlite3; sourceTree = &quot;&lt;group&gt;&quot;; };
 		3CAD0D430EE7EFBB003C1C97 /* DetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = DetailViewController.h; path = Classes/DetailViewController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		3CAD0D440EE7EFBB003C1C97 /* DetailViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = DetailViewController.m; path = Classes/DetailViewController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		3CB9C87C0EED4674001753BD /* translationTemplate.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = translationTemplate.html; sourceTree = &quot;&lt;group&gt;&quot;; };
-		3CD1B32E0F12754A000D44AD /* Beacon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Beacon.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		3CD1B32F0F12754A000D44AD /* libPMAnalytics.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libPMAnalytics.a; path = &quot;Pinch Analytics/libPMAnalytics.a&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
 		3CD1B33D0F128B96000D44AD /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; };
 		3CD1B3410F128BA2000D44AD /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; };
 		3CDAEC660F0FECB2000A0C6E /* AboutView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AboutView.xib; sourceTree = &quot;&lt;group&gt;&quot;; };
@@ -70,12 +73,6 @@
 		3CEE1E570F3F8284000AE3F6 /* SearchSuggestionsController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SearchSuggestionsController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		3CEE1E5B0F3F837D000AE3F6 /* SearchSuggestions.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SearchSuggestions.xib; sourceTree = &quot;&lt;group&gt;&quot;; };
 		3CEE1E790F404D99000AE3F6 /* searchSuggestionsDropShadow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = searchSuggestionsDropShadow.png; sourceTree = &quot;&lt;group&gt;&quot;; };
-		3CF7D6470EE555030086D98C /* FMDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FMDatabase.h; path = Classes/FMDatabase.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		3CF7D6480EE555030086D98C /* FMDatabase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FMDatabase.m; path = Classes/FMDatabase.m; sourceTree = &quot;&lt;group&gt;&quot;; };
-		3CF7D6490EE555030086D98C /* FMDatabaseAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FMDatabaseAdditions.h; path = Classes/FMDatabaseAdditions.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		3CF7D64A0EE555030086D98C /* FMDatabaseAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FMDatabaseAdditions.m; path = Classes/FMDatabaseAdditions.m; sourceTree = &quot;&lt;group&gt;&quot;; };
-		3CF7D64B0EE555030086D98C /* FMResultSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = FMResultSet.h; path = Classes/FMResultSet.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		3CF7D64C0EE555030086D98C /* FMResultSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = FMResultSet.m; path = Classes/FMResultSet.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		3CF7D64D0EE555030086D98C /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = LICENSE.txt; path = Classes/LICENSE.txt; sourceTree = &quot;&lt;group&gt;&quot;; };
 		3CF7D6520EE555120086D98C /* MainViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = MainViewController.h; path = Classes/MainViewController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		3CF7D6540EE555120086D98C /* Word.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = Word.h; path = Classes/Word.h; sourceTree = &quot;&lt;group&gt;&quot;; };
@@ -92,7 +89,6 @@
 				1DF5F4E00D08C38300B7A737 /* UIKit.framework in Frameworks */,
 				288765FD0DF74451002DB57D /* CoreGraphics.framework in Frameworks */,
 				3C0911FF0EDDA7AF00A982E9 /* libsqlite3.dylib in Frameworks */,
-				3CD1B3300F12754A000D44AD /* libPMAnalytics.a in Frameworks */,
 				3CD1B33E0F128B96000D44AD /* CoreLocation.framework in Frameworks */,
 				3CD1B3420F128BA2000D44AD /* SystemConfiguration.framework in Frameworks */,
 			);
@@ -160,7 +156,6 @@
 		29B97323FDCFA39411CA2CEA /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
-				3CD1B32F0F12754A000D44AD /* libPMAnalytics.a */,
 				3C0911FE0EDDA7AF00A982E9 /* libsqlite3.dylib */,
 				1DF5F4DF0D08C38300B7A737 /* UIKit.framework */,
 				1D30AB110D05D00D00671497 /* Foundation.framework */,
@@ -172,25 +167,17 @@
 		3C0910F70EDCB7E700A982E9 /* fmdb */ = {
 			isa = PBXGroup;
 			children = (
-				3CF7D6470EE555030086D98C /* FMDatabase.h */,
-				3CF7D6480EE555030086D98C /* FMDatabase.m */,
-				3CF7D6490EE555030086D98C /* FMDatabaseAdditions.h */,
-				3CF7D64A0EE555030086D98C /* FMDatabaseAdditions.m */,
-				3CF7D64B0EE555030086D98C /* FMResultSet.h */,
-				3CF7D64C0EE555030086D98C /* FMResultSet.m */,
+				3C3D990C0F447ECD0015EAB1 /* FMResultSet.m */,
+				3C3D990D0F447ECD0015EAB1 /* FMResultSet.h */,
+				3C3D990E0F447ECD0015EAB1 /* FMDatabase.m */,
+				3C3D990F0F447ECD0015EAB1 /* FMDatabase.h */,
+				3C3D99100F447ECD0015EAB1 /* FMDatabaseAdditions.m */,
+				3C3D99110F447ECD0015EAB1 /* FMDatabaseAdditions.h */,
 				3CF7D64D0EE555030086D98C /* LICENSE.txt */,
 			);
 			name = fmdb;
 			sourceTree = &quot;&lt;group&gt;&quot;;
 		};
-		3CD1B32D0F12754A000D44AD /* Pinch Analytics */ = {
-			isa = PBXGroup;
-			children = (
-				3CD1B32E0F12754A000D44AD /* Beacon.h */,
-			);
-			path = &quot;Pinch Analytics&quot;;
-			sourceTree = &quot;&lt;group&gt;&quot;;
-		};
 		3CDAEDE00F1029F1000A0C6E /* HTML */ = {
 			isa = PBXGroup;
 			children = (
@@ -218,7 +205,6 @@
 				3CF7D6540EE555120086D98C /* Word.h */,
 				3CF7D6550EE555120086D98C /* Word.m */,
 				3C0910F70EDCB7E700A982E9 /* fmdb */,
-				3CD1B32D0F12754A000D44AD /* Pinch Analytics */,
 			);
 			name = Classes;
 			sourceTree = &quot;&lt;group&gt;&quot;;
@@ -289,14 +275,14 @@
 			files = (
 				1D60589B0D05DD56006BFB54 /* main.m in Sources */,
 				1D3623260D0F684500981E51 /* LexikonAppDelegate.m in Sources */,
-				3CF7D64E0EE555030086D98C /* FMDatabase.m in Sources */,
-				3CF7D64F0EE555030086D98C /* FMDatabaseAdditions.m in Sources */,
-				3CF7D6500EE555030086D98C /* FMResultSet.m in Sources */,
 				3CF7D6570EE555120086D98C /* Word.m in Sources */,
 				3CAD0D450EE7EFBB003C1C97 /* DetailViewController.m in Sources */,
 				3CDAEC6F0F0FEFD6000A0C6E /* AboutViewController.m in Sources */,
 				3CEE1E580F3F8284000AE3F6 /* SearchSuggestionsController.m in Sources */,
 				3C0B82520F420FBA005AB976 /* MainViewController.m in Sources */,
+				3C3D99120F447ECD0015EAB1 /* FMResultSet.m in Sources */,
+				3C3D99130F447ECD0015EAB1 /* FMDatabase.m in Sources */,
+				3C3D99140F447ECD0015EAB1 /* FMDatabaseAdditions.m in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -342,7 +328,7 @@
 			buildSettings = {
 				ARCHS = &quot;$(ARCHS_STANDARD_32_BIT)&quot;;
 				&quot;CODE_SIGN_IDENTITY[sdk=iphoneos*]&quot; = &quot;iPhone Distribution: Caleb Jaffa&quot;;
-				CURRENT_PROJECT_VERSION = 19;
+				CURRENT_PROJECT_VERSION = 20;
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
@@ -374,7 +360,7 @@
 			buildSettings = {
 				ARCHS = &quot;$(ARCHS_STANDARD_32_BIT)&quot;;
 				&quot;CODE_SIGN_IDENTITY[sdk=iphoneos*]&quot; = &quot;iPhone Developer&quot;;
-				CURRENT_PROJECT_VERSION = 19;
+				CURRENT_PROJECT_VERSION = 20;
 				DEBUG = 1;
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
@@ -391,7 +377,7 @@
 			buildSettings = {
 				ARCHS = &quot;$(ARCHS_STANDARD_32_BIT)&quot;;
 				&quot;CODE_SIGN_IDENTITY[sdk=iphoneos*]&quot; = &quot;iPhone Developer&quot;;
-				CURRENT_PROJECT_VERSION = 19;
+				CURRENT_PROJECT_VERSION = 20;
 				GCC_C_LANGUAGE_STANDARD = c99;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;</diff>
      <filename>Lexikon.xcodeproj/project.pbxproj</filename>
    </modified>
    <modified>
      <diff>@@ -31,6 +31,9 @@
 - (void)dealloc {
   [mySearchBar release];
   [detailViewController release];
+  [indexLetters release];
+  [tableView release];
+  [suggestionsController release];
   [super dealloc];
 }
 
@@ -83,6 +86,11 @@
   
   [self changeIndexLetters: swedish];
   
+  // if we are searching we might need to update the suggestions/filter list
+  if (searching) {
+    [self searchBar:mySearchBar textDidChange:mySearchBar.text];
+  }
+  
   [self.tableView reloadData];    
 }
 
@@ -302,7 +310,6 @@
       suggestionsController.view.alpha = 1.0f;
     }
     else {
-      NSLog(@&quot;search 0&quot;);
       suggestionsController.view.alpha = 0.0f;
       cancelSearchTableCover.alpha = 0.8f;
     }
@@ -340,6 +347,7 @@
     }
 
     suggestionsController.suggestions = suggestions;
+    [suggestions release];
     [suggestionsController.tableView reloadData];
   }
 }
@@ -418,7 +426,7 @@
   LexikonAppDelegate *appDelegate = (LexikonAppDelegate *)[[UIApplication sharedApplication] delegate];
   [UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
   
-  NSString *word = [[searchBar.text copy] capitalizedString];
+  NSString *searchWord = [searchBar.text capitalizedString];
   NSString *translationString;
   NSString *translation;
   NSURL *translationURL;
@@ -428,11 +436,11 @@
   [self cancelSearching];
 
   if(appDelegate.swedishToEnglish) {
-    translationString = [[NSString stringWithFormat:@&quot;http://lexin.nada.kth.se/Lexin/?dict=sve-eng&amp;lang=source&amp;word=%@&quot;, word] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
+    translationString = [[NSString stringWithFormat:@&quot;http://lexin.nada.kth.se/Lexin/?dict=sve-eng&amp;lang=source&amp;word=%@&quot;, searchWord] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
     encoding = NSUTF8StringEncoding;
   }
   else {
-    translationString = [[NSString stringWithFormat:@&quot;http://lexin.nada.kth.se/cgi-bin/sve-eng?:%@&quot;, word] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
+    translationString = [[NSString stringWithFormat:@&quot;http://lexin.nada.kth.se/cgi-bin/sve-eng?:%@&quot;, searchWord] stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
     encoding = NSISOLatin1StringEncoding;
   }
 
@@ -453,7 +461,7 @@
       translation = [translation substringWithRange: myRange];
       
       Word *newWord = [[Word alloc] init];
-      newWord.word = word;
+      newWord.word = searchWord;
       newWord.lang = (appDelegate.swedishToEnglish) ? SWE_LANGUAGE : ENG_LANGUAGE;
       newWord.translation = translation;
       
@@ -463,7 +471,7 @@
     }
     else {
       // display error message that the word was not found
-      [self searchFailed:[NSString stringWithFormat:@&quot;%@ not found&quot;, word]];
+      [self searchFailed:[NSString stringWithFormat:@&quot;%@ not found&quot;, searchWord]];
     }
   }
   else {
@@ -474,6 +482,8 @@
   
   // hide the activity indicator
   [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
+  //[searchWord release];
+  searchWord = nil;
 }
 
 - (void)searchFailed:(NSString *)message {</diff>
      <filename>MainViewController.m</filename>
    </modified>
    <modified>
      <diff>@@ -109,14 +109,6 @@
 				&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;dropDownShadow&lt;/string&gt;
-						&lt;reference key=&quot;source&quot; ref=&quot;372490531&quot;/&gt;
-						&lt;reference key=&quot;destination&quot; ref=&quot;135150028&quot;/&gt;
-					&lt;/object&gt;
-					&lt;int key=&quot;connectionID&quot;&gt;23&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;view&lt;/string&gt;
 						&lt;reference key=&quot;source&quot; ref=&quot;372490531&quot;/&gt;
 						&lt;reference key=&quot;destination&quot; ref=&quot;191373211&quot;/&gt;
@@ -229,17 +221,8 @@
 					&lt;string key=&quot;className&quot;&gt;SearchSuggestionsController&lt;/string&gt;
 					&lt;string key=&quot;superclassName&quot;&gt;UIViewController&lt;/string&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;dropDownShadow&lt;/string&gt;
-							&lt;string&gt;tableView&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;UIImageView&lt;/string&gt;
-							&lt;string&gt;UITableView&lt;/string&gt;
-						&lt;/object&gt;
+						&lt;string key=&quot;NS.key.0&quot;&gt;tableView&lt;/string&gt;
+						&lt;string key=&quot;NS.object.0&quot;&gt;UITableView&lt;/string&gt;
 					&lt;/object&gt;
 					&lt;object class=&quot;IBClassDescriptionSource&quot; key=&quot;sourceIdentifier&quot;&gt;
 						&lt;string key=&quot;majorKey&quot;&gt;IBProjectSource&lt;/string&gt;</diff>
      <filename>SearchSuggestions.xib</filename>
    </modified>
    <modified>
      <diff>@@ -12,13 +12,11 @@
 
 @interface SearchSuggestionsController : UIViewController {
   IBOutlet UITableView *tableView;
-  IBOutlet UIImageView *dropDownShadow;
   NSMutableArray *suggestions;
   MainViewController *main;
 }
 
 @property (nonatomic, retain) UITableView *tableView;
-@property (nonatomic, retain) UIImageView *dropDownShadow;
 @property (nonatomic, retain) NSMutableArray *suggestions;
 @property (nonatomic, retain) MainViewController *main;
 </diff>
      <filename>SearchSuggestionsController.h</filename>
    </modified>
    <modified>
      <diff>@@ -12,7 +12,7 @@
 
 @implementation SearchSuggestionsController
 
-@synthesize tableView, suggestions, main, dropDownShadow;
+@synthesize tableView, suggestions, main;
 
 - (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
@@ -53,7 +53,10 @@
 }
 
 - (void)dealloc {
-    [super dealloc];
+  [main release];
+  [suggestions release];
+  [tableView release];
+  [super dealloc];
 }
 
 </diff>
      <filename>SearchSuggestionsController.m</filename>
    </modified>
    <modified>
      <diff>@@ -29,7 +29,7 @@
 &lt;h1&gt;Lexikon&lt;/h1&gt;
 &lt;p&gt;Version {version} Build {build}&lt;br /&gt;&amp;copy; 2009 Caleb Jaffa&lt;br /&gt;Database Cache Size: {filesize}&lt;/p&gt;
 &lt;p&gt;An iPhone application to query and cache results from the online &lt;a href=&quot;http://lexin.nada.kth.se/&quot;&gt;Lexin&lt;/a&gt; Swedish-English dictionary.&lt;/p&gt;
-&lt;p&gt;Lexikon uses &lt;a href=&quot;http://gusmueller.com/&quot;&gt;Gus Mueller&lt;/a&gt;&amp;#8217;s &lt;a href=&quot;http://gusmueller.com/blog/archives/2008/06/new_home_for_fmdb.html&quot;&gt;FMDB&lt;/a&gt; adapter for SQLite. Anonymous usage statistics are collected using &lt;a href=&quot;http://www.pinchmedia.com/&quot;&gt;Pinch Media&lt;/a&gt;'s analytics.&lt;/p&gt;
+&lt;p&gt;Lexikon uses &lt;a href=&quot;http://gusmueller.com/&quot;&gt;Gus Mueller&lt;/a&gt;&amp;#8217;s &lt;a href=&quot;http://gusmueller.com/blog/archives/2008/06/new_home_for_fmdb.html&quot;&gt;FMDB&lt;/a&gt; adapter for SQLite.&lt;/p&gt;
 &lt;p&gt;Problems and feedback can be sent via email to &lt;script type=&quot;text/javascript&quot;&gt;
 //&lt;![CDATA[
 </diff>
      <filename>aboutView.html</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>Classes/FMDatabase.h</filename>
    </removed>
    <removed>
      <filename>Classes/FMDatabase.m</filename>
    </removed>
    <removed>
      <filename>Classes/FMDatabaseAdditions.h</filename>
    </removed>
    <removed>
      <filename>Classes/FMDatabaseAdditions.m</filename>
    </removed>
    <removed>
      <filename>Classes/FMResultSet.h</filename>
    </removed>
    <removed>
      <filename>Classes/FMResultSet.m</filename>
    </removed>
    <removed>
      <filename>Classes/fmdb/fmdb.m</filename>
    </removed>
    <removed>
      <filename>Pinch Analytics/libPMAnalytics.a</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>67086b891e271fbca34d61d843b392b628e98fc7</id>
    </parent>
  </parents>
  <author>
    <name>Caleb Jaffa</name>
    <email>caleb@clockwi.se</email>
  </author>
  <url>http://github.com/octover/lexikon/commit/e658df9fdd9ef53bd7e894bbc545f781c5be5c8d</url>
  <id>e658df9fdd9ef53bd7e894bbc545f781c5be5c8d</id>
  <committed-date>2009-02-12T08:00:13-08:00</committed-date>
  <authored-date>2009-02-12T08:00:13-08:00</authored-date>
  <message>update to latest fmdb, clang static analyzer is happy, remove pinch analytics</message>
  <tree>a988436eea2e59801287407050492a5e126dd459</tree>
  <committer>
    <name>Caleb Jaffa</name>
    <email>caleb@clockwi.se</email>
  </committer>
</commit>
