<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>BDocumentCloudCache.xcdatamodel/elements</filename>
    </added>
    <added>
      <filename>BDocumentCloudCache.xcdatamodel/layout</filename>
    </added>
    <added>
      <filename>BDocumentCloudDelegate.h</filename>
    </added>
    <added>
      <filename>BDocumentCloudDelegate.m</filename>
    </added>
    <added>
      <filename>Cloud.h</filename>
    </added>
    <added>
      <filename>Cloud.m</filename>
    </added>
    <added>
      <filename>CloudDocument.h</filename>
    </added>
    <added>
      <filename>CloudDocument.m</filename>
    </added>
    <added>
      <filename>DiffMatchPatch.h</filename>
    </added>
    <added>
      <filename>DiffMatchPatch.m</filename>
    </added>
    <added>
      <filename>HTTPFetcher.h</filename>
    </added>
    <added>
      <filename>HTTPFetcher.m</filename>
    </added>
    <added>
      <filename>Keychain.h</filename>
    </added>
    <added>
      <filename>Keychain.m</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -7,7 +7,6 @@
 //
 
 #import &lt;Cocoa/Cocoa.h&gt;
-#import &lt;Blocks/Blocks.h&gt;
 
 
 enum {</diff>
      <filename>BDiffMatchPatch.h</filename>
    </modified>
    <modified>
      <diff>@@ -18,7 +18,7 @@
 @interface BDocument : NSDocument {
 	NSMutableDictionary *documentUserDefaults;
 	BOOL fromExternal;
-	BOOL fromDocumentsService;
+	BOOL fromCloud;
 	NSString *externalDisplayName;
 	NSAppleEventDescriptor *externalSender;
 	NSAppleEventDescriptor *externalToken;
@@ -49,8 +49,8 @@
 - (NSInteger)fileHFSTypeCode;
 - (NSInteger)fileHFSCreatorCode;
 - (IBAction)showUnsavedChanges:(id)sender;
-@property(readonly) BOOL fromDocumentsService;
-@property(readonly) NSString *documentsServiceID;
+@property(readonly) BOOL fromCloud;
+@property(readonly) NSString *cloudID;
 @property(readonly) NSString *documentDataAsText;
 - (void)checkForModificationOfFileOnDisk;
 </diff>
      <filename>BDocument.h</filename>
    </modified>
    <modified>
      <diff>@@ -9,8 +9,9 @@
 #import &quot;BDocument.h&quot;
 #import &quot;BDocuments.h&quot;
 #import &quot;BDocumentWindowController.h&quot;
-#import &quot;BDocumentDifferencesWindowController.h&quot;
-#import &quot;BCloudDocumentsService.h&quot;
+#import &quot;BDocumentCloudDelegate.h&quot;
+//#import &quot;BDocumentDifferencesWindowController.h&quot;
+//#import &quot;BCloudDocumentsService.h&quot;
 
 
 @implementation BDocument
@@ -189,8 +190,8 @@ static NSMutableArray *documentUserDefautlsArchive = nil;
 - (NSString *)displayName {
 	if (fromExternal &amp;&amp; externalDisplayName != nil) {
 		return externalDisplayName;
-	} else if (fromDocumentsService) {
-		return [BCloudDocumentsService displayNameForDocumentsServiceDocument:[self fileURL]];
+	} else if (fromCloud) {
+		return [BDocumentCloudDelegate displayNameForCloudDocument:[self fileURL]];
 	}
 	return [super displayName];
 }
@@ -211,8 +212,9 @@ static NSMutableArray *documentUserDefautlsArchive = nil;
 		if ([savedText isEqualToString:unsavedText]) {
 			messageText = BLocalizedString(@&quot;There are no differences between your document and the version saved on disk&quot;, nil);
 		} else {
-			BDocumentDifferencesWindowController *differencesWindowController = [[BDocumentDifferencesWindowController alloc] initWithText1:savedText text2:unsavedText];
-			[NSApp beginSheet:[differencesWindowController window] modalForWindow:window modalDelegate:self didEndSelector:@selector(showUnsavedChangesSheetDidEnd:returnCode:contextInfo:) contextInfo:nil];
+//			BDocumentDifferencesWindowController *differencesWindowController = [[BDocumentDifferencesWindowController alloc] initWithText1:savedText text2:unsavedText];
+//			[NSApp beginSheet:[differencesWindowController window] modalForWindow:window modalDelegate:self didEndSelector:@selector(showUnsavedChangesSheetDidEnd:returnCode:contextInfo:) contextInfo:nil];
+			NSBeep();
 			return;
 		}
 	} else {
@@ -233,7 +235,7 @@ static NSMutableArray *documentUserDefautlsArchive = nil;
 
 - (void)setFileURL:(NSURL *)absoluteURL {
 	[super setFileURL:absoluteURL];
-	fromDocumentsService = [BCloudDocumentsService isDocumentURLManagedByDocumentsService:[self fileURL]];
+	fromCloud = [BDocumentCloudDelegate isCloudDocumentURL:[self fileURL]];
 }
 
 - (NSInteger)fileHFSTypeCode {
@@ -253,10 +255,10 @@ static NSMutableArray *documentUserDefautlsArchive = nil;
 	return attributes;
 }
 
-@synthesize fromDocumentsService;
+@synthesize fromCloud;
 
-- (NSString *)documentsServiceID {
-	return [[[[self fileURL] path] lastPathComponent] stringByDeletingPathExtension];
+- (NSString *)cloudID {
+	return [[[[self fileURL] path] stringByDeletingLastPathComponent] lastPathComponent];
 }
 
 - (BOOL)writeToURL:(NSURL *)absoluteURL ofType:(NSString *)typeName error:(NSError **)outError {</diff>
      <filename>BDocument.m</filename>
    </modified>
    <modified>
      <diff>@@ -7,9 +7,10 @@
 //
 
 #import &quot;BDocumentController.h&quot;
-#import &quot;BCloudDocumentsService.h&quot;
 #import &quot;BUserInterfaceController.h&quot;
 #import &lt;objc/runtime.h&gt;
+#import &quot;Cloud.h&quot;
+#import &quot;BDocumentCloudDelegate.h&quot;
 
 
 @implementation BDocumentController
@@ -239,11 +240,11 @@
 		NSString *path = [each path];
 		NSString *title = nil;
 		
-		if ([BCloudDocumentsService isDocumentURLManagedByDocumentsService:each]) {
-			title = [[BCloudDocumentsService displayNameForDocumentsServiceDocument:each] stringByAppendingFormat:@&quot;&#8212;%@&quot;, [[BCloudDocumentsService sharedInstance] serviceLabel]];
-		} else {
+//		if ([BCloudDocumentsService isCloudDocumentURL:each]) {
+//			title = [[BCloudDocumentsService displayNameForCloudDocument:each] stringByAppendingFormat:@&quot;&#8212;%@&quot;, [[BCloudDocumentsService sharedInstance] serviceLabel]];
+//		} else {
 			title = [path lastPathComponent];
-		}
+//		}
 		NSMenuItem *eachMenuItem = [[NSMenuItem alloc] initWithTitle:title action:@selector(openRecentDocument:) keyEquivalent:@&quot;&quot;];
 		[eachMenuItem setRepresentedObject:each];
 		NSImage *icon = [workspace iconForFile:path];
@@ -303,7 +304,7 @@
 #pragma mark Sync
 
 - (IBAction)sync:(id)sender {
-	[[BCloudDocumentsService sharedInstance] beginSync:sender];
+	[[Cloud sharedInstance] beginSync:sender];
 }
 
 #pragma mark Loading Document Workspace</diff>
      <filename>BDocumentController.m</filename>
    </modified>
    <modified>
      <diff>@@ -47,6 +47,19 @@
 	[self setWindowControllerUserDefaultsKey:savedWindowControllerUserDefaultsKey];
 }
 
+- (NSString *)windowTitleForDocumentDisplayName:(NSString *)displayName {
+	if ([[self window] isDocumentEdited]) {
+		return [[NSString stringWithFormat:@&quot;%C &quot;, 0x25C6, nil] stringByAppendingString:[super windowTitleForDocumentDisplayName:displayName]];
+	} else {
+		return [super windowTitleForDocumentDisplayName:displayName];
+	}
+}
+
+- (void)setDocumentEdited:(BOOL)newDocumentEditied {
+	[super setDocumentEdited:newDocumentEditied];
+	[self synchronizeWindowTitleWithDocumentName];
+}
+
 #pragma mark WindowController Use Defaults
 
 - (NSString *)windowControllerUserDefaultsKey {</diff>
      <filename>BDocumentWindowController.m</filename>
    </modified>
    <modified>
      <diff>@@ -18,26 +18,16 @@
 		437D72510C9198C90051C06D /* BDocuments.m in Sources */ = {isa = PBXBuildFile; fileRef = 437D72500C9198C90051C06D /* BDocuments.m */; };
 		43B2906E0CA3EE6700AE1802 /* BDocumentController.h in Headers */ = {isa = PBXBuildFile; fileRef = 437D71820C9179BD0051C06D /* BDocumentController.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		43EF1E480CA2F14600138C91 /* BDocuments.h in Headers */ = {isa = PBXBuildFile; fileRef = 437D724F0C9198C90051C06D /* BDocuments.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		883B60B50F324DF6005D5B3A /* BCloudHTTPFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 883B60B30F324DF6005D5B3A /* BCloudHTTPFetcher.h */; };
+		88243E8C0F9400290057A08D /* BDocumentCloudDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 88243E8A0F9400290057A08D /* BDocumentCloudDelegate.h */; };
+		88243E8D0F9400290057A08D /* BDocumentCloudDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 88243E8B0F9400290057A08D /* BDocumentCloudDelegate.m */; };
+		88243F4D0F9494310057A08D /* BDocumentCloudCache.xcdatamodel in Sources */ = {isa = PBXBuildFile; fileRef = 88243F4C0F9494310057A08D /* BDocumentCloudCache.xcdatamodel */; };
 		883B65210F33A679005D5B3A /* BCloudAuthenticationWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 883B65200F33A679005D5B3A /* BCloudAuthenticationWindow.xib */; };
-		883B65290F33A76B005D5B3A /* BCloudAuthenticationWindowController.h in Headers */ = {isa = PBXBuildFile; fileRef = 883B65270F33A76B005D5B3A /* BCloudAuthenticationWindowController.h */; };
-		883B652A0F33A76B005D5B3A /* BCloudAuthenticationWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 883B65280F33A76B005D5B3A /* BCloudAuthenticationWindowController.m */; };
 		885C4E420F61BE8800624924 /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 885C4E410F61BE8800624924 /* libsqlite3.dylib */; };
-		885C4E4B0F61BEA100624924 /* FMResultSet.m in Sources */ = {isa = PBXBuildFile; fileRef = 885C4E440F61BEA100624924 /* FMResultSet.m */; };
-		885C4E4C0F61BEA100624924 /* FMDatabase.h in Headers */ = {isa = PBXBuildFile; fileRef = 885C4E450F61BEA100624924 /* FMDatabase.h */; };
-		885C4E4D0F61BEA100624924 /* FMDatabase.m in Sources */ = {isa = PBXBuildFile; fileRef = 885C4E460F61BEA100624924 /* FMDatabase.m */; };
-		885C4E4E0F61BEA100624924 /* FMDatabaseAdditions.h in Headers */ = {isa = PBXBuildFile; fileRef = 885C4E470F61BEA100624924 /* FMDatabaseAdditions.h */; };
-		885C4E4F0F61BEA100624924 /* FMDatabaseAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 885C4E480F61BEA100624924 /* FMDatabaseAdditions.m */; };
-		885C4E510F61BEA100624924 /* FMResultSet.h in Headers */ = {isa = PBXBuildFile; fileRef = 885C4E4A0F61BEA100624924 /* FMResultSet.h */; };
 		889A4F280D5A5A3C00D1E8E9 /* com.blocks.BDocuments.markdown in Resources */ = {isa = PBXBuildFile; fileRef = 889A4F270D5A5A3C00D1E8E9 /* com.blocks.BDocuments.markdown */; };
 		889A4F2B0D5A5A5D00D1E8E9 /* com.blocks.BDocuments.documentControllerDelegate.markdown in Resources */ = {isa = PBXBuildFile; fileRef = 889A4F2A0D5A5A5D00D1E8E9 /* com.blocks.BDocuments.documentControllerDelegate.markdown */; };
 		889A4F2D0D5A5A8300D1E8E9 /* com.blocks.BDocuments.documentDefaultWindowControllersFactory.markdown in Resources */ = {isa = PBXBuildFile; fileRef = 889A4F2C0D5A5A8300D1E8E9 /* com.blocks.BDocuments.documentDefaultWindowControllersFactory.markdown */; };
