private bool ReadNextBookmark ()
		{
			while (reader.NodeType == XmlNodeType.EndElement) {
			        if (reader.Name == "folder") {
					folder_stack.RemoveAt (folder_stack.Count - 1);
					ResetCurrentFolder ();
					//Log.Debug ("Resetting folder to [{0}]", current_folder);
				}
			        reader.Read ();
			}
			
			while (!reader.EOF && reader.NodeType == XmlNodeType.Element) {
				string elementname = reader.Name;
				if (elementname == "title") {
					string title = reader.ReadString ();
					current_folder_title = title;
					folder_stack.Add (title);
					ResetCurrentFolder ();
					reader.ReadEndElement ();
					continue;
				} else if (elementname == "bookmark") {
					string bookmark_string = reader.ReadOuterXml ();
					current_bookmark = (Bookmark) serializer.Deserialize (new StringReader (bookmark_string));
					if (SetLastModifiedTable ())
						return true;
				} else {
					reader.Read ();
				}
			}

			return false;
		}
		public bool HasNextIndexable ()
		{	
			if (!is_valid_file || reader == null)
				return false;

			current_bookmark = null;
			string bookmark_string = "";
			try {
				while (! reader.EOF) {
					if (ReadNextBookmark ())
						return true;
				}
			} catch (XmlException) {
				// probably no more <item>
			}

			is_valid_file = false;
			reader.Close ();
			if (! initial_scan)
				queryable.RemoveDeletedBookmarks (deleted_bookmarks);
			return false;
		}