 			if (weaveContent is WeaveArchive)
 				weaveContent = (weaveContent as WeaveArchive).serialize();
 			obj.data[uid] = { date: new Date(), content: weaveContent };
-			obj.flush();
-			obj.close();
-			
-			// reload the application
-			if (ExternalInterface.available)
-			{
+			
+			if (obj.flush() == SharedObjectFlushStatus.PENDING)
+				obj.addEventListener(NetStatusEvent.NET_STATUS, handleExternalReloadStatus);
+			else
+				handleExternalReloadStatus();
+			
+			function handleExternalReloadStatus(event:NetStatusEvent = null):void
+			{
+				if (event && event.info.code != 'SharedObject.Flush.Success')
+				{
+					reportError(EXTERNAL_RELOAD_ERROR);
+					return;
+				}
+				obj.close();
+				
+				// reload the application
 				if (ExternalInterface.objectID)
 					ExternalInterface.call(
 						"function(reloadID) {" +

		public static function handleWeaveReload():Boolean
		{
			var obj:SharedObject = SharedObject.getLocal(WEAVE_RELOAD_SHARED_OBJECT);
			var flush:Boolean = false;
			var uid:String = WEAVE_RELOAD_SHARED_OBJECT;
			if (ExternalInterface.available && ExternalInterface.objectID)
			{

		 */
		public static function externalReload(weaveContent:Object = null):void
		{
			if (!ExternalInterface.available)
			{
				//TODO: is it possible to restart an Adobe AIR application from within?
				reportError("Unable to restart Weave when ExternalInterface is not available.");
				return;
			}
			
			if (!weaveContent)
				weaveContent = createWeaveFileContent();
			