-		889EAE250F007874003D8453 /* BDiffMatchPatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 889EAE210F007874003D8453 /* BDiffMatchPatch.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		889EAE260F007874003D8453 /* BDiffMatchPatch.m in Sources */ = {isa = PBXBuildFile; fileRef = 889EAE220F007874003D8453 /* BDiffMatchPatch.m */; };
 		88A3519C0E97A34E0019988C /* theme.plist in Resources */ = {isa = PBXBuildFile; fileRef = 88A3519B0E97A34E0019988C /* theme.plist */; };
 		88A3521D0E980EEE0019988C /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A3521C0E980EEE0019988C /* WebKit.framework */; };
-		88A36C860F14FBCE00EAA3FD /* BDocumentDifferencesWindowController.h in Headers */ = {isa = PBXBuildFile; fileRef = 88A36C840F14FBCE00EAA3FD /* BDocumentDifferencesWindowController.h */; };
-		88A36C870F14FBCE00EAA3FD /* BDocumentDifferencesWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A36C850F14FBCE00EAA3FD /* BDocumentDifferencesWindowController.m */; };
 		88A36CA40F14FC2C00EAA3FD /* BDocumentDifferencesWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 88A36CA30F14FC2C00EAA3FD /* BDocumentDifferencesWindow.xib */; };
 		88A46F490E914E4200E29F5B /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A46F480E914E4200E29F5B /* SystemConfiguration.framework */; };
 		88A470CE0E918EE200E29F5B /* SBJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A470C70E918EE200E29F5B /* SBJSON.m */; };
