public void FetchTask()
		{
			mans.Clear();
			contactsByFullName.Clear();

			//if (owner != null)
			//	Dispatcher.BeginInvoke(new VoidInt(owner.SetBarLimits),
			//		FetchCount);

			syncEngine.CurrentTotal += FetchCount;

			if (syncEngine.SyncCanceled)
			{
				this.FetchSem.Release();
				return;
			}

			int hOperHandle = 0;
			int iRet = DAContentAccess.CABeginOperation(m_hContacts, 0, ref hOperHandle);
			if (iRet != Synrc.PCCSErrors.CONA_OK)
			{
				PCCAPIUtils.ShowErrorMessage("CABeginOperation", iRet);
				this.FetchSem.Release();
				return;
			}
			
			for (int k = 0; k < caIDList.iUIDCount; k++)
			{
				//if (owner != null && !quiet)
				//	Dispatcher.BeginInvoke(new VoidString(owner.IncBarPosition), "Loading" /*+ " " + this.Name*/);

				if (owner != null)
				{
					Dispatcher.Invoke(new SyncProgressEventHandler(owner.Progress), this,
						"Loading " + "(" + syncEngine.CurrentItemNum + "/" + syncEngine.CurrentTotal + ")",
						syncEngine.CurrentItemNum, syncEngine.CurrentTotal);
					syncEngine.CurrentItemNum++;
				}

				DAContentAccessDefinitions.CA_ITEM_ID UID = GetUidFromBuffer(k, caIDList.pUIDs);
				CADataDefinitions.CA_DATA_CONTACT dataContact = new CADataDefinitions.CA_DATA_CONTACT();
				ReadContact(UID, ref dataContact);
				PIMPersonalInfo pimData = new PIMPersonalInfo();
				PIMNumbers numData = new PIMNumbers();
				IList<PIMAddresses> adrData = new List<PIMAddresses>();

				for (int i = 0; i < dataContact.bPICount; i++)
				{
					Int64 iPtr = dataContact.pPIFields.ToInt64() + i * Marshal.SizeOf(typeof(CADataDefinitions.CA_DATA_ITEM));
					IntPtr ptr = new IntPtr(iPtr);
					CADataDefinitions.CA_DATA_ITEM itemData;
					itemData = (CADataDefinitions.CA_DATA_ITEM)Marshal.PtrToStructure(ptr, typeof(CADataDefinitions.CA_DATA_ITEM));
					if (itemData.iFieldType == CADataDefinitions.CA_FIELD_TYPE_CONTACT_PI)
						ReadPersonalInfo(pimData, itemData);
				}

				for (int i = 0; i < dataContact.bNumberCount; i++)
                {
                    Int64 iPtr = dataContact.pNumberFields.ToInt64() + i * Marshal.SizeOf(typeof(CADataDefinitions.CA_DATA_ITEM));
                    IntPtr ptr = new IntPtr(iPtr);
                    CADataDefinitions.CA_DATA_ITEM itemData;
                    itemData = (CADataDefinitions.CA_DATA_ITEM)Marshal.PtrToStructure(ptr, typeof(CADataDefinitions.CA_DATA_ITEM));
					if (itemData.iFieldType == CADataDefinitions.CA_FIELD_TYPE_CONTACT_NUMBER)
						ReadNumbers(numData, itemData);
                }

				for (int i = 0; i < dataContact.bAddressCount; i++)
				{
					Int64 iPtr = dataContact.pAddressFields.ToInt64() + i * Marshal.SizeOf(typeof(CADataDefinitions.CA_DATA_ITEM));
					IntPtr ptr = new IntPtr(iPtr);
					CADataDefinitions.CA_DATA_ITEM itemData;
					itemData = (CADataDefinitions.CA_DATA_ITEM)Marshal.PtrToStructure(ptr, typeof(CADataDefinitions.CA_DATA_ITEM));
					if (itemData.iFieldType == CADataDefinitions.CA_FIELD_TYPE_CONTACT_ADDRESS)
					{
						PIMAddresses a = new PIMAddresses();
                        if (false)
                        {
                            ReadAddresses(a, itemData);
                            adrData.Add(a);
                        }
                        
					}

					if (itemData.iFieldSubType == CADataDefinitions.CA_FIELD_SUB_TYPE_POSTAL |
						itemData.iFieldSubType == CADataDefinitions.CA_FIELD_SUB_TYPE_POSTAL_BUSINESS |
						itemData.iFieldSubType == CADataDefinitions.CA_FIELD_SUB_TYPE_POSTAL_PRIVATE)
					{
					}
				}

				Contact contact = GetCanonicalContact(pimData, numData, adrData);
				contactsByFullName[contact.FullName] = contact;
				mans.Add(new Man { FullName = contact.FullName, EMail = contact.EMail, Phone = contact.Phone });
				
			}
			iRet = DAContentAccess.CAEndOperation(hOperHandle);
			if (iRet != PCCSErrors.CONA_OK)
			{
				//PCCAPIUtils.ShowErrorMessage("CAEndOperation", iRet);
				//syncEngine.CancelSync(PCCAPIUtils.CONAError2String(iRet));

				Dispatcher.Invoke(new SyncCancelEventHandler(owner.CancelSync),
						this, PCCAPIUtils.CONAError2String(iRet), null);

				this.FetchSem.Release();
				return;
			}
			
			CloseContactsConnection();

			//iRet = DAContentAccess.CAFreeIdListStructure(buf);
			//if (iRet != PCCSErrors.CONA_OK)
			//{
			//    PCCAPIUtils.ShowErrorMessage("CAFreeIdListStructure", iRet);
			//}
			Marshal.FreeHGlobal(buf);

			this.FetchSem.Release();
		}
		public void ReadAddresses(PIMAddresses a, CADataDefinitions.CA_DATA_ITEM pimData)
		{
			CADataDefinitions.CA_DATA_POSTAL_ADDRESS postal;
			postal = (CADataDefinitions.CA_DATA_POSTAL_ADDRESS)Marshal.PtrToStructure(pimData.pCustomData, typeof(CADataDefinitions.CA_DATA_POSTAL_ADDRESS));
						
			if (pimData.iFieldSubType == CADataDefinitions.CA_FIELD_SUB_TYPE_POSTAL)
            {
                a.Postal = Marshal.PtrToStringUni(pimData.pCustomData);
            }
            else if (pimData.iFieldSubType == CADataDefinitions.CA_FIELD_SUB_TYPE_POSTAL_BUSINESS)
            {
                a.Business = Marshal.PtrToStringUni(pimData.pCustomData);
            }
            else if (pimData.iFieldSubType == CADataDefinitions.CA_FIELD_SUB_TYPE_POSTAL_PRIVATE)
            {
				a.Private = Marshal.PtrToStringUni(pimData.pCustomData);
			}

			a.City = postal.pstrCity;
			a.Country = postal.pstrCountry;
			a.POBox = postal.pstrPOBox;
			a.PostalCode = postal.pstrPostalCode;
			a.State = postal.pstrState;
			a.Street = postal.pstrStreet;

		}