@@ -47,17 +37,18 @@
 		88A470D20E918EE200E29F5B /* NSObject+SBJSON.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A470CB0E918EE200E29F5B /* NSObject+SBJSON.m */; };
 		88A470D30E918EE200E29F5B /* NSObject+SBJSON.h in Headers */ = {isa = PBXBuildFile; fileRef = 88A470CC0E918EE200E29F5B /* NSObject+SBJSON.h */; settings = {ATTRIBUTES = (Public, ); }; };
 		88A470D40E918EE200E29F5B /* JSON.h in Headers */ = {isa = PBXBuildFile; fileRef = 88A470CD0E918EE200E29F5B /* JSON.h */; settings = {ATTRIBUTES = (Public, ); }; };
-		88E62C070F59C1AA00C0E3F7 /* BCloudDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 88E62C050F59C1AA00C0E3F7 /* BCloudDocument.h */; };
-		88E62C080F59C1AA00C0E3F7 /* BCloudDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 88E62C060F59C1AA00C0E3F7 /* BCloudDocument.m */; };
-		88E62C0D0F59C3F400C0E3F7 /* BCloudDocumentsService.h in Headers */ = {isa = PBXBuildFile; fileRef = 88E62C0B0F59C3F400C0E3F7 /* BCloudDocumentsService.h */; };
-		88E62C0E0F59C3F400C0E3F7 /* BCloudDocumentsService.m in Sources */ = {isa = PBXBuildFile; fileRef = 88E62C0C0F59C3F400C0E3F7 /* BCloudDocumentsService.m */; };
-		88E62FD60F5C577200C0E3F7 /* BCloudHTTPFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 883B60B40F324DF6005D5B3A /* BCloudHTTPFetcher.m */; };
 		88E631230F5C748F00C0E3F7 /* BCloudNameWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 88E631220F5C748F00C0E3F7 /* BCloudNameWindow.xib */; };
-		88E631260F5C74A600C0E3F7 /* BCloudNameWindowController.h in Headers */ = {isa = PBXBuildFile; fileRef = 88E631240F5C74A600C0E3F7 /* BCloudNameWindowController.h */; };
-		88E631270F5C74A600C0E3F7 /* BCloudNameWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88E631250F5C74A600C0E3F7 /* BCloudNameWindowController.m */; };
-		88E98B3E0F5841A200CAAA23 /* BCloudSyncWindowController.h in Headers */ = {isa = PBXBuildFile; fileRef = 88E98B3C0F5841A200CAAA23 /* BCloudSyncWindowController.h */; };
-		88E98B3F0F5841A200CAAA23 /* BCloudSyncWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 88E98B3D0F5841A200CAAA23 /* BCloudSyncWindowController.m */; };
 		88E98B440F58425B00CAAA23 /* BCloudSyncWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 88E98B430F58425B00CAAA23 /* BCloudSyncWindow.xib */; };
+		88F596170F8FB4D000DFBB69 /* Cloud.h in Headers */ = {isa = PBXBuildFile; fileRef = 88F596130F8FB4D000DFBB69 /* Cloud.h */; };
+		88F596180F8FB4D000DFBB69 /* Cloud.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F596140F8FB4D000DFBB69 /* Cloud.m */; };
+		88F596190F8FB4D000DFBB69 /* CloudDocument.h in Headers */ = {isa = PBXBuildFile; fileRef = 88F596150F8FB4D000DFBB69 /* CloudDocument.h */; };
+		88F5961A0F8FB4D000DFBB69 /* CloudDocument.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F596160F8FB4D000DFBB69 /* CloudDocument.m */; };
+		88F596210F8FB50F00DFBB69 /* Keychain.h in Headers */ = {isa = PBXBuildFile; fileRef = 88F5961F0F8FB50F00DFBB69 /* Keychain.h */; };
+		88F596220F8FB50F00DFBB69 /* Keychain.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F596200F8FB50F00DFBB69 /* Keychain.m */; };
+		88F596250F8FB51E00DFBB69 /* HTTPFetcher.h in Headers */ = {isa = PBXBuildFile; fileRef = 88F596230F8FB51E00DFBB69 /* HTTPFetcher.h */; };
+		88F596260F8FB51E00DFBB69 /* HTTPFetcher.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F596240F8FB51E00DFBB69 /* HTTPFetcher.m */; };
+		88F596300F8FB52600DFBB69 /* DiffMatchPatch.h in Headers */ = {isa = PBXBuildFile; fileRef = 88F5962E0F8FB52600DFBB69 /* DiffMatchPatch.h */; };
+		88F596310F8FB52600DFBB69 /* DiffMatchPatch.m in Sources */ = {isa = PBXBuildFile; fileRef = 88F5962F0F8FB52600DFBB69 /* DiffMatchPatch.m */; };
 		8D5B49B0048680CD000E48DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C167DFE841241C02AAC07 /* InfoPlist.strings */; };
 		8D5B49B4048680CD000E48DA /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7ADFEA557BF11CA2CBB /* Cocoa.framework */; };
 /* End PBXBuildFile section */
@@ -96,18 +87,11 @@
 		437D71830C9179BD0051C06D /* BDocumentController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BDocumentController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		437D724F0C9198C90051C06D /* BDocuments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BDocuments.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		437D72500C9198C90051C06D /* BDocuments.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BDocuments.m; sourceTree = &quot;&lt;group&gt;&quot;; };
-		883B60B30F324DF6005D5B3A /* BCloudHTTPFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCloudHTTPFetcher.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		883B60B40F324DF6005D5B3A /* BCloudHTTPFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCloudHTTPFetcher.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		88243E8A0F9400290057A08D /* BDocumentCloudDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BDocumentCloudDelegate.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		88243E8B0F9400290057A08D /* BDocumentCloudDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BDocumentCloudDelegate.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		88243F4C0F9494310057A08D /* BDocumentCloudCache.xcdatamodel */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = wrapper.xcdatamodel; path = BDocumentCloudCache.xcdatamodel; sourceTree = &quot;&lt;group&gt;&quot;; };
 		883B651E0F33A673005D5B3A /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/BCloudAuthenticationWindow.xib; sourceTree = &quot;&lt;group&gt;&quot;; };
-		883B65270F33A76B005D5B3A /* BCloudAuthenticationWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCloudAuthenticationWindowController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		883B65280F33A76B005D5B3A /* BCloudAuthenticationWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCloudAuthenticationWindowController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		885C4E410F61BE8800624924 /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = &quot;compiled.mach-o.dylib&quot;; name = libsqlite3.dylib; path = /usr/lib/libsqlite3.dylib; sourceTree = &quot;&lt;absolute&gt;&quot;; };
-		885C4E440F61BEA100624924 /* FMResultSet.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FMResultSet.m; sourceTree = &quot;&lt;group&gt;&quot;; };
-		885C4E450F61BEA100624924 /* FMDatabase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FMDatabase.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		885C4E460F61BEA100624924 /* FMDatabase.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FMDatabase.m; sourceTree = &quot;&lt;group&gt;&quot;; };
-		885C4E470F61BEA100624924 /* FMDatabaseAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FMDatabaseAdditions.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		885C4E480F61BEA100624924 /* FMDatabaseAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FMDatabaseAdditions.m; sourceTree = &quot;&lt;group&gt;&quot;; };
-		885C4E4A0F61BEA100624924 /* FMResultSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FMResultSet.h; sourceTree = &quot;&lt;group&gt;&quot;; };
 		889A4F270D5A5A3C00D1E8E9 /* com.blocks.BDocuments.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = com.blocks.BDocuments.markdown; sourceTree = &quot;&lt;group&gt;&quot;; wrapsLines = 1; };
 		889A4F2A0D5A5A5D00D1E8E9 /* com.blocks.BDocuments.documentControllerDelegate.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = com.blocks.BDocuments.documentControllerDelegate.markdown; sourceTree = &quot;&lt;group&gt;&quot;; wrapsLines = 1; };
 		889A4F2C0D5A5A8300D1E8E9 /* com.blocks.BDocuments.documentDefaultWindowControllersFactory.markdown */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = com.blocks.BDocuments.documentDefaultWindowControllersFactory.markdown; sourceTree = &quot;&lt;group&gt;&quot;; wrapsLines = 1; };
@@ -128,16 +112,18 @@
 		88A470CB0E918EE200E29F5B /* NSObject+SBJSON.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = &quot;NSObject+SBJSON.m&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
 		88A470CC0E918EE200E29F5B /* NSObject+SBJSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = &quot;NSObject+SBJSON.h&quot;; sourceTree = &quot;&lt;group&gt;&quot;; };
 		88A470CD0E918EE200E29F5B /* JSON.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSON.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		88E62C050F59C1AA00C0E3F7 /* BCloudDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCloudDocument.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		88E62C060F59C1AA00C0E3F7 /* BCloudDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCloudDocument.m; sourceTree = &quot;&lt;group&gt;&quot;; };
-		88E62C0B0F59C3F400C0E3F7 /* BCloudDocumentsService.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCloudDocumentsService.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		88E62C0C0F59C3F400C0E3F7 /* BCloudDocumentsService.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCloudDocumentsService.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		88E631200F5C748300C0E3F7 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/BCloudNameWindow.xib; sourceTree = &quot;&lt;group&gt;&quot;; };
-		88E631240F5C74A600C0E3F7 /* BCloudNameWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCloudNameWindowController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		88E631250F5C74A600C0E3F7 /* BCloudNameWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCloudNameWindowController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
-		88E98B3C0F5841A200CAAA23 /* BCloudSyncWindowController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BCloudSyncWindowController.h; sourceTree = &quot;&lt;group&gt;&quot;; };
-		88E98B3D0F5841A200CAAA23 /* BCloudSyncWindowController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BCloudSyncWindowController.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		88E98B410F58425700CAAA23 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/BCloudSyncWindow.xib; sourceTree = &quot;&lt;group&gt;&quot;; };
+		88F596130F8FB4D000DFBB69 /* Cloud.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Cloud.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		88F596140F8FB4D000DFBB69 /* Cloud.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Cloud.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		88F596150F8FB4D000DFBB69 /* CloudDocument.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CloudDocument.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		88F596160F8FB4D000DFBB69 /* CloudDocument.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CloudDocument.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		88F5961F0F8FB50F00DFBB69 /* Keychain.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Keychain.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		88F596200F8FB50F00DFBB69 /* Keychain.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = Keychain.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		88F596230F8FB51E00DFBB69 /* HTTPFetcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTTPFetcher.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		88F596240F8FB51E00DFBB69 /* HTTPFetcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HTTPFetcher.m; sourceTree = &quot;&lt;group&gt;&quot;; };
+		88F5962E0F8FB52600DFBB69 /* DiffMatchPatch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DiffMatchPatch.h; sourceTree = &quot;&lt;group&gt;&quot;; };
+		88F5962F0F8FB52600DFBB69 /* DiffMatchPatch.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DiffMatchPatch.m; sourceTree = &quot;&lt;group&gt;&quot;; };
 		8D5B49B6048680CD000E48DA /* BDocuments.plugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BDocuments.plugin; sourceTree = BUILT_PRODUCTS_DIR; };
 		8D5B49B7048680CD000E48DA /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = &quot;&lt;group&gt;&quot;; };
 		D2F7E65807B2D6F200F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = &quot;&lt;absolute&gt;&quot;; };
@@ -195,6 +181,7 @@
 				88E631220F5C748F00C0E3F7 /* BCloudNameWindow.xib */,
 				883B65200F33A679005D5B3A /* BCloudAuthenticationWindow.xib */,
 				88A36CA30F14FC2C00EAA3FD /* BDocumentDifferencesWindow.xib */,
+				88243F4C0F9494310057A08D /* BDocumentCloudCache.xcdatamodel */,
 				437D716C0C9179050051C06D /* Plugin.xml */,
 				889A4F270D5A5A3C00D1E8E9 /* com.blocks.BDocuments.markdown */,
 				889A4F2A0D5A5A5D00D1E8E9 /* com.blocks.BDocuments.documentControllerDelegate.markdown */,
@@ -212,8 +199,10 @@
 				431A0C3D0CC5149E00DE7BAE /* BDocument.m */,
 				431A0C420CC514B900DE7BAE /* BDocumentWindowController.h */,
 				431A0C430CC514B900DE7BAE /* BDocumentWindowController.m */,
-				883B60A70F324DC9005D5B3A /* DiffMatchPatch */,
-				883B60A40F324D9D005D5B3A /* Online Documents Service */,
+				88243E8A0F9400290057A08D /* BDocumentCloudDelegate.h */,
+				88243E8B0F9400290057A08D /* BDocumentCloudDelegate.m */,
+				883B60A70F324DC9005D5B3A /* DiffMatchPatch OLD */,
+				88F596040F8FB4B200DFBB69 /* Cloud */,
 			);
 			name = Classes;
 			sourceTree = &quot;&lt;group&gt;&quot;;
@@ -262,28 +251,7 @@
 			name = Products;
 			sourceTree = &quot;&lt;group&gt;&quot;;
 		};
-		883B60A40F324D9D005D5B3A /* Online Documents Service */ = {
-			isa = PBXGroup;
-			children = (
-				88E62C050F59C1AA00C0E3F7 /* BCloudDocument.h */,
-				88E62C060F59C1AA00C0E3F7 /* BCloudDocument.m */,
-				88E62C0B0F59C3F400C0E3F7 /* BCloudDocumentsService.h */,
-				88E62C0C0F59C3F400C0E3F7 /* BCloudDocumentsService.m */,
-				883B60B30F324DF6005D5B3A /* BCloudHTTPFetcher.h */,
-				883B60B40F324DF6005D5B3A /* BCloudHTTPFetcher.m */,
-				88E98B3C0F5841A200CAAA23 /* BCloudSyncWindowController.h */,
-				88E98B3D0F5841A200CAAA23 /* BCloudSyncWindowController.m */,
-				88E631240F5C74A600C0E3F7 /* BCloudNameWindowController.h */,
-				88E631250F5C74A600C0E3F7 /* BCloudNameWindowController.m */,
-				883B65270F33A76B005D5B3A /* BCloudAuthenticationWindowController.h */,
-				883B65280F33A76B005D5B3A /* BCloudAuthenticationWindowController.m */,
-				885C4E270F61BAE200624924 /* SQLite */,
-				88A470D60E918EE600E29F5B /* JSON */,
-			);
-			name = &quot;Online Documents Service&quot;;
-			sourceTree = &quot;&lt;group&gt;&quot;;
-		};
-		883B60A70F324DC9005D5B3A /* DiffMatchPatch */ = {
+		883B60A70F324DC9005D5B3A /* DiffMatchPatch OLD */ = {
 			isa = PBXGroup;
 			children = (
 				889EAE210F007874003D8453 /* BDiffMatchPatch.h */,
@@ -293,20 +261,7 @@
 				88A36C840F14FBCE00EAA3FD /* BDocumentDifferencesWindowController.h */,
 				88A36C850F14FBCE00EAA3FD /* BDocumentDifferencesWindowController.m */,
 			);
-			name = DiffMatchPatch;
-			sourceTree = &quot;&lt;group&gt;&quot;;
-		};
-		885C4E270F61BAE200624924 /* SQLite */ = {
-			isa = PBXGroup;
-			children = (
-				885C4E450F61BEA100624924 /* FMDatabase.h */,
-				885C4E460F61BEA100624924 /* FMDatabase.m */,
-				885C4E470F61BEA100624924 /* FMDatabaseAdditions.h */,
-				885C4E480F61BEA100624924 /* FMDatabaseAdditions.m */,
-				885C4E4A0F61BEA100624924 /* FMResultSet.h */,
-				885C4E440F61BEA100624924 /* FMResultSet.m */,
-			);
-			name = SQLite;
+			name = &quot;DiffMatchPatch OLD&quot;;
 			sourceTree = &quot;&lt;group&gt;&quot;;
 		};
 		88A470D60E918EE600E29F5B /* JSON */ = {
@@ -323,6 +278,48 @@
 			name = JSON;
 			sourceTree = &quot;&lt;group&gt;&quot;;
 		};
+		88F596040F8FB4B200DFBB69 /* Cloud */ = {
+			isa = PBXGroup;
+			children = (
+				88F596130F8FB4D000DFBB69 /* Cloud.h */,
+				88F596140F8FB4D000DFBB69 /* Cloud.m */,
+				88F596150F8FB4D000DFBB69 /* CloudDocument.h */,
+				88F596160F8FB4D000DFBB69 /* CloudDocument.m */,
+				88F5961C0F8FB4E000DFBB69 /* Keychain */,
+				88F5961D0F8FB4E900DFBB69 /* HTTPFetcher */,
+				88F5961E0F8FB4F800DFBB69 /* DiffMatchPatch */,
+				88A470D60E918EE600E29F5B /* JSON */,
+			);
+			name = Cloud;
+			sourceTree = &quot;&lt;group&gt;&quot;;
+		};
+		88F5961C0F8FB4E000DFBB69 /* Keychain */ = {
+			isa = PBXGroup;
+			children = (
+				88F5961F0F8FB50F00DFBB69 /* Keychain.h */,
+				88F596200F8FB50F00DFBB69 /* Keychain.m */,
+			);
+			name = Keychain;
+			sourceTree = &quot;&lt;group&gt;&quot;;
+		};
+		88F5961D0F8FB4E900DFBB69 /* HTTPFetcher */ = {
+			isa = PBXGroup;
+			children = (
+				88F596230F8FB51E00DFBB69 /* HTTPFetcher.h */,
+				88F596240F8FB51E00DFBB69 /* HTTPFetcher.m */,
+			);
+			name = HTTPFetcher;
+			sourceTree = &quot;&lt;group&gt;&quot;;
+		};
+		88F5961E0F8FB4F800DFBB69 /* DiffMatchPatch */ = {
+			isa = PBXGroup;
+			children = (
+				88F5962E0F8FB52600DFBB69 /* DiffMatchPatch.h */,
+				88F5962F0F8FB52600DFBB69 /* DiffMatchPatch.m */,
+			);
+			name = DiffMatchPatch;
+			sourceTree = &quot;&lt;group&gt;&quot;;
+		};
 /* End PBXGroup section */
 
 /* Begin PBXHeadersBuildPhase section */
@@ -338,17 +335,12 @@
 				88A470D10E918EE200E29F5B /* NSString+SBJSON.h in Headers */,
 				88A470D30E918EE200E29F5B /* NSObject+SBJSON.h in Headers */,
 				88A470D40E918EE200E29F5B /* JSON.h in Headers */,
-				889EAE250F007874003D8453 /* BDiffMatchPatch.h in Headers */,
-				88A36C860F14FBCE00EAA3FD /* BDocumentDifferencesWindowController.h in Headers */,
-				883B60B50F324DF6005D5B3A /* BCloudHTTPFetcher.h in Headers */,
-				883B65290F33A76B005D5B3A /* BCloudAuthenticationWindowController.h in Headers */,
-				88E98B3E0F5841A200CAAA23 /* BCloudSyncWindowController.h in Headers */,
-				88E62C070F59C1AA00C0E3F7 /* BCloudDocument.h in Headers */,
-				88E62C0D0F59C3F400C0E3F7 /* BCloudDocumentsService.h in Headers */,
-				88E631260F5C74A600C0E3F7 /* BCloudNameWindowController.h in Headers */,
-				885C4E4C0F61BEA100624924 /* FMDatabase.h in Headers */,
-				885C4E4E0F61BEA100624924 /* FMDatabaseAdditions.h in Headers */,
-				885C4E510F61BEA100624924 /* FMResultSet.h in Headers */,
+				88F596170F8FB4D000DFBB69 /* Cloud.h in Headers */,
+				88F596190F8FB4D000DFBB69 /* CloudDocument.h in Headers */,
+				88F596210F8FB50F00DFBB69 /* Keychain.h in Headers */,
+				88F596250F8FB51E00DFBB69 /* HTTPFetcher.h in Headers */,
+				88F596300F8FB52600DFBB69 /* DiffMatchPatch.h in Headers */,
+				88243E8C0F9400290057A08D /* BDocumentCloudDelegate.h in Headers */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -459,17 +451,13 @@
 				88A470CE0E918EE200E29F5B /* SBJSON.m in Sources */,
 				88A470D00E918EE200E29F5B /* NSString+SBJSON.m in Sources */,
 				88A470D20E918EE200E29F5B /* NSObject+SBJSON.m in Sources */,
-				889EAE260F007874003D8453 /* BDiffMatchPatch.m in Sources */,
-				88A36C870F14FBCE00EAA3FD /* BDocumentDifferencesWindowController.m in Sources */,
-				883B652A0F33A76B005D5B3A /* BCloudAuthenticationWindowController.m in Sources */,
-				88E98B3F0F5841A200CAAA23 /* BCloudSyncWindowController.m in Sources */,
-				88E62C080F59C1AA00C0E3F7 /* BCloudDocument.m in Sources */,
-				88E62C0E0F59C3F400C0E3F7 /* BCloudDocumentsService.m in Sources */,
-				88E62FD60F5C577200C0E3F7 /* BCloudHTTPFetcher.m in Sources */,
-				88E631270F5C74A600C0E3F7 /* BCloudNameWindowController.m in Sources */,
-				885C4E4B0F61BEA100624924 /* FMResultSet.m in Sources */,
-				885C4E4D0F61BEA100624924 /* FMDatabase.m in Sources */,
-				885C4E4F0F61BEA100624924 /* FMDatabaseAdditions.m in Sources */,
+				88F596180F8FB4D000DFBB69 /* Cloud.m in Sources */,
+				88F5961A0F8FB4D000DFBB69 /* CloudDocument.m in Sources */,
+				88F596220F8FB50F00DFBB69 /* Keychain.m in Sources */,
+				88F596260F8FB51E00DFBB69 /* HTTPFetcher.m in Sources */,
+				88F596310F8FB52600DFBB69 /* DiffMatchPatch.m in Sources */,
+				88243E8D0F9400290057A08D /* BDocumentCloudDelegate.m in Sources */,
+				88243F4D0F9494310057A08D /* BDocumentCloudCache.xcdatamodel in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};</diff>
      <filename>BDocuments.xcodeproj/project.pbxproj</filename>
    </modified>
    <modified>
      <diff>@@ -4,4 +4,5 @@
 
 #ifdef __OBJC__
     #import &lt;Cocoa/Cocoa.h&gt;
+	#import &lt;Blocks/Blocks.h&gt;
 #endif</diff>
      <filename>BDocuments_Prefix.pch</filename>
    </modified>
    <modified>
      <diff></diff>
      <filename>English.lproj/Localizable.strings</filename>
    </modified>
    <modified>
      <diff>@@ -22,25 +22,24 @@
 	&lt;/extension&gt;
 
 	&lt;extension point=&quot;com.blocks.BLifecycle.lifecycle&quot;&gt;
-		&lt;applicationDidFinishLaunching class=&quot;BCloudDocumentsService sharedInstance&quot; /&gt;
+		&lt;applicationDidFinishLaunching class=&quot;BDocumentCloudDelegate sharedInstance&quot; /&gt;
 	&lt;/extension&gt;
 	
 	&lt;extension point=&quot;com.blocks.BUserInterface.menus&quot; processOrder=&quot;2&quot;&gt;		
-		&lt;menu id=&quot;com.blocks.BUserInterface.menus.main.file&quot;&gt;
-			&lt;menuitem title=&quot;%Show Unsaved Changes...&quot; id=&quot;showUnsavedChanges&quot; location=&quot;group:closeGroup&quot; action=&quot;showUnsavedChanges:&quot; /&gt;
-			&lt;separator group=&quot;cloudStorageGroup&quot; location=&quot;group:closeGroup&quot; /&gt;
-			&lt;menuitem title=&quot;%Online Documents Service&quot; id=&quot;cloudDocumentsService&quot; submenu=&quot;com.blocks.BUserInterface.menus.main.file.cloudDocumentsService&quot; location=&quot;group:cloudStorageGroup&quot; /&gt;
+		&lt;menu id=&quot;com.blocks.BUserInterface.menus.main&quot;&gt;
+			&lt;menuitem title=&quot;%Sync&quot; id=&quot;cloudDocumentsService&quot; submenu=&quot;com.blocks.BUserInterface.menus.main.cloudDocumentsService&quot; location=&quot;after:window&quot; /&gt;
 		&lt;/menu&gt;
 		
-		&lt;menu id=&quot;com.blocks.BUserInterface.menus.main.file.cloudDocumentsService&quot;&gt;
-			&lt;menuitem title=&quot;%Sync&quot; id=&quot;syncSharedDocuments&quot; action=&quot;beginSync:&quot; target=&quot;BCloudDocumentsService sharedInstance&quot; keyEquivalent=&quot;s&quot; keyEquivalentModifierMask=&quot;NSControlKeyMask|NSCommandKeyMask&quot; /&gt;
-			&lt;menuitem title=&quot;%New Document&quot; id=&quot;newCloudDocument&quot; action=&quot;newCloudDocument:&quot; target=&quot;BCloudDocumentsService sharedInstance&quot; /&gt;
-			&lt;menuitem title=&quot;%Delete Document&quot; id=&quot;deleteCloudDocument&quot; action=&quot;deleteCloudDocument:&quot; target=&quot;BCloudDocumentsService sharedInstance&quot; /&gt;
-			&lt;menuitem title=&quot;%View Documents Online&quot; id=&quot;browseCloudDocumentsOnline&quot; action=&quot;browseCloudDocumentsOnline:&quot; target=&quot;BCloudDocumentsService sharedInstance&quot; /&gt;
-			&lt;menuitem title=&quot;%Sign In...&quot; id=&quot;toggleDocumentsServiceAuthentication&quot; action=&quot;toggleDocumentsServiceAuthentication:&quot; target=&quot;BCloudDocumentsService sharedInstance&quot; /&gt;
+		&lt;menu id=&quot;com.blocks.BUserInterface.menus.main.file&quot;&gt;
+			&lt;menuitem title=&quot;%Show Unsaved Changes...&quot; id=&quot;showUnsavedChanges&quot; location=&quot;group:closeGroup&quot; action=&quot;showUnsavedChanges:&quot; /&gt;
 		&lt;/menu&gt;
 		
-		&lt;menu id=&quot;com.blocks.BDocuments.menus.main.file.documentsService.sharedDocuments&quot;&gt;
+		&lt;menu id=&quot;com.blocks.BUserInterface.menus.main.cloudDocumentsService&quot;&gt;
+			&lt;menuitem title=&quot;CloudServiceLabel&quot; id=&quot;browseCloudDocumentsOnline&quot; action=&quot;browseCloudDocumentsOnline:&quot; target=&quot;BDocumentCloudDelegate sharedInstance&quot; /&gt;
+			&lt;menuitem title=&quot;%Sync&quot; id=&quot;syncSharedDocuments&quot; action=&quot;beginSync:&quot; target=&quot;BDocumentCloudDelegate sharedInstance&quot; indentationLevel=&quot;1&quot; keyEquivalent=&quot;s&quot; keyEquivalentModifierMask=&quot;NSControlKeyMask|NSCommandKeyMask&quot; /&gt;
+			&lt;menuitem title=&quot;%New Document&quot; id=&quot;newCloudDocument&quot; action=&quot;newCloudDocument:&quot; target=&quot;BDocumentCloudDelegate sharedInstance&quot; indentationLevel=&quot;1&quot; /&gt;
+			&lt;menuitem title=&quot;%Delete Document&quot; id=&quot;deleteCloudDocument&quot; action=&quot;deleteCloudDocument:&quot; target=&quot;BDocumentCloudDelegate sharedInstance&quot; indentationLevel=&quot;1&quot; /&gt;
+			&lt;menuitem title=&quot;%Sign In...&quot; id=&quot;toggleDocumentsServiceAuthentication&quot; action=&quot;toggleDocumentsServiceAuthentication:&quot; target=&quot;BDocumentCloudDelegate sharedInstance&quot; indentationLevel=&quot;1&quot; /&gt;
 		&lt;/menu&gt;
 	&lt;/extension&gt;	
 &lt;/plugin&gt;
\ No newline at end of file</diff>
      <filename>Plugin.xml</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>BCloudAuthenticationWindowController.h</filename>
    </removed>
    <removed>
      <filename>BCloudAuthenticationWindowController.m</filename>
    </removed>
    <removed>
      <filename>BCloudDocument.h</filename>
    </removed>
    <removed>
      <filename>BCloudDocument.m</filename>
    </removed>
    <removed>
      <filename>BCloudDocumentsService.h</filename>
    </removed>
    <removed>
      <filename>BCloudDocumentsService.m</filename>
    </removed>
    <removed>
      <filename>BCloudHTTPFetcher.h</filename>
    </removed>
    <removed>
      <filename>BCloudHTTPFetcher.m</filename>
    </removed>
    <removed>
      <filename>BCloudNameWindowController.h</filename>
    </removed>
    <removed>
      <filename>BCloudNameWindowController.m</filename>
    </removed>
    <removed>
      <filename>BCloudSyncWindowController.h</filename>
    </removed>
    <removed>
      <filename>BCloudSyncWindowController.m</filename>
    </removed>
    <removed>
      <filename>FMDatabase.h</filename>
    </removed>
    <removed>
      <filename>FMDatabase.m</filename>
    </removed>
    <removed>
      <filename>FMDatabaseAdditions.h</filename>
    </removed>
    <removed>
      <filename>FMDatabaseAdditions.m</filename>
    </removed>
    <removed>
      <filename>FMResultSet.h</filename>
    </removed>
    <removed>
      <filename>FMResultSet.m</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>4edf71044c7ca9fdb9c279de83e65a4934bb35fd</id>
    </parent>
  </parents>
  <author>
    <name>Jesse Grosjean</name>
    <email>jesse@hogbaysoftware.com</email>
  </author>
  <url>http://github.com/jessegrosjean/bdocuments/commit/297bf9f8624403b6ccacf903db06a5d2149c6d5c</url>
  <id>297bf9f8624403b6ccacf903db06a5d2149c6d5c</id>
  <committed-date>2009-04-14T13:41:54-07:00</committed-date>
  <authored-date>2009-04-14T13:41:54-07:00</authored-date>
  <message>sycing with iPhone client</message>
  <tree>427ccc46c3ffcdb5f5ecd2333138c6dc233d870f</tree>
  <committer>
    <name>Jesse Grosjean</name>
    <email>jesse@hogbaysoftware.com</email>
  </committer>
</commit>
