From 0f855c5d57f952d2aae11759a60de90146e03c68 Mon Sep 17 00:00:00 2001
From: Steve Brokenshire <sbrokenshire@xestia.co.uk>
Date: Fri, 9 Oct 2015 10:09:58 +0100
Subject: [PATCH] Split frmContactEditor-Load.cpp into 24 files to make it more
 manageable.

---
 .../contacteditor/frmContactEditor-Load.cpp   | 6929 +----------------
 .../frmContactEditor-LoadAddress.cpp          |  439 ++
 .../frmContactEditor-LoadBADays.cpp           |  283 +
 .../frmContactEditor-LoadCalendar.cpp         |  367 +
 .../frmContactEditor-LoadCategory.cpp         |  440 ++
 .../frmContactEditor-LoadEmail.cpp            |  249 +
 .../frmContactEditor-LoadGender.cpp           |  121 +
 .../frmContactEditor-LoadGeo.cpp              |  348 +
 .../frmContactEditor-LoadGroup.cpp            |  208 +
 .../contacteditor/frmContactEditor-LoadIM.cpp |  324 +
 .../frmContactEditor-LoadKey.cpp              |  276 +
 .../frmContactEditor-LoadLanguage.cpp         |  229 +
 .../frmContactEditor-LoadLogo.cpp             |  249 +
 .../frmContactEditor-LoadName.cpp             |  399 +
 .../frmContactEditor-LoadNickname.cpp         |  237 +
 .../frmContactEditor-LoadNote.cpp             |  249 +
 .../frmContactEditor-LoadOrg.cpp              |  247 +
 .../frmContactEditor-LoadPhoto.cpp            |  275 +
 .../frmContactEditor-LoadRelated.cpp          |  265 +
 .../frmContactEditor-LoadRole.cpp             |  238 +
 .../frmContactEditor-LoadSound.cpp            |  275 +
 .../frmContactEditor-LoadTelephone.cpp        |  420 +
 .../frmContactEditor-LoadTimeZone.cpp         |  281 +
 .../frmContactEditor-LoadTitle.cpp            |  239 +
 .../frmContactEditor-LoadURL.cpp              |  235 +
 25 files changed, 7004 insertions(+), 6818 deletions(-)
 create mode 100644 source/contacteditor/frmContactEditor-LoadAddress.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadBADays.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadCalendar.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadCategory.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadEmail.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadGender.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadGeo.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadGroup.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadIM.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadKey.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadLanguage.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadLogo.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadName.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadNickname.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadNote.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadOrg.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadPhoto.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadRelated.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadRole.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadSound.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadTelephone.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadTimeZone.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadTitle.cpp
 create mode 100644 source/contacteditor/frmContactEditor-LoadURL.cpp

diff --git a/source/contacteditor/frmContactEditor-Load.cpp b/source/contacteditor/frmContactEditor-Load.cpp
index a13a7de..1ef92c4 100644
--- a/source/contacteditor/frmContactEditor-Load.cpp
+++ b/source/contacteditor/frmContactEditor-Load.cpp
@@ -199,6885 +199,178 @@ bool frmContactEditor::LoadContact(wxString Filename){
 		// Add the data into the contact editor depending on what it is.				
 		
 		if (wxSProperty == wxT("KIND") && KindProcessed == FALSE){
-
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
 		
-			if (wxSPropertySeg2 == wxT("individual")){
-			
-				cmbType->SetSelection(1);
-			
-			} else if (wxSPropertySeg2 == wxT("group")){
-			
-				cmbType->SetSelection(2);
-				IsGroup = TRUE;
-			
-			} else if (wxSPropertySeg2 == wxT("org")){
-			
-				cmbType->SetSelection(3);
-			
-			} else if (wxSPropertySeg2 == wxT("location")){
-			
-				cmbType->SetSelection(4);
-			
-			} else {
-			
-				cmbType->SetSelection(0);
-			
-			}
-			
-			wxCommandEvent nullevent;
-			
-			UpdateMembersTab(nullevent);
+			// See frmContactEditor-LoadGroup.cpp
+		
+			LoadKind(wxSPropertySeg2);
 		
 		} else if (wxSProperty == wxT("MEMBER")){
 
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-		
-			// Go through the list of contacts for the account and find the matching UID.
-			// If contact with UID doesn't match then say (unknown contact).
-			
-			wxString AccountDirFinal = GetAccountDir(wxSContactAccount, FALSE);
+			// See frmContactEditor-LoadGroup.cpp
 
-			//wxString vcardfilenamewxs;
-			wxString vCardFilename;
-			wxString vCardFilenameFull;
-			wxString vCardDataString;
-			//wxStringTokenizer vcardfileline;
-			wxString lwxs;
-			wxString setname, setvalue;
-			//vCardNames = new std::map<wxString, wxString, std::greater<wxString>>;
-			std::multimap<wxString, wxString, std::greater<wxString>> vCardNamesAsc;
-			std::multimap<wxString, wxString, std::less<wxString>> vCardNamesDsc;
-    
-			wxDir vcardaccdir(AccountDirFinal);
-    
-			bool ProcFiles = vcardaccdir.GetFirst(&vCardFilename, wxEmptyString, wxDIR_FILES);
-			while(ProcFiles){
-    
-				if (vCardFilename.Right(4) == wxT(".vcf") || 
-				    vCardFilename.Right(4) == wxT(".VCF") || 
-				    vCardFilename.Right(5) == wxT(".vcard") || 
-				    vCardFilename.Right(5) == wxT(".VCARD")){
-	
-				    vCard Person;
+			LoadMember(wxSPropertySeg2, &GroupCount);		
 		
-				    vCardFilenameFull.Append(AccountDirFinal);
-				    vCardFilenameFull.Append(wxT("/"));
-				    vCardFilenameFull.Append(vCardFilename);
+		} else if (wxSProperty == wxT("FN")){
 		
-				    Person.LoadFile(vCardFilenameFull);
+			// See frmContactEditor-LoadName.cpp
 		
-				    if (wxSPropertySeg2.Left(9) == wxT("urn:uuid:")){
+			LoadFN(wxSPropertySeg1, wxSPropertySeg2, &FNCount, &FNProcessed, &ContactData);
 		
-					wxString NewPropValue;
-					NewPropValue = wxSPropertySeg2.Mid(9, wxString::npos);
-					wxSPropertySeg2 = NewPropValue;
-
-				    }
+		} else if (wxSProperty == wxT("N") && NameProcessed == FALSE){
 		
-				    if (Person.MeetBaseSpecification()){
-	
-					wxString KindStatus = Person.Get(wxT("KIND"));
+			// See frmContactEditor-LoadName.cpp
 		
-					if (KindStatus == wxT("group")){
+			LoadN(wxSPropertySeg1, wxSPropertySeg2, &NameProcessed, &ContactData);
 		
-						vCardFilename.Clear();
-						vCardFilenameFull.Clear();
-						vCardDataString.Clear();
-						ProcFiles = vcardaccdir.GetNext(&vCardFilename);
-						continue;
+		} else if (wxSProperty == wxT("NICKNAME")){
+			
+			// See frmContactEditor-LoadNickname.cpp
+			
+			LoadNickname(wxSPropertySeg1, wxSPropertySeg2, &NicknameCount, &ContactData);
+			
+		} else if (wxSProperty == wxT("GENDER") && GenderProcessed == FALSE){
 		
-					}
+			// See frmContactEditor-LoadGender.cpp
 		
-					wxString PersonName = Person.Get(wxT("N"));
-					wxString PersonUID = Person.Get(wxT("UID"));
-					wxString PersonFilename = vCardFilenameFull;
-					
-					if (PersonUID != wxSPropertySeg2){
-					
-						vCardFilename.Clear();
-						vCardFilenameFull.Clear();
-						vCardDataString.Clear();
-						ProcFiles = vcardaccdir.GetNext(&vCardFilename);
-						continue;
-					
-					}
+			LoadGender(wxSPropertySeg1, wxSPropertySeg2, &GenderProcessed, &ContactData);
 		
-					//ContactsNames.insert(std::make_pair(PersonName, ContactIndex));
-					//ContactsUIDs.insert(std::make_pair(ContactIndex, PersonUID));
-	
-					if (XVMData.SortMode == 1){
+		} else if (wxSProperty == wxT("BDAY") && BirthdayProcessed == FALSE){
 
-					    // Split the name into sections.
-			
-					    vCardDataString = Person.Get(wxT("N"));
+			// See frmContactEditor-LoadBADays.cpp
 
-					    vCardName NameData = Person.GetName();
-		    
-					    vCardDataString = NameData.Forename + wxT(" ") + NameData.Surname;
-		    
-					} else if (XVMData.SortMode == 2){
-		    
-					    // Split the name into sections.
-		    
-					    vCardName NameData = Person.GetName();    
-		    
-					    vCardDataString = NameData.Surname + wxT(", ") + NameData.Forename;
-		    
-					} else if (XVMData.SortMode == 3){
-		    
-					    // Check and make sure that the top most nickname is used.
-		    
-					    vCardDataString = Person.Get(wxT("NICKNAME"));
-		    
-					    if (vCardDataString.IsEmpty()){
-			
-						vCardDataString = wxT("(no nickname)");
-			
-					    }
-		    
-					} else if (XVMData.SortMode == 4){
-		    
-					    vCardDataString = Person.Get(wxT("FN"));
-		    
-					}
-	
-					if (XVMData.AscendingMode == TRUE){
-					    vCardNamesAsc.insert(std::make_pair(vCardDataString, PersonUID));
-					} else {
-					    vCardNamesDsc.insert(std::make_pair(vCardDataString, PersonUID));
-					}
+			LoadBDay(wxSPropertySeg1, wxSPropertySeg2, &BirthdayProcessed);
 		
-				    } else {
-	
-				    }
-	    
-	    
-	
-				}
-	
-				vCardFilename.Clear();
-				vCardFilenameFull.Clear();
-				vCardDataString.Clear();
-				ProcFiles = vcardaccdir.GetNext(&vCardFilename);
-	
-			    }
-    
-			    if (XVMData.AscendingMode == TRUE){
-	     
-				for (std::map<wxString,wxString>::iterator iter = vCardNamesAsc.begin(); 
-				iter != vCardNamesAsc.end(); ++iter){
-
-					wxListItem ItemData;
-					
-					ItemData.SetId(0);
-					ItemData.SetText(iter->first);
+		} else if (wxSProperty == wxT("ANNIVERSARY") && AnniversaryProcessed == FALSE){
 			
-					lboGroups->InsertItem(ItemData);
-					
-					GroupsList.insert(std::make_pair(intValueSeek, iter->second));
+			// See frmContactEditor-LoadBADays.cpp
 			
-				}
+			LoadAnniversary(wxSPropertySeg1, wxSPropertySeg2, &AnniversaryProcessed);
 		
+		} else if (wxSProperty == wxT("TZ")){
 		
-			    } else {
+			// See frmContactEditor-LoadTimeZone.cpp
 		
-				for (std::map<wxString,wxString>::iterator iter = vCardNamesDsc.begin(); 
-				iter != vCardNamesDsc.end(); ++iter){
-
-					wxListItem ItemData;
-					
-					ItemData.SetId(0);
-					ItemData.SetText(iter->first);
-			
-					lboGroups->InsertItem(ItemData);
-
-					GroupsList.insert(std::make_pair(intValueSeek, iter->second));
-
-				}
-
-			    }
+			LoadTimeZone(wxSPropertySeg1, wxSPropertySeg2, &TZCount);	
+		
+		} else if (wxSProperty == wxT("ADR")){
 			
-			GroupCount++;
-			intValueSeek++;
+			// See frmContactEditor-LoadAddress.cpp
 		
-		} else if (wxSProperty == wxT("FN")){
+			LoadADR(wxSPropertySeg1, wxSPropertySeg2, &ADRCount);
 		
-			/*
+		} else if (wxSProperty == wxT("EMAIL")){
 		
-			NameDisplayAs = wxSPropertySeg2;
-			cmbDisplayAs->SetValue(ContactData.Convert(wxSPropertySeg2, TRUE));
-			
-			*/
-			
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;			
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 4;
-			int intPref = 0;			
-			int intType = 0;
+			// See frmContactEditor-LoadEmail.cpp
 			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 3;
+			LoadEmail(wxSPropertySeg1, wxSPropertySeg2, &EmailCount);	
+		
+		} else if (wxSProperty == wxT("IMPP")){
+		
+			// See frmContactEditor-LoadIM.cpp
+		
+			LoadIM(wxSPropertySeg1, wxSPropertySeg2, &IMPPCount);
+		
+		} else if (wxSProperty == wxT("TEL")){
+		
+			// See frmContactEditor-LoadTelephone.cpp
+		
+			LoadTelephone(wxSPropertySeg1, wxSPropertySeg2, &TelCount);
+		
+		} else if (wxSProperty == wxT("LANG")){
+		
+			// See frmContactEditor-LoadLanguage.cpp
 			
-			// Look for type before continuing.		
+			LoadLanguage(wxSPropertySeg1, wxSPropertySeg2, &LangCount);
+		
+		} else if (wxSProperty == wxT("GEO")){
+		
+			// See frmContactEditor-LoadGeo.cpp
 			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
+			LoadGeo(wxSPropertySeg1, wxSPropertySeg2, &GeoCount);	
+		
+		} else if (wxSProperty == wxT("RELATED")){
 			
-				SLiter = SplitLength.find(intiter->first);
+			// See fromContactEditor-LoadRelated.cpp
 			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
+			LoadRelated(wxSPropertySeg1, wxSPropertySeg2, &RelatedCount);		
+		
+		} else if (wxSProperty == wxT("URL")){
 
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
+			// See frmContactEditor-LoadURL.cpp
+		
+			LoadURL(wxSPropertySeg1, wxSPropertySeg2, &URLCount);
+		
+		} else if (wxSProperty == wxT("TITLE")) {
+		
+			// See frmContactEditor-LoadTitle.cpp
 			
-			}
+			LoadTitle(wxSPropertySeg1, wxSPropertySeg2, &TitleCount);
 			
-			// Setup blank lines for later on.
+		} else if (wxSProperty == wxT("ROLE")) {
 
-			FullNamesList.insert(std::make_pair(intValueSeek, wxT("")));
-			FullNamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-			FullNamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
-			FullNamesListPref.insert(std::make_pair(intValueSeek, 0));
-			FullNamesListType.insert(std::make_pair(intValueSeek, wxT("")));
-			FullNamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-			FullNamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));		
-			
-			intPrevValue = 3;
+			// See frmContactEditor-LoadRole.cpp
+		
+			LoadRole(wxSPropertySeg1, wxSPropertySeg2, &RoleCount);
 			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
+		} else if (wxSProperty == wxT("ORG")) {
+		
+			// See frmContactEditor-LoadOrg.cpp
 			
-				SLiter = SplitLength.find(intiter->first);
+			LoadOrg(wxSPropertySeg1, wxSPropertySeg2, &OrgCount);
 			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				ProcessCaptureStrings(&PropertyValue);
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				if (PropertyName == wxT("ALTID")){
-
-					FullNamesListAltID.erase(intValueSeek); FullNamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else if (PropertyName == wxT("PID")){
+		} else if (wxSProperty == wxT("NOTE")) {
 
-					FullNamesListPID.erase(intValueSeek); FullNamesListPID.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-					
-					if (intPref > 0 && intPref < 101){
-				
-						FullNamesListPref.erase(intValueSeek); FullNamesListPref.insert(std::make_pair(intValueSeek, intPref));
-						
-					}
-				
-				} else if (PropertyName == wxT("LANG")){
+			// See frmContactEditor-LoadNote.cpp
 
-					FullNamesListLanguage.erase(intValueSeek); FullNamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-					
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-					
-						if (FirstToken == TRUE){
-						
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-						
-						} else {
-						
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-						
-						}
-					
-					}
-				
-				}
-			
-			}			
-			
-			// Split the address. 		
-		
-			//std::map<int, int>::iterator SLiter;
-			intPropertyLen = wxSPropertySeg2.Len();
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitsFound = 0;
-			intSplitSize = 0;
-			intPrevValue = 0;
+			LoadNote(wxSPropertySeg1, wxSPropertySeg2, &NoteCount);	
 			
-			for (int i = 0; i <= intPropertyLen; i++){
+		} else if (wxSProperty == wxT("CATEGORIES")) {
 		
-				intSplitSize++;
-			
-				if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-			
-					intSplitsFound++;
-					SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-					
-					if (intSplitsFound == 1){ 
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-						break; 
-						
-					}
-					
-					intSplitSize = 0;					
-			
-				}
+			// See frmContactEditor-LoadCategory.cpp
 		
-			}			
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			/*
+			LoadCategory(wxSPropertySeg1, wxSPropertySeg2, &CategoryCount);	
 			
-			wxListItem coldata;
+		} else if (wxSProperty == wxT("PHOTO")) {
 		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(IMPPType);
-			
-			*/
-			
-			//ProcessCaptureStrings(wxsPropertySeg2);
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);
-			
-			FullNamesList.erase(intValueSeek);
-			FullNamesListType.erase(intValueSeek);
-			FullNamesListTokens.erase(intValueSeek);
-			FullNamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-			FullNamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			if (intType == 0){
-			
-				FullNamesListType.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 1){
-			
-				FullNamesListType.insert(std::make_pair(intValueSeek, wxT("home")));			
-			
-			} else if (intType == 2){
-			
-				FullNamesListType.insert(std::make_pair(intValueSeek, wxT("work")));			
-			
-			}
-			
-			if (FNProcessed == FALSE){
-			
-				NameDisplayAs = wxSPropertySeg2;
-				cmbDisplayAs->SetValue(ContactData.Convert(wxSPropertySeg2, TRUE));
-				FNProcessed = TRUE;
-				
-			}
+			// See frmContactEditor-LoadPhoto.cpp
 			
-			/*if (intType == 0){
-			
-				ListCtrlIndex = lboIM->InsertItem(coldata);
-				
-				lboIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-					
-				}				
-				
-				GeneralIMList.erase(intValueSeek);
-				GeneralIMListType.erase(intValueSeek);
-				GeneralIMListTokens.erase(intValueSeek);
-				GeneralIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				GeneralIMListType.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 1){ 
-			
-				ListCtrlIndex = lboHomeIM->InsertItem(coldata);
-
-				lboHomeIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				HomeIMList.erase(intValueSeek);
-				HomeIMListType.erase(intValueSeek);
-				HomeIMListTokens.erase(intValueSeek);				
-				HomeIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				HomeIMListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				HomeIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 2){ 
-			
-				ListCtrlIndex = lboBusinessIM->InsertItem(coldata);
+			LoadPhoto(wxSPropertySeg1, wxSPropertySeg2, &PhotoCount);
 
-				lboBusinessIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				BusinessIMList.erase(intValueSeek);
-				BusinessIMListType.erase(intValueSeek);
-				BusinessIMListTokens.erase(intValueSeek);				
-				BusinessIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				BusinessIMListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				BusinessIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
-			
-			}*/
-			
-			FNCount++;
-			intValueSeek++;				
+		} else if (wxSProperty == wxT("LOGO")) {
 		
-		} else if (wxSProperty == wxT("N") && NameProcessed == FALSE){
+			// See frmContactEditor-LoadLogo.cpp
 		
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;			
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 3;
-			int intSplitSeek = 0;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			// Look for type before continuing.		
-			
-			intPrevValue = 2;			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-			
-			}
-			
-			intPrevValue = 2;
+			LoadLogo(wxSPropertySeg1, wxSPropertySeg2, &LogoCount);
 			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
+		} else if (wxSProperty == wxT("SOUND")) {
+		
+			// See frmContactEditor-LoadSound.cpp
 			
-				SLiter = SplitLength.find(intiter->first);
+			LoadSound(wxSPropertySeg1, wxSPropertySeg2, &SoundCount);
 			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				ProcessCaptureStrings(&PropertyValue);
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				if (PropertyName == wxT("ALTID")){
-
-					NameAltID = PropertyValue;
-				
-				} else if (PropertyName == wxT("LANG")){
+		} else if (wxSProperty == wxT("CALURI")){
 
-					NameLanguage = PropertyValue;
-				
-				} else if (PropertyName == wxT("SORT-AS")){
-				
-					NameDisplayAs = PropertyValue;
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-					
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
-					
-						if (FirstToken == TRUE){
-						
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-						
-						} else {
-						
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-						
-						}
-					
-					}
-				
-				}
+			// See frmContactEditor-LoadCalendar.cpp
 			
-			}
-			
-			intPropertyLen = wxSPropertySeg2.Len();
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitSeek = 0;		
-			intSplitsFound = 0;
-			intSplitSize = 0;
-			intPrevValue = 0;					
-			
-			for (int i = 0; i <= intPropertyLen; i++){
+			LoadCalURI(wxSPropertySeg1, wxSPropertySeg2, &CalAdrCount);
 		
-				intSplitSize++;
-			
-				if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-			
-					intSplitsFound++;
-					SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-					
-					if (intSplitsFound == 4){ 
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-						break; 
-						
-					} else {
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-					
-					}
-					
-					intSplitSize = 0;					
+		} else if (wxSProperty == wxT("CALADRURI")){
+
+			// See frmContactEditor-LoadCalendar.cpp
 			
-				}
+			LoadCalAdrURI(wxSPropertySeg1, wxSPropertySeg2, &CalReqAdrCount);
 		
-			}
-			
-			// Split the data into several parts.
-					
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				if (intiter->first == 1){
-				
-					// Deal with family name.
-					
-					SLiter = SplitLength.find(1);
-										
-					txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
-					
-					intPrevValue = intiter->second;
-					NameSurname = wxSPropertySeg2.Mid(0, SLiter->second);					
-				
-				} else if (intiter->first == 2){
-				
-					// Deal with given names.
-					
-					SLiter = SplitLength.find(2);
-										
-					txtForename->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-					intPrevValue = intiter->second;
-					NameForename = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-				
-				} else if (intiter->first == 3){
-				
-					// Deal with additional names.
-					
-					SLiter = SplitLength.find(3);
-										
-					txtOtherNames->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-					intPrevValue = intiter->second;
-					NameOtherNames = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-				
-				} else if (intiter->first == 4){
-				
-					// Deal with honorifix prefixes and suffixes.
+		} else if (wxSProperty == wxT("FBURL")){
 
-					SLiter = SplitLength.find(4);
-										
-					txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-					intPrevValue = intiter->second;
-					NameTitle = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-				
-					txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
-					NameSuffix = wxSPropertySeg2.Mid(intPrevValue);
-				
-				}
-			
-			}
-			
-			NameTokens = PropertyTokens;
-			NameProcessed = TRUE;
+			// See frmContactEditor-LoadCalendar.cpp
+
+			LoadCalFreeBusy(wxSPropertySeg1, wxSPropertySeg2, &FreeBusyCount);
+
+		} else if (wxSProperty == wxT("KEY")){
 		
-		} else if (wxSProperty == wxT("NICKNAME")){
+			// See frmContactEditor-LoadKey.cpp
 			
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intPrevValue = 10;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-
-			intPrevValue = 9;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			if (intType == 0){
-			
-				GeneralNicknamesList.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralNicknamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralNicknamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralNicknamesListPref.insert(std::make_pair(intValueSeek, 0));
-				GeneralNicknamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralNicknamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-
-			} else if (intType == 1){
-			
-				HomeNicknamesList.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeNicknamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeNicknamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeNicknamesListPref.insert(std::make_pair(intValueSeek, 0));
-				HomeNicknamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeNicknamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));				
-			
-			} else if (intType == 2){
-
-				BusinessNicknamesList.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessNicknamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessNicknamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessNicknamesListPref.insert(std::make_pair(intValueSeek, 0));
-				BusinessNicknamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessNicknamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));				
-			
-			}
-			
-			intPrevValue = 9;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				ProcessCaptureStrings(&PropertyValue);
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}				
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ GeneralNicknamesListAltID.erase(intValueSeek); GeneralNicknamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeNicknamesListAltID.erase(intValueSeek); HomeNicknamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessNicknamesListAltID.erase(intValueSeek); BusinessNicknamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ GeneralNicknamesListPID.erase(intValueSeek); GeneralNicknamesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeNicknamesListPID.erase(intValueSeek); HomeNicknamesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessNicknamesListPID.erase(intValueSeek); BusinessNicknamesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intType == 0){ GeneralNicknamesListPref.erase(intValueSeek); GeneralNicknamesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 1){ HomeNicknamesListPref.erase(intValueSeek); HomeNicknamesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 2){ BusinessNicknamesListPref.erase(intValueSeek); BusinessNicknamesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-				
-				} else if (PropertyName == wxT("LANGUAGE")){
-				
-					if (intType == 0){ GeneralNicknamesListLanguage.erase(intValueSeek); GeneralNicknamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeNicknamesListLanguage.erase(intValueSeek); HomeNicknamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessNicknamesListLanguage.erase(intValueSeek); BusinessNicknamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-				
-						if (FirstToken == TRUE){
-					
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-					
-						} else {
-					
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-					
-						}
-				
-					}
-				
-				}
-			
-			}
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(wxSPropertySeg2);
-			
-			if (intType == 0){
-			
-				ListCtrlIndex = lboNicknames->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboNicknames->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				GeneralNicknamesList.erase(intValueSeek);
-				GeneralNicknamesListType.erase(intValueSeek);
-				GeneralNicknamesListTokens.erase(intValueSeek);
-				GeneralNicknamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				GeneralNicknamesListType.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralNicknamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 1){ 
-			
-				ListCtrlIndex = lboHomeNicknames->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeNicknames->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				HomeNicknamesList.erase(intValueSeek);
-				HomeNicknamesListType.erase(intValueSeek);
-				HomeNicknamesListTokens.erase(intValueSeek);				
-				HomeNicknamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				HomeNicknamesListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				HomeNicknamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 2){ 
-			
-				ListCtrlIndex = lboBusinessNicknames->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessNicknames->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				BusinessNicknamesList.erase(intValueSeek);
-				BusinessNicknamesListType.erase(intValueSeek);
-				BusinessNicknamesListTokens.erase(intValueSeek);				
-				BusinessNicknamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				BusinessNicknamesListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				BusinessNicknamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
-			
-			}
-		
-			NicknameCount++;
-			intValueSeek++;	
-			
-		} else if (wxSProperty == wxT("GENDER") && GenderProcessed == FALSE){
-		
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;;
-			int intPrevValue = 8;
-		
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 7;			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}				
-				
-				if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
-		
-					if (FirstToken == TRUE){
-			
-						PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-						FirstToken = FALSE;
-			
-					} else {
-			
-						PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-			
-					}
-		
-				}
-			
-			}	
-		
-			wxStringTokenizer GenderDetails (wxSPropertySeg2, wxT(";"));
-			
-			wxString GenderComponent;
-			wxString GenderIdentity;
-			
-			if (GenderDetails.CountTokens() >= 2){
-			
-				GenderComponent = GenderDetails.GetNextToken();
-				GenderIdentity = GenderDetails.GetString();
-			
-				ProcessCaptureStrings(&GenderIdentity);
-			
-				txtGenderDescription->SetValue(ContactData.Convert(GenderIdentity, TRUE));
-								
-			} else {
-			
-				GenderComponent = GenderDetails.GetNextToken();
-			
-			}
-				
-			if (GenderComponent == wxT("M")){
-				
-				// Gender is Male.
-					
-				cmbGender->SetSelection(1);
-				
-			} else if (GenderComponent == wxT("F")){
-				
-				// Gender is Female.
-					
-				cmbGender->SetSelection(2);					
-				
-			} else if (GenderComponent == wxT("O")){
-				
-				// Gender is Other.
-					
-				cmbGender->SetSelection(3);
-				
-			} else if (GenderComponent == wxT("N")){
-				
-				// Gender is None/Not Applicable.
-				
-				cmbGender->SetSelection(4);					
-				
-			} else if (GenderComponent == wxT("U")){
-				
-				// Gender is Unknown.
-					
-				cmbGender->SetSelection(5);					
-				
-			}
-			
-			GenderTokens = PropertyTokens;
-			GenderProcessed = TRUE;
-		
-		} else if (wxSProperty == wxT("BDAY") && BirthdayProcessed == FALSE){
-
-			// Process date. Preserve the remainder in the string.
-				
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool BirthdayText = FALSE;
-			int intPrevValue = 6;
-		
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-		
-			intPrevValue = 5;
-		
-			// Look for type before continuing.
-		
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-		
-				SLiter = SplitLength.find(intiter->first);
-		
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
-			
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-			
-				intPrevValue = intiter->second;
-			
-				if (PropertyName == wxT("VALUE") && PropertyValue == wxT("text") && BirthdayText == FALSE){
-			
-					ProcessCaptureStrings(&wxSPropertySeg2);
-					txtBirthday->SetValue(wxSPropertySeg2);
-					Birthday = wxSPropertySeg2;
-					BirthdayText = TRUE;
-			
-				}
-		
-			}
-		
-			// Setup blank lines for later on.
-			
-			intPrevValue = 5;
-		
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-		
-				SLiter = SplitLength.find(intiter->first);
-		
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
-			
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-			
-				intPrevValue = intiter->second;
-			
-				// Process properties.
-			
-				ProcessCaptureStrings(&PropertyValue);
-			
-				size_t intPropertyValueLen = PropertyValue.Len();
-			
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-				
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-				
-				}				
-			
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-				
-					PropertyValue.Remove(0, 1);
-				
-				}				
-			
-				if (PropertyName == wxT("ALTID")){
-
-					BirthdayAltID = PropertyValue;
-			
-				} else if (PropertyName == wxT("CALSCALE")){
-			
-					BirthdayCalScale = PropertyValue;
-			
-				} else if (PropertyName != wxT("VALUE")) {
-			
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
-				
-						PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-						
-					}
-					
-				}
-		
-			}	
-		
-			// Add the data to the variables and form.
-			
-			if (BirthdayText == FALSE){
-			
-				Birthday = wxSPropertySeg2;
-				int DateYear = 0;
-				wxDateTime::Month DateMonth;
-				unsigned int DateDay;
-				
-				wxString wxSData;
-				
-				if (Birthday.Mid(0, 2) == wxT("--")){
-				
-					// Skip year.
-				
-				} else {
-				
-					DateYear = wxAtoi(Birthday.Mid(0,4));
-				
-				}
-				
-				DateMonth = (wxDateTime::Month)(wxAtoi(Birthday.Mid(4,2)) - 1);
-				DateDay = wxAtoi(Birthday.Mid(6,2));
-			
-				wxDateTime BDayDate(DateDay,DateMonth,DateYear);
-			
-				/*BDayDate.SetDay(DateDay);
-				BDayDate.SetMonth(wxDateTime::Month::Jan);
-				BDayDate.SetYear(DateYear);*/
-			
-				dapBirthday->SetValue(BDayDate);				
-			
-			}
-			
-			BirthdayTokens = PropertyTokens;
-			
-			BirthdayProcessed = TRUE;
-		
-		} else if (wxSProperty == wxT("ANNIVERSARY") && AnniversaryProcessed == FALSE){
-			
-			// Process date. Preserve the remainder in the string.
-				
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool AnniversaryText = FALSE;
-			int intPrevValue = 13;
-		
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-		
-			intPrevValue = 12;
-		
-			// Look for type before continuing.
-		
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-		
-				SLiter = SplitLength.find(intiter->first);
-		
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
-			
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-			
-				intPrevValue = intiter->second;
-			
-				if (PropertyName == wxT("VALUE") && PropertyValue == wxT("text") && AnniversaryText == FALSE){
-			
-					ProcessCaptureStrings(&wxSPropertySeg2);
-					txtAnniversary->SetValue(wxSPropertySeg2);
-					Anniversary = wxSPropertySeg2;
-					AnniversaryText = TRUE;
-			
-				}
-		
-			}
-		
-			// Setup blank lines for later on.
-		
-			intPrevValue = 12;
-		
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-		
-				SLiter = SplitLength.find(intiter->first);
-		
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
-			
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-			
-				intPrevValue = intiter->second;
-			
-				// Process properties.
-			
-				size_t intPropertyValueLen = PropertyValue.Len();
-			
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-				
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-				
-				}				
-			
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-				
-					PropertyValue.Remove(0, 1);
-				
-				}
-				
-				ProcessCaptureStrings(&PropertyValue);		
-			
-				if (PropertyName == wxT("ALTID")){
-
-					AnniversaryAltID = PropertyValue;
-			
-				} else if (PropertyName == wxT("CALSCALE")){
-			
-					AnniversaryCalScale = PropertyValue;
-			
-				} else if (PropertyName != wxT("VALUE")) {
-			
-					// Something else we don't know about so append
-					// to the tokens variable.
-					
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
-				
-						PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-						
-					}
-			
-				}
-		
-			}	
-		
-			// Add the data to the variables and form.
-			
-			if (AnniversaryText == FALSE){
-			
-				Anniversary = wxSPropertySeg2;
-				int DateYear = 0;
-				wxDateTime::Month DateMonth;
-				int DateDay;
-				
-				wxString wxSData;
-				
-				if (Anniversary.Mid(0, 2) == wxT("--")){
-				
-					// Skip year.
-				
-				} else {
-				
-					DateYear = wxAtoi(Anniversary.Mid(0,4));
-				
-				}
-				
-				DateMonth = (wxDateTime::Month)(wxAtoi(Anniversary.Mid(4,2)) - 1);
-				DateDay = wxAtoi(Anniversary.Mid(6,2));					
-			
-				wxDateTime ADayDate(DateDay,DateMonth,DateYear);
-			
-				dapAnniversary->SetValue(ADayDate);
-			
-			}
-			
-			AnniversaryTokens = PropertyTokens;
-			
-			AnniversaryProcessed = TRUE;
-		
-		} else if (wxSProperty == wxT("TZ")){
-		
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;			
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 4;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 3;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			if (intType == 0){
-			
-				GeneralTZList.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralTZListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralTZListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralTZListPref.insert(std::make_pair(intValueSeek, 0));
-				GeneralTZListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralTZListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-			} else if (intType == 1){
-			
-				HomeTZList.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeTZListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeTZListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeTZListPref.insert(std::make_pair(intValueSeek, 0));
-				HomeTZListMediatype.insert(std::make_pair(intValueSeek, wxT("")));				
-				HomeTZListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 2){
-
-				BusinessTZList.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessTZListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessTZListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessTZListPref.insert(std::make_pair(intValueSeek, 0));
-				BusinessTZListMediatype.insert(std::make_pair(intValueSeek, wxT("")));				
-				BusinessTZListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			}
-			
-			intPrevValue = 3;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}				
-				
-				ProcessCaptureStrings(&PropertyValue);
-				
-				// Process properties.
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ GeneralTZListAltID.erase(intValueSeek); GeneralTZListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeTZListAltID.erase(intValueSeek); HomeTZListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessTZListAltID.erase(intValueSeek); BusinessTZListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ GeneralTZListPID.erase(intValueSeek); GeneralTZListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeTZListPID.erase(intValueSeek); HomeTZListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessTZListPID.erase(intValueSeek); BusinessTZListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("MEDIATYPE")){
-				
-					if (intType == 0){ GeneralTZListMediatype.erase(intValueSeek); GeneralTZListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeTZListMediatype.erase(intValueSeek); HomeTZListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessTZListMediatype.erase(intValueSeek); BusinessTZListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intPref > 0 && intPref < 101){
-				
-						if (intType == 0){ GeneralTZListPref.erase(intValueSeek); GeneralTZListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						else if (intType == 1){ HomeTZListPref.erase(intValueSeek); HomeTZListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						else if (intType == 2){ BusinessTZListPref.erase(intValueSeek); BusinessTZListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					
-					}
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-					
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-					
-						if (FirstToken == TRUE){
-						
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-						
-						} else {
-						
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-						
-						}
-					
-					}
-				
-				}
-			
-			}			
-			
-			// Split the address. 
-		
-			//std::map<int, int>::iterator SLiter;
-			intPropertyLen = wxSPropertySeg2.Len();
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitsFound = 0;
-			intSplitSize = 0;
-			intPrevValue = 0;
-			
-			for (int i = 0; i <= intPropertyLen; i++){
-		
-				intSplitSize++;
-			
-				if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-			
-					intSplitsFound++;
-					SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-					
-					if (intSplitsFound == 6){ 
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-						break; 
-						
-					} else {
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-					
-					}
-					
-					intSplitSize = 0;					
-			
-				}
-		
-			}	
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);			
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(wxSPropertySeg2);
-			
-			if (intType == 0){
-			
-				ListCtrlIndex = lboTimezones->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				GeneralTZList.erase(intValueSeek);
-				GeneralTZListType.erase(intValueSeek);
-				GeneralTZListTokens.erase(intValueSeek);
-				GeneralTZList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				GeneralTZListType.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralTZListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 1){ 
-			
-				ListCtrlIndex = lboHomeTimezones->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				HomeTZList.erase(intValueSeek);
-				HomeTZListType.erase(intValueSeek);
-				HomeTZListTokens.erase(intValueSeek);				
-				HomeTZList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				HomeTZListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				HomeTZListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 2){ 
-			
-				ListCtrlIndex = lboBusinessTimezones->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				BusinessTZList.erase(intValueSeek);
-				BusinessTZListType.erase(intValueSeek);
-				BusinessTZListTokens.erase(intValueSeek);				
-				BusinessTZList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				BusinessTZListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				BusinessTZListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
-			
-			}
-		
-			TZCount++;
-			intValueSeek++;		
-		
-		} else if (wxSProperty == wxT("ADR")){
-			
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			wxString AddressLabel;
-			wxString AddressLang;
-			wxString AddressAltID;
-			wxString AddressPID;
-			wxString AddressTokens;
-			wxString AddressGeo;
-			wxString AddressTimezone;
-			wxString AddressType;
-			wxString AddressMediatype;
-			wxString AddressPOBox;
-			wxString AddressExtended;
-			wxString AddressStreet;
-			wxString AddressLocality;
-			wxString AddressCity;
-			wxString AddressRegion;
-			wxString AddressPostalCode;
-			wxString AddressCountry;
-			bool FirstToken = TRUE;			
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 5;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 4;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			if (intType == 0){
-			
-				GeneralAddressList.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralAddressListPref.insert(std::make_pair(intValueSeek, 0));
-				GeneralAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-			} else if (intType == 1){
-			
-				HomeAddressList.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeAddressListPref.insert(std::make_pair(intValueSeek, 0));
-				HomeAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 2){
-
-				BusinessAddressList.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessAddressListPref.insert(std::make_pair(intValueSeek, 0));
-				BusinessAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			}
-			
-			intPrevValue = 4;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				ProcessCaptureStrings(&PropertyValue);
-				
-				// Process properties.
-				
-				if (PropertyName == wxT("LABEL")){
-				
-					if (intType == 0){ GeneralAddressListLabel.erase(intValueSeek); GeneralAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeAddressListLabel.erase(intValueSeek); HomeAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessAddressListLabel.erase(intValueSeek); BusinessAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue));}
-				
-				} else if (PropertyName == wxT("LANGUAGE")){
-				
-					if (intType == 0){ GeneralAddressListLang.erase(intValueSeek); GeneralAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeAddressListLang.erase(intValueSeek); HomeAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessAddressListLang.erase(intValueSeek); BusinessAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }				
-				
-				} else if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ GeneralAddressListAltID.erase(intValueSeek); GeneralAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeAddressListAltID.erase(intValueSeek); HomeAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessAddressListAltID.erase(intValueSeek); BusinessAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ GeneralAddressListPID.erase(intValueSeek); GeneralAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeAddressListPID.erase(intValueSeek); HomeAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessAddressListPID.erase(intValueSeek); BusinessAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("GEO")){
-				
-					if (intType == 0){ GeneralAddressListGeo.erase(intValueSeek); GeneralAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeAddressListGeo.erase(intValueSeek); HomeAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessAddressListGeo.erase(intValueSeek); BusinessAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("TZ")){
-
-					if (intType == 0){ GeneralAddressListTimezone.erase(intValueSeek); GeneralAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeAddressListTimezone.erase(intValueSeek); HomeAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessAddressListTimezone.erase(intValueSeek); BusinessAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("MEDIATYPE")){
-
-					if (intType == 0){ GeneralAddressListMediatype.erase(intValueSeek); GeneralAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeAddressListMediatype.erase(intValueSeek); HomeAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessAddressListMediatype.erase(intValueSeek); BusinessAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-					
-					if (intPref > 0 && intPref < 101){
-								
-						if (intType == 0){ GeneralAddressListPref.erase(intValueSeek); GeneralAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						else if (intType == 1){ HomeAddressListPref.erase(intValueSeek); HomeAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						else if (intType == 2){ BusinessAddressListPref.erase(intValueSeek); BusinessAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						
-					}
-				
-				} else {
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-					
-						if (FirstToken == TRUE){
-						
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-						
-						} else {
-						
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-						
-						}
-					
-					}
-				
-				}
-			
-			}			
-			
-			// Split the address. 
-		
-			//std::map<int, int>::iterator SLiter;
-			intPropertyLen = wxSPropertySeg2.Len();
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitsFound = 0;
-			intSplitSize = 0;
-			intPrevValue = 0;
-			
-			for (int i = 0; i <= intPropertyLen; i++){
-		
-				intSplitSize++;
-			
-				if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-			
-					intSplitsFound++;
-					SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-					
-					if (intSplitsFound == 6){ 
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-						break; 
-						
-					} else {
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-					
-					}
-					
-					intSplitSize = 0;					
-			
-				}
-		
-			}
-			
-			// Split the data into several parts.			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-					
-				if (intiter->first == 1){
-				
-					// Deal with PO Box.
-					
-					SLiter = SplitLength.find(1);
-										
-					//txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
-					AddressPOBox = wxSPropertySeg2.Mid(0, SLiter->second);
-					intPrevValue = intiter->second;
-				
-				} else if (intiter->first == 2){
-				
-					// Deal with extended address.
-					
-					SLiter = SplitLength.find(2);
-					
-					AddressExtended = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-					//txtForename->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-					intPrevValue = intiter->second;
-				
-				} else if (intiter->first == 3){
-				
-					// Deal with street address.
-					
-					SLiter = SplitLength.find(3);
-										
-					AddressStreet = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-					//txtOtherNames->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-					intPrevValue = intiter->second;
-				
-				} else if (intiter->first == 4){
-				
-					// Deal with locality
-
-					SLiter = SplitLength.find(4);
-					
-					AddressLocality = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-					//txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-					intPrevValue = intiter->second;
-					
-					//txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
-				
-				} else if (intiter->first == 5){
-				
-					// Deal with region.
-
-					SLiter = SplitLength.find(5);
-					
-					AddressRegion = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-					//txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-					intPrevValue = intiter->second;
-					
-					//txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
-				
-				} else if (intiter->first == 6){
-				
-					// Deal with post code.
-
-					SLiter = SplitLength.find(6);
-					
-					AddressPostalCode = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
-					//txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
-					intPrevValue = intiter->second;
-					
-					// Deal with country.
-					
-					AddressCountry = wxSPropertySeg2.Mid(intPrevValue);
-					//txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
-				
-				}
-			
-			}	
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			ProcessCaptureStrings(&AddressStreet, &AddressLocality, &AddressRegion, &AddressPostalCode, &AddressCountry);
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(AddressStreet);
-			
-			if (intType == 0){
-			
-				ListCtrlIndex = lboAddresses->InsertItem(coldata);
-				lboAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
-				lboAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
-				lboAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboAddresses->SetItem(ListCtrlIndex, 4, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				GeneralAddressList.erase(intValueSeek);
-				GeneralAddressListTown.erase(intValueSeek);
-				GeneralAddressListCounty.erase(intValueSeek);
-				GeneralAddressListPostCode.erase(intValueSeek);
-				GeneralAddressListCountry.erase(intValueSeek);
-				GeneralAddressListType.erase(intValueSeek);
-				GeneralAddressListTokens.erase(intValueSeek);
-				GeneralAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
-				GeneralAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
-				GeneralAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
-				GeneralAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
-				GeneralAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
-				GeneralAddressListType.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 1){ 
-			
-				ListCtrlIndex = lboHomeAddresses->InsertItem(coldata);
-				lboHomeAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
-				lboHomeAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
-				lboHomeAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeAddresses->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				HomeAddressList.erase(intValueSeek);
-				HomeAddressListTown.erase(intValueSeek);
-				HomeAddressListCounty.erase(intValueSeek);
-				HomeAddressListPostCode.erase(intValueSeek);
-				HomeAddressListCountry.erase(intValueSeek);
-				HomeAddressListType.erase(intValueSeek);
-				HomeAddressListTokens.erase(intValueSeek);				
-				HomeAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
-				HomeAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
-				HomeAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
-				HomeAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
-				HomeAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
-				HomeAddressListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				HomeAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 2){ 
-			
-				ListCtrlIndex = lboBusinessAddresses->InsertItem(coldata);
-				lboBusinessAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
-				lboBusinessAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
-				lboBusinessAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessAddresses->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				BusinessAddressList.erase(intValueSeek);
-				BusinessAddressListTown.erase(intValueSeek);
-				BusinessAddressListCounty.erase(intValueSeek);
-				BusinessAddressListPostCode.erase(intValueSeek);
-				BusinessAddressListCountry.erase(intValueSeek);
-				BusinessAddressListType.erase(intValueSeek);
-				BusinessAddressListTokens.erase(intValueSeek);
-				BusinessAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
-				BusinessAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
-				BusinessAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
-				BusinessAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
-				BusinessAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
-				BusinessAddressListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				BusinessAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
-			
-			}
-			
-			ADRCount++;
-			intValueSeek++;
-		
-		} else if (wxSProperty == wxT("EMAIL")){
-		
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;
-			std::map<int, int>::iterator SPoint;
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			wxString AddressLabel;
-			wxString AddressLang;
-			wxString AddressAltID;
-			wxString AddressPID;
-			wxString AddressTokens;
-			wxString AddressGeo;
-			wxString AddressTimezone;
-			wxString AddressType;
-			wxString AddressMediatype;
-			wxString AddressPOBox;
-			wxString AddressExtended;
-			wxString AddressStreet;
-			wxString AddressLocality;
-			wxString AddressCity;
-			wxString AddressRegion;
-			wxString AddressPostalCode;
-			wxString AddressCountry;
-			bool FirstToken = TRUE;
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 7;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 6;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			if (intType == 0){
-			
-				GeneralEmailList.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralEmailListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralEmailListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralEmailListPref.insert(std::make_pair(intValueSeek, 0));
-				GeneralEmailListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-			} else if (intType == 1){
-			
-				HomeEmailList.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeEmailListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeEmailListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeEmailListPref.insert(std::make_pair(intValueSeek, 0));
-				HomeEmailListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 2){
-
-				BusinessEmailList.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessEmailListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessEmailListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessEmailListPref.insert(std::make_pair(intValueSeek, 0));
-				BusinessEmailListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			}
-			
-			intPrevValue = 6;			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				ProcessCaptureStrings(&PropertyValue);
-				
-				// Process properties.
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ GeneralEmailListAltID.erase(intValueSeek); GeneralEmailListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeEmailListAltID.erase(intValueSeek); HomeEmailListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessEmailListAltID.erase(intValueSeek); BusinessEmailListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ GeneralEmailListPID.erase(intValueSeek); GeneralEmailListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeEmailListPID.erase(intValueSeek); HomeEmailListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessEmailListPID.erase(intValueSeek); BusinessEmailListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-					
-					if (intPref > 0 && intPref < 101){
-				
-						if (intType == 0){ GeneralEmailListPref.erase(intValueSeek); GeneralEmailListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						else if (intType == 1){ HomeEmailListPref.erase(intValueSeek); HomeEmailListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						else if (intType == 2){ BusinessEmailListPref.erase(intValueSeek); BusinessEmailListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						
-					}
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-					
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-					
-						if (FirstToken == TRUE){
-						
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-						
-						} else {
-						
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-						
-						}
-					
-					}
-				
-				}
-			
-			} 
-		
-			//std::map<int, int>::iterator SLiter;
-			intPropertyLen = wxSPropertySeg2.Len();
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitsFound = 0;
-			intSplitSize = 0;
-			intPrevValue = 0;	
-			
-			// Add the data to the General/Home/Work email variables.
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(wxSPropertySeg2);
-			
-			if (intType == 0){
-			
-
-			
-				ListCtrlIndex = lboEmails->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboEmails->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				GeneralEmailList.erase(intValueSeek);
-				GeneralEmailListType.erase(intValueSeek);
-				GeneralEmailListTokens.erase(intValueSeek);
-				GeneralEmailList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				GeneralEmailListType.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralEmailListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 1){ 
-			
-				ListCtrlIndex = lboHomeEmails->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeEmails->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				HomeEmailList.erase(intValueSeek);
-				HomeEmailListType.erase(intValueSeek);
-				HomeEmailListTokens.erase(intValueSeek);				
-				HomeEmailList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				HomeEmailListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				HomeEmailListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 2){ 
-			
-				ListCtrlIndex = lboBusinessEmail->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessEmail->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				BusinessEmailList.erase(intValueSeek);
-				BusinessEmailListType.erase(intValueSeek);
-				BusinessEmailListTokens.erase(intValueSeek);				
-				BusinessEmailList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				BusinessEmailListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				BusinessEmailListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
-			
-			}
-			
-			EmailCount++;
-			intValueSeek++;		
-		
-		} else if (wxSProperty == wxT("IMPP")){
-		
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;
-			std::map<int, int>::iterator SPoint;
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			wxString IMPPType;
-			wxString IMPPAddress;
-			bool FirstToken = TRUE;
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 6;
-			int intPref = 0;
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 5;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			if (intType == 0){
-			
-				GeneralIMList.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralIMListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralIMListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralIMListPref.insert(std::make_pair(intValueSeek, 0));
-				GeneralIMListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralIMListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-
-			} else if (intType == 1){
-			
-				HomeIMList.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeIMListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeIMListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeIMListPref.insert(std::make_pair(intValueSeek, 0));
-				HomeIMListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeIMListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 2){
-
-				BusinessIMList.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessIMListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessIMListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessIMListPref.insert(std::make_pair(intValueSeek, 0));
-				BusinessIMListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessIMListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			}
-			
-			intPrevValue = 5;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				ProcessCaptureStrings(&PropertyValue);
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ GeneralIMListAltID.erase(intValueSeek); GeneralIMListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeIMListAltID.erase(intValueSeek); HomeIMListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessIMListAltID.erase(intValueSeek); BusinessIMListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ GeneralIMListPID.erase(intValueSeek); GeneralIMListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeIMListPID.erase(intValueSeek); HomeIMListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessIMListPID.erase(intValueSeek); BusinessIMListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-					
-					if (intPref > 0 && intPref < 101){
-				
-						if (intType == 0){ GeneralIMListPref.erase(intValueSeek); GeneralIMListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						else if (intType == 1){ HomeIMListPref.erase(intValueSeek); HomeIMListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						else if (intType == 2){ BusinessIMListPref.erase(intValueSeek); BusinessIMListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						
-					}
-				
-				} else if (PropertyName == wxT("MEDIATYPE")){
-
-					if (intType == 0){ GeneralIMListMediatype.erase(intValueSeek); GeneralIMListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeIMListMediatype.erase(intValueSeek); HomeIMListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessIMListMediatype.erase(intValueSeek); BusinessIMListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-					
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-					
-						if (FirstToken == TRUE){
-						
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-						
-						} else {
-						
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-						
-						}
-					
-					}
-				
-				}
-			
-			}			
-			
-			// Split the address. 
-		
-			//std::map<int, int>::iterator SLiter;
-			intPropertyLen = wxSPropertySeg2.Len();
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitsFound = 0;
-			intSplitSize = 0;
-			intPrevValue = 0;
-			
-			for (int i = 0; i <= intPropertyLen; i++){
-		
-				intSplitSize++;
-			
-				if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-			
-					intSplitsFound++;
-					SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-					
-					if (intSplitsFound == 1){ 
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-						break; 
-						
-					}
-					
-					intSplitSize = 0;					
-			
-				}
-		
-			}
-			
-			// Split the data into several parts.			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				if (intiter->first == 1){
-				
-					// Deal with PO Box.
-					
-					SLiter = SplitLength.find(1);
-										
-					//txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
-					IMPPType = wxSPropertySeg2.Mid(0, SLiter->second);
-					intPrevValue = intiter->second;
-					
-					IMPPAddress = wxSPropertySeg2.Mid(intPrevValue);					
-				
-				}
-			
-			}	
-			
-			// Check what IM type it is.
-			
-			if (IMPPType == wxT("aim")){
-		
-				IMPPType = wxT("AIM");
-		
-			} else if (IMPPType == wxT("gg")){
-		
-				IMPPType = wxT("Gadu-Gadu");
-		
-			} else if (IMPPType == wxT("icq")){
-		
-				IMPPType = wxT("ICQ");
-		
-			} else if (IMPPType == wxT("skype")){
-		
-				IMPPType = wxT("Skype");
-		
-			} else if (IMPPType == wxT("xmpp")){
-		
-				IMPPType = wxT("XMPP");
-		
-			} else if (IMPPType == wxT("yahoo")){
-		
-				IMPPType = wxT("Yahoo");
-		
-			} else {
-		
-				// Do nothing.
-		
-			}			
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(IMPPType);
-
-			if (intType == 0){
-			
-				ListCtrlIndex = lboIM->InsertItem(coldata);
-				
-				lboIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-					
-				}				
-				
-				GeneralIMList.erase(intValueSeek);
-				GeneralIMListType.erase(intValueSeek);
-				GeneralIMListTokens.erase(intValueSeek);
-				GeneralIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				GeneralIMListType.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 1){ 
-			
-				ListCtrlIndex = lboHomeIM->InsertItem(coldata);
-
-				lboHomeIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				HomeIMList.erase(intValueSeek);
-				HomeIMListType.erase(intValueSeek);
-				HomeIMListTokens.erase(intValueSeek);				
-				HomeIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				HomeIMListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				HomeIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 2){ 
-			
-				ListCtrlIndex = lboBusinessIM->InsertItem(coldata);
-
-				lboBusinessIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				BusinessIMList.erase(intValueSeek);
-				BusinessIMListType.erase(intValueSeek);
-				BusinessIMListTokens.erase(intValueSeek);				
-				BusinessIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				BusinessIMListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				BusinessIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
-			
-			}
-			
-			IMPPCount++;
-			intValueSeek++;	
-		
-		} else if (wxSProperty == wxT("TEL")){
-		
-			// Check TEL and make sure it is functioning properly.
-		
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int> TypeSplitPoints;
-			std::map<int, int> TypeSplitLength;
-			std::map<int, int>::iterator SLiter;
-			std::map<int, int>::iterator SPoint;			
-			std::map<int, int>::iterator TSLiter;
-			std::map<int, int>::iterator TSPoint;
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			wxString TelType;
-			wxString TelNumber;
-			wxString TelTypeUI;
-			wxString TelTypeDetail;
-			bool FirstToken = TRUE;
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 5;
-			int intPref = 0;			
-			int intType = 0;
-			int intSplitPoint = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 4;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					// Process each value in type and translate each
-					// part.
-				
-					// Strip out the quotes if they are there.
-				
-					size_t intPropertyValueLen = PropertyValue.Len();
-				
-					if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-						PropertyValue.Trim();
-						PropertyValue.RemoveLast();
-					
-					}				
-				
-					if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-						PropertyValue.Remove(0, 1);
-					
-					}
-					
-					TelTypeDetail = PropertyValue;
-					
-					intSplitSize = 0;
-					intSplitsFound = 0;
-					intSplitPoint = 0;
-					
-					for (int i = 0; i <= intPropertyValueLen; i++){
-			
-						intSplitSize++;
-			
-						if (PropertyValue.Mid(i, 1) == wxT(",") && PropertyValue.Mid((i - 1), 1) != wxT("\\")){
-			
-							if (intSplitsFound == 0){
-
-								TypeSplitPoints.insert(std::make_pair(intSplitsFound, intSplitPoint));
-								TypeSplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-					
-							} else {
-					
-								TypeSplitPoints.insert(std::make_pair(intSplitsFound, intSplitPoint));
-								TypeSplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));
-					
-							}			
-
-							intSplitsFound++;
-							i++;
-							intSplitPoint = i;
-							intSplitSize = 0;
-			
-						}
-			
-					}
-					
-					TypeSplitPoints.insert(std::make_pair(intSplitsFound, intSplitPoint));
-					TypeSplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));								
-				
-					int intTypeSeek = 0;
-				
-					for (std::map<int, int>::iterator typeiter = TypeSplitPoints.begin(); 
-					typeiter != TypeSplitPoints.end(); ++typeiter){
-					
-						wxString TypePropertyName;
-						
-						TSLiter = TypeSplitLength.find(typeiter->first);
-						
-						TypePropertyName = PropertyValue.Mid(typeiter->second, TSLiter->second);
-						
-						if (intTypeSeek == 0){
-						
-						
-						} else {
-												
-							TelTypeUI.Append(wxT(","));							
-						
-						}
-					
-						if (TypePropertyName == wxT("home")){
-						
-							intType = 1;
-						
-						} else if (TypePropertyName == wxT("work")){
-						
-							intType = 2;
-						
-						}
-						
-						
-						if (TypePropertyName == wxT("text")){
-						
-							TelTypeUI.Append(_("text"));
-							intTypeSeek++;
-						
-						} else if (TypePropertyName == wxT("voice")){
-						
-							TelTypeUI.Append(_("voice"));
-							intTypeSeek++;
-						
-						} else if (TypePropertyName == wxT("fax")){
-						
-							TelTypeUI.Append(_("fax"));
-							intTypeSeek++;
-						
-						} else if (TypePropertyName == wxT("cell")){
-						
-							TelTypeUI.Append(_("mobile"));
-							intTypeSeek++;
-						
-						} else if (TypePropertyName == wxT("video")){
-						
-							TelTypeUI.Append(_("video"));
-							intTypeSeek++;
-						
-						} else if (TypePropertyName == wxT("pager")){
-						
-							TelTypeUI.Append(_("pager"));
-							intTypeSeek++;
-						
-						} else if (TypePropertyName == wxT("textphone")){
-						
-							TelTypeUI.Append(_("textphone"));
-							intTypeSeek++;
-						
-						}
-					
-					}
-				
-				}
-				
-				
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			if (intType == 0){
-			
-				GeneralTelephoneList.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralTelephoneListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralTelephoneListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralTelephoneListPref.insert(std::make_pair(intValueSeek, 0));
-				GeneralTelephoneListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-			} else if (intType == 1){
-			
-				HomeTelephoneList.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeTelephoneListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeTelephoneListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeTelephoneListPref.insert(std::make_pair(intValueSeek, 0));
-				HomeTelephoneListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 2){
-
-				BusinessTelephoneList.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessTelephoneListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessTelephoneListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessTelephoneListPref.insert(std::make_pair(intValueSeek, 0));
-				BusinessTelephoneListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			}
-			
-			intPrevValue = 4;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}				
-				
-				ProcessCaptureStrings(&PropertyValue);
-				
-				// Process properties.
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ GeneralTelephoneListAltID.erase(intValueSeek); GeneralTelephoneListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeTelephoneListAltID.erase(intValueSeek); HomeTelephoneListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessTelephoneListAltID.erase(intValueSeek); BusinessTelephoneListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ GeneralTelephoneListPID.erase(intValueSeek); GeneralTelephoneListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeTelephoneListPID.erase(intValueSeek); HomeTelephoneListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessTelephoneListPID.erase(intValueSeek); BusinessTelephoneListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-					
-					if (intPref > 0 && intPref < 101){
-				
-						if (intType == 0){ GeneralTelephoneListPref.erase(intValueSeek); GeneralTelephoneListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						else if (intType == 1){ HomeTelephoneListPref.erase(intValueSeek); HomeTelephoneListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						else if (intType == 2){ BusinessTelephoneListPref.erase(intValueSeek); BusinessTelephoneListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						
-					}
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-					
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-					
-						if (FirstToken == TRUE){
-						
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-						
-						} else {
-						
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-						
-						}
-					
-					}
-				
-				}
-			
-			}			
-			
-			// Split the address. 
-		
-			//std::map<int, int>::iterator SLiter;
-			intPropertyLen = wxSPropertySeg2.Len();
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitsFound = 0;
-			intSplitSize = 0;
-			intPrevValue = 0;
-			
-			for (int i = 0; i <= intPropertyLen; i++){
-		
-				intSplitSize++;
-			
-				if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-			
-					intSplitsFound++;
-					SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-					
-					if (intSplitsFound == 1){ 
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-						break; 
-						
-					}
-					
-					intSplitSize = 0;					
-			
-				}
-		
-			}
-			
-			// Split the data into several parts.			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				if (intiter->first == 1){
-				
-					// Deal with PO Box.
-					
-					SLiter = SplitLength.find(1);
-										
-					//txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
-					TelType = wxSPropertySeg2.Mid(0, SLiter->second);
-					intPrevValue = intiter->second;
-					
-					TelNumber = wxSPropertySeg2.Mid(intPrevValue);					
-				
-				}
-			
-			}			
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			ProcessCaptureStrings(&PropertyValue);
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(TelNumber);
-			
-			if (intType == 0){
-			
-				ListCtrlIndex = lboTelephone->InsertItem(coldata);
-				
-				lboTelephone->SetItem(ListCtrlIndex, 1, TelTypeUI);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboTelephone->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-					
-				}				
-				
-				GeneralTelephoneList.erase(intValueSeek);
-				GeneralTelephoneListType.erase(intValueSeek);
-				GeneralTelephoneListTokens.erase(intValueSeek);
-				GeneralTelephoneList.insert(std::make_pair(intValueSeek, TelNumber));
-				GeneralTelephoneListType.insert(std::make_pair(intValueSeek, TelTypeDetail));
-				GeneralTelephoneListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 1){ 
-			
-				ListCtrlIndex = lboHomeTelephone->InsertItem(coldata);
-
-				lboHomeTelephone->SetItem(ListCtrlIndex, 1, TelTypeUI);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeTelephone->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				HomeTelephoneList.erase(intValueSeek);
-				HomeTelephoneListType.erase(intValueSeek);
-				HomeTelephoneListTokens.erase(intValueSeek);				
-				HomeTelephoneList.insert(std::make_pair(intValueSeek, TelNumber));
-				HomeTelephoneListType.insert(std::make_pair(intValueSeek, TelTypeDetail));
-				HomeTelephoneListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 2){ 
-			
-				ListCtrlIndex = lboBusinessTelephone->InsertItem(coldata);
-
-				lboBusinessTelephone->SetItem(ListCtrlIndex, 1, TelTypeUI);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessTelephone->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				BusinessTelephoneList.erase(intValueSeek);
-				BusinessTelephoneListType.erase(intValueSeek);
-				BusinessTelephoneListTokens.erase(intValueSeek);				
-				BusinessTelephoneList.insert(std::make_pair(intValueSeek, TelNumber));
-				BusinessTelephoneListType.insert(std::make_pair(intValueSeek, TelTypeDetail));
-				BusinessTelephoneListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
-			
-			}
-			
-			TelCount++;
-			intValueSeek++;
-		
-		} else if (wxSProperty == wxT("LANG")){
-		
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intPrevValue = 6;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 5;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			if (intType == 0){
-			
-				GeneralLanguageList.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralLanguageListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralLanguageListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralLanguageListPref.insert(std::make_pair(intValueSeek, 0));
-				GeneralLanguageListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-			} else if (intType == 1){
-			
-				HomeLanguageList.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeLanguageListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeLanguageListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeLanguageListPref.insert(std::make_pair(intValueSeek, 0));
-				HomeLanguageListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 2){
-
-				BusinessLanguageList.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessLanguageListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessLanguageListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessLanguageListPref.insert(std::make_pair(intValueSeek, 0));
-				BusinessLanguageListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			}
-			
-			intPrevValue = 5;			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}
-				
-				ProcessCaptureStrings(&PropertyValue);				
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ GeneralLanguageListAltID.erase(intValueSeek); GeneralLanguageListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeLanguageListAltID.erase(intValueSeek); HomeLanguageListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessLanguageListAltID.erase(intValueSeek); BusinessLanguageListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ GeneralLanguageListPID.erase(intValueSeek); GeneralLanguageListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeLanguageListPID.erase(intValueSeek); HomeLanguageListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessLanguageListPID.erase(intValueSeek); BusinessLanguageListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intType == 0){ GeneralLanguageListPref.erase(intValueSeek); GeneralLanguageListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 1){ HomeLanguageListPref.erase(intValueSeek); HomeLanguageListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 2){ BusinessLanguageListPref.erase(intValueSeek); BusinessLanguageListPref.insert(std::make_pair(intValueSeek, intPref)); }
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-				
-						if (FirstToken == TRUE){
-					
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-					
-						} else {
-					
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-					
-						}
-				
-					}
-				
-				}
-			
-			}	
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(wxSPropertySeg2);
-			
-			if (intType == 0){
-			
-				ListCtrlIndex = lboLanguages->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboLanguages->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				GeneralLanguageList.erase(intValueSeek);
-				GeneralLanguageListType.erase(intValueSeek);
-				GeneralLanguageListTokens.erase(intValueSeek);
-				GeneralLanguageList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				GeneralLanguageListType.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralLanguageListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 1){ 
-			
-				ListCtrlIndex = lboHomeLanguages->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeLanguages->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				HomeLanguageList.erase(intValueSeek);
-				HomeLanguageListType.erase(intValueSeek);
-				HomeLanguageListTokens.erase(intValueSeek);				
-				HomeLanguageList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				HomeLanguageListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				HomeLanguageListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 2){ 
-			
-				ListCtrlIndex = lboBusinessLanguages->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessLanguages->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				BusinessLanguageList.erase(intValueSeek);
-				BusinessLanguageListType.erase(intValueSeek);
-				BusinessLanguageListTokens.erase(intValueSeek);				
-				BusinessLanguageList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				BusinessLanguageListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				BusinessLanguageListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
-			
-			}
-			
-			LangCount++;
-			intValueSeek++;
-		
-		} else if (wxSProperty == wxT("GEO")){
-		
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			wxString GeoType;
-			wxString GeoData;
-			bool FirstToken = TRUE;			
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 5;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 4;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			if (intType == 0){
-			
-				GeneralGeographyList.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralGeographyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralGeographyListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralGeographyListPref.insert(std::make_pair(intValueSeek, 0));
-				GeneralGeographyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-			} else if (intType == 1){
-			
-				HomeGeographyList.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeGeographyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeGeographyListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeGeographyListPref.insert(std::make_pair(intValueSeek, 0));
-				HomeGeographyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 2){
-
-				BusinessGeographyList.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessGeographyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessGeographyListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessGeographyListPref.insert(std::make_pair(intValueSeek, 0));
-				BusinessGeographyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			}
-			
-			intPrevValue = 4;			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}	
-
-				ProcessCaptureStrings(&PropertyValue);
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ GeneralGeographyListAltID.erase(intValueSeek); GeneralGeographyListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeGeographyListAltID.erase(intValueSeek); HomeGeographyListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessGeographyListAltID.erase(intValueSeek); BusinessGeographyListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ GeneralGeographyListPID.erase(intValueSeek); GeneralGeographyListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeGeographyListPID.erase(intValueSeek); HomeGeographyListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessGeographyListPID.erase(intValueSeek); BusinessGeographyListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("MEDIATYPE")){
-				
-					if (intType == 0){ GeneralGeographyListMediatype.erase(intValueSeek); GeneralGeographyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeGeographyListMediatype.erase(intValueSeek); HomeGeographyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessGeographyListMediatype.erase(intValueSeek); BusinessGeographyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intPref > 0 && intPref < 101){
-				
-						if (intType == 0){ GeneralGeographyListPref.erase(intValueSeek); GeneralGeographyListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						else if (intType == 1){ HomeGeographyListPref.erase(intValueSeek); HomeGeographyListPref.insert(std::make_pair(intValueSeek, intPref)); }
-						else if (intType == 2){ BusinessGeographyListPref.erase(intValueSeek); BusinessGeographyListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					
-					}
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-				
-						if (FirstToken == TRUE){
-					
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-					
-						} else {
-					
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-					
-						}
-				
-					}
-				
-				}
-			
-			}					
-			
-			// Split the address. 
-		
-			//std::map<int, int>::iterator SLiter;
-			intPropertyLen = wxSPropertySeg2.Len();
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitsFound = 0;
-			intSplitSize = 0;
-			intPrevValue = 0;
-			
-			for (int i = 0; i <= intPropertyLen; i++){
-		
-				intSplitSize++;
-			
-				if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-			
-					intSplitsFound++;
-					SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-					
-					if (intSplitsFound == 1){ 
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-						break; 
-						
-					}
-					
-					intSplitSize = 0;					
-			
-				}
-		
-			}			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				if (intiter->first == 1){
-				
-					// Deal with PO Box.
-					
-					SLiter = SplitLength.find(1);
-										
-					//txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
-					GeoType = wxSPropertySeg2.Mid(0, SLiter->second);
-					intPrevValue = intiter->second;
-					
-					GeoData = wxSPropertySeg2.Mid(intPrevValue);					
-				
-				}
-			
-			}
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-
-			
-			if (intType == 0){
-			
-				/*
-			
-				ListCtrlIndex = lboTimezones->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				*/
-				/*
-				txtGeopositioning->SetValue(GeoData);
-				*/
-				
-				GeneralGeographyList.erase(intValueSeek);
-				GeneralGeographyListType.erase(intValueSeek);
-				GeneralGeographyListTokens.erase(intValueSeek);
-				GeneralGeographyList.insert(std::make_pair(intValueSeek, GeoData));
-				GeneralGeographyListType.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralGeographyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-				
-				CaptureString(&GeoData, FALSE);
-				coldata.SetText(GeoData);
-				ListCtrlIndex = lboGeoposition->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboGeoposition->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-			
-			} else if (intType == 1){ 			
-			
-				/*
-			
-				ListCtrlIndex = lboHomeTimezones->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				*/
-				
-				/*
-				txtHomeGeopositioning->SetValue(GeoData);
-				*/
-
-				HomeGeographyList.erase(intValueSeek);
-				HomeGeographyListType.erase(intValueSeek);
-				HomeGeographyListTokens.erase(intValueSeek);				
-				HomeGeographyList.insert(std::make_pair(intValueSeek, GeoData));
-				HomeGeographyListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				HomeGeographyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-				
-				CaptureString(&GeoData, FALSE);
-				coldata.SetText(GeoData);
-				ListCtrlIndex = lboHomeGeoposition->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeGeoposition->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-			
-			} else if (intType == 2){ 
-			
-				ListCtrlIndex = lboBusinessGeoposition->InsertItem(coldata);			
-			
-				/*
-			
-				ListCtrlIndex = lboBusinessTimezones->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				*/
-				
-				/*
-				txtBusinessGeopositioning->SetValue(GeoData);
-				*/
-
-				BusinessGeographyList.erase(intValueSeek);
-				BusinessGeographyListType.erase(intValueSeek);
-				BusinessGeographyListTokens.erase(intValueSeek);				
-				BusinessGeographyList.insert(std::make_pair(intValueSeek, GeoData));
-				BusinessGeographyListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				BusinessGeographyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-				
-				CaptureString(&GeoData, FALSE);
-				coldata.SetText(GeoData);
-				ListCtrlIndex = lboBusinessGeoposition->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessGeoposition->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-			
-			}
-			
-			GeoCount++;
-			intValueSeek++;		
-		
-		} else if (wxSProperty == wxT("RELATED")){
-			
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			wxString RelatedType;
-			wxString RelatedTypeOriginal;			
-			wxString RelatedName;
-			bool FirstToken = TRUE;			
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 9;
-			int intPref = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 8;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process these.
-				
-				RelatedTypeOriginal = PropertyValue;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("contact")){
-		
-						RelatedType = _("Contact");
-		
-					} else if (PropertyValue == wxT("acquaintance")){
-		
-						RelatedType = _("Acquaintance");
-		
-					} else if (PropertyValue == wxT("friend")){
-		
-						RelatedType = _("Friend");
-		
-					} else if (PropertyValue == wxT("met")){
-		
-						RelatedType = _("Met");
-		
-					} else if (PropertyValue == wxT("co-worker")){
-		
-						RelatedType = _("Co-worker");
-		
-					} else if (PropertyValue == wxT("colleague")){
-		
-						RelatedType = _("Colleague");
-		
-					} else if (PropertyValue == wxT("co-resident")){
-		
-						RelatedType = _("Co-resident");
-		
-					} else if (PropertyValue == wxT("neighbor")){
-		
-						RelatedType = _("Neighbour");
-		
-					} else if (PropertyValue == wxT("child")){
-		
-						RelatedType = _("Child");
-		
-					} else if (PropertyValue == wxT("parent")){
-		
-						RelatedType = _("Parent");
-		
-					} else if (PropertyValue == wxT("sibling")){
-		
-						RelatedType = _("Sibling");
-		
-					} else if (PropertyValue == wxT("spouse")){
-		
-						RelatedType = _("Spouse");
-		
-					} else if (PropertyValue == wxT("kin")){
-		
-						RelatedType = _("Kin");
-		
-					} else if (PropertyValue == wxT("muse")){
-		
-						RelatedType = _("Muse");
-		
-					} else if (PropertyValue == wxT("crush")){
-		
-						RelatedType = _("Crush");
-		
-					} else if (PropertyValue == wxT("date")){
-		
-						RelatedType = _("Date");
-		
-					} else if (PropertyValue == wxT("sweetheart")){
-		
-						RelatedType = _("Sweetheart");
-		
-					} else if (PropertyValue == wxT("me")){
-		
-						RelatedType = _("Me");
-		
-					} else if (PropertyValue == wxT("agent")){
-		
-						RelatedType = _("Agent");
-		
-					} else if (PropertyValue == wxT("emergency")){
-		
-						RelatedType = _("Emergency");
-		
-					} else {
-		
-						RelatedType = PropertyValue;
-		
-					}
-				
-				}
-			
-			}
-			
-			intPrevValue = 8;			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}
-				
-				ProcessCaptureStrings(&PropertyValue);			
-				
-				if (PropertyName == wxT("ALTID")){
-
-					GeneralRelatedListAltID.erase(intValueSeek);
-					GeneralRelatedListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else if (PropertyName == wxT("PID")){
-
-					GeneralRelatedListPID.erase(intValueSeek);
-					GeneralRelatedListPID.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intPref > 0 && intPref < 101){
-				
-						GeneralRelatedListPref.erase(intValueSeek);
-						GeneralRelatedListPref.insert(std::make_pair(intValueSeek, intPref));
-
-					
-					}
-				
-				} else if (PropertyName == wxT("LANGUAGE")){
-				
-					GeneralRelatedListLanguage.erase(intValueSeek);
-					GeneralRelatedListLanguage.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-				
-						if (FirstToken == TRUE){
-					
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-					
-						} else {
-					
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-					
-						}
-				
-					}
-				
-				}
-			
-			}					
-			
-			// Split the address. 
-		
-			//std::map<int, int>::iterator SLiter;
-			intPropertyLen = wxSPropertySeg2.Len();
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitsFound = 0;
-			intSplitSize = 0;
-			intPrevValue = 0;
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(RelatedType);
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);
-
-			ListCtrlIndex = lboRelated->InsertItem(coldata);
-
-			lboRelated->SetItem(ListCtrlIndex, 1, wxSPropertySeg2);
-
-			if (intPref > 0 && intPref < 101){
-				
-				lboRelated->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-					
-			}
-				
-			GeneralRelatedList.erase(intValueSeek);
-			GeneralRelatedListRelType.erase(intValueSeek);
-			GeneralRelatedListType.erase(intValueSeek);
-			GeneralRelatedListTokens.erase(intValueSeek);
-			GeneralRelatedList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-			GeneralRelatedListRelType.insert(std::make_pair(intValueSeek, RelatedTypeOriginal));			
-			GeneralRelatedListType.insert(std::make_pair(intValueSeek, RelatedTypeOriginal));
-			GeneralRelatedListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			RelatedCount++;
-			intValueSeek++;			
-		
-		} else if (wxSProperty == wxT("URL")){
-		
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intPrevValue = 5;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 4;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			if (intType == 0){
-			
-				GeneralWebsiteList.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralWebsiteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralWebsiteListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralWebsiteListPref.insert(std::make_pair(intValueSeek, 0));
-				GeneralWebsiteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-			} else if (intType == 1){
-			
-				HomeWebsiteList.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeWebsiteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeWebsiteListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeWebsiteListPref.insert(std::make_pair(intValueSeek, 0));
-				HomeWebsiteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 2){
-
-				BusinessWebsiteList.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessWebsiteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessWebsiteListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessWebsiteListPref.insert(std::make_pair(intValueSeek, 0));
-				BusinessWebsiteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			}
-			
-			intPrevValue = 4;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}
-				
-				ProcessCaptureStrings(&PropertyValue);		
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ GeneralWebsiteListAltID.erase(intValueSeek); GeneralWebsiteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeWebsiteListAltID.erase(intValueSeek); HomeWebsiteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessWebsiteListAltID.erase(intValueSeek); BusinessWebsiteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ GeneralWebsiteListPID.erase(intValueSeek); GeneralWebsiteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeWebsiteListPID.erase(intValueSeek); HomeWebsiteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessWebsiteListPID.erase(intValueSeek); BusinessWebsiteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intType == 0){ GeneralWebsiteListPref.erase(intValueSeek); GeneralWebsiteListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 1){ HomeWebsiteListPref.erase(intValueSeek); HomeWebsiteListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 2){ BusinessWebsiteListPref.erase(intValueSeek); BusinessWebsiteListPref.insert(std::make_pair(intValueSeek, intPref)); }
-				
-				} else if (PropertyName == wxT("MEDIATYPE")){
-				
-					if (intType == 0){ GeneralWebsiteListMediatype.erase(intValueSeek); GeneralWebsiteListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeWebsiteListMediatype.erase(intValueSeek); HomeWebsiteListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessWebsiteListMediatype.erase(intValueSeek); BusinessWebsiteListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-				
-						if (FirstToken == TRUE){
-					
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-					
-						} else {
-					
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-					
-						}
-				
-					}
-				
-				}
-			
-			}
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(wxSPropertySeg2);
-			
-			if (intType == 0){
-			
-				ListCtrlIndex = lboWebsites->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboWebsites->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				GeneralWebsiteList.erase(intValueSeek);
-				GeneralWebsiteListType.erase(intValueSeek);
-				GeneralWebsiteListTokens.erase(intValueSeek);
-				GeneralWebsiteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				GeneralWebsiteListType.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralWebsiteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 1){ 
-			
-				ListCtrlIndex = lboHomeWebsites->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeWebsites->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				HomeWebsiteList.erase(intValueSeek);
-				HomeWebsiteListType.erase(intValueSeek);
-				HomeWebsiteListTokens.erase(intValueSeek);				
-				HomeWebsiteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				HomeWebsiteListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				HomeWebsiteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 2){ 
-			
-				ListCtrlIndex = lboBusinessWebsites->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessWebsites->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				BusinessWebsiteList.erase(intValueSeek);
-				BusinessWebsiteListType.erase(intValueSeek);
-				BusinessWebsiteListTokens.erase(intValueSeek);				
-				BusinessWebsiteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				BusinessWebsiteListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				BusinessWebsiteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
-			
-			}
-			
-			URLCount++;
-			intValueSeek++;
-		
-		} else if (wxSProperty == wxT("TITLE")) {
-		
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intPrevValue = 7;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 6;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			if (intType == 0){
-			
-				GeneralTitleList.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralTitleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralTitleListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralTitleListPref.insert(std::make_pair(intValueSeek, 0));
-				GeneralTitleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralTitleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-
-			} else if (intType == 1){
-			
-				HomeTitleList.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeTitleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeTitleListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeTitleListPref.insert(std::make_pair(intValueSeek, 0));
-				HomeTitleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeTitleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));				
-			
-			} else if (intType == 2){
-
-				BusinessTitleList.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessTitleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessTitleListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessTitleListPref.insert(std::make_pair(intValueSeek, 0));
-				BusinessTitleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessTitleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));				
-			
-			}
-			
-			intPrevValue = 6;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}				
-				
-				ProcessCaptureStrings(&PropertyValue);
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ GeneralTitleListAltID.erase(intValueSeek); GeneralTitleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeTitleListAltID.erase(intValueSeek); HomeTitleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessTitleListAltID.erase(intValueSeek); BusinessTitleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ GeneralTitleListPID.erase(intValueSeek); GeneralTitleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeTitleListPID.erase(intValueSeek); HomeTitleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessTitleListPID.erase(intValueSeek); BusinessTitleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intType == 0){ GeneralTitleListPref.erase(intValueSeek); GeneralTitleListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 1){ HomeTitleListPref.erase(intValueSeek); HomeTitleListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 2){ BusinessTitleListPref.erase(intValueSeek); BusinessTitleListPref.insert(std::make_pair(intValueSeek, intPref)); }
-				
-				} else if (PropertyName == wxT("LANGUAGE")){
-				
-					if (intType == 0){ GeneralTitleListLanguage.erase(intValueSeek); GeneralTitleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeTitleListLanguage.erase(intValueSeek); HomeTitleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessTitleListLanguage.erase(intValueSeek); BusinessTitleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-				
-						if (FirstToken == TRUE){
-					
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-					
-						} else {
-					
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-					
-						}
-				
-					}
-				
-				}
-			
-			}
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(wxSPropertySeg2);
-			
-			if (intType == 0){
-			
-				ListCtrlIndex = lboTitles->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboTitles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				GeneralTitleList.erase(intValueSeek);
-				GeneralTitleListType.erase(intValueSeek);
-				GeneralTitleListTokens.erase(intValueSeek);
-				GeneralTitleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				GeneralTitleListType.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralTitleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 1){ 
-			
-				ListCtrlIndex = lboHomeTitles->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeTitles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				HomeTitleList.erase(intValueSeek);
-				HomeTitleListType.erase(intValueSeek);
-				HomeTitleListTokens.erase(intValueSeek);				
-				HomeTitleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				HomeTitleListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				HomeTitleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 2){ 
-			
-				ListCtrlIndex = lboBusinessTitles->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessTitles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				BusinessTitleList.erase(intValueSeek);
-				BusinessTitleListType.erase(intValueSeek);
-				BusinessTitleListTokens.erase(intValueSeek);				
-				BusinessTitleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				BusinessTitleListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				BusinessTitleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
-			
-			}
-			
-			TitleCount++;
-			intValueSeek++;
-			
-		} else if (wxSProperty == wxT("ROLE")) {
-		
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intPrevValue = 6;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 5;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			if (intType == 0){
-			
-				GeneralRoleList.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralRoleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralRoleListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralRoleListPref.insert(std::make_pair(intValueSeek, 0));
-				GeneralRoleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralRoleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-
-			} else if (intType == 1){
-			
-				HomeRoleList.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeRoleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeRoleListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeRoleListPref.insert(std::make_pair(intValueSeek, 0));
-				HomeRoleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeRoleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));				
-			
-			} else if (intType == 2){
-
-				BusinessRoleList.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessRoleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessRoleListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessRoleListPref.insert(std::make_pair(intValueSeek, 0));
-				BusinessRoleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessRoleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));				
-			
-			}
-			
-			intPrevValue = 5;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}				
-				
-				ProcessCaptureStrings(&PropertyValue);
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ GeneralRoleListAltID.erase(intValueSeek); GeneralRoleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeRoleListAltID.erase(intValueSeek); HomeRoleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessRoleListAltID.erase(intValueSeek); BusinessRoleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ GeneralRoleListPID.erase(intValueSeek); GeneralRoleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeRoleListPID.erase(intValueSeek); HomeRoleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessRoleListPID.erase(intValueSeek); BusinessRoleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intType == 0){ GeneralRoleListPref.erase(intValueSeek); GeneralRoleListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 1){ HomeRoleListPref.erase(intValueSeek); HomeRoleListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 2){ BusinessRoleListPref.erase(intValueSeek); BusinessRoleListPref.insert(std::make_pair(intValueSeek, intPref)); }
-				
-				} else if (PropertyName == wxT("LANGUAGE")){
-				
-					if (intType == 0){ GeneralRoleListLanguage.erase(intValueSeek); GeneralRoleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeRoleListLanguage.erase(intValueSeek); HomeRoleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessRoleListLanguage.erase(intValueSeek); BusinessRoleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-				
-						if (FirstToken == TRUE){
-					
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-					
-						} else {
-					
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-					
-						}
-				
-					}
-				
-				}
-			
-			}
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(wxSPropertySeg2);
-			
-			if (intType == 0){
-			
-				ListCtrlIndex = lboRoles->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboRoles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				GeneralRoleList.erase(intValueSeek);
-				GeneralRoleListType.erase(intValueSeek);
-				GeneralRoleListTokens.erase(intValueSeek);
-				GeneralRoleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				GeneralRoleListType.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralRoleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 1){ 
-			
-				ListCtrlIndex = lboHomeRoles->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeRoles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				HomeRoleList.erase(intValueSeek);
-				HomeRoleListType.erase(intValueSeek);
-				HomeRoleListTokens.erase(intValueSeek);				
-				HomeRoleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				HomeRoleListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				HomeRoleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 2){ 
-			
-				ListCtrlIndex = lboBusinessRoles->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessRoles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				BusinessRoleList.erase(intValueSeek);
-				BusinessRoleListType.erase(intValueSeek);
-				BusinessRoleListTokens.erase(intValueSeek);				
-				BusinessRoleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				BusinessRoleListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				BusinessRoleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
-			
-			}
-			
-			RoleCount++;
-			intValueSeek++;
-			
-		} else if (wxSProperty == wxT("ORG")) {
-		
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intPrevValue = 5;
-			int intPref = 0;
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 4;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			if (intType == 0){
-			
-				GeneralOrganisationsList.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralOrganisationsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralOrganisationsListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralOrganisationsListPref.insert(std::make_pair(intValueSeek, 0));
-				GeneralOrganisationsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralOrganisationsListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralOrganisationsListSortAs.insert(std::make_pair(intValueSeek, wxT("")));
-
-			} else if (intType == 1){
-			
-				HomeOrganisationsList.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeOrganisationsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeOrganisationsListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeOrganisationsListPref.insert(std::make_pair(intValueSeek, 0));
-				HomeOrganisationsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeOrganisationsListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeOrganisationsListSortAs.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 2){
-
-				BusinessOrganisationsList.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessOrganisationsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessOrganisationsListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessOrganisationsListPref.insert(std::make_pair(intValueSeek, 0));
-				BusinessOrganisationsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessOrganisationsListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessOrganisationsListSortAs.insert(std::make_pair(intValueSeek, wxT("")));				
-			
-			}
-			
-			intPrevValue = 4;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}
-				
-				ProcessCaptureStrings(&PropertyValue);
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ GeneralOrganisationsListAltID.erase(intValueSeek); GeneralOrganisationsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeOrganisationsListAltID.erase(intValueSeek); HomeOrganisationsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessOrganisationsListAltID.erase(intValueSeek); BusinessOrganisationsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ GeneralOrganisationsListPID.erase(intValueSeek); GeneralOrganisationsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeOrganisationsListPID.erase(intValueSeek); HomeOrganisationsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessOrganisationsListPID.erase(intValueSeek); BusinessOrganisationsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intType == 0){ GeneralOrganisationsListPref.erase(intValueSeek); GeneralOrganisationsListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 1){ HomeOrganisationsListPref.erase(intValueSeek); HomeOrganisationsListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 2){ BusinessOrganisationsListPref.erase(intValueSeek); BusinessOrganisationsListPref.insert(std::make_pair(intValueSeek, intPref)); }
-				
-				} else if (PropertyName == wxT("LANGUAGE")){
-				
-					if (intType == 0){ GeneralOrganisationsListLanguage.erase(intValueSeek); GeneralOrganisationsListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeOrganisationsListLanguage.erase(intValueSeek); HomeOrganisationsListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessOrganisationsListLanguage.erase(intValueSeek); BusinessOrganisationsListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("SORT-AS")){
-				
-					if (intType == 0){ GeneralOrganisationsListSortAs.erase(intValueSeek); GeneralOrganisationsListSortAs.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeOrganisationsListSortAs.erase(intValueSeek); HomeOrganisationsListSortAs.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessOrganisationsListSortAs.erase(intValueSeek); BusinessOrganisationsListSortAs.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-				
-						if (FirstToken == TRUE){
-					
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-					
-						} else {
-					
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-					
-						}
-				
-					}
-				
-				}
-			
-			}			
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			wxListItem coldata;
-		
-			ProcessCaptureStrings(&wxSPropertySeg2);
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(wxSPropertySeg2);
-			
-			if (intType == 0){
-			
-				ListCtrlIndex = lboOrganisations->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboOrganisations->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				GeneralOrganisationsList.erase(intValueSeek);
-				GeneralOrganisationsListType.erase(intValueSeek);
-				GeneralOrganisationsListTokens.erase(intValueSeek);
-				GeneralOrganisationsList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				GeneralOrganisationsListType.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralOrganisationsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 1){ 
-			
-				ListCtrlIndex = lboHomeOrganisations->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeOrganisations->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				HomeOrganisationsList.erase(intValueSeek);
-				HomeOrganisationsListType.erase(intValueSeek);
-				HomeOrganisationsListTokens.erase(intValueSeek);				
-				HomeOrganisationsList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				HomeOrganisationsListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				HomeOrganisationsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			} else if (intType == 2){ 
-			
-				ListCtrlIndex = lboBusinessOrganisations->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessOrganisations->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-
-				BusinessOrganisationsList.erase(intValueSeek);
-				BusinessOrganisationsListType.erase(intValueSeek);
-				BusinessOrganisationsListTokens.erase(intValueSeek);				
-				BusinessOrganisationsList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				BusinessOrganisationsListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				BusinessOrganisationsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
-			
-			}
-			
-			OrgCount++;
-			intValueSeek++;
-			
-		} else if (wxSProperty == wxT("NOTE")) {
-
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intPrevValue = 6;
-			int intPref = 0;			
-			int intType = 0;
-            long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 5;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			if (intType == 0){
-			
-				GeneralNoteList.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralNoteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralNoteListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralNoteListPref.insert(std::make_pair(intValueSeek, 0));
-				GeneralNoteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralNoteListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-
-			} else if (intType == 1){
-			
-				HomeNoteList.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeNoteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeNoteListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeNoteListPref.insert(std::make_pair(intValueSeek, 0));
-				HomeNoteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				HomeNoteListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 2){
-
-				BusinessNoteList.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessNoteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessNoteListPID.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessNoteListPref.insert(std::make_pair(intValueSeek, 0));
-				BusinessNoteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-				BusinessNoteListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			}
-			
-			intPrevValue = 5;			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}
-				
-				ProcessCaptureStrings(&PropertyValue);				
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ GeneralNoteListAltID.erase(intValueSeek); GeneralNoteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeNoteListAltID.erase(intValueSeek); HomeNoteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessNoteListAltID.erase(intValueSeek); BusinessNoteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ GeneralNoteListPID.erase(intValueSeek); GeneralNoteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeNoteListPID.erase(intValueSeek); HomeNoteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessNoteListPID.erase(intValueSeek); BusinessNoteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intType == 0){ GeneralNoteListPref.erase(intValueSeek); GeneralNoteListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 1){ HomeNoteListPref.erase(intValueSeek); HomeNoteListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 2){ BusinessNoteListPref.erase(intValueSeek); BusinessNoteListPref.insert(std::make_pair(intValueSeek, intPref)); }
-				
-				} else if (PropertyName == wxT("LANGUAGE")){
-				
-					if (intType == 0){ GeneralNoteListLanguage.erase(intValueSeek); GeneralNoteListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ HomeNoteListLanguage.erase(intValueSeek); HomeNoteListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ BusinessNoteListLanguage.erase(intValueSeek); BusinessNoteListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-				
-						if (FirstToken == TRUE){
-					
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-					
-						} else {
-					
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-					
-						}
-				
-					}
-				
-				}
-			
-			}
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			
-			if (intType == 0){
-			
-				GeneralNoteList.erase(intValueSeek);
-				GeneralNoteListType.erase(intValueSeek);
-				GeneralNoteListTokens.erase(intValueSeek);
-				GeneralNoteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				GeneralNoteListType.insert(std::make_pair(intValueSeek, wxT("")));
-				GeneralNoteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));			
-			
-				//CaptureString(&wxSPropertySeg2, FALSE);
-	
-				coldata.SetText(wxSPropertySeg2);
-			
-				ListCtrlIndex = lboNotes->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboNotes->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-			
-			} else if (intType == 1){ 
-			
-				HomeNoteList.erase(intValueSeek);
-				HomeNoteListType.erase(intValueSeek);
-				HomeNoteListTokens.erase(intValueSeek);				
-				HomeNoteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				HomeNoteListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				HomeNoteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));			
-			
-				CaptureString(&wxSPropertySeg2, FALSE);
-	
-				coldata.SetText(wxSPropertySeg2);			
-			
-				ListCtrlIndex = lboHomeNotes->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboHomeNotes->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-			
-			} else if (intType == 2){ 
-			
-				BusinessNoteList.erase(intValueSeek);
-				BusinessNoteListType.erase(intValueSeek);
-				BusinessNoteListTokens.erase(intValueSeek);				
-				BusinessNoteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-				BusinessNoteListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				BusinessNoteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));			
-			
-				CaptureString(&wxSPropertySeg2, FALSE);
-	
-				coldata.SetText(wxSPropertySeg2);
-			
-				ListCtrlIndex = lboBusinessNotes->InsertItem(coldata);
-
-				if (intPref > 0 && intPref < 101){
-				
-					lboBusinessNotes->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}				
-			
-			}
-			
-			NoteCount++;
-			intValueSeek++;
-			
-		} else if (wxSProperty == wxT("CATEGORIES")) {
-		
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			wxString PropertyType;
-			bool AfterFirstToken = FALSE;
-			bool FirstToken = TRUE;			
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 12;
-			int intPref = 0;			
-			int intType = 0;
-			int intSplitSeek = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 11;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;
-						PropertyType = wxT("work");				
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-						PropertyType = wxT("home");						
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			CategoriesList.insert(std::make_pair(intValueSeek, wxT("")));
-			CategoriesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-			CategoriesListPID.insert(std::make_pair(intValueSeek, wxT("")));
-			CategoriesListPref.insert(std::make_pair(intValueSeek, 0));
-			CategoriesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			intPrevValue = 11;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}
-				
-				ProcessCaptureStrings(&PropertyValue);
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ CategoriesListAltID.erase(intValueSeek); CategoriesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ CategoriesListAltID.erase(intValueSeek); CategoriesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ CategoriesListAltID.erase(intValueSeek); CategoriesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ CategoriesListPID.erase(intValueSeek); CategoriesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ CategoriesListPID.erase(intValueSeek); CategoriesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ CategoriesListPID.erase(intValueSeek); CategoriesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intType == 0){ CategoriesListPref.erase(intValueSeek); CategoriesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 1){ CategoriesListPref.erase(intValueSeek); CategoriesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 2){ CategoriesListPref.erase(intValueSeek); CategoriesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-				
-						if (FirstToken == TRUE){
-					
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-					
-						} else {
-					
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-					
-						}
-				
-					}
-				
-				}
-			
-			}			
-			
-			// Deal with multiple categories.
-			
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitSize = 0;
-			intSplitsFound = 0;
-			intSplitSeek = 0;
-			intPrevValue = 0;
-			intPropertyLen = wxSPropertySeg2.Len();	
-			
-			for (int i = 0; i <= intPropertyLen; i++){
-			
-				if (intSplitSize == 0 && wxSPropertySeg2.Mid(i, 1) == wxT(" ")){
-			
-					continue;
-				
-				}
-			
-				intSplitSize++;
-			
-				if (wxSPropertySeg2.Mid(i, 1) == wxT(",") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-			
-					if (AfterFirstToken == TRUE){
-			
-						SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-						SplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));
-					
-					} else {
-					
-						SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));					
-						AfterFirstToken = TRUE;
-					
-					}
-
-					intSplitsFound++;
-					intSplitSeek = i;
-					intSplitSize = 0;					
-			
-				}			
-			
-			}
-			
-			SplitPoints.insert(std::make_pair(intSplitsFound, (intSplitSeek + 1)));
-			SplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));			
-			
-			intPrevValue = 0;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg2.Mid(intPrevValue, (SLiter->second + 1));
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				/*
-				
-				int intPropertyValueLen = PropertyValue.Len();				
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}
-				
-				*/
-				
-				// Add the data to the General/Home/Work address variables.
-			
-				// Trim any whitespace from the start and end.
-			
-				PropertyData = PropertyData.Trim(FALSE);
-				PropertyData = PropertyData.Trim(TRUE);				
-			
-				ProcessCaptureStrings(&PropertyData);
-			
-				wxListItem coldata;
-		
-				coldata.SetId(intValueSeek);
-				coldata.SetData(intValueSeek);
-				coldata.SetText(PropertyData);
-			
-				ListCtrlIndex = lboCategories->InsertItem(coldata);
-				
-				if (intPref > 0 && intPref < 101){
-				
-					lboCategories->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-					
-				}
-				
-				CategoriesList.erase(intValueSeek);
-				CategoriesListType.erase(intValueSeek);
-				CategoriesListTokens.erase(intValueSeek);
-				CategoriesList.insert(std::make_pair(intValueSeek, PropertyData));
-				CategoriesListType.insert(std::make_pair(intValueSeek, PropertyType));
-				CategoriesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-				CategoryCount++;
-				intValueSeek++;				
-			
-			}	
-			
-		} else if (wxSProperty == wxT("PHOTO")) {
-		
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 7;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 6;
-			
-			// Look for type before continuing.			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			PicturesList.insert(std::make_pair(intValueSeek, ""));
-			PicturesListType.insert(std::make_pair(intValueSeek, wxT("")));
-			PicturesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-			PicturesListPID.insert(std::make_pair(intValueSeek, wxT("")));
-			PicturesListPref.insert(std::make_pair(intValueSeek, 0));
-			PicturesListPicEncType.insert(std::make_pair(intValueSeek, wxT("")));
-			PicturesListPictureType.insert(std::make_pair(intValueSeek, wxT("")));			
-			PicturesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			PicturesListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-
-			intPrevValue = 6;
-
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}
-				
-				ProcessCaptureStrings(&PropertyValue);		
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ PicturesListAltID.erase(intValueSeek); PicturesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ PicturesListAltID.erase(intValueSeek); PicturesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ PicturesListAltID.erase(intValueSeek); PicturesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ PicturesListPID.erase(intValueSeek); PicturesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ PicturesListPID.erase(intValueSeek); PicturesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ PicturesListPID.erase(intValueSeek); PicturesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intType == 0){ PicturesListPref.erase(intValueSeek); PicturesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 1){ PicturesListPref.erase(intValueSeek); PicturesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 2){ PicturesListPref.erase(intValueSeek); PicturesListPref.insert(std::make_pair(intValueSeek, intPref)); }
-				
-				} else if (PropertyName == wxT("MEDIATYPE")){
-				
-					if (intType == 0){ PicturesListMediatype.erase(intValueSeek); PicturesListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ PicturesListMediatype.erase(intValueSeek); PicturesListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ PicturesListMediatype.erase(intValueSeek); PicturesListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-					
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-					
-						if (FirstToken == TRUE){
-						
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-						
-						} else {
-						
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-						
-						}
-					
-					}
-				
-				}
-			
-			}	
-			
-			intPropertyLen = wxSPropertySeg2.Len();
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitsFound = 0;
-			intSplitSize = 0;
-			intPrevValue = 0;			
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);
-			
-			for (int i = 0; i <= intPropertyLen; i++){
-		
-				intSplitSize++;
-			
-				if (wxSPropertySeg2.Mid(i, 1) == wxT(";")){
-			
-					intSplitsFound++;
-					SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-					
-					if (intSplitsFound == 6){ 
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-						break; 
-						
-					} else {
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-					
-					}
-					
-					intSplitSize = 0;					
-			
-				}
-		
-			}
-			
-			wxString wxSPhotoURI;
-			wxString wxSPhotoMIME;
-			wxString wxSPhotoEncoding;
-			wxString wxSPhotoData;
-			std::string base64enc;
-			
-			if (intSplitsFound == 0){
-			
-			} else {
-			
-				std::map<int, int>::iterator striter;
-			
-				striter = SplitLength.find(1);
-			
-				wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
-			
-				while (wSTDataType.HasMoreTokens() == TRUE){
-				
-					wxSPhotoURI = wSTDataType.GetNextToken();
-					wxSPhotoMIME = wSTDataType.GetNextToken();
-					break;
-				
-				}			
-			
-				wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));			
-			
-				while (wSTDataInfo.HasMoreTokens() == TRUE){
-				
-					wxSPhotoEncoding = wSTDataInfo.GetNextToken();
-					wxSPhotoData = wSTDataInfo.GetNextToken();					
-					base64enc = wxSPhotoData.mb_str();
-					break;
-				
-				}
-			
-			}
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(_("Picture"));
-			
-			ListCtrlIndex = lboPictures->InsertItem(coldata);
-				
-			if (intPref > 0 && intPref < 101){
-				
-				lboPictures->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-			
-			}
-				
-			PicturesList.erase(intValueSeek);
-			PicturesListType.erase(intValueSeek);
-			PicturesListTokens.erase(intValueSeek);
-			PicturesListPictureType.erase(intValueSeek);
-			PicturesListPicEncType.erase(intValueSeek);
-			PicturesList.insert(std::make_pair(intValueSeek, base64enc));
-			PicturesListPictureType.insert(std::make_pair(intValueSeek, wxSPhotoMIME));
-			PicturesListPicEncType.insert(std::make_pair(intValueSeek, wxSPhotoEncoding));
-			
-			if (intType == 0){
-			
-				PicturesListType.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 1){
-			
-				PicturesListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				lboPictures->SetItem(ListCtrlIndex, 1, _("Home"));
-			
-			} else if (intType == 2){
-			
-				PicturesListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				lboPictures->SetItem(ListCtrlIndex, 1, _("Work"));
-			
-			}
-			
-			PicturesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			PhotoCount++;
-			intValueSeek++;
-			
-		} else if (wxSProperty == wxT("LOGO")) {
-		
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 6;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 5;
-			
-			// Look for type before continuing.			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			LogosList.insert(std::make_pair(intValueSeek, ""));
-			LogosListType.insert(std::make_pair(intValueSeek, wxT("")));
-			LogosListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-			LogosListPID.insert(std::make_pair(intValueSeek, wxT("")));
-			LogosListPref.insert(std::make_pair(intValueSeek, 0));
-			LogosListPicEncType.insert(std::make_pair(intValueSeek, wxT("")));
-			LogosListPictureType.insert(std::make_pair(intValueSeek, wxT("")));			
-			LogosListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			LogosListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-
-			intPrevValue = 5;
-
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}
-				
-				ProcessCaptureStrings(&PropertyValue);	
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intType == 0){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 1){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 2){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
-				
-				} else if (PropertyName == wxT("MEDIATYPE")){
-				
-					if (intType == 0){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-					
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-					
-						if (FirstToken == TRUE){
-						
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-						
-						} else {
-						
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-						
-						}
-					
-					}
-				
-				}
-			
-			}	
-			
-			intPropertyLen = wxSPropertySeg2.Len();
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitsFound = 0;
-			intSplitSize = 0;
-			intPrevValue = 0;
-			
-			wxString wxSPhotoURI;
-			wxString wxSPhotoMIME;
-			wxString wxSPhotoEncoding;
-			wxString wxSPhotoData;
-			std::string base64enc;
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);
-			
-			if (intSplitsFound == 0){
-			
-			} else {
-			
-				std::map<int, int>::iterator striter;
-			
-				striter = SplitLength.find(1);
-			
-				wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
-			
-				while (wSTDataType.HasMoreTokens() == TRUE){
-				
-					wxSPhotoURI = wSTDataType.GetNextToken();
-					wxSPhotoMIME = wSTDataType.GetNextToken();
-					break;
-				
-				}			
-			
-				wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));			
-			
-				while (wSTDataInfo.HasMoreTokens() == TRUE){
-				
-					wxSPhotoEncoding = wSTDataInfo.GetNextToken();
-					wxSPhotoData = wSTDataInfo.GetNextToken();					
-					base64enc = wxSPhotoData.mb_str();
-					break;
-				
-				}
-			
-			}
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(_("Picture"));
-			
-			ListCtrlIndex = lboLogos->InsertItem(coldata);
-				
-			if (intPref > 0 && intPref < 101){
-				
-				lboLogos->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-			
-			}
-				
-			LogosList.erase(intValueSeek);
-			LogosListType.erase(intValueSeek);
-			LogosListTokens.erase(intValueSeek);
-			LogosListPictureType.erase(intValueSeek);
-			LogosListPicEncType.erase(intValueSeek);
-			LogosList.insert(std::make_pair(intValueSeek, base64enc));
-			LogosListPictureType.insert(std::make_pair(intValueSeek, wxSPhotoMIME));
-			LogosListPicEncType.insert(std::make_pair(intValueSeek, wxSPhotoEncoding));
-			
-			if (intType == 0){
-			
-				LogosListType.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 1){
-			
-				LogosListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				lboLogos->SetItem(ListCtrlIndex, 1, _("Home"));
-			
-			} else if (intType == 2){
-			
-				LogosListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				lboLogos->SetItem(ListCtrlIndex, 1, _("Work"));				
-			
-			}
-			
-			LogosListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			LogoCount++;
-			intValueSeek++;
-			
-		} else if (wxSProperty == wxT("SOUND")) {
-		
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 7;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 6;
-			
-			// Look for type before continuing.			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			SoundsList.insert(std::make_pair(intValueSeek, ""));
-			SoundsListType.insert(std::make_pair(intValueSeek, wxT("")));
-			SoundsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-			SoundsListPID.insert(std::make_pair(intValueSeek, wxT("")));
-			SoundsListPref.insert(std::make_pair(intValueSeek, 0));
-			SoundsListAudioEncType.insert(std::make_pair(intValueSeek, wxT("")));
-			SoundsListAudioType.insert(std::make_pair(intValueSeek, wxT("")));			
-			SoundsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			SoundsListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
-
-			intPrevValue = 6;
-
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}			
-				
-				ProcessCaptureStrings(&PropertyValue);
-				
-				if (PropertyName == wxT("ALTID")){
-
-					if (intType == 0){ SoundsListAltID.erase(intValueSeek); SoundsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ SoundsListAltID.erase(intValueSeek); SoundsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ SoundsListAltID.erase(intValueSeek); SoundsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PID")){
-
-					if (intType == 0){ SoundsListPID.erase(intValueSeek); SoundsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ SoundsListPID.erase(intValueSeek); SoundsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ SoundsListPID.erase(intValueSeek); SoundsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					if (intType == 0){ SoundsListPref.erase(intValueSeek); SoundsListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 1){ SoundsListPref.erase(intValueSeek); SoundsListPref.insert(std::make_pair(intValueSeek, intPref)); }
-					else if (intType == 2){ SoundsListPref.erase(intValueSeek); SoundsListPref.insert(std::make_pair(intValueSeek, intPref)); }
-				
-				} else if (PropertyName == wxT("MEDIATYPE")){
-				
-					if (intType == 0){ SoundsListMediatype.erase(intValueSeek); SoundsListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 1){ SoundsListMediatype.erase(intValueSeek); SoundsListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-					else if (intType == 2){ SoundsListMediatype.erase(intValueSeek); SoundsListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-					
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-					
-						if (FirstToken == TRUE){
-						
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-						
-						} else {
-						
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-						
-						}
-					
-					}
-				
-				}
-			
-			}	
-			
-			intPropertyLen = wxSPropertySeg2.Len();
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitsFound = 0;
-			intSplitSize = 0;
-			intPrevValue = 0;
-			
-			ProcessCaptureStrings(&wxSPropertySeg2);	
-			
-			for (int i = 0; i <= intPropertyLen; i++){
-		
-				intSplitSize++;
-			
-				if (wxSPropertySeg2.Mid(i, 1) == wxT(";")){
-			
-					intSplitsFound++;
-					SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-					
-					if (intSplitsFound == 6){ 
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-						break; 
-						
-					} else {
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-					
-					}
-					
-					intSplitSize = 0;					
-			
-				}
-		
-			}
-			
-			wxString wxSSoundURI;
-			wxString wxSSoundMIME;
-			wxString wxSSoundEncoding;
-			wxString wxSSoundData;
-			std::string base64enc;
-			
-			if (intSplitsFound == 0){
-			
-			} else {
-			
-				std::map<int, int>::iterator striter;
-			
-				striter = SplitLength.find(1);
-			
-				wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
-			
-				while (wSTDataType.HasMoreTokens() == TRUE){
-				
-					wxSSoundURI = wSTDataType.GetNextToken();
-					wxSSoundMIME = wSTDataType.GetNextToken();
-					break;
-				
-				}			
-			
-				wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));			
-			
-				while (wSTDataInfo.HasMoreTokens() == TRUE){
-				
-					wxSSoundEncoding = wSTDataInfo.GetNextToken();
-					wxSSoundData = wSTDataInfo.GetNextToken();					
-					base64enc = wxSSoundData.mb_str();
-					break;
-				
-				}
-			
-			}
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(_("Sound"));
-			
-			ListCtrlIndex = lboSounds->InsertItem(coldata);
-				
-			if (intPref > 0 && intPref < 101){
-				
-				lboSounds->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-			
-			}
-				
-			SoundsList.erase(intValueSeek);
-			SoundsListType.erase(intValueSeek);
-			SoundsListTokens.erase(intValueSeek);
-			SoundsListAudioType.erase(intValueSeek);
-			SoundsListAudioEncType.erase(intValueSeek);
-			SoundsList.insert(std::make_pair(intValueSeek, base64enc));
-			SoundsListAudioType.insert(std::make_pair(intValueSeek, wxSSoundMIME));
-			SoundsListAudioEncType.insert(std::make_pair(intValueSeek, wxSSoundEncoding));
-			
-			if (intType == 0){
-			
-				SoundsListType.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			} else if (intType == 1){
-			
-				SoundsListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				lboLogos->SetItem(ListCtrlIndex, 1, _("Home"));			
-			
-			} else if (intType == 2){
-			
-				SoundsListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				lboLogos->SetItem(ListCtrlIndex, 1, _("Work"));
-			
-			}
-			
-			SoundsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			SoundCount++;
-			intValueSeek++;
-			
-		} else if (wxSProperty == wxT("CALURI")){
-
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intPrevValue = 8;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 7;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			CalendarList.insert(std::make_pair(intValueSeek, wxT("")));
-			CalendarListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-			CalendarListPID.insert(std::make_pair(intValueSeek, wxT("")));
-			CalendarListPref.insert(std::make_pair(intValueSeek, 0));
-			CalendarListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-			intPrevValue = 6;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}				
-				
-				if (PropertyName == wxT("ALTID")){
-
-					CalendarListAltID.erase(intValueSeek); CalendarListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else if (PropertyName == wxT("PID")){
-
-					CalendarListPID.erase(intValueSeek); CalendarListPID.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					CalendarListPref.erase(intValueSeek); CalendarListPref.insert(std::make_pair(intValueSeek, intPref));
-				
-				} else if (PropertyName == wxT("MEDIATYPE")){
-				
-					CalendarListMediatype.erase(intValueSeek); CalendarListMediatype.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-				
-						if (FirstToken == TRUE){
-					
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-					
-						} else {
-					
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-					
-						}
-				
-					}
-				
-				}
-			
-			}	
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(wxSPropertySeg2);
-
-			ListCtrlIndex = lboCalendarAddresses->InsertItem(coldata);
-				
-			if (intPref > 0 && intPref < 101){
-				
-				lboCalendarAddresses->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-					
-			}
-			
-			CaptureString(&wxSPropertySeg2, FALSE);
-				
-			CalendarList.erase(intValueSeek);
-			CalendarListType.erase(intValueSeek);
-			CalendarListTokens.erase(intValueSeek);
-			CalendarList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-			
-			if (intType == 0){
-			
-				CalendarListType.insert(std::make_pair(intValueSeek, wxT("")));				
-			
-			} else if (intType == 1){
-			
-				CalendarListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				lboCalendarAddresses->SetItem(ListCtrlIndex, 1, _("Home"), intPref);
-			
-			} else if (intType == 2){
-			
-				CalendarListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				lboCalendarAddresses->SetItem(ListCtrlIndex, 1, _("Work"), intPref);
-			
-			}
-			
-			CalendarListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			CalAdrCount++;
-			intValueSeek++;
-		
-		} else if (wxSProperty == wxT("CALADRURI")){
-
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intPrevValue = 11;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 10;
-			
-			// Look for type before continuing.
-			
-			
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			CalendarRequestList.insert(std::make_pair(intValueSeek, wxT("")));
-			CalendarRequestListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-			CalendarRequestListPID.insert(std::make_pair(intValueSeek, wxT("")));
-			CalendarRequestListPref.insert(std::make_pair(intValueSeek, 0));
-			CalendarRequestListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			intPrevValue = 10;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}				
-				
-				if (PropertyName == wxT("ALTID")){
-
-					CalendarRequestListAltID.erase(intValueSeek); CalendarRequestListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else if (PropertyName == wxT("PID")){
-
-					CalendarRequestListPID.erase(intValueSeek); CalendarRequestListPID.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					CalendarRequestListPref.erase(intValueSeek); CalendarRequestListPref.insert(std::make_pair(intValueSeek, intPref));
-				
-				} else if (PropertyName == wxT("MEDIATYPE")){
-				
-					CalendarRequestListMediatype.erase(intValueSeek); CalendarRequestListMediatype.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-				
-						if (FirstToken == TRUE){
-					
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-					
-						} else {
-					
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-					
-						}
-				
-					}
-				
-				}
-			
-			}	
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(wxSPropertySeg2);
-
-			ListCtrlIndex = lboCalendarRequestAddress->InsertItem(coldata);
-				
-			if (intPref > 0 && intPref < 101){
-				
-				lboCalendarRequestAddress->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-					
-			}
-				
-			CaptureString(&wxSPropertySeg2, FALSE);				
-				
-			CalendarRequestList.erase(intValueSeek);
-			CalendarRequestListType.erase(intValueSeek);
-			CalendarRequestListTokens.erase(intValueSeek);
-			CalendarRequestList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));			
-			
-			if (intType == 0){
-			
-				CalendarRequestListType.insert(std::make_pair(intValueSeek, wxT("")));				
-			
-			} else if (intType == 1){
-			
-				CalendarRequestListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				lboCalendarRequestAddress->SetItem(ListCtrlIndex, 1, _("Home"), intPref);
-			
-			} else if (intType == 2){
-			
-				CalendarRequestListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				lboCalendarRequestAddress->SetItem(ListCtrlIndex, 1, _("Work"), intPref);
-			
-			}
-			
-			CalendarRequestListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			CalReqAdrCount++;
-			intValueSeek++;
-		
-		} else if (wxSProperty == wxT("FBURL")){
-
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intPrevValue = 7;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 6;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			FreeBusyList.insert(std::make_pair(intValueSeek, wxT("")));
-			FreeBusyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-			FreeBusyListPID.insert(std::make_pair(intValueSeek, wxT("")));
-			FreeBusyListPref.insert(std::make_pair(intValueSeek, 0));
-			FreeBusyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-			
-			intPrevValue = 6;
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}				
-				
-				if (PropertyName == wxT("ALTID")){
-
-					FreeBusyListAltID.erase(intValueSeek); FreeBusyListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else if (PropertyName == wxT("PID")){
-
-					FreeBusyListPID.erase(intValueSeek); FreeBusyListPID.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					FreeBusyListPref.erase(intValueSeek); FreeBusyListPref.insert(std::make_pair(intValueSeek, intPref));
-				
-				} else if (PropertyName == wxT("MEDIATYPE")){
-				
-					FreeBusyListMediatype.erase(intValueSeek); FreeBusyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-				
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-				
-						if (FirstToken == TRUE){
-					
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-					
-						} else {
-					
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-					
-						}
-				
-					}
-				
-				}
-			
-			}	
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			coldata.SetText(wxSPropertySeg2);
-
-			ListCtrlIndex = lboFreeBusyAddresses->InsertItem(coldata);
-				
-			if (intPref > 0 && intPref < 101){
-				
-				lboFreeBusyAddresses->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
-					
-			}
-			
-			CaptureString(&wxSPropertySeg2, FALSE);			
-				
-			FreeBusyList.erase(intValueSeek);
-			FreeBusyListType.erase(intValueSeek);
-			FreeBusyListTokens.erase(intValueSeek);
-			FreeBusyList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-			
-			if (intType == 0){
-			
-				FreeBusyListType.insert(std::make_pair(intValueSeek, wxT("")));				
-			
-			} else if (intType == 1){
-			
-				FreeBusyListType.insert(std::make_pair(intValueSeek, wxT("home")));
-				lboFreeBusyAddresses->SetItem(ListCtrlIndex, 1, _("Home"), intPref);
-			
-			} else if (intType == 2){
-			
-				FreeBusyListType.insert(std::make_pair(intValueSeek, wxT("work")));
-				lboFreeBusyAddresses->SetItem(ListCtrlIndex, 1, _("Work"), intPref);
-			
-			}
-			
-			FreeBusyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			FreeBusyCount++;
-			intValueSeek++;
-		} else if (wxSProperty == wxT("KEY")){
-		
-			size_t intPropertyLen = wxSPropertySeg1.Len();
-			std::map<int, int> SplitPoints;
-			std::map<int, int> SplitLength;
-			std::map<int, int>::iterator SLiter;			
-			wxString PropertyData;
-			wxString PropertyName;
-			wxString PropertyValue;
-			wxString PropertyTokens;
-			bool FirstToken = TRUE;
-			int intSplitsFound = 0;
-			int intSplitSize = 0;
-			int intPrevValue = 5;
-			int intPref = 0;			
-			int intType = 0;
-			long ListCtrlIndex;
-			
-			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
-			
-			intPrevValue = 4;
-			
-			// Look for type before continuing.
-			
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				if (PropertyName == wxT("TYPE")){
-				
-					if (PropertyValue == wxT("work")){
-					
-						intType = 2;					
-					
-					} else if (PropertyValue == wxT("home")){
-
-						intType = 1;
-					
-					} else {
-					
-						intType = 0;
-					
-					}
-				
-				}
-			
-			}
-			
-			// Setup blank lines for later on.
-			
-			KeyList.insert(std::make_pair(intValueSeek, wxT("")));
-			KeyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
-			KeyListPID.insert(std::make_pair(intValueSeek, wxT("")));
-			KeyListPref.insert(std::make_pair(intValueSeek, 0));
-			KeyListKeyType.insert(std::make_pair(intValueSeek, FALSE));
-			KeyListDataType.insert(std::make_pair(intValueSeek, wxT("")));
-			KeyListDataEncType.insert(std::make_pair(intValueSeek, wxT("")));
-			KeyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
-
-			intPrevValue = 4;
-
-			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
-			intiter != SplitPoints.end(); ++intiter){
-			
-				SLiter = SplitLength.find(intiter->first);
-			
-				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
-				
-				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
-				PropertyName = PropertyElement.GetNextToken();				
-				PropertyValue = PropertyElement.GetNextToken();
-				
-				intPrevValue = intiter->second;
-				
-				// Process properties.
-				
-				size_t intPropertyValueLen = PropertyValue.Len();
-				
-				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
-					
-					PropertyValue.Trim();
-					PropertyValue.RemoveLast();
-					
-				}				
-				
-				if (PropertyValue.Mid(0, 1) == wxT("\"")){
-					
-					PropertyValue.Remove(0, 1);
-					
-				}				
-				
-				if (PropertyName == wxT("ALTID")){
-
-					KeyListAltID.erase(intValueSeek); KeyListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else if (PropertyName == wxT("PID")){
-
-					KeyListPID.erase(intValueSeek); KeyListPID.insert(std::make_pair(intValueSeek, PropertyValue));
-				
-				} else if (PropertyName == wxT("PREF")){
-					
-					intPref = wxAtoi(PropertyValue);
-				
-					KeyListPref.erase(intValueSeek); KeyListPref.insert(std::make_pair(intValueSeek, intPref));
-				
-				} else {
-				
-					// Something else we don't know about so append
-					// to the tokens variable.
-					
-					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
-					
-						if (FirstToken == TRUE){
-						
-							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
-							FirstToken = FALSE;
-						
-						} else {
-						
-							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
-						
-						}
-					
-					}
-				
-				}
-			
-			}				
-			
-			intPropertyLen = wxSPropertySeg2.Len();
-			SplitPoints.clear();
-			SplitLength.clear();
-			intSplitsFound = 0;
-			intSplitSize = 0;
-			intPrevValue = 0;			
-			
-			for (int i = 0; i <= intPropertyLen; i++){
-		
-				intSplitSize++;
-			
-				if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
-			
-					intSplitsFound++;
-					SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
-					
-					if (intSplitsFound == 6){ 
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-						break; 
-						
-					} else {
-					
-						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
-					
-					}
-					
-					intSplitSize = 0;					
-			
-				}
-		
-			}
-			
-			wxString wxSKeyURI;
-			wxString wxSKeyMIME;
-			wxString wxSKeyEncoding;
-			wxString wxSKeyData;
-			std::string base64enc;
-			
-			if (intSplitsFound == 0){
-			
-			} else {
-			
-				std::map<int, int>::iterator striter;
-			
-				striter = SplitLength.find(1);
-			
-				wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
-			
-				while (wSTDataType.HasMoreTokens() == TRUE){
-				
-					wxSKeyURI = wSTDataType.GetNextToken();
-					wxSKeyMIME = wSTDataType.GetNextToken();
-					break;
-				
-				}			
-			
-				if (wxSKeyURI == wxT("data")){
-				
-						wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 2)), wxT(","));			
-	 		
-						while (wSTDataInfo.HasMoreTokens() == TRUE){
-				
-						wxSKeyEncoding = wSTDataInfo.GetNextToken();
-						wxSKeyData = wSTDataInfo.GetNextToken();
-						break;
-				
-					}
-				
-				}
-			
-			}
-			
-			// Add the data to the General/Home/Work address variables.
-			
-			wxListItem coldata;
-		
-			coldata.SetId(intValueSeek);
-			coldata.SetData(intValueSeek);
-			
-			if (wxSKeyURI == wxT("data")){
-			
-				if (wxSKeyMIME == wxT("application/pgp-keys")){
-			
-					coldata.SetText(_("PGP Key"));
-				
-				} else {
-				
-					coldata.SetText(_("Key"));
-				
-				}
-				
-				KeyListDataEncType.erase(intValueSeek);
-				KeyListKeyType.erase(intValueSeek);
-				KeyListDataEncType.insert(std::make_pair(intValueSeek, wxSKeyEncoding));
-				KeyListKeyType.insert(std::make_pair(intValueSeek, TRUE));
-				
-				KeyList.erase(intValueSeek);
-				KeyList.insert(std::make_pair(intValueSeek, wxSKeyData));
-			
-			} else {
-			
-				coldata.SetText(wxSPropertySeg2);
-				
-				KeyList.erase(intValueSeek);
-				KeyList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
-			
-			}
-			
-			ListCtrlIndex = lboKeys->InsertItem(coldata);
-				
-			if (intPref > 0 && intPref < 101){
-				
-				lboKeys->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
-			
-			}
-				
-
-			KeyListType.erase(intValueSeek);
-			KeyListTokens.erase(intValueSeek);
-			KeyListDataType.erase(intValueSeek);
-
-			KeyListDataType.insert(std::make_pair(intValueSeek, wxSKeyMIME));
-				
-            switch (intType){
-                case 0: KeyListType.insert(std::make_pair(intValueSeek, wxT("")));
-                case 1: KeyListType.insert(std::make_pair(intValueSeek, wxT("home")));
-                case 2: KeyListType.insert(std::make_pair(intValueSeek, wxT("work")));
-            }
-            
-			KeyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
-			
-			KeyCount++;
-			intValueSeek++;
+			LoadKey(wxSPropertySeg1, wxSPropertySeg2, &KeyCount);
 		
 		} else if (wxSProperty == wxT("UID") && UIDProcessed == FALSE){
 		
diff --git a/source/contacteditor/frmContactEditor-LoadAddress.cpp b/source/contacteditor/frmContactEditor-LoadAddress.cpp
new file mode 100644
index 0000000..16e8dbf
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadAddress.cpp
@@ -0,0 +1,439 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadADR(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *ADRCount){
+
+	size_t intPropertyLen = wxSPropertySeg1.Len();
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	wxString AddressLabel;
+	wxString AddressLang;
+	wxString AddressAltID;
+	wxString AddressPID;
+	wxString AddressTokens;
+	wxString AddressGeo;
+	wxString AddressTimezone;
+	wxString AddressType;
+	wxString AddressMediatype;
+	wxString AddressPOBox;
+	wxString AddressExtended;
+	wxString AddressStreet;
+	wxString AddressLocality;
+	wxString AddressCity;
+	wxString AddressRegion;
+	wxString AddressPostalCode;
+	wxString AddressCountry;
+	bool FirstToken = TRUE;			
+	int intSplitsFound = 0;
+	int intSplitSize = 0;
+	int intPrevValue = 5;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 4;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	if (intType == 0){
+	
+		GeneralAddressList.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralAddressListPref.insert(std::make_pair(intValueSeek, 0));
+		GeneralAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+	} else if (intType == 1){
+	
+		HomeAddressList.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeAddressListPref.insert(std::make_pair(intValueSeek, 0));
+		HomeAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	} else if (intType == 2){
+
+		BusinessAddressList.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessAddressListTown.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessAddressListCounty.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessAddressListPostCode.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessAddressListCountry.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessAddressListLabel.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessAddressListLang.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessAddressListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessAddressListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessAddressListGeo.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessAddressListTimezone.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessAddressListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessAddressListPref.insert(std::make_pair(intValueSeek, 0));
+		BusinessAddressListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	}
+	
+	intPrevValue = 4;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		ProcessCaptureStrings(&PropertyValue);
+		
+		// Process properties.
+		
+		if (PropertyName == wxT("LABEL")){
+		
+			if (intType == 0){ GeneralAddressListLabel.erase(intValueSeek); GeneralAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeAddressListLabel.erase(intValueSeek); HomeAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessAddressListLabel.erase(intValueSeek); BusinessAddressListLabel.insert(std::make_pair(intValueSeek, PropertyValue));}
+		
+		} else if (PropertyName == wxT("LANGUAGE")){
+		
+			if (intType == 0){ GeneralAddressListLang.erase(intValueSeek); GeneralAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeAddressListLang.erase(intValueSeek); HomeAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessAddressListLang.erase(intValueSeek); BusinessAddressListLang.insert(std::make_pair(intValueSeek, PropertyValue)); }				
+		
+		} else if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ GeneralAddressListAltID.erase(intValueSeek); GeneralAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeAddressListAltID.erase(intValueSeek); HomeAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessAddressListAltID.erase(intValueSeek); BusinessAddressListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ GeneralAddressListPID.erase(intValueSeek); GeneralAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeAddressListPID.erase(intValueSeek); HomeAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessAddressListPID.erase(intValueSeek); BusinessAddressListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("GEO")){
+		
+			if (intType == 0){ GeneralAddressListGeo.erase(intValueSeek); GeneralAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeAddressListGeo.erase(intValueSeek); HomeAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessAddressListGeo.erase(intValueSeek); BusinessAddressListGeo.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("TZ")){
+
+			if (intType == 0){ GeneralAddressListTimezone.erase(intValueSeek); GeneralAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeAddressListTimezone.erase(intValueSeek); HomeAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessAddressListTimezone.erase(intValueSeek); BusinessAddressListTimezone.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("MEDIATYPE")){
+
+			if (intType == 0){ GeneralAddressListMediatype.erase(intValueSeek); GeneralAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeAddressListMediatype.erase(intValueSeek); HomeAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessAddressListMediatype.erase(intValueSeek); BusinessAddressListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+			
+			if (intPref > 0 && intPref < 101){
+						
+				if (intType == 0){ GeneralAddressListPref.erase(intValueSeek); GeneralAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				else if (intType == 1){ HomeAddressListPref.erase(intValueSeek); HomeAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				else if (intType == 2){ BusinessAddressListPref.erase(intValueSeek); BusinessAddressListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				
+			}
+		
+		} else {
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+			
+				if (FirstToken == TRUE){
+				
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+				
+				} else {
+				
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+				
+				}
+			
+			}
+		
+		}
+	
+	}			
+	
+	// Split the address. 
+
+	//std::map<int, int>::iterator SLiter;
+	intPropertyLen = wxSPropertySeg2.Len();
+	SplitPoints.clear();
+	SplitLength.clear();
+	intSplitsFound = 0;
+	intSplitSize = 0;
+	intPrevValue = 0;
+	
+	for (int i = 0; i <= intPropertyLen; i++){
+
+		intSplitSize++;
+	
+		if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+	
+			intSplitsFound++;
+			SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+			
+			if (intSplitsFound == 6){ 
+			
+				SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+				break; 
+				
+			} else {
+			
+				SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+			
+			}
+			
+			intSplitSize = 0;					
+	
+		}
+
+	}
+	
+	// Split the data into several parts.			
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+			
+		if (intiter->first == 1){
+		
+			// Deal with PO Box.
+			
+			SLiter = SplitLength.find(1);
+								
+			//txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
+			AddressPOBox = wxSPropertySeg2.Mid(0, SLiter->second);
+			intPrevValue = intiter->second;
+		
+		} else if (intiter->first == 2){
+		
+			// Deal with extended address.
+			
+			SLiter = SplitLength.find(2);
+			
+			AddressExtended = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+			//txtForename->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+			intPrevValue = intiter->second;
+		
+		} else if (intiter->first == 3){
+		
+			// Deal with street address.
+			
+			SLiter = SplitLength.find(3);
+								
+			AddressStreet = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+			//txtOtherNames->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+			intPrevValue = intiter->second;
+		
+		} else if (intiter->first == 4){
+		
+			// Deal with locality
+
+			SLiter = SplitLength.find(4);
+			
+			AddressLocality = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+			//txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+			intPrevValue = intiter->second;
+			
+			//txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
+		
+		} else if (intiter->first == 5){
+		
+			// Deal with region.
+
+			SLiter = SplitLength.find(5);
+			
+			AddressRegion = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+			//txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+			intPrevValue = intiter->second;
+			
+			//txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
+		
+		} else if (intiter->first == 6){
+		
+			// Deal with post code.
+
+			SLiter = SplitLength.find(6);
+			
+			AddressPostalCode = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+			//txtTitle->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+			intPrevValue = intiter->second;
+			
+			// Deal with country.
+			
+			AddressCountry = wxSPropertySeg2.Mid(intPrevValue);
+			//txtSuffix->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
+		
+		}
+	
+	}	
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	ProcessCaptureStrings(&AddressStreet, &AddressLocality, &AddressRegion, &AddressPostalCode, &AddressCountry);
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(AddressStreet);
+	
+	if (intType == 0){
+	
+		ListCtrlIndex = lboAddresses->InsertItem(coldata);
+		lboAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
+		lboAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
+		lboAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboAddresses->SetItem(ListCtrlIndex, 4, wxString::Format(wxT("%i"), intPref));
+			
+		}
+		
+		GeneralAddressList.erase(intValueSeek);
+		GeneralAddressListTown.erase(intValueSeek);
+		GeneralAddressListCounty.erase(intValueSeek);
+		GeneralAddressListPostCode.erase(intValueSeek);
+		GeneralAddressListCountry.erase(intValueSeek);
+		GeneralAddressListType.erase(intValueSeek);
+		GeneralAddressListTokens.erase(intValueSeek);
+		GeneralAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
+		GeneralAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
+		GeneralAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
+		GeneralAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
+		GeneralAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
+		GeneralAddressListType.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 1){ 
+	
+		ListCtrlIndex = lboHomeAddresses->InsertItem(coldata);
+		lboHomeAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
+		lboHomeAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
+		lboHomeAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboHomeAddresses->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		HomeAddressList.erase(intValueSeek);
+		HomeAddressListTown.erase(intValueSeek);
+		HomeAddressListCounty.erase(intValueSeek);
+		HomeAddressListPostCode.erase(intValueSeek);
+		HomeAddressListCountry.erase(intValueSeek);
+		HomeAddressListType.erase(intValueSeek);
+		HomeAddressListTokens.erase(intValueSeek);				
+		HomeAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
+		HomeAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
+		HomeAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
+		HomeAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
+		HomeAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
+		HomeAddressListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		HomeAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 2){ 
+	
+		ListCtrlIndex = lboBusinessAddresses->InsertItem(coldata);
+		lboBusinessAddresses->SetItem(ListCtrlIndex, 1, AddressLocality);
+		lboBusinessAddresses->SetItem(ListCtrlIndex, 2, AddressRegion);
+		lboBusinessAddresses->SetItem(ListCtrlIndex, 3, AddressPostalCode);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboBusinessAddresses->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+		
+		BusinessAddressList.erase(intValueSeek);
+		BusinessAddressListTown.erase(intValueSeek);
+		BusinessAddressListCounty.erase(intValueSeek);
+		BusinessAddressListPostCode.erase(intValueSeek);
+		BusinessAddressListCountry.erase(intValueSeek);
+		BusinessAddressListType.erase(intValueSeek);
+		BusinessAddressListTokens.erase(intValueSeek);
+		BusinessAddressList.insert(std::make_pair(intValueSeek, AddressStreet));
+		BusinessAddressListTown.insert(std::make_pair(intValueSeek, AddressLocality));
+		BusinessAddressListCounty.insert(std::make_pair(intValueSeek, AddressRegion));
+		BusinessAddressListPostCode.insert(std::make_pair(intValueSeek, AddressPostalCode));
+		BusinessAddressListCountry.insert(std::make_pair(intValueSeek, AddressCountry));
+		BusinessAddressListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		BusinessAddressListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
+	
+	}
+	
+	ADRCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadBADays.cpp b/source/contacteditor/frmContactEditor-LoadBADays.cpp
new file mode 100644
index 0000000..767f6dd
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadBADays.cpp
@@ -0,0 +1,283 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadBDay(wxString wxSPropertySeg1, wxString wxSPropertySeg2, bool *BirthdayProcessed){
+
+	// Process date. Preserve the remainder in the string.
+
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool BirthdayText = FALSE;
+	int intPrevValue = 6;
+
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+
+	intPrevValue = 5;
+
+	// Look for type before continuing.
+
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+
+		SLiter = SplitLength.find(intiter->first);
+
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
+	
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+	
+		intPrevValue = intiter->second;
+	
+		if (PropertyName == wxT("VALUE") && PropertyValue == wxT("text") && BirthdayText == FALSE){
+	
+			ProcessCaptureStrings(&wxSPropertySeg2);
+			txtBirthday->SetValue(wxSPropertySeg2);
+			Birthday = wxSPropertySeg2;
+			BirthdayText = TRUE;
+	
+		}
+
+	}
+
+	// Setup blank lines for later on.
+	
+	intPrevValue = 5;
+
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+
+		SLiter = SplitLength.find(intiter->first);
+
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
+	
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+	
+		intPrevValue = intiter->second;
+	
+		// Process properties.
+	
+		ProcessCaptureStrings(&PropertyValue);
+	
+		size_t intPropertyValueLen = PropertyValue.Len();
+	
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+		
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+		
+		}				
+	
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+		
+			PropertyValue.Remove(0, 1);
+		
+		}				
+	
+		if (PropertyName == wxT("ALTID")){
+
+			BirthdayAltID = PropertyValue;
+	
+		} else if (PropertyName == wxT("CALSCALE")){
+	
+			BirthdayCalScale = PropertyValue;
+	
+		} else if (PropertyName != wxT("VALUE")) {
+	
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
+		
+				PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+				
+			}
+			
+		}
+
+	}	
+
+	// Add the data to the variables and form.
+	
+	if (BirthdayText == FALSE){
+	
+		Birthday = wxSPropertySeg2;
+		int DateYear = 0;
+		wxDateTime::Month DateMonth;
+		unsigned int DateDay;
+		
+		wxString wxSData;
+		
+		if (Birthday.Mid(0, 2) == wxT("--")){
+		
+			// Skip year.
+		
+		} else {
+		
+			DateYear = wxAtoi(Birthday.Mid(0,4));
+		
+		}
+		
+		DateMonth = (wxDateTime::Month)(wxAtoi(Birthday.Mid(4,2)) - 1);
+		DateDay = wxAtoi(Birthday.Mid(6,2));
+	
+		wxDateTime BDayDate(DateDay,DateMonth,DateYear);
+	
+		/*BDayDate.SetDay(DateDay);
+		BDayDate.SetMonth(wxDateTime::Month::Jan);
+		BDayDate.SetYear(DateYear);*/
+	
+		dapBirthday->SetValue(BDayDate);				
+	
+	}
+	
+	BirthdayTokens = PropertyTokens;
+	
+	*BirthdayProcessed = TRUE;
+
+}
+
+void frmContactEditor::LoadAnniversary(wxString wxSPropertySeg1, wxString wxSPropertySeg2, bool *AnniversaryProcessed){
+
+	// Process date. Preserve the remainder in the string.
+		
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool AnniversaryText = FALSE;
+	int intPrevValue = 13;
+
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+
+	intPrevValue = 12;
+
+	// Look for type before continuing.
+
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+
+		SLiter = SplitLength.find(intiter->first);
+
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
+	
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+	
+		intPrevValue = intiter->second;
+	
+		if (PropertyName == wxT("VALUE") && PropertyValue == wxT("text") && AnniversaryText == FALSE){
+	
+			ProcessCaptureStrings(&wxSPropertySeg2);
+			txtAnniversary->SetValue(wxSPropertySeg2);
+			Anniversary = wxSPropertySeg2;
+			AnniversaryText = TRUE;
+	
+		}
+
+	}
+
+	// Setup blank lines for later on.
+
+	intPrevValue = 12;
+
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+
+		SLiter = SplitLength.find(intiter->first);
+
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
+	
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+	
+		intPrevValue = intiter->second;
+	
+		// Process properties.
+	
+		size_t intPropertyValueLen = PropertyValue.Len();
+	
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+		
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+		
+		}				
+	
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+		
+			PropertyValue.Remove(0, 1);
+		
+		}
+		
+		ProcessCaptureStrings(&PropertyValue);		
+	
+		if (PropertyName == wxT("ALTID")){
+
+			AnniversaryAltID = PropertyValue;
+	
+		} else if (PropertyName == wxT("CALSCALE")){
+	
+			AnniversaryCalScale = PropertyValue;
+	
+		} else if (PropertyName != wxT("VALUE")) {
+	
+			// Something else we don't know about so append
+			// to the tokens variable.
+			
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
+		
+				PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+				
+			}
+	
+		}
+
+	}	
+
+	// Add the data to the variables and form.
+	
+	if (AnniversaryText == FALSE){
+	
+		Anniversary = wxSPropertySeg2;
+		int DateYear = 0;
+		wxDateTime::Month DateMonth;
+		int DateDay;
+		
+		wxString wxSData;
+		
+		if (Anniversary.Mid(0, 2) == wxT("--")){
+		
+			// Skip year.
+		
+		} else {
+		
+			DateYear = wxAtoi(Anniversary.Mid(0,4));
+		
+		}
+		
+		DateMonth = (wxDateTime::Month)(wxAtoi(Anniversary.Mid(4,2)) - 1);
+		DateDay = wxAtoi(Anniversary.Mid(6,2));					
+	
+		wxDateTime ADayDate(DateDay,DateMonth,DateYear);
+	
+		dapAnniversary->SetValue(ADayDate);
+	
+	}
+	
+	AnniversaryTokens = PropertyTokens;
+	
+	*AnniversaryProcessed = TRUE;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadCalendar.cpp b/source/contacteditor/frmContactEditor-LoadCalendar.cpp
new file mode 100644
index 0000000..aab6dc4
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadCalendar.cpp
@@ -0,0 +1,367 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadCalURI(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *CalAdrCount){
+
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intPrevValue = 8;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 7;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	CalendarList.insert(std::make_pair(intValueSeek, wxT("")));
+	CalendarListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+	CalendarListPID.insert(std::make_pair(intValueSeek, wxT("")));
+	CalendarListPref.insert(std::make_pair(intValueSeek, 0));
+	CalendarListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+	intPrevValue = 6;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}				
+		
+		if (PropertyName == wxT("ALTID")){
+
+			CalendarListAltID.erase(intValueSeek); CalendarListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else if (PropertyName == wxT("PID")){
+
+			CalendarListPID.erase(intValueSeek); CalendarListPID.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			CalendarListPref.erase(intValueSeek); CalendarListPref.insert(std::make_pair(intValueSeek, intPref));
+		
+		} else if (PropertyName == wxT("MEDIATYPE")){
+		
+			CalendarListMediatype.erase(intValueSeek); CalendarListMediatype.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+		
+				if (FirstToken == TRUE){
+			
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+			
+				} else {
+			
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+			
+				}
+		
+			}
+		
+		}
+	
+	}	
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(wxSPropertySeg2);
+
+	ListCtrlIndex = lboCalendarAddresses->InsertItem(coldata);
+		
+	if (intPref > 0 && intPref < 101){
+		
+		lboCalendarAddresses->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+			
+	}
+	
+	CaptureString(&wxSPropertySeg2, FALSE);
+		
+	CalendarList.erase(intValueSeek);
+	CalendarListType.erase(intValueSeek);
+	CalendarListTokens.erase(intValueSeek);
+	CalendarList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+	
+	if (intType == 0){
+	
+		CalendarListType.insert(std::make_pair(intValueSeek, wxT("")));				
+	
+	} else if (intType == 1){
+	
+		CalendarListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		lboCalendarAddresses->SetItem(ListCtrlIndex, 1, _("Home"), intPref);
+	
+	} else if (intType == 2){
+	
+		CalendarListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		lboCalendarAddresses->SetItem(ListCtrlIndex, 1, _("Work"), intPref);
+	
+	}
+	
+	CalendarListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	CalAdrCount++;
+	intValueSeek++;
+	
+}
+
+void frmContactEditor::LoadCalAdrURI(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *CalReqAdrCount){
+
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intPrevValue = 11;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 10;
+	
+	// Look for type before continuing.
+	
+	
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	CalendarRequestList.insert(std::make_pair(intValueSeek, wxT("")));
+	CalendarRequestListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+	CalendarRequestListPID.insert(std::make_pair(intValueSeek, wxT("")));
+	CalendarRequestListPref.insert(std::make_pair(intValueSeek, 0));
+	CalendarRequestListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	intPrevValue = 10;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}				
+		
+		if (PropertyName == wxT("ALTID")){
+
+			CalendarRequestListAltID.erase(intValueSeek); CalendarRequestListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else if (PropertyName == wxT("PID")){
+
+			CalendarRequestListPID.erase(intValueSeek); CalendarRequestListPID.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			CalendarRequestListPref.erase(intValueSeek); CalendarRequestListPref.insert(std::make_pair(intValueSeek, intPref));
+		
+		} else if (PropertyName == wxT("MEDIATYPE")){
+		
+			CalendarRequestListMediatype.erase(intValueSeek); CalendarRequestListMediatype.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+		
+				if (FirstToken == TRUE){
+			
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+			
+				} else {
+			
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+			
+				}
+		
+			}
+		
+		}
+	
+	}	
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(wxSPropertySeg2);
+
+	ListCtrlIndex = lboCalendarRequestAddress->InsertItem(coldata);
+		
+	if (intPref > 0 && intPref < 101){
+		
+		lboCalendarRequestAddress->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+			
+	}
+		
+	CaptureString(&wxSPropertySeg2, FALSE);				
+		
+	CalendarRequestList.erase(intValueSeek);
+	CalendarRequestListType.erase(intValueSeek);
+	CalendarRequestListTokens.erase(intValueSeek);
+	CalendarRequestList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));			
+	
+	if (intType == 0){
+	
+		CalendarRequestListType.insert(std::make_pair(intValueSeek, wxT("")));				
+	
+	} else if (intType == 1){
+	
+		CalendarRequestListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		lboCalendarRequestAddress->SetItem(ListCtrlIndex, 1, _("Home"), intPref);
+	
+	} else if (intType == 2){
+	
+		CalendarRequestListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		lboCalendarRequestAddress->SetItem(ListCtrlIndex, 1, _("Work"), intPref);
+	
+	}
+	
+	CalendarRequestListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	CalReqAdrCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadCategory.cpp b/source/contacteditor/frmContactEditor-LoadCategory.cpp
new file mode 100644
index 0000000..4f48c39
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadCategory.cpp
@@ -0,0 +1,440 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadCategory(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *CategoryCount){
+
+	size_t intPropertyLen = wxSPropertySeg1.Len();
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	wxString PropertyType;
+	bool AfterFirstToken = FALSE;
+	bool FirstToken = TRUE;			
+	int intSplitsFound = 0;
+	int intSplitSize = 0;
+	int intPrevValue = 12;
+	int intPref = 0;			
+	int intType = 0;
+	int intSplitSeek = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 11;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;
+				PropertyType = wxT("work");				
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+				PropertyType = wxT("home");						
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	CategoriesList.insert(std::make_pair(intValueSeek, wxT("")));
+	CategoriesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+	CategoriesListPID.insert(std::make_pair(intValueSeek, wxT("")));
+	CategoriesListPref.insert(std::make_pair(intValueSeek, 0));
+	CategoriesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	intPrevValue = 11;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}
+		
+		ProcessCaptureStrings(&PropertyValue);
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ CategoriesListAltID.erase(intValueSeek); CategoriesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ CategoriesListAltID.erase(intValueSeek); CategoriesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ CategoriesListAltID.erase(intValueSeek); CategoriesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ CategoriesListPID.erase(intValueSeek); CategoriesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ CategoriesListPID.erase(intValueSeek); CategoriesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ CategoriesListPID.erase(intValueSeek); CategoriesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			if (intType == 0){ CategoriesListPref.erase(intValueSeek); CategoriesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 1){ CategoriesListPref.erase(intValueSeek); CategoriesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 2){ CategoriesListPref.erase(intValueSeek); CategoriesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+		
+				if (FirstToken == TRUE){
+			
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+			
+				} else {
+			
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+			
+				}
+		
+			}
+		
+		}
+	
+	}			
+	
+	// Deal with multiple categories.
+	
+	SplitPoints.clear();
+	SplitLength.clear();
+	intSplitSize = 0;
+	intSplitsFound = 0;
+	intSplitSeek = 0;
+	intPrevValue = 0;
+	intPropertyLen = wxSPropertySeg2.Len();	
+	
+	for (int i = 0; i <= intPropertyLen; i++){
+	
+		if (intSplitSize == 0 && wxSPropertySeg2.Mid(i, 1) == wxT(" ")){
+	
+			continue;
+		
+		}
+	
+		intSplitSize++;
+	
+		if (wxSPropertySeg2.Mid(i, 1) == wxT(",") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+	
+			if (AfterFirstToken == TRUE){
+	
+				SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+				SplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));
+			
+			} else {
+			
+				SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+				SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));					
+				AfterFirstToken = TRUE;
+			
+			}
+
+			intSplitsFound++;
+			intSplitSeek = i;
+			intSplitSize = 0;					
+	
+		}			
+	
+	}
+	
+	SplitPoints.insert(std::make_pair(intSplitsFound, (intSplitSeek + 1)));
+	SplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));			
+	
+	intPrevValue = 0;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg2.Mid(intPrevValue, (SLiter->second + 1));
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		/*
+		
+		int intPropertyValueLen = PropertyValue.Len();				
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}
+		
+		*/
+		
+		// Add the data to the General/Home/Work address variables.
+	
+		// Trim any whitespace from the start and end.
+	
+		PropertyData = PropertyData.Trim(FALSE);
+		PropertyData = PropertyData.Trim(TRUE);				
+	
+		ProcessCaptureStrings(&PropertyData);
+	
+		wxListItem coldata;
+
+		coldata.SetId(intValueSeek);
+		coldata.SetData(intValueSeek);
+		coldata.SetText(PropertyData);
+	
+		ListCtrlIndex = lboCategories->InsertItem(coldata);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboCategories->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+		
+		CategoriesList.erase(intValueSeek);
+		CategoriesListType.erase(intValueSeek);
+		CategoriesListTokens.erase(intValueSeek);
+		CategoriesList.insert(std::make_pair(intValueSeek, PropertyData));
+		CategoriesListType.insert(std::make_pair(intValueSeek, PropertyType));
+		CategoriesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+		CategoryCount++;
+		intValueSeek++;				
+	
+	}
+
+}
+
+void frmContactEditor::LoadCalFreeBusy(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *FreeBusyCount){
+
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intPrevValue = 7;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 6;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	FreeBusyList.insert(std::make_pair(intValueSeek, wxT("")));
+	FreeBusyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+	FreeBusyListPID.insert(std::make_pair(intValueSeek, wxT("")));
+	FreeBusyListPref.insert(std::make_pair(intValueSeek, 0));
+	FreeBusyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	intPrevValue = 6;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}				
+		
+		if (PropertyName == wxT("ALTID")){
+
+			FreeBusyListAltID.erase(intValueSeek); FreeBusyListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else if (PropertyName == wxT("PID")){
+
+			FreeBusyListPID.erase(intValueSeek); FreeBusyListPID.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			FreeBusyListPref.erase(intValueSeek); FreeBusyListPref.insert(std::make_pair(intValueSeek, intPref));
+		
+		} else if (PropertyName == wxT("MEDIATYPE")){
+		
+			FreeBusyListMediatype.erase(intValueSeek); FreeBusyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+		
+				if (FirstToken == TRUE){
+			
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+			
+				} else {
+			
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+			
+				}
+		
+			}
+		
+		}
+	
+	}	
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(wxSPropertySeg2);
+
+	ListCtrlIndex = lboFreeBusyAddresses->InsertItem(coldata);
+		
+	if (intPref > 0 && intPref < 101){
+		
+		lboFreeBusyAddresses->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+			
+	}
+	
+	CaptureString(&wxSPropertySeg2, FALSE);			
+		
+	FreeBusyList.erase(intValueSeek);
+	FreeBusyListType.erase(intValueSeek);
+	FreeBusyListTokens.erase(intValueSeek);
+	FreeBusyList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+	
+	if (intType == 0){
+	
+		FreeBusyListType.insert(std::make_pair(intValueSeek, wxT("")));				
+	
+	} else if (intType == 1){
+	
+		FreeBusyListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		lboFreeBusyAddresses->SetItem(ListCtrlIndex, 1, _("Home"), intPref);
+	
+	} else if (intType == 2){
+	
+		FreeBusyListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		lboFreeBusyAddresses->SetItem(ListCtrlIndex, 1, _("Work"), intPref);
+	
+	}
+	
+	FreeBusyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	FreeBusyCount++;
+	intValueSeek++;
+	
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadEmail.cpp b/source/contacteditor/frmContactEditor-LoadEmail.cpp
new file mode 100644
index 0000000..c806210
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadEmail.cpp
@@ -0,0 +1,249 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadEmail(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *EmailCount){
+
+	size_t intPropertyLen = wxSPropertySeg1.Len();
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;
+	std::map<int, int>::iterator SPoint;
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	wxString AddressLabel;
+	wxString AddressLang;
+	wxString AddressAltID;
+	wxString AddressPID;
+	wxString AddressTokens;
+	wxString AddressGeo;
+	wxString AddressTimezone;
+	wxString AddressType;
+	wxString AddressMediatype;
+	wxString AddressPOBox;
+	wxString AddressExtended;
+	wxString AddressStreet;
+	wxString AddressLocality;
+	wxString AddressCity;
+	wxString AddressRegion;
+	wxString AddressPostalCode;
+	wxString AddressCountry;
+	bool FirstToken = TRUE;
+	int intSplitsFound = 0;
+	int intSplitSize = 0;
+	int intPrevValue = 7;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 6;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	if (intType == 0){
+	
+		GeneralEmailList.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralEmailListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralEmailListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralEmailListPref.insert(std::make_pair(intValueSeek, 0));
+		GeneralEmailListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+	} else if (intType == 1){
+	
+		HomeEmailList.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeEmailListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeEmailListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeEmailListPref.insert(std::make_pair(intValueSeek, 0));
+		HomeEmailListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	} else if (intType == 2){
+
+		BusinessEmailList.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessEmailListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessEmailListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessEmailListPref.insert(std::make_pair(intValueSeek, 0));
+		BusinessEmailListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	}
+	
+	intPrevValue = 6;			
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		ProcessCaptureStrings(&PropertyValue);
+		
+		// Process properties.
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ GeneralEmailListAltID.erase(intValueSeek); GeneralEmailListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeEmailListAltID.erase(intValueSeek); HomeEmailListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessEmailListAltID.erase(intValueSeek); BusinessEmailListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ GeneralEmailListPID.erase(intValueSeek); GeneralEmailListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeEmailListPID.erase(intValueSeek); HomeEmailListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessEmailListPID.erase(intValueSeek); BusinessEmailListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+			
+			if (intPref > 0 && intPref < 101){
+		
+				if (intType == 0){ GeneralEmailListPref.erase(intValueSeek); GeneralEmailListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				else if (intType == 1){ HomeEmailListPref.erase(intValueSeek); HomeEmailListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				else if (intType == 2){ BusinessEmailListPref.erase(intValueSeek); BusinessEmailListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				
+			}
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+			
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+			
+				if (FirstToken == TRUE){
+				
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+				
+				} else {
+				
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+				
+				}
+			
+			}
+		
+		}
+	
+	} 
+
+	//std::map<int, int>::iterator SLiter;
+	intPropertyLen = wxSPropertySeg2.Len();
+	SplitPoints.clear();
+	SplitLength.clear();
+	intSplitsFound = 0;
+	intSplitSize = 0;
+	intPrevValue = 0;	
+	
+	// Add the data to the General/Home/Work email variables.
+	
+	ProcessCaptureStrings(&wxSPropertySeg2);
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(wxSPropertySeg2);
+	
+	if (intType == 0){
+	
+
+	
+		ListCtrlIndex = lboEmails->InsertItem(coldata);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboEmails->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+		
+		GeneralEmailList.erase(intValueSeek);
+		GeneralEmailListType.erase(intValueSeek);
+		GeneralEmailListTokens.erase(intValueSeek);
+		GeneralEmailList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		GeneralEmailListType.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralEmailListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 1){ 
+	
+		ListCtrlIndex = lboHomeEmails->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboHomeEmails->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		HomeEmailList.erase(intValueSeek);
+		HomeEmailListType.erase(intValueSeek);
+		HomeEmailListTokens.erase(intValueSeek);				
+		HomeEmailList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		HomeEmailListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		HomeEmailListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 2){ 
+	
+		ListCtrlIndex = lboBusinessEmail->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboBusinessEmail->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		BusinessEmailList.erase(intValueSeek);
+		BusinessEmailListType.erase(intValueSeek);
+		BusinessEmailListTokens.erase(intValueSeek);				
+		BusinessEmailList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		BusinessEmailListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		BusinessEmailListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
+	
+	}
+	
+	EmailCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadGender.cpp b/source/contacteditor/frmContactEditor-LoadGender.cpp
new file mode 100644
index 0000000..0383d0f
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadGender.cpp
@@ -0,0 +1,121 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadGender(wxString wxSPropertySeg1, wxString wxSPropertySeg2, bool *GenderProcessed, vCard *ContactData){
+
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intPrevValue = 8;
+
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 7;			
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}				
+		
+		if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
+
+			if (FirstToken == TRUE){
+	
+				PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+				FirstToken = FALSE;
+	
+			} else {
+	
+				PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+	
+			}
+
+		}
+	
+	}	
+
+	wxStringTokenizer GenderDetails (wxSPropertySeg2, wxT(";"));
+	
+	wxString GenderComponent;
+	wxString GenderIdentity;
+	
+	if (GenderDetails.CountTokens() >= 2){
+	
+		GenderComponent = GenderDetails.GetNextToken();
+		GenderIdentity = GenderDetails.GetString();
+	
+		ProcessCaptureStrings(&GenderIdentity);
+	
+		txtGenderDescription->SetValue(ContactData->Convert(GenderIdentity, TRUE));
+						
+	} else {
+	
+		GenderComponent = GenderDetails.GetNextToken();
+	
+	}
+		
+	if (GenderComponent == wxT("M")){
+		
+		// Gender is Male.
+			
+		cmbGender->SetSelection(1);
+		
+	} else if (GenderComponent == wxT("F")){
+		
+		// Gender is Female.
+			
+		cmbGender->SetSelection(2);					
+		
+	} else if (GenderComponent == wxT("O")){
+		
+		// Gender is Other.
+			
+		cmbGender->SetSelection(3);
+		
+	} else if (GenderComponent == wxT("N")){
+		
+		// Gender is None/Not Applicable.
+		
+		cmbGender->SetSelection(4);					
+		
+	} else if (GenderComponent == wxT("U")){
+		
+		// Gender is Unknown.
+			
+		cmbGender->SetSelection(5);					
+		
+	}
+	
+	GenderTokens = PropertyTokens;
+	*GenderProcessed = TRUE;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadGeo.cpp b/source/contacteditor/frmContactEditor-LoadGeo.cpp
new file mode 100644
index 0000000..d35e1be
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadGeo.cpp
@@ -0,0 +1,348 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadGeo(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *GeoCount){
+
+	size_t intPropertyLen = wxSPropertySeg1.Len();
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	wxString GeoType;
+	wxString GeoData;
+	bool FirstToken = TRUE;			
+	int intSplitsFound = 0;
+	int intSplitSize = 0;
+	int intPrevValue = 5;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 4;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	if (intType == 0){
+	
+		GeneralGeographyList.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralGeographyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralGeographyListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralGeographyListPref.insert(std::make_pair(intValueSeek, 0));
+		GeneralGeographyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+	} else if (intType == 1){
+	
+		HomeGeographyList.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeGeographyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeGeographyListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeGeographyListPref.insert(std::make_pair(intValueSeek, 0));
+		HomeGeographyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	} else if (intType == 2){
+
+		BusinessGeographyList.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessGeographyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessGeographyListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessGeographyListPref.insert(std::make_pair(intValueSeek, 0));
+		BusinessGeographyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	}
+	
+	intPrevValue = 4;			
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}	
+
+		ProcessCaptureStrings(&PropertyValue);
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ GeneralGeographyListAltID.erase(intValueSeek); GeneralGeographyListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeGeographyListAltID.erase(intValueSeek); HomeGeographyListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessGeographyListAltID.erase(intValueSeek); BusinessGeographyListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ GeneralGeographyListPID.erase(intValueSeek); GeneralGeographyListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeGeographyListPID.erase(intValueSeek); HomeGeographyListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessGeographyListPID.erase(intValueSeek); BusinessGeographyListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("MEDIATYPE")){
+		
+			if (intType == 0){ GeneralGeographyListMediatype.erase(intValueSeek); GeneralGeographyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeGeographyListMediatype.erase(intValueSeek); HomeGeographyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessGeographyListMediatype.erase(intValueSeek); BusinessGeographyListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			if (intPref > 0 && intPref < 101){
+		
+				if (intType == 0){ GeneralGeographyListPref.erase(intValueSeek); GeneralGeographyListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				else if (intType == 1){ HomeGeographyListPref.erase(intValueSeek); HomeGeographyListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				else if (intType == 2){ BusinessGeographyListPref.erase(intValueSeek); BusinessGeographyListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			
+			}
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+		
+				if (FirstToken == TRUE){
+			
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+			
+				} else {
+			
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+			
+				}
+		
+			}
+		
+		}
+	
+	}					
+	
+	// Split the address. 
+
+	//std::map<int, int>::iterator SLiter;
+	intPropertyLen = wxSPropertySeg2.Len();
+	SplitPoints.clear();
+	SplitLength.clear();
+	intSplitsFound = 0;
+	intSplitSize = 0;
+	intPrevValue = 0;
+	
+	for (int i = 0; i <= intPropertyLen; i++){
+
+		intSplitSize++;
+	
+		if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+	
+			intSplitsFound++;
+			SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+			
+			if (intSplitsFound == 1){ 
+			
+				SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+				break; 
+				
+			}
+			
+			intSplitSize = 0;					
+	
+		}
+
+	}			
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		if (intiter->first == 1){
+		
+			// Deal with PO Box.
+			
+			SLiter = SplitLength.find(1);
+								
+			//txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
+			GeoType = wxSPropertySeg2.Mid(0, SLiter->second);
+			intPrevValue = intiter->second;
+			
+			GeoData = wxSPropertySeg2.Mid(intPrevValue);					
+		
+		}
+	
+	}
+	
+	ProcessCaptureStrings(&wxSPropertySeg2);
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+
+	
+	if (intType == 0){
+	
+		/*
+	
+		ListCtrlIndex = lboTimezones->InsertItem(coldata);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+		
+		*/
+		/*
+		txtGeopositioning->SetValue(GeoData);
+		*/
+		
+		GeneralGeographyList.erase(intValueSeek);
+		GeneralGeographyListType.erase(intValueSeek);
+		GeneralGeographyListTokens.erase(intValueSeek);
+		GeneralGeographyList.insert(std::make_pair(intValueSeek, GeoData));
+		GeneralGeographyListType.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralGeographyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+		
+		CaptureString(&GeoData, FALSE);
+		coldata.SetText(GeoData);
+		ListCtrlIndex = lboGeoposition->InsertItem(coldata);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboGeoposition->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+	
+	} else if (intType == 1){ 			
+	
+		/*
+	
+		ListCtrlIndex = lboHomeTimezones->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboHomeTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+		
+		*/
+		
+		/*
+		txtHomeGeopositioning->SetValue(GeoData);
+		*/
+
+		HomeGeographyList.erase(intValueSeek);
+		HomeGeographyListType.erase(intValueSeek);
+		HomeGeographyListTokens.erase(intValueSeek);				
+		HomeGeographyList.insert(std::make_pair(intValueSeek, GeoData));
+		HomeGeographyListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		HomeGeographyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+		
+		CaptureString(&GeoData, FALSE);
+		coldata.SetText(GeoData);
+		ListCtrlIndex = lboHomeGeoposition->InsertItem(coldata);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboHomeGeoposition->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+	
+	} else if (intType == 2){ 
+	
+		ListCtrlIndex = lboBusinessGeoposition->InsertItem(coldata);			
+	
+		/*
+	
+		ListCtrlIndex = lboBusinessTimezones->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboBusinessTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+		
+		*/
+		
+		/*
+		txtBusinessGeopositioning->SetValue(GeoData);
+		*/
+
+		BusinessGeographyList.erase(intValueSeek);
+		BusinessGeographyListType.erase(intValueSeek);
+		BusinessGeographyListTokens.erase(intValueSeek);				
+		BusinessGeographyList.insert(std::make_pair(intValueSeek, GeoData));
+		BusinessGeographyListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		BusinessGeographyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+		
+		CaptureString(&GeoData, FALSE);
+		coldata.SetText(GeoData);
+		ListCtrlIndex = lboBusinessGeoposition->InsertItem(coldata);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboBusinessGeoposition->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+	
+	}
+	
+	GeoCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadGroup.cpp b/source/contacteditor/frmContactEditor-LoadGroup.cpp
new file mode 100644
index 0000000..8a37f61
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadGroup.cpp
@@ -0,0 +1,208 @@
+#include "frmContactEditor.h"
+#include "../common/dirs.h"
+#include <wx/dir.h>
+
+void frmContactEditor::LoadKind(wxString KindType){
+
+	if (KindType == wxT("individual")){
+			
+		cmbType->SetSelection(1);
+			
+	} else if (KindType == wxT("group")){
+			
+		cmbType->SetSelection(2);
+		IsGroup = TRUE;
+			
+	} else if (KindType == wxT("org")){
+			
+		cmbType->SetSelection(3);
+			
+	} else if (KindType == wxT("location")){
+			
+		cmbType->SetSelection(4);
+			
+	} else {
+			
+		cmbType->SetSelection(0);
+			
+	}
+			
+	wxCommandEvent nullevent;
+			
+	UpdateMembersTab(nullevent);
+
+}
+
+void frmContactEditor::LoadMember(wxString MemberData, int *GroupCount){
+
+	// Go through the list of contacts for the account and find the matching UID.
+	// If contact with UID doesn't match then say (unknown contact).
+
+	XABViewMode XVMData = MainPtr->GetViewMode();
+	
+	wxString AccountDirFinal = GetAccountDir(wxSContactAccount, FALSE);
+
+	//wxString vcardfilenamewxs;
+	wxString vCardFilename;
+	wxString vCardFilenameFull;
+	wxString vCardDataString;
+	//wxStringTokenizer vcardfileline;
+	wxString lwxs;
+	wxString setname, setvalue;
+	//vCardNames = new std::map<wxString, wxString, std::greater<wxString>>;
+	std::multimap<wxString, wxString, std::greater<wxString>> vCardNamesAsc;
+	std::multimap<wxString, wxString, std::less<wxString>> vCardNamesDsc;
+
+	wxDir vcardaccdir(AccountDirFinal);
+
+	bool ProcFiles = vcardaccdir.GetFirst(&vCardFilename, wxEmptyString, wxDIR_FILES);
+	while(ProcFiles){
+
+		if (vCardFilename.Right(4) == wxT(".vcf") || 
+		    vCardFilename.Right(4) == wxT(".VCF") || 
+		    vCardFilename.Right(5) == wxT(".vcard") || 
+		    vCardFilename.Right(5) == wxT(".VCARD")){
+
+		    vCard Person;
+
+		    vCardFilenameFull.Append(AccountDirFinal);
+		    vCardFilenameFull.Append(wxT("/"));
+		    vCardFilenameFull.Append(vCardFilename);
+
+		    Person.LoadFile(vCardFilenameFull);
+
+		    if (MemberData.Left(9) == wxT("urn:uuid:")){
+
+			wxString NewPropValue;
+			NewPropValue = MemberData.Mid(9, wxString::npos);
+			MemberData = NewPropValue;
+
+		    }
+
+		    if (Person.MeetBaseSpecification()){
+
+			wxString KindStatus = Person.Get(wxT("KIND"));
+
+			if (KindStatus == wxT("group")){
+
+				vCardFilename.Clear();
+				vCardFilenameFull.Clear();
+				vCardDataString.Clear();
+				ProcFiles = vcardaccdir.GetNext(&vCardFilename);
+				continue;
+
+			}
+
+			wxString PersonName = Person.Get(wxT("N"));
+			wxString PersonUID = Person.Get(wxT("UID"));
+			wxString PersonFilename = vCardFilenameFull;
+			
+			if (PersonUID != MemberData){
+			
+				vCardFilename.Clear();
+				vCardFilenameFull.Clear();
+				vCardDataString.Clear();
+				ProcFiles = vcardaccdir.GetNext(&vCardFilename);
+				continue;
+			
+			}
+
+			//ContactsNames.insert(std::make_pair(PersonName, ContactIndex));
+			//ContactsUIDs.insert(std::make_pair(ContactIndex, PersonUID));
+
+			if (XVMData.SortMode == 1){
+
+			    // Split the name into sections.
+	
+			    vCardDataString = Person.Get(wxT("N"));
+
+			    vCardName NameData = Person.GetName();
+    
+			    vCardDataString = NameData.Forename + wxT(" ") + NameData.Surname;
+    
+			} else if (XVMData.SortMode == 2){
+    
+			    // Split the name into sections.
+    
+			    vCardName NameData = Person.GetName();    
+    
+			    vCardDataString = NameData.Surname + wxT(", ") + NameData.Forename;
+    
+			} else if (XVMData.SortMode == 3){
+    
+			    // Check and make sure that the top most nickname is used.
+    
+			    vCardDataString = Person.Get(wxT("NICKNAME"));
+    
+			    if (vCardDataString.IsEmpty()){
+	
+				vCardDataString = wxT("(no nickname)");
+	
+			    }
+    
+			} else if (XVMData.SortMode == 4){
+    
+			    vCardDataString = Person.Get(wxT("FN"));
+    
+			}
+
+			if (XVMData.AscendingMode == TRUE){
+			    vCardNamesAsc.insert(std::make_pair(vCardDataString, PersonUID));
+			} else {
+			    vCardNamesDsc.insert(std::make_pair(vCardDataString, PersonUID));
+			}
+
+		    } else {
+
+		    }
+
+
+
+		}
+
+		vCardFilename.Clear();
+		vCardFilenameFull.Clear();
+		vCardDataString.Clear();
+		ProcFiles = vcardaccdir.GetNext(&vCardFilename);
+
+	    }
+
+	    if (XVMData.AscendingMode == TRUE){
+
+		for (std::map<wxString,wxString>::iterator iter = vCardNamesAsc.begin(); 
+		iter != vCardNamesAsc.end(); ++iter){
+
+			wxListItem ItemData;
+			
+			ItemData.SetId(0);
+			ItemData.SetText(iter->first);
+	
+			lboGroups->InsertItem(ItemData);
+			
+			GroupsList.insert(std::make_pair(intValueSeek, iter->second));
+	
+		}
+
+
+	    } else {
+
+		for (std::map<wxString,wxString>::iterator iter = vCardNamesDsc.begin(); 
+		iter != vCardNamesDsc.end(); ++iter){
+
+			wxListItem ItemData;
+			
+			ItemData.SetId(0);
+			ItemData.SetText(iter->first);
+	
+			lboGroups->InsertItem(ItemData);
+
+			GroupsList.insert(std::make_pair(intValueSeek, iter->second));
+
+		}
+
+	    }
+	
+	GroupCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadIM.cpp b/source/contacteditor/frmContactEditor-LoadIM.cpp
new file mode 100644
index 0000000..7fc6a1b
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadIM.cpp
@@ -0,0 +1,324 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadIM(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *IMPPCount){
+
+	size_t intPropertyLen = wxSPropertySeg1.Len();
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;
+	std::map<int, int>::iterator SPoint;
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	wxString IMPPType;
+	wxString IMPPAddress;
+	bool FirstToken = TRUE;
+	int intSplitsFound = 0;
+	int intSplitSize = 0;
+	int intPrevValue = 6;
+	int intPref = 0;
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 5;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	if (intType == 0){
+	
+		GeneralIMList.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralIMListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralIMListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralIMListPref.insert(std::make_pair(intValueSeek, 0));
+		GeneralIMListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralIMListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+
+	} else if (intType == 1){
+	
+		HomeIMList.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeIMListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeIMListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeIMListPref.insert(std::make_pair(intValueSeek, 0));
+		HomeIMListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeIMListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	} else if (intType == 2){
+
+		BusinessIMList.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessIMListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessIMListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessIMListPref.insert(std::make_pair(intValueSeek, 0));
+		BusinessIMListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessIMListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	}
+	
+	intPrevValue = 5;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		ProcessCaptureStrings(&PropertyValue);
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ GeneralIMListAltID.erase(intValueSeek); GeneralIMListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeIMListAltID.erase(intValueSeek); HomeIMListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessIMListAltID.erase(intValueSeek); BusinessIMListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ GeneralIMListPID.erase(intValueSeek); GeneralIMListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeIMListPID.erase(intValueSeek); HomeIMListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessIMListPID.erase(intValueSeek); BusinessIMListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+			
+			if (intPref > 0 && intPref < 101){
+		
+				if (intType == 0){ GeneralIMListPref.erase(intValueSeek); GeneralIMListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				else if (intType == 1){ HomeIMListPref.erase(intValueSeek); HomeIMListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				else if (intType == 2){ BusinessIMListPref.erase(intValueSeek); BusinessIMListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				
+			}
+		
+		} else if (PropertyName == wxT("MEDIATYPE")){
+
+			if (intType == 0){ GeneralIMListMediatype.erase(intValueSeek); GeneralIMListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeIMListMediatype.erase(intValueSeek); HomeIMListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessIMListMediatype.erase(intValueSeek); BusinessIMListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+			
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+			
+				if (FirstToken == TRUE){
+				
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+				
+				} else {
+				
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+				
+				}
+			
+			}
+		
+		}
+	
+	}			
+	
+	// Split the address. 
+
+	//std::map<int, int>::iterator SLiter;
+	intPropertyLen = wxSPropertySeg2.Len();
+	SplitPoints.clear();
+	SplitLength.clear();
+	intSplitsFound = 0;
+	intSplitSize = 0;
+	intPrevValue = 0;
+	
+	for (int i = 0; i <= intPropertyLen; i++){
+
+		intSplitSize++;
+	
+		if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+	
+			intSplitsFound++;
+			SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+			
+			if (intSplitsFound == 1){ 
+			
+				SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+				break; 
+				
+			}
+			
+			intSplitSize = 0;					
+	
+		}
+
+	}
+	
+	// Split the data into several parts.			
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		if (intiter->first == 1){
+		
+			// Deal with PO Box.
+			
+			SLiter = SplitLength.find(1);
+								
+			//txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
+			IMPPType = wxSPropertySeg2.Mid(0, SLiter->second);
+			intPrevValue = intiter->second;
+			
+			IMPPAddress = wxSPropertySeg2.Mid(intPrevValue);					
+		
+		}
+	
+	}	
+	
+	// Check what IM type it is.
+	
+	if (IMPPType == wxT("aim")){
+
+		IMPPType = wxT("AIM");
+
+	} else if (IMPPType == wxT("gg")){
+
+		IMPPType = wxT("Gadu-Gadu");
+
+	} else if (IMPPType == wxT("icq")){
+
+		IMPPType = wxT("ICQ");
+
+	} else if (IMPPType == wxT("skype")){
+
+		IMPPType = wxT("Skype");
+
+	} else if (IMPPType == wxT("xmpp")){
+
+		IMPPType = wxT("XMPP");
+
+	} else if (IMPPType == wxT("yahoo")){
+
+		IMPPType = wxT("Yahoo");
+
+	} else {
+
+		// Do nothing.
+
+	}			
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	ProcessCaptureStrings(&wxSPropertySeg2);
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(IMPPType);
+
+	if (intType == 0){
+	
+		ListCtrlIndex = lboIM->InsertItem(coldata);
+		
+		lboIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+			
+		}				
+		
+		GeneralIMList.erase(intValueSeek);
+		GeneralIMListType.erase(intValueSeek);
+		GeneralIMListTokens.erase(intValueSeek);
+		GeneralIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		GeneralIMListType.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 1){ 
+	
+		ListCtrlIndex = lboHomeIM->InsertItem(coldata);
+
+		lboHomeIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboHomeIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		HomeIMList.erase(intValueSeek);
+		HomeIMListType.erase(intValueSeek);
+		HomeIMListTokens.erase(intValueSeek);				
+		HomeIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		HomeIMListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		HomeIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 2){ 
+	
+		ListCtrlIndex = lboBusinessIM->InsertItem(coldata);
+
+		lboBusinessIM->SetItem(ListCtrlIndex, 1, IMPPAddress);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboBusinessIM->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		BusinessIMList.erase(intValueSeek);
+		BusinessIMListType.erase(intValueSeek);
+		BusinessIMListTokens.erase(intValueSeek);				
+		BusinessIMList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		BusinessIMListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		BusinessIMListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
+	
+	}
+	
+	*IMPPCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadKey.cpp b/source/contacteditor/frmContactEditor-LoadKey.cpp
new file mode 100644
index 0000000..6beb8ca
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadKey.cpp
@@ -0,0 +1,276 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadKey(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *KeyCount){
+
+	size_t intPropertyLen = wxSPropertySeg1.Len();
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intSplitsFound = 0;
+	int intSplitSize = 0;
+	int intPrevValue = 5;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 4;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	KeyList.insert(std::make_pair(intValueSeek, wxT("")));
+	KeyListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+	KeyListPID.insert(std::make_pair(intValueSeek, wxT("")));
+	KeyListPref.insert(std::make_pair(intValueSeek, 0));
+	KeyListKeyType.insert(std::make_pair(intValueSeek, FALSE));
+	KeyListDataType.insert(std::make_pair(intValueSeek, wxT("")));
+	KeyListDataEncType.insert(std::make_pair(intValueSeek, wxT("")));
+	KeyListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+	intPrevValue = 4;
+
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}				
+		
+		if (PropertyName == wxT("ALTID")){
+
+			KeyListAltID.erase(intValueSeek); KeyListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else if (PropertyName == wxT("PID")){
+
+			KeyListPID.erase(intValueSeek); KeyListPID.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			KeyListPref.erase(intValueSeek); KeyListPref.insert(std::make_pair(intValueSeek, intPref));
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+			
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+			
+				if (FirstToken == TRUE){
+				
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+				
+				} else {
+				
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+				
+				}
+			
+			}
+		
+		}
+	
+	}				
+	
+	intPropertyLen = wxSPropertySeg2.Len();
+	SplitPoints.clear();
+	SplitLength.clear();
+	intSplitsFound = 0;
+	intSplitSize = 0;
+	intPrevValue = 0;			
+	
+	for (int i = 0; i <= intPropertyLen; i++){
+
+		intSplitSize++;
+	
+		if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+	
+			intSplitsFound++;
+			SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+			
+			if (intSplitsFound == 6){ 
+			
+				SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+				break; 
+				
+			} else {
+			
+				SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+			
+			}
+			
+			intSplitSize = 0;					
+	
+		}
+
+	}
+	
+	wxString wxSKeyURI;
+	wxString wxSKeyMIME;
+	wxString wxSKeyEncoding;
+	wxString wxSKeyData;
+	std::string base64enc;
+	
+	if (intSplitsFound == 0){
+	
+	} else {
+	
+		std::map<int, int>::iterator striter;
+	
+		striter = SplitLength.find(1);
+	
+		wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
+	
+		while (wSTDataType.HasMoreTokens() == TRUE){
+		
+			wxSKeyURI = wSTDataType.GetNextToken();
+			wxSKeyMIME = wSTDataType.GetNextToken();
+			break;
+		
+		}			
+	
+		if (wxSKeyURI == wxT("data")){
+		
+				wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 2)), wxT(","));			
+ 	
+				while (wSTDataInfo.HasMoreTokens() == TRUE){
+		
+				wxSKeyEncoding = wSTDataInfo.GetNextToken();
+				wxSKeyData = wSTDataInfo.GetNextToken();
+				break;
+		
+			}
+		
+		}
+	
+	}
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	
+	if (wxSKeyURI == wxT("data")){
+	
+		if (wxSKeyMIME == wxT("application/pgp-keys")){
+	
+			coldata.SetText(_("PGP Key"));
+		
+		} else {
+		
+			coldata.SetText(_("Key"));
+		
+		}
+		
+		KeyListDataEncType.erase(intValueSeek);
+		KeyListKeyType.erase(intValueSeek);
+		KeyListDataEncType.insert(std::make_pair(intValueSeek, wxSKeyEncoding));
+		KeyListKeyType.insert(std::make_pair(intValueSeek, TRUE));
+		
+		KeyList.erase(intValueSeek);
+		KeyList.insert(std::make_pair(intValueSeek, wxSKeyData));
+	
+	} else {
+	
+		coldata.SetText(wxSPropertySeg2);
+		
+		KeyList.erase(intValueSeek);
+		KeyList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+	
+	}
+	
+	ListCtrlIndex = lboKeys->InsertItem(coldata);
+		
+	if (intPref > 0 && intPref < 101){
+		
+		lboKeys->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+	
+	}
+		
+
+	KeyListType.erase(intValueSeek);
+	KeyListTokens.erase(intValueSeek);
+	KeyListDataType.erase(intValueSeek);
+
+	KeyListDataType.insert(std::make_pair(intValueSeek, wxSKeyMIME));
+		
+	switch (intType){
+		case 0: KeyListType.insert(std::make_pair(intValueSeek, wxT("")));
+		case 1: KeyListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		case 2: KeyListType.insert(std::make_pair(intValueSeek, wxT("work")));
+	}
+
+	KeyListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	KeyCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadLanguage.cpp b/source/contacteditor/frmContactEditor-LoadLanguage.cpp
new file mode 100644
index 0000000..726f4cd
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadLanguage.cpp
@@ -0,0 +1,229 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadLanguage(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *LangCount){
+
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intPrevValue = 6;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 5;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	if (intType == 0){
+	
+		GeneralLanguageList.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralLanguageListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralLanguageListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralLanguageListPref.insert(std::make_pair(intValueSeek, 0));
+		GeneralLanguageListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+	} else if (intType == 1){
+	
+		HomeLanguageList.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeLanguageListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeLanguageListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeLanguageListPref.insert(std::make_pair(intValueSeek, 0));
+		HomeLanguageListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	} else if (intType == 2){
+
+		BusinessLanguageList.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessLanguageListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessLanguageListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessLanguageListPref.insert(std::make_pair(intValueSeek, 0));
+		BusinessLanguageListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	}
+	
+	intPrevValue = 5;			
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}
+		
+		ProcessCaptureStrings(&PropertyValue);				
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ GeneralLanguageListAltID.erase(intValueSeek); GeneralLanguageListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeLanguageListAltID.erase(intValueSeek); HomeLanguageListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessLanguageListAltID.erase(intValueSeek); BusinessLanguageListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ GeneralLanguageListPID.erase(intValueSeek); GeneralLanguageListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeLanguageListPID.erase(intValueSeek); HomeLanguageListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessLanguageListPID.erase(intValueSeek); BusinessLanguageListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			if (intType == 0){ GeneralLanguageListPref.erase(intValueSeek); GeneralLanguageListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 1){ HomeLanguageListPref.erase(intValueSeek); HomeLanguageListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 2){ BusinessLanguageListPref.erase(intValueSeek); BusinessLanguageListPref.insert(std::make_pair(intValueSeek, intPref)); }
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+		
+				if (FirstToken == TRUE){
+			
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+			
+				} else {
+			
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+			
+				}
+		
+			}
+		
+		}
+	
+	}	
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	ProcessCaptureStrings(&wxSPropertySeg2);
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(wxSPropertySeg2);
+	
+	if (intType == 0){
+	
+		ListCtrlIndex = lboLanguages->InsertItem(coldata);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboLanguages->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+		
+		GeneralLanguageList.erase(intValueSeek);
+		GeneralLanguageListType.erase(intValueSeek);
+		GeneralLanguageListTokens.erase(intValueSeek);
+		GeneralLanguageList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		GeneralLanguageListType.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralLanguageListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 1){ 
+	
+		ListCtrlIndex = lboHomeLanguages->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboHomeLanguages->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		HomeLanguageList.erase(intValueSeek);
+		HomeLanguageListType.erase(intValueSeek);
+		HomeLanguageListTokens.erase(intValueSeek);				
+		HomeLanguageList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		HomeLanguageListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		HomeLanguageListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 2){ 
+	
+		ListCtrlIndex = lboBusinessLanguages->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboBusinessLanguages->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		BusinessLanguageList.erase(intValueSeek);
+		BusinessLanguageListType.erase(intValueSeek);
+		BusinessLanguageListTokens.erase(intValueSeek);				
+		BusinessLanguageList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		BusinessLanguageListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		BusinessLanguageListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
+	
+	}
+	
+	LangCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadLogo.cpp b/source/contacteditor/frmContactEditor-LoadLogo.cpp
new file mode 100644
index 0000000..906159d
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadLogo.cpp
@@ -0,0 +1,249 @@
+#include "frmContactEditor.h"
+#include "../common/base64.h"
+
+void frmContactEditor::LoadLogo(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *LogoCount){
+
+	size_t intPropertyLen = wxSPropertySeg1.Len();
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intSplitsFound = 0;
+	int intSplitSize = 0;
+	int intPrevValue = 6;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 5;
+	
+	// Look for type before continuing.			
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	LogosList.insert(std::make_pair(intValueSeek, ""));
+	LogosListType.insert(std::make_pair(intValueSeek, wxT("")));
+	LogosListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+	LogosListPID.insert(std::make_pair(intValueSeek, wxT("")));
+	LogosListPref.insert(std::make_pair(intValueSeek, 0));
+	LogosListPicEncType.insert(std::make_pair(intValueSeek, wxT("")));
+	LogosListPictureType.insert(std::make_pair(intValueSeek, wxT("")));			
+	LogosListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	LogosListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+
+	intPrevValue = 5;
+
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}
+		
+		ProcessCaptureStrings(&PropertyValue);	
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ LogosListAltID.erase(intValueSeek); LogosListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ LogosListPID.erase(intValueSeek); LogosListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			if (intType == 0){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 1){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 2){ LogosListPref.erase(intValueSeek); LogosListPref.insert(std::make_pair(intValueSeek, intPref)); }
+		
+		} else if (PropertyName == wxT("MEDIATYPE")){
+		
+			if (intType == 0){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ LogosListMediatype.erase(intValueSeek); LogosListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+			
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+			
+				if (FirstToken == TRUE){
+				
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+				
+				} else {
+				
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+				
+				}
+			
+			}
+		
+		}
+	
+	}	
+	
+	intPropertyLen = wxSPropertySeg2.Len();
+	SplitPoints.clear();
+	SplitLength.clear();
+	intSplitsFound = 0;
+	intSplitSize = 0;
+	intPrevValue = 0;
+	
+	wxString wxSPhotoURI;
+	wxString wxSPhotoMIME;
+	wxString wxSPhotoEncoding;
+	wxString wxSPhotoData;
+	std::string base64enc;
+	
+	ProcessCaptureStrings(&wxSPropertySeg2);
+	
+	if (intSplitsFound == 0){
+	
+	} else {
+	
+		std::map<int, int>::iterator striter;
+	
+		striter = SplitLength.find(1);
+	
+		wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
+	
+		while (wSTDataType.HasMoreTokens() == TRUE){
+		
+			wxSPhotoURI = wSTDataType.GetNextToken();
+			wxSPhotoMIME = wSTDataType.GetNextToken();
+			break;
+		
+		}			
+	
+		wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));			
+	
+		while (wSTDataInfo.HasMoreTokens() == TRUE){
+		
+			wxSPhotoEncoding = wSTDataInfo.GetNextToken();
+			wxSPhotoData = wSTDataInfo.GetNextToken();					
+			base64enc = wxSPhotoData.mb_str();
+			break;
+		
+		}
+	
+	}
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(_("Picture"));
+	
+	ListCtrlIndex = lboLogos->InsertItem(coldata);
+		
+	if (intPref > 0 && intPref < 101){
+		
+		lboLogos->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+	
+	}
+		
+	LogosList.erase(intValueSeek);
+	LogosListType.erase(intValueSeek);
+	LogosListTokens.erase(intValueSeek);
+	LogosListPictureType.erase(intValueSeek);
+	LogosListPicEncType.erase(intValueSeek);
+	LogosList.insert(std::make_pair(intValueSeek, base64enc));
+	LogosListPictureType.insert(std::make_pair(intValueSeek, wxSPhotoMIME));
+	LogosListPicEncType.insert(std::make_pair(intValueSeek, wxSPhotoEncoding));
+	
+	if (intType == 0){
+	
+		LogosListType.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	} else if (intType == 1){
+	
+		LogosListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		lboLogos->SetItem(ListCtrlIndex, 1, _("Home"));
+	
+	} else if (intType == 2){
+	
+		LogosListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		lboLogos->SetItem(ListCtrlIndex, 1, _("Work"));				
+	
+	}
+	
+	LogosListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	LogoCount++;
+	intValueSeek++;
+			
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadName.cpp b/source/contacteditor/frmContactEditor-LoadName.cpp
new file mode 100644
index 0000000..11d2ae7
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadName.cpp
@@ -0,0 +1,399 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadFN(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *FNCount, 
+	bool *FNProcessed, vCard *ContactData){
+	
+	size_t intPropertyLen = wxSPropertySeg1.Len();
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;			
+	int intSplitsFound = 0;
+	int intSplitSize = 0;
+	int intPrevValue = 4;
+	int intPref = 0;			
+	int intType = 0;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 3;
+	
+	// Look for type before continuing.		
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+
+	FullNamesList.insert(std::make_pair(intValueSeek, wxT("")));
+	FullNamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+	FullNamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
+	FullNamesListPref.insert(std::make_pair(intValueSeek, 0));
+	FullNamesListType.insert(std::make_pair(intValueSeek, wxT("")));
+	FullNamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+	FullNamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));		
+	
+	intPrevValue = 3;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		ProcessCaptureStrings(&PropertyValue);
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		if (PropertyName == wxT("ALTID")){
+
+			FullNamesListAltID.erase(intValueSeek); FullNamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else if (PropertyName == wxT("PID")){
+
+			FullNamesListPID.erase(intValueSeek); FullNamesListPID.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+			
+			if (intPref > 0 && intPref < 101){
+		
+				FullNamesListPref.erase(intValueSeek); FullNamesListPref.insert(std::make_pair(intValueSeek, intPref));
+				
+			}
+		
+		} else if (PropertyName == wxT("LANG")){
+
+			FullNamesListLanguage.erase(intValueSeek); FullNamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+			
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+			
+				if (FirstToken == TRUE){
+				
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+				
+				} else {
+				
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+				
+				}
+			
+			}
+		
+		}
+	
+	}			
+	
+	// Split the address. 		
+
+	//std::map<int, int>::iterator SLiter;
+	intPropertyLen = wxSPropertySeg2.Len();
+	SplitPoints.clear();
+	SplitLength.clear();
+	intSplitsFound = 0;
+	intSplitSize = 0;
+	intPrevValue = 0;
+	
+	for (int i = 0; i <= intPropertyLen; i++){
+
+		intSplitSize++;
+	
+		if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+	
+			intSplitsFound++;
+			SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+			
+			if (intSplitsFound == 1){ 
+			
+				SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+				break; 
+				
+			}
+			
+			intSplitSize = 0;					
+	
+		}
+
+	}			
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	/*
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(IMPPType);
+	
+	*/
+	
+	//ProcessCaptureStrings(wxsPropertySeg2);
+	
+	ProcessCaptureStrings(&wxSPropertySeg2);
+	
+	FullNamesList.erase(intValueSeek);
+	FullNamesListType.erase(intValueSeek);
+	FullNamesListTokens.erase(intValueSeek);
+	FullNamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+	FullNamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	if (intType == 0){
+	
+		FullNamesListType.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	} else if (intType == 1){
+	
+		FullNamesListType.insert(std::make_pair(intValueSeek, wxT("home")));			
+	
+	} else if (intType == 2){
+	
+		FullNamesListType.insert(std::make_pair(intValueSeek, wxT("work")));			
+	
+	}
+	
+	if (*FNProcessed == FALSE){
+	
+		NameDisplayAs = wxSPropertySeg2;
+		cmbDisplayAs->SetValue(ContactData->Convert(wxSPropertySeg2, TRUE));
+		*FNProcessed = TRUE;
+		
+	}
+	
+	FNCount++;
+	intValueSeek++;
+
+}
+
+void frmContactEditor::LoadN(wxString wxSPropertySeg1, wxString wxSPropertySeg2, bool *NameProcessed, 
+	vCard *ContactData){
+
+	size_t intPropertyLen = wxSPropertySeg1.Len();
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;			
+	int intSplitsFound = 0;
+	int intSplitSize = 0;
+	int intPrevValue = 3;
+	int intSplitSeek = 0;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	// Look for type before continuing.		
+	
+	intPrevValue = 2;			
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+	
+	}
+	
+	intPrevValue = 2;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		ProcessCaptureStrings(&PropertyValue);
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		if (PropertyName == wxT("ALTID")){
+
+			NameAltID = PropertyValue;
+		
+		} else if (PropertyName == wxT("LANG")){
+
+			NameLanguage = PropertyValue;
+		
+		} else if (PropertyName == wxT("SORT-AS")){
+		
+			NameDisplayAs = PropertyValue;
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+			
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty()){
+			
+				if (FirstToken == TRUE){
+				
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+				
+				} else {
+				
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+				
+				}
+			
+			}
+		
+		}
+	
+	}
+	
+	intPropertyLen = wxSPropertySeg2.Len();
+	SplitPoints.clear();
+	SplitLength.clear();
+	intSplitSeek = 0;		
+	intSplitsFound = 0;
+	intSplitSize = 0;
+	intPrevValue = 0;					
+	
+	for (int i = 0; i <= intPropertyLen; i++){
+
+		intSplitSize++;
+	
+		if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+	
+			intSplitsFound++;
+			SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+			
+			if (intSplitsFound == 4){ 
+			
+				SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+				break; 
+				
+			} else {
+			
+				SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+			
+			}
+			
+			intSplitSize = 0;					
+	
+		}
+
+	}
+	
+	// Split the data into several parts.
+			
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		if (intiter->first == 1){
+		
+			// Deal with family name.
+			
+			SLiter = SplitLength.find(1);
+								
+			txtSurname->SetValue(ContactData->Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
+			
+			intPrevValue = intiter->second;
+			NameSurname = wxSPropertySeg2.Mid(0, SLiter->second);					
+		
+		} else if (intiter->first == 2){
+		
+			// Deal with given names.
+			
+			SLiter = SplitLength.find(2);
+								
+			txtForename->SetValue(ContactData->Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+			intPrevValue = intiter->second;
+			NameForename = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+		
+		} else if (intiter->first == 3){
+		
+			// Deal with additional names.
+			
+			SLiter = SplitLength.find(3);
+								
+			txtOtherNames->SetValue(ContactData->Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+			intPrevValue = intiter->second;
+			NameOtherNames = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+		
+		} else if (intiter->first == 4){
+		
+			// Deal with honorifix prefixes and suffixes.
+
+			SLiter = SplitLength.find(4);
+								
+			txtTitle->SetValue(ContactData->Convert(wxSPropertySeg2.Mid(intPrevValue, SLiter->second), TRUE));
+			intPrevValue = intiter->second;
+			NameTitle = wxSPropertySeg2.Mid(intPrevValue, SLiter->second);
+		
+			txtSuffix->SetValue(ContactData->Convert(wxSPropertySeg2.Mid(intPrevValue), TRUE));
+			NameSuffix = wxSPropertySeg2.Mid(intPrevValue);
+		
+		}
+	
+	}
+	
+	NameTokens = PropertyTokens;
+	*NameProcessed = TRUE;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadNickname.cpp b/source/contacteditor/frmContactEditor-LoadNickname.cpp
new file mode 100644
index 0000000..0fdc984
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadNickname.cpp
@@ -0,0 +1,237 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadNickname(wxString wxSPropertySeg1, wxString wxSPropertySeg2, 
+	int *NicknameCount, vCard *ContactData){
+			
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intPrevValue = 10;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+
+	intPrevValue = 9;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	if (intType == 0){
+	
+		GeneralNicknamesList.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralNicknamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralNicknamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralNicknamesListPref.insert(std::make_pair(intValueSeek, 0));
+		GeneralNicknamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralNicknamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+
+	} else if (intType == 1){
+	
+		HomeNicknamesList.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeNicknamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeNicknamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeNicknamesListPref.insert(std::make_pair(intValueSeek, 0));
+		HomeNicknamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeNicknamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));				
+	
+	} else if (intType == 2){
+
+		BusinessNicknamesList.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessNicknamesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessNicknamesListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessNicknamesListPref.insert(std::make_pair(intValueSeek, 0));
+		BusinessNicknamesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessNicknamesListLanguage.insert(std::make_pair(intValueSeek, wxT("")));				
+	
+	}
+	
+	intPrevValue = 9;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		ProcessCaptureStrings(&PropertyValue);
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}				
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ GeneralNicknamesListAltID.erase(intValueSeek); GeneralNicknamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeNicknamesListAltID.erase(intValueSeek); HomeNicknamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessNicknamesListAltID.erase(intValueSeek); BusinessNicknamesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ GeneralNicknamesListPID.erase(intValueSeek); GeneralNicknamesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeNicknamesListPID.erase(intValueSeek); HomeNicknamesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessNicknamesListPID.erase(intValueSeek); BusinessNicknamesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			if (intType == 0){ GeneralNicknamesListPref.erase(intValueSeek); GeneralNicknamesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 1){ HomeNicknamesListPref.erase(intValueSeek); HomeNicknamesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 2){ BusinessNicknamesListPref.erase(intValueSeek); BusinessNicknamesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+		
+		} else if (PropertyName == wxT("LANGUAGE")){
+		
+			if (intType == 0){ GeneralNicknamesListLanguage.erase(intValueSeek); GeneralNicknamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeNicknamesListLanguage.erase(intValueSeek); HomeNicknamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessNicknamesListLanguage.erase(intValueSeek); BusinessNicknamesListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+		
+				if (FirstToken == TRUE){
+			
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+			
+				} else {
+			
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+			
+				}
+		
+			}
+		
+		}
+	
+	}
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	ProcessCaptureStrings(&wxSPropertySeg2);
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(wxSPropertySeg2);
+	
+	if (intType == 0){
+	
+		ListCtrlIndex = lboNicknames->InsertItem(coldata);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboNicknames->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+		
+		GeneralNicknamesList.erase(intValueSeek);
+		GeneralNicknamesListType.erase(intValueSeek);
+		GeneralNicknamesListTokens.erase(intValueSeek);
+		GeneralNicknamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		GeneralNicknamesListType.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralNicknamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 1){ 
+	
+		ListCtrlIndex = lboHomeNicknames->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboHomeNicknames->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		HomeNicknamesList.erase(intValueSeek);
+		HomeNicknamesListType.erase(intValueSeek);
+		HomeNicknamesListTokens.erase(intValueSeek);				
+		HomeNicknamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		HomeNicknamesListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		HomeNicknamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 2){ 
+	
+		ListCtrlIndex = lboBusinessNicknames->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboBusinessNicknames->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		BusinessNicknamesList.erase(intValueSeek);
+		BusinessNicknamesListType.erase(intValueSeek);
+		BusinessNicknamesListTokens.erase(intValueSeek);				
+		BusinessNicknamesList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		BusinessNicknamesListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		BusinessNicknamesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
+	
+	}
+
+	NicknameCount++;
+	intValueSeek++;	
+			
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadNote.cpp b/source/contacteditor/frmContactEditor-LoadNote.cpp
new file mode 100644
index 0000000..d1d74fe
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadNote.cpp
@@ -0,0 +1,249 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadNote(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *NoteCount){
+
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intPrevValue = 6;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 5;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	if (intType == 0){
+	
+		GeneralNoteList.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralNoteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralNoteListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralNoteListPref.insert(std::make_pair(intValueSeek, 0));
+		GeneralNoteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralNoteListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+
+	} else if (intType == 1){
+	
+		HomeNoteList.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeNoteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeNoteListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeNoteListPref.insert(std::make_pair(intValueSeek, 0));
+		HomeNoteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeNoteListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	} else if (intType == 2){
+
+		BusinessNoteList.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessNoteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessNoteListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessNoteListPref.insert(std::make_pair(intValueSeek, 0));
+		BusinessNoteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessNoteListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	}
+	
+	intPrevValue = 5;			
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, SLiter->second);
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}
+		
+		ProcessCaptureStrings(&PropertyValue);				
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ GeneralNoteListAltID.erase(intValueSeek); GeneralNoteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeNoteListAltID.erase(intValueSeek); HomeNoteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessNoteListAltID.erase(intValueSeek); BusinessNoteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ GeneralNoteListPID.erase(intValueSeek); GeneralNoteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeNoteListPID.erase(intValueSeek); HomeNoteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessNoteListPID.erase(intValueSeek); BusinessNoteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			if (intType == 0){ GeneralNoteListPref.erase(intValueSeek); GeneralNoteListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 1){ HomeNoteListPref.erase(intValueSeek); HomeNoteListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 2){ BusinessNoteListPref.erase(intValueSeek); BusinessNoteListPref.insert(std::make_pair(intValueSeek, intPref)); }
+		
+		} else if (PropertyName == wxT("LANGUAGE")){
+		
+			if (intType == 0){ GeneralNoteListLanguage.erase(intValueSeek); GeneralNoteListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeNoteListLanguage.erase(intValueSeek); HomeNoteListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessNoteListLanguage.erase(intValueSeek); BusinessNoteListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+		
+				if (FirstToken == TRUE){
+			
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+			
+				} else {
+			
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+			
+				}
+		
+			}
+		
+		}
+	
+	}
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	ProcessCaptureStrings(&wxSPropertySeg2);
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	
+	if (intType == 0){
+	
+		GeneralNoteList.erase(intValueSeek);
+		GeneralNoteListType.erase(intValueSeek);
+		GeneralNoteListTokens.erase(intValueSeek);
+		GeneralNoteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		GeneralNoteListType.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralNoteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));			
+	
+		//CaptureString(&wxSPropertySeg2, FALSE);
+
+		coldata.SetText(wxSPropertySeg2);
+	
+		ListCtrlIndex = lboNotes->InsertItem(coldata);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboNotes->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+	
+	} else if (intType == 1){ 
+	
+		HomeNoteList.erase(intValueSeek);
+		HomeNoteListType.erase(intValueSeek);
+		HomeNoteListTokens.erase(intValueSeek);				
+		HomeNoteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		HomeNoteListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		HomeNoteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));			
+	
+		CaptureString(&wxSPropertySeg2, FALSE);
+
+		coldata.SetText(wxSPropertySeg2);			
+	
+		ListCtrlIndex = lboHomeNotes->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboHomeNotes->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+	
+	} else if (intType == 2){ 
+	
+		BusinessNoteList.erase(intValueSeek);
+		BusinessNoteListType.erase(intValueSeek);
+		BusinessNoteListTokens.erase(intValueSeek);				
+		BusinessNoteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		BusinessNoteListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		BusinessNoteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));			
+	
+		CaptureString(&wxSPropertySeg2, FALSE);
+
+		coldata.SetText(wxSPropertySeg2);
+	
+		ListCtrlIndex = lboBusinessNotes->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboBusinessNotes->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}				
+	
+	}
+	
+	NoteCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadOrg.cpp b/source/contacteditor/frmContactEditor-LoadOrg.cpp
new file mode 100644
index 0000000..ee51f4d
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadOrg.cpp
@@ -0,0 +1,247 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadOrg(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *OrgCount){
+
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intPrevValue = 5;
+	int intPref = 0;
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 4;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	if (intType == 0){
+	
+		GeneralOrganisationsList.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralOrganisationsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralOrganisationsListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralOrganisationsListPref.insert(std::make_pair(intValueSeek, 0));
+		GeneralOrganisationsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralOrganisationsListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralOrganisationsListSortAs.insert(std::make_pair(intValueSeek, wxT("")));
+
+	} else if (intType == 1){
+	
+		HomeOrganisationsList.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeOrganisationsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeOrganisationsListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeOrganisationsListPref.insert(std::make_pair(intValueSeek, 0));
+		HomeOrganisationsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeOrganisationsListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeOrganisationsListSortAs.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	} else if (intType == 2){
+
+		BusinessOrganisationsList.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessOrganisationsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessOrganisationsListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessOrganisationsListPref.insert(std::make_pair(intValueSeek, 0));
+		BusinessOrganisationsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessOrganisationsListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessOrganisationsListSortAs.insert(std::make_pair(intValueSeek, wxT("")));				
+	
+	}
+	
+	intPrevValue = 4;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}
+		
+		ProcessCaptureStrings(&PropertyValue);
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ GeneralOrganisationsListAltID.erase(intValueSeek); GeneralOrganisationsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeOrganisationsListAltID.erase(intValueSeek); HomeOrganisationsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessOrganisationsListAltID.erase(intValueSeek); BusinessOrganisationsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ GeneralOrganisationsListPID.erase(intValueSeek); GeneralOrganisationsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeOrganisationsListPID.erase(intValueSeek); HomeOrganisationsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessOrganisationsListPID.erase(intValueSeek); BusinessOrganisationsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			if (intType == 0){ GeneralOrganisationsListPref.erase(intValueSeek); GeneralOrganisationsListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 1){ HomeOrganisationsListPref.erase(intValueSeek); HomeOrganisationsListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 2){ BusinessOrganisationsListPref.erase(intValueSeek); BusinessOrganisationsListPref.insert(std::make_pair(intValueSeek, intPref)); }
+		
+		} else if (PropertyName == wxT("LANGUAGE")){
+		
+			if (intType == 0){ GeneralOrganisationsListLanguage.erase(intValueSeek); GeneralOrganisationsListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeOrganisationsListLanguage.erase(intValueSeek); HomeOrganisationsListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessOrganisationsListLanguage.erase(intValueSeek); BusinessOrganisationsListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("SORT-AS")){
+		
+			if (intType == 0){ GeneralOrganisationsListSortAs.erase(intValueSeek); GeneralOrganisationsListSortAs.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeOrganisationsListSortAs.erase(intValueSeek); HomeOrganisationsListSortAs.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessOrganisationsListSortAs.erase(intValueSeek); BusinessOrganisationsListSortAs.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+		
+				if (FirstToken == TRUE){
+			
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+			
+				} else {
+			
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+			
+				}
+		
+			}
+		
+		}
+	
+	}			
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	wxListItem coldata;
+
+	ProcessCaptureStrings(&wxSPropertySeg2);
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(wxSPropertySeg2);
+	
+	if (intType == 0){
+	
+		ListCtrlIndex = lboOrganisations->InsertItem(coldata);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboOrganisations->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+		
+		GeneralOrganisationsList.erase(intValueSeek);
+		GeneralOrganisationsListType.erase(intValueSeek);
+		GeneralOrganisationsListTokens.erase(intValueSeek);
+		GeneralOrganisationsList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		GeneralOrganisationsListType.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralOrganisationsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 1){ 
+	
+		ListCtrlIndex = lboHomeOrganisations->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboHomeOrganisations->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		HomeOrganisationsList.erase(intValueSeek);
+		HomeOrganisationsListType.erase(intValueSeek);
+		HomeOrganisationsListTokens.erase(intValueSeek);				
+		HomeOrganisationsList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		HomeOrganisationsListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		HomeOrganisationsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 2){ 
+	
+		ListCtrlIndex = lboBusinessOrganisations->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboBusinessOrganisations->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		BusinessOrganisationsList.erase(intValueSeek);
+		BusinessOrganisationsListType.erase(intValueSeek);
+		BusinessOrganisationsListTokens.erase(intValueSeek);				
+		BusinessOrganisationsList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		BusinessOrganisationsListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		BusinessOrganisationsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
+	
+	}
+	
+	OrgCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadPhoto.cpp b/source/contacteditor/frmContactEditor-LoadPhoto.cpp
new file mode 100644
index 0000000..6e92231
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadPhoto.cpp
@@ -0,0 +1,275 @@
+#include "frmContactEditor.h"
+#include "../common/base64.h"
+
+void frmContactEditor::LoadPhoto(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *PhotoCount){
+
+	size_t intPropertyLen = wxSPropertySeg1.Len();
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intSplitsFound = 0;
+	int intSplitSize = 0;
+	int intPrevValue = 7;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 6;
+	
+	// Look for type before continuing.			
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	PicturesList.insert(std::make_pair(intValueSeek, ""));
+	PicturesListType.insert(std::make_pair(intValueSeek, wxT("")));
+	PicturesListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+	PicturesListPID.insert(std::make_pair(intValueSeek, wxT("")));
+	PicturesListPref.insert(std::make_pair(intValueSeek, 0));
+	PicturesListPicEncType.insert(std::make_pair(intValueSeek, wxT("")));
+	PicturesListPictureType.insert(std::make_pair(intValueSeek, wxT("")));			
+	PicturesListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	PicturesListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+
+	intPrevValue = 6;
+
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}
+		
+		ProcessCaptureStrings(&PropertyValue);		
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ PicturesListAltID.erase(intValueSeek); PicturesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ PicturesListAltID.erase(intValueSeek); PicturesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ PicturesListAltID.erase(intValueSeek); PicturesListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ PicturesListPID.erase(intValueSeek); PicturesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ PicturesListPID.erase(intValueSeek); PicturesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ PicturesListPID.erase(intValueSeek); PicturesListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			if (intType == 0){ PicturesListPref.erase(intValueSeek); PicturesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 1){ PicturesListPref.erase(intValueSeek); PicturesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 2){ PicturesListPref.erase(intValueSeek); PicturesListPref.insert(std::make_pair(intValueSeek, intPref)); }
+		
+		} else if (PropertyName == wxT("MEDIATYPE")){
+		
+			if (intType == 0){ PicturesListMediatype.erase(intValueSeek); PicturesListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ PicturesListMediatype.erase(intValueSeek); PicturesListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ PicturesListMediatype.erase(intValueSeek); PicturesListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+			
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+			
+				if (FirstToken == TRUE){
+				
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+				
+				} else {
+				
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+				
+				}
+			
+			}
+		
+		}
+	
+	}	
+	
+	intPropertyLen = wxSPropertySeg2.Len();
+	SplitPoints.clear();
+	SplitLength.clear();
+	intSplitsFound = 0;
+	intSplitSize = 0;
+	intPrevValue = 0;			
+	
+	ProcessCaptureStrings(&wxSPropertySeg2);
+	
+	for (int i = 0; i <= intPropertyLen; i++){
+
+		intSplitSize++;
+	
+		if (wxSPropertySeg2.Mid(i, 1) == wxT(";")){
+	
+			intSplitsFound++;
+			SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+			
+			if (intSplitsFound == 6){ 
+			
+				SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+				break; 
+				
+			} else {
+			
+				SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+			
+			}
+			
+			intSplitSize = 0;					
+	
+		}
+
+	}
+	
+	wxString wxSPhotoURI;
+	wxString wxSPhotoMIME;
+	wxString wxSPhotoEncoding;
+	wxString wxSPhotoData;
+	std::string base64enc;
+	
+	if (intSplitsFound == 0){
+	
+	} else {
+	
+		std::map<int, int>::iterator striter;
+	
+		striter = SplitLength.find(1);
+	
+		wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
+	
+		while (wSTDataType.HasMoreTokens() == TRUE){
+		
+			wxSPhotoURI = wSTDataType.GetNextToken();
+			wxSPhotoMIME = wSTDataType.GetNextToken();
+			break;
+		
+		}			
+	
+		wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));			
+	
+		while (wSTDataInfo.HasMoreTokens() == TRUE){
+		
+			wxSPhotoEncoding = wSTDataInfo.GetNextToken();
+			wxSPhotoData = wSTDataInfo.GetNextToken();					
+			base64enc = wxSPhotoData.mb_str();
+			break;
+		
+		}
+	
+	}
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(_("Picture"));
+	
+	ListCtrlIndex = lboPictures->InsertItem(coldata);
+		
+	if (intPref > 0 && intPref < 101){
+		
+		lboPictures->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+	
+	}
+		
+	PicturesList.erase(intValueSeek);
+	PicturesListType.erase(intValueSeek);
+	PicturesListTokens.erase(intValueSeek);
+	PicturesListPictureType.erase(intValueSeek);
+	PicturesListPicEncType.erase(intValueSeek);
+	PicturesList.insert(std::make_pair(intValueSeek, base64enc));
+	PicturesListPictureType.insert(std::make_pair(intValueSeek, wxSPhotoMIME));
+	PicturesListPicEncType.insert(std::make_pair(intValueSeek, wxSPhotoEncoding));
+	
+	if (intType == 0){
+	
+		PicturesListType.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	} else if (intType == 1){
+	
+		PicturesListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		lboPictures->SetItem(ListCtrlIndex, 1, _("Home"));
+	
+	} else if (intType == 2){
+	
+		PicturesListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		lboPictures->SetItem(ListCtrlIndex, 1, _("Work"));
+	
+	}
+	
+	PicturesListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	PhotoCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadRelated.cpp b/source/contacteditor/frmContactEditor-LoadRelated.cpp
new file mode 100644
index 0000000..8aae707
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadRelated.cpp
@@ -0,0 +1,265 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadRelated(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *RelatedCount){
+
+	size_t intPropertyLen = wxSPropertySeg1.Len();
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	wxString RelatedType;
+	wxString RelatedTypeOriginal;			
+	wxString RelatedName;
+	bool FirstToken = TRUE;			
+	int intSplitsFound = 0;
+	int intSplitSize = 0;
+	int intPrevValue = 9;
+	int intPref = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 8;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process these.
+		
+		RelatedTypeOriginal = PropertyValue;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("contact")){
+
+				RelatedType = _("Contact");
+
+			} else if (PropertyValue == wxT("acquaintance")){
+
+				RelatedType = _("Acquaintance");
+
+			} else if (PropertyValue == wxT("friend")){
+
+				RelatedType = _("Friend");
+
+			} else if (PropertyValue == wxT("met")){
+
+				RelatedType = _("Met");
+
+			} else if (PropertyValue == wxT("co-worker")){
+
+				RelatedType = _("Co-worker");
+
+			} else if (PropertyValue == wxT("colleague")){
+
+				RelatedType = _("Colleague");
+
+			} else if (PropertyValue == wxT("co-resident")){
+
+				RelatedType = _("Co-resident");
+
+			} else if (PropertyValue == wxT("neighbor")){
+
+				RelatedType = _("Neighbour");
+
+			} else if (PropertyValue == wxT("child")){
+
+				RelatedType = _("Child");
+
+			} else if (PropertyValue == wxT("parent")){
+
+				RelatedType = _("Parent");
+
+			} else if (PropertyValue == wxT("sibling")){
+
+				RelatedType = _("Sibling");
+
+			} else if (PropertyValue == wxT("spouse")){
+
+				RelatedType = _("Spouse");
+
+			} else if (PropertyValue == wxT("kin")){
+
+				RelatedType = _("Kin");
+
+			} else if (PropertyValue == wxT("muse")){
+
+				RelatedType = _("Muse");
+
+			} else if (PropertyValue == wxT("crush")){
+
+				RelatedType = _("Crush");
+
+			} else if (PropertyValue == wxT("date")){
+
+				RelatedType = _("Date");
+
+			} else if (PropertyValue == wxT("sweetheart")){
+
+				RelatedType = _("Sweetheart");
+
+			} else if (PropertyValue == wxT("me")){
+
+				RelatedType = _("Me");
+
+			} else if (PropertyValue == wxT("agent")){
+
+				RelatedType = _("Agent");
+
+			} else if (PropertyValue == wxT("emergency")){
+
+				RelatedType = _("Emergency");
+
+			} else {
+
+				RelatedType = PropertyValue;
+
+			}
+		
+		}
+	
+	}
+	
+	intPrevValue = 8;			
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}
+		
+		ProcessCaptureStrings(&PropertyValue);			
+		
+		if (PropertyName == wxT("ALTID")){
+
+			GeneralRelatedListAltID.erase(intValueSeek);
+			GeneralRelatedListAltID.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else if (PropertyName == wxT("PID")){
+
+			GeneralRelatedListPID.erase(intValueSeek);
+			GeneralRelatedListPID.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			if (intPref > 0 && intPref < 101){
+		
+				GeneralRelatedListPref.erase(intValueSeek);
+				GeneralRelatedListPref.insert(std::make_pair(intValueSeek, intPref));
+
+			
+			}
+		
+		} else if (PropertyName == wxT("LANGUAGE")){
+		
+			GeneralRelatedListLanguage.erase(intValueSeek);
+			GeneralRelatedListLanguage.insert(std::make_pair(intValueSeek, PropertyValue));
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+		
+				if (FirstToken == TRUE){
+			
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+			
+				} else {
+			
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+			
+				}
+		
+			}
+		
+		}
+	
+	}					
+	
+	// Split the address. 
+
+	//std::map<int, int>::iterator SLiter;
+	intPropertyLen = wxSPropertySeg2.Len();
+	SplitPoints.clear();
+	SplitLength.clear();
+	intSplitsFound = 0;
+	intSplitSize = 0;
+	intPrevValue = 0;
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(RelatedType);
+	
+	ProcessCaptureStrings(&wxSPropertySeg2);
+
+	ListCtrlIndex = lboRelated->InsertItem(coldata);
+
+	lboRelated->SetItem(ListCtrlIndex, 1, wxSPropertySeg2);
+
+	if (intPref > 0 && intPref < 101){
+		
+		lboRelated->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+			
+	}
+		
+	GeneralRelatedList.erase(intValueSeek);
+	GeneralRelatedListRelType.erase(intValueSeek);
+	GeneralRelatedListType.erase(intValueSeek);
+	GeneralRelatedListTokens.erase(intValueSeek);
+	GeneralRelatedList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+	GeneralRelatedListRelType.insert(std::make_pair(intValueSeek, RelatedTypeOriginal));			
+	GeneralRelatedListType.insert(std::make_pair(intValueSeek, RelatedTypeOriginal));
+	GeneralRelatedListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	RelatedCount++;
+	intValueSeek++;
+
+} 
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadRole.cpp b/source/contacteditor/frmContactEditor-LoadRole.cpp
new file mode 100644
index 0000000..9ce7a09
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadRole.cpp
@@ -0,0 +1,238 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadRole(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *RoleCount){
+
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intPrevValue = 6;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 5;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	if (intType == 0){
+	
+		GeneralRoleList.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralRoleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralRoleListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralRoleListPref.insert(std::make_pair(intValueSeek, 0));
+		GeneralRoleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralRoleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+
+	} else if (intType == 1){
+	
+		HomeRoleList.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeRoleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeRoleListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeRoleListPref.insert(std::make_pair(intValueSeek, 0));
+		HomeRoleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeRoleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));				
+	
+	} else if (intType == 2){
+
+		BusinessRoleList.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessRoleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessRoleListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessRoleListPref.insert(std::make_pair(intValueSeek, 0));
+		BusinessRoleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessRoleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));				
+	
+	}
+	
+	intPrevValue = 5;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}				
+		
+		ProcessCaptureStrings(&PropertyValue);
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ GeneralRoleListAltID.erase(intValueSeek); GeneralRoleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeRoleListAltID.erase(intValueSeek); HomeRoleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessRoleListAltID.erase(intValueSeek); BusinessRoleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ GeneralRoleListPID.erase(intValueSeek); GeneralRoleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeRoleListPID.erase(intValueSeek); HomeRoleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessRoleListPID.erase(intValueSeek); BusinessRoleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			if (intType == 0){ GeneralRoleListPref.erase(intValueSeek); GeneralRoleListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 1){ HomeRoleListPref.erase(intValueSeek); HomeRoleListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 2){ BusinessRoleListPref.erase(intValueSeek); BusinessRoleListPref.insert(std::make_pair(intValueSeek, intPref)); }
+		
+		} else if (PropertyName == wxT("LANGUAGE")){
+		
+			if (intType == 0){ GeneralRoleListLanguage.erase(intValueSeek); GeneralRoleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeRoleListLanguage.erase(intValueSeek); HomeRoleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessRoleListLanguage.erase(intValueSeek); BusinessRoleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+		
+				if (FirstToken == TRUE){
+			
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+			
+				} else {
+			
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+			
+				}
+		
+			}
+		
+		}
+	
+	}
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	ProcessCaptureStrings(&wxSPropertySeg2);
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(wxSPropertySeg2);
+	
+	if (intType == 0){
+	
+		ListCtrlIndex = lboRoles->InsertItem(coldata);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboRoles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+		
+		GeneralRoleList.erase(intValueSeek);
+		GeneralRoleListType.erase(intValueSeek);
+		GeneralRoleListTokens.erase(intValueSeek);
+		GeneralRoleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		GeneralRoleListType.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralRoleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 1){ 
+	
+		ListCtrlIndex = lboHomeRoles->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboHomeRoles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		HomeRoleList.erase(intValueSeek);
+		HomeRoleListType.erase(intValueSeek);
+		HomeRoleListTokens.erase(intValueSeek);				
+		HomeRoleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		HomeRoleListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		HomeRoleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 2){ 
+	
+		ListCtrlIndex = lboBusinessRoles->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboBusinessRoles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		BusinessRoleList.erase(intValueSeek);
+		BusinessRoleListType.erase(intValueSeek);
+		BusinessRoleListTokens.erase(intValueSeek);				
+		BusinessRoleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		BusinessRoleListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		BusinessRoleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
+	
+	}
+	
+	RoleCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadSound.cpp b/source/contacteditor/frmContactEditor-LoadSound.cpp
new file mode 100644
index 0000000..3b4cc7c
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadSound.cpp
@@ -0,0 +1,275 @@
+#include "frmContactEditor.h"
+#include "../common/base64.h"
+
+void frmContactEditor::LoadSound(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *SoundCount){
+
+			size_t intPropertyLen = wxSPropertySeg1.Len();
+			std::map<int, int> SplitPoints;
+			std::map<int, int> SplitLength;
+			std::map<int, int>::iterator SLiter;			
+			wxString PropertyData;
+			wxString PropertyName;
+			wxString PropertyValue;
+			wxString PropertyTokens;
+			bool FirstToken = TRUE;
+			int intSplitsFound = 0;
+			int intSplitSize = 0;
+			int intPrevValue = 7;
+			int intPref = 0;			
+			int intType = 0;
+			long ListCtrlIndex;
+			
+			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+			
+			intPrevValue = 6;
+			
+			// Look for type before continuing.			
+			
+			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+			intiter != SplitPoints.end(); ++intiter){
+			
+				SLiter = SplitLength.find(intiter->first);
+			
+				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+				
+				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+				PropertyName = PropertyElement.GetNextToken();				
+				PropertyValue = PropertyElement.GetNextToken();
+				
+				intPrevValue = intiter->second;
+				
+				if (PropertyName == wxT("TYPE")){
+				
+					if (PropertyValue == wxT("work")){
+					
+						intType = 2;					
+					
+					} else if (PropertyValue == wxT("home")){
+
+						intType = 1;
+					
+					} else {
+					
+						intType = 0;
+					
+					}
+				
+				}
+			
+			}
+			
+			// Setup blank lines for later on.
+			
+			SoundsList.insert(std::make_pair(intValueSeek, ""));
+			SoundsListType.insert(std::make_pair(intValueSeek, wxT("")));
+			SoundsListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+			SoundsListPID.insert(std::make_pair(intValueSeek, wxT("")));
+			SoundsListPref.insert(std::make_pair(intValueSeek, 0));
+			SoundsListAudioEncType.insert(std::make_pair(intValueSeek, wxT("")));
+			SoundsListAudioType.insert(std::make_pair(intValueSeek, wxT("")));			
+			SoundsListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+			SoundsListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+
+			intPrevValue = 6;
+
+			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+			intiter != SplitPoints.end(); ++intiter){
+			
+				SLiter = SplitLength.find(intiter->first);
+			
+				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+				
+				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+				PropertyName = PropertyElement.GetNextToken();				
+				PropertyValue = PropertyElement.GetNextToken();
+				
+				intPrevValue = intiter->second;
+				
+				// Process properties.
+				
+				size_t intPropertyValueLen = PropertyValue.Len();
+				
+				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+					
+					PropertyValue.Trim();
+					PropertyValue.RemoveLast();
+					
+				}				
+				
+				if (PropertyValue.Mid(0, 1) == wxT("\"")){
+					
+					PropertyValue.Remove(0, 1);
+					
+				}			
+				
+				ProcessCaptureStrings(&PropertyValue);
+				
+				if (PropertyName == wxT("ALTID")){
+
+					if (intType == 0){ SoundsListAltID.erase(intValueSeek); SoundsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+					else if (intType == 1){ SoundsListAltID.erase(intValueSeek); SoundsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+					else if (intType == 2){ SoundsListAltID.erase(intValueSeek); SoundsListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+				
+				} else if (PropertyName == wxT("PID")){
+
+					if (intType == 0){ SoundsListPID.erase(intValueSeek); SoundsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+					else if (intType == 1){ SoundsListPID.erase(intValueSeek); SoundsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+					else if (intType == 2){ SoundsListPID.erase(intValueSeek); SoundsListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+				
+				} else if (PropertyName == wxT("PREF")){
+					
+					intPref = wxAtoi(PropertyValue);
+				
+					if (intType == 0){ SoundsListPref.erase(intValueSeek); SoundsListPref.insert(std::make_pair(intValueSeek, intPref)); }
+					else if (intType == 1){ SoundsListPref.erase(intValueSeek); SoundsListPref.insert(std::make_pair(intValueSeek, intPref)); }
+					else if (intType == 2){ SoundsListPref.erase(intValueSeek); SoundsListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				
+				} else if (PropertyName == wxT("MEDIATYPE")){
+				
+					if (intType == 0){ SoundsListMediatype.erase(intValueSeek); SoundsListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+					else if (intType == 1){ SoundsListMediatype.erase(intValueSeek); SoundsListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+					else if (intType == 2){ SoundsListMediatype.erase(intValueSeek); SoundsListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+				
+				} else {
+				
+					// Something else we don't know about so append
+					// to the tokens variable.
+					
+					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+					
+						if (FirstToken == TRUE){
+						
+							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+							FirstToken = FALSE;
+						
+						} else {
+						
+							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+						
+						}
+					
+					}
+				
+				}
+			
+			}	
+			
+			intPropertyLen = wxSPropertySeg2.Len();
+			SplitPoints.clear();
+			SplitLength.clear();
+			intSplitsFound = 0;
+			intSplitSize = 0;
+			intPrevValue = 0;
+			
+			ProcessCaptureStrings(&wxSPropertySeg2);	
+			
+			for (int i = 0; i <= intPropertyLen; i++){
+		
+				intSplitSize++;
+			
+				if (wxSPropertySeg2.Mid(i, 1) == wxT(";")){
+			
+					intSplitsFound++;
+					SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+					
+					if (intSplitsFound == 6){ 
+					
+						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+						break; 
+						
+					} else {
+					
+						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+					
+					}
+					
+					intSplitSize = 0;					
+			
+				}
+		
+			}
+			
+			wxString wxSSoundURI;
+			wxString wxSSoundMIME;
+			wxString wxSSoundEncoding;
+			wxString wxSSoundData;
+			std::string base64enc;
+			
+			if (intSplitsFound == 0){
+			
+			} else {
+			
+				std::map<int, int>::iterator striter;
+			
+				striter = SplitLength.find(1);
+			
+				wxStringTokenizer wSTDataType(wxSPropertySeg2.Mid(0, striter->second), wxT(":"));
+			
+				while (wSTDataType.HasMoreTokens() == TRUE){
+				
+					wxSSoundURI = wSTDataType.GetNextToken();
+					wxSSoundMIME = wSTDataType.GetNextToken();
+					break;
+				
+				}			
+			
+				wxStringTokenizer wSTDataInfo(wxSPropertySeg2.Mid((striter->second + 1)), wxT(","));			
+			
+				while (wSTDataInfo.HasMoreTokens() == TRUE){
+				
+					wxSSoundEncoding = wSTDataInfo.GetNextToken();
+					wxSSoundData = wSTDataInfo.GetNextToken();					
+					base64enc = wxSSoundData.mb_str();
+					break;
+				
+				}
+			
+			}
+			
+			// Add the data to the General/Home/Work address variables.
+			
+			wxListItem coldata;
+		
+			coldata.SetId(intValueSeek);
+			coldata.SetData(intValueSeek);
+			coldata.SetText(_("Sound"));
+			
+			ListCtrlIndex = lboSounds->InsertItem(coldata);
+				
+			if (intPref > 0 && intPref < 101){
+				
+				lboSounds->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+			
+			}
+				
+			SoundsList.erase(intValueSeek);
+			SoundsListType.erase(intValueSeek);
+			SoundsListTokens.erase(intValueSeek);
+			SoundsListAudioType.erase(intValueSeek);
+			SoundsListAudioEncType.erase(intValueSeek);
+			SoundsList.insert(std::make_pair(intValueSeek, base64enc));
+			SoundsListAudioType.insert(std::make_pair(intValueSeek, wxSSoundMIME));
+			SoundsListAudioEncType.insert(std::make_pair(intValueSeek, wxSSoundEncoding));
+			
+			if (intType == 0){
+			
+				SoundsListType.insert(std::make_pair(intValueSeek, wxT("")));
+			
+			} else if (intType == 1){
+			
+				SoundsListType.insert(std::make_pair(intValueSeek, wxT("home")));
+				lboLogos->SetItem(ListCtrlIndex, 1, _("Home"));			
+			
+			} else if (intType == 2){
+			
+				SoundsListType.insert(std::make_pair(intValueSeek, wxT("work")));
+				lboLogos->SetItem(ListCtrlIndex, 1, _("Work"));
+			
+			}
+			
+			SoundsListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+			
+			SoundCount++;
+			intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadTelephone.cpp b/source/contacteditor/frmContactEditor-LoadTelephone.cpp
new file mode 100644
index 0000000..8771494
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadTelephone.cpp
@@ -0,0 +1,420 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadTelephone(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *TelCount){
+
+	// Check TEL and make sure it is functioning properly.
+
+	size_t intPropertyLen = wxSPropertySeg1.Len();
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int> TypeSplitPoints;
+	std::map<int, int> TypeSplitLength;
+	std::map<int, int>::iterator SLiter;
+	std::map<int, int>::iterator SPoint;			
+	std::map<int, int>::iterator TSLiter;
+	std::map<int, int>::iterator TSPoint;
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	wxString TelType;
+	wxString TelNumber;
+	wxString TelTypeUI;
+	wxString TelTypeDetail;
+	bool FirstToken = TRUE;
+	int intSplitsFound = 0;
+	int intSplitSize = 0;
+	int intPrevValue = 5;
+	int intPref = 0;			
+	int intType = 0;
+	int intSplitPoint = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 4;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			// Process each value in type and translate each
+			// part.
+		
+			// Strip out the quotes if they are there.
+		
+			size_t intPropertyValueLen = PropertyValue.Len();
+		
+			if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+				PropertyValue.Trim();
+				PropertyValue.RemoveLast();
+			
+			}				
+		
+			if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+				PropertyValue.Remove(0, 1);
+			
+			}
+			
+			TelTypeDetail = PropertyValue;
+			
+			intSplitSize = 0;
+			intSplitsFound = 0;
+			intSplitPoint = 0;
+			
+			for (int i = 0; i <= intPropertyValueLen; i++){
+	
+				intSplitSize++;
+	
+				if (PropertyValue.Mid(i, 1) == wxT(",") && PropertyValue.Mid((i - 1), 1) != wxT("\\")){
+	
+					if (intSplitsFound == 0){
+
+						TypeSplitPoints.insert(std::make_pair(intSplitsFound, intSplitPoint));
+						TypeSplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+			
+					} else {
+			
+						TypeSplitPoints.insert(std::make_pair(intSplitsFound, intSplitPoint));
+						TypeSplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));
+			
+					}			
+
+					intSplitsFound++;
+					i++;
+					intSplitPoint = i;
+					intSplitSize = 0;
+	
+				}
+	
+			}
+			
+			TypeSplitPoints.insert(std::make_pair(intSplitsFound, intSplitPoint));
+			TypeSplitLength.insert(std::make_pair(intSplitsFound, intSplitSize));								
+		
+			int intTypeSeek = 0;
+		
+			for (std::map<int, int>::iterator typeiter = TypeSplitPoints.begin(); 
+			typeiter != TypeSplitPoints.end(); ++typeiter){
+			
+				wxString TypePropertyName;
+				
+				TSLiter = TypeSplitLength.find(typeiter->first);
+				
+				TypePropertyName = PropertyValue.Mid(typeiter->second, TSLiter->second);
+				
+				if (intTypeSeek == 0){
+				
+				
+				} else {
+										
+					TelTypeUI.Append(wxT(","));							
+				
+				}
+			
+				if (TypePropertyName == wxT("home")){
+				
+					intType = 1;
+				
+				} else if (TypePropertyName == wxT("work")){
+				
+					intType = 2;
+				
+				}
+				
+				
+				if (TypePropertyName == wxT("text")){
+				
+					TelTypeUI.Append(_("text"));
+					intTypeSeek++;
+				
+				} else if (TypePropertyName == wxT("voice")){
+				
+					TelTypeUI.Append(_("voice"));
+					intTypeSeek++;
+				
+				} else if (TypePropertyName == wxT("fax")){
+				
+					TelTypeUI.Append(_("fax"));
+					intTypeSeek++;
+				
+				} else if (TypePropertyName == wxT("cell")){
+				
+					TelTypeUI.Append(_("mobile"));
+					intTypeSeek++;
+				
+				} else if (TypePropertyName == wxT("video")){
+				
+					TelTypeUI.Append(_("video"));
+					intTypeSeek++;
+				
+				} else if (TypePropertyName == wxT("pager")){
+				
+					TelTypeUI.Append(_("pager"));
+					intTypeSeek++;
+				
+				} else if (TypePropertyName == wxT("textphone")){
+				
+					TelTypeUI.Append(_("textphone"));
+					intTypeSeek++;
+				
+				}
+			
+			}
+		
+		}
+		
+		
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	if (intType == 0){
+	
+		GeneralTelephoneList.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralTelephoneListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralTelephoneListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralTelephoneListPref.insert(std::make_pair(intValueSeek, 0));
+		GeneralTelephoneListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+	} else if (intType == 1){
+	
+		HomeTelephoneList.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeTelephoneListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeTelephoneListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeTelephoneListPref.insert(std::make_pair(intValueSeek, 0));
+		HomeTelephoneListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	} else if (intType == 2){
+
+		BusinessTelephoneList.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessTelephoneListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessTelephoneListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessTelephoneListPref.insert(std::make_pair(intValueSeek, 0));
+		BusinessTelephoneListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	}
+	
+	intPrevValue = 4;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}				
+		
+		ProcessCaptureStrings(&PropertyValue);
+		
+		// Process properties.
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ GeneralTelephoneListAltID.erase(intValueSeek); GeneralTelephoneListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeTelephoneListAltID.erase(intValueSeek); HomeTelephoneListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessTelephoneListAltID.erase(intValueSeek); BusinessTelephoneListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ GeneralTelephoneListPID.erase(intValueSeek); GeneralTelephoneListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeTelephoneListPID.erase(intValueSeek); HomeTelephoneListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessTelephoneListPID.erase(intValueSeek); BusinessTelephoneListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+			
+			if (intPref > 0 && intPref < 101){
+		
+				if (intType == 0){ GeneralTelephoneListPref.erase(intValueSeek); GeneralTelephoneListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				else if (intType == 1){ HomeTelephoneListPref.erase(intValueSeek); HomeTelephoneListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				else if (intType == 2){ BusinessTelephoneListPref.erase(intValueSeek); BusinessTelephoneListPref.insert(std::make_pair(intValueSeek, intPref)); }
+				
+			}
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+			
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+			
+				if (FirstToken == TRUE){
+				
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+				
+				} else {
+				
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+				
+				}
+			
+			}
+		
+		}
+	
+	}			
+	
+	// Split the address. 
+
+	//std::map<int, int>::iterator SLiter;
+	intPropertyLen = wxSPropertySeg2.Len();
+	SplitPoints.clear();
+	SplitLength.clear();
+	intSplitsFound = 0;
+	intSplitSize = 0;
+	intPrevValue = 0;
+	
+	for (int i = 0; i <= intPropertyLen; i++){
+
+		intSplitSize++;
+	
+		if (wxSPropertySeg2.Mid(i, 1) == wxT(":") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+	
+			intSplitsFound++;
+			SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+			
+			if (intSplitsFound == 1){ 
+			
+				SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+				break; 
+				
+			}
+			
+			intSplitSize = 0;					
+	
+		}
+
+	}
+	
+	// Split the data into several parts.			
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		if (intiter->first == 1){
+		
+			// Deal with PO Box.
+			
+			SLiter = SplitLength.find(1);
+								
+			//txtSurname->SetValue(ContactData.Convert(wxSPropertySeg2.Mid(0, SLiter->second), TRUE));
+			TelType = wxSPropertySeg2.Mid(0, SLiter->second);
+			intPrevValue = intiter->second;
+			
+			TelNumber = wxSPropertySeg2.Mid(intPrevValue);					
+		
+		}
+	
+	}			
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	ProcessCaptureStrings(&PropertyValue);
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(TelNumber);
+	
+	if (intType == 0){
+	
+		ListCtrlIndex = lboTelephone->InsertItem(coldata);
+		
+		lboTelephone->SetItem(ListCtrlIndex, 1, TelTypeUI);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboTelephone->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+			
+		}				
+		
+		GeneralTelephoneList.erase(intValueSeek);
+		GeneralTelephoneListType.erase(intValueSeek);
+		GeneralTelephoneListTokens.erase(intValueSeek);
+		GeneralTelephoneList.insert(std::make_pair(intValueSeek, TelNumber));
+		GeneralTelephoneListType.insert(std::make_pair(intValueSeek, TelTypeDetail));
+		GeneralTelephoneListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 1){ 
+	
+		ListCtrlIndex = lboHomeTelephone->InsertItem(coldata);
+
+		lboHomeTelephone->SetItem(ListCtrlIndex, 1, TelTypeUI);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboHomeTelephone->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		HomeTelephoneList.erase(intValueSeek);
+		HomeTelephoneListType.erase(intValueSeek);
+		HomeTelephoneListTokens.erase(intValueSeek);				
+		HomeTelephoneList.insert(std::make_pair(intValueSeek, TelNumber));
+		HomeTelephoneListType.insert(std::make_pair(intValueSeek, TelTypeDetail));
+		HomeTelephoneListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 2){ 
+	
+		ListCtrlIndex = lboBusinessTelephone->InsertItem(coldata);
+
+		lboBusinessTelephone->SetItem(ListCtrlIndex, 1, TelTypeUI);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboBusinessTelephone->SetItem(ListCtrlIndex, 2, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		BusinessTelephoneList.erase(intValueSeek);
+		BusinessTelephoneListType.erase(intValueSeek);
+		BusinessTelephoneListTokens.erase(intValueSeek);				
+		BusinessTelephoneList.insert(std::make_pair(intValueSeek, TelNumber));
+		BusinessTelephoneListType.insert(std::make_pair(intValueSeek, TelTypeDetail));
+		BusinessTelephoneListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
+	
+	}
+	
+	TelCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadTimeZone.cpp b/source/contacteditor/frmContactEditor-LoadTimeZone.cpp
new file mode 100644
index 0000000..6750b53
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadTimeZone.cpp
@@ -0,0 +1,281 @@
+#include "frmContactEditor.h"
+			
+void frmContactEditor::LoadTimeZone(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *TZCount){
+			
+			size_t intPropertyLen = wxSPropertySeg1.Len();
+			std::map<int, int> SplitPoints;
+			std::map<int, int> SplitLength;
+			std::map<int, int>::iterator SLiter;			
+			wxString PropertyData;
+			wxString PropertyName;
+			wxString PropertyValue;
+			wxString PropertyTokens;
+			bool FirstToken = TRUE;			
+			int intSplitsFound = 0;
+			int intSplitSize = 0;
+			int intPrevValue = 4;
+			int intPref = 0;			
+			int intType = 0;
+			long ListCtrlIndex;
+			
+			SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+			
+			intPrevValue = 3;
+			
+			// Look for type before continuing.
+			
+			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+			intiter != SplitPoints.end(); ++intiter){
+			
+				SLiter = SplitLength.find(intiter->first);
+			
+				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+				
+				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+				PropertyName = PropertyElement.GetNextToken();				
+				PropertyValue = PropertyElement.GetNextToken();
+				
+				intPrevValue = intiter->second;
+				
+				if (PropertyName == wxT("TYPE")){
+				
+					if (PropertyValue == wxT("work")){
+					
+						intType = 2;					
+					
+					} else if (PropertyValue == wxT("home")){
+
+						intType = 1;
+					
+					} else {
+					
+						intType = 0;
+					
+					}
+				
+				}
+			
+			}
+			
+			// Setup blank lines for later on.
+			
+			if (intType == 0){
+			
+				GeneralTZList.insert(std::make_pair(intValueSeek, wxT("")));
+				GeneralTZListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+				GeneralTZListPID.insert(std::make_pair(intValueSeek, wxT("")));
+				GeneralTZListPref.insert(std::make_pair(intValueSeek, 0));
+				GeneralTZListMediatype.insert(std::make_pair(intValueSeek, wxT("")));
+				GeneralTZListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+			} else if (intType == 1){
+			
+				HomeTZList.insert(std::make_pair(intValueSeek, wxT("")));
+				HomeTZListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+				HomeTZListPID.insert(std::make_pair(intValueSeek, wxT("")));
+				HomeTZListPref.insert(std::make_pair(intValueSeek, 0));
+				HomeTZListMediatype.insert(std::make_pair(intValueSeek, wxT("")));				
+				HomeTZListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+			
+			} else if (intType == 2){
+
+				BusinessTZList.insert(std::make_pair(intValueSeek, wxT("")));
+				BusinessTZListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+				BusinessTZListPID.insert(std::make_pair(intValueSeek, wxT("")));
+				BusinessTZListPref.insert(std::make_pair(intValueSeek, 0));
+				BusinessTZListMediatype.insert(std::make_pair(intValueSeek, wxT("")));				
+				BusinessTZListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+			
+			}
+			
+			intPrevValue = 3;
+			
+			for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+			intiter != SplitPoints.end(); ++intiter){
+			
+				SLiter = SplitLength.find(intiter->first);
+			
+				PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+				
+				wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+				PropertyName = PropertyElement.GetNextToken();				
+				PropertyValue = PropertyElement.GetNextToken();
+				
+				intPrevValue = intiter->second;
+				
+				size_t intPropertyValueLen = PropertyValue.Len();
+				
+				if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+					
+					PropertyValue.Trim();
+					PropertyValue.RemoveLast();
+					
+				}				
+				
+				if (PropertyValue.Mid(0, 1) == wxT("\"")){
+					
+					PropertyValue.Remove(0, 1);
+					
+				}				
+				
+				ProcessCaptureStrings(&PropertyValue);
+				
+				// Process properties.
+				
+				if (PropertyName == wxT("ALTID")){
+
+					if (intType == 0){ GeneralTZListAltID.erase(intValueSeek); GeneralTZListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+					else if (intType == 1){ HomeTZListAltID.erase(intValueSeek); HomeTZListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+					else if (intType == 2){ BusinessTZListAltID.erase(intValueSeek); BusinessTZListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+				
+				} else if (PropertyName == wxT("PID")){
+
+					if (intType == 0){ GeneralTZListPID.erase(intValueSeek); GeneralTZListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+					else if (intType == 1){ HomeTZListPID.erase(intValueSeek); HomeTZListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+					else if (intType == 2){ BusinessTZListPID.erase(intValueSeek); BusinessTZListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+				
+				} else if (PropertyName == wxT("MEDIATYPE")){
+				
+					if (intType == 0){ GeneralTZListMediatype.erase(intValueSeek); GeneralTZListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+					else if (intType == 1){ HomeTZListMediatype.erase(intValueSeek); HomeTZListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+					else if (intType == 2){ BusinessTZListMediatype.erase(intValueSeek); BusinessTZListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+				
+				} else if (PropertyName == wxT("PREF")){
+					
+					intPref = wxAtoi(PropertyValue);
+				
+					if (intPref > 0 && intPref < 101){
+				
+						if (intType == 0){ GeneralTZListPref.erase(intValueSeek); GeneralTZListPref.insert(std::make_pair(intValueSeek, intPref)); }
+						else if (intType == 1){ HomeTZListPref.erase(intValueSeek); HomeTZListPref.insert(std::make_pair(intValueSeek, intPref)); }
+						else if (intType == 2){ BusinessTZListPref.erase(intValueSeek); BusinessTZListPref.insert(std::make_pair(intValueSeek, intPref)); }
+					
+					}
+				
+				} else {
+				
+					// Something else we don't know about so append
+					// to the tokens variable.
+					
+					if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+					
+						if (FirstToken == TRUE){
+						
+							PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+							FirstToken = FALSE;
+						
+						} else {
+						
+							PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+						
+						}
+					
+					}
+				
+				}
+			
+			}			
+			
+			// Split the address. 
+		
+			//std::map<int, int>::iterator SLiter;
+			intPropertyLen = wxSPropertySeg2.Len();
+			SplitPoints.clear();
+			SplitLength.clear();
+			intSplitsFound = 0;
+			intSplitSize = 0;
+			intPrevValue = 0;
+			
+			for (int i = 0; i <= intPropertyLen; i++){
+		
+				intSplitSize++;
+			
+				if (wxSPropertySeg2.Mid(i, 1) == wxT(";") && wxSPropertySeg2.Mid((i - 1), 1) != wxT("\\")){
+			
+					intSplitsFound++;
+					SplitPoints.insert(std::make_pair(intSplitsFound, (i + 1)));
+					
+					if (intSplitsFound == 6){ 
+					
+						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+						break; 
+						
+					} else {
+					
+						SplitLength.insert(std::make_pair(intSplitsFound, (intSplitSize - 1)));
+					
+					}
+					
+					intSplitSize = 0;					
+			
+				}
+		
+			}	
+			
+			// Add the data to the General/Home/Work address variables.
+			
+			ProcessCaptureStrings(&wxSPropertySeg2);			
+			
+			wxListItem coldata;
+		
+			coldata.SetId(intValueSeek);
+			coldata.SetData(intValueSeek);
+			coldata.SetText(wxSPropertySeg2);
+			
+			if (intType == 0){
+			
+				ListCtrlIndex = lboTimezones->InsertItem(coldata);
+				
+				if (intPref > 0 && intPref < 101){
+				
+					lboTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+					
+				}
+				
+				GeneralTZList.erase(intValueSeek);
+				GeneralTZListType.erase(intValueSeek);
+				GeneralTZListTokens.erase(intValueSeek);
+				GeneralTZList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+				GeneralTZListType.insert(std::make_pair(intValueSeek, wxT("")));
+				GeneralTZListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+			
+			} else if (intType == 1){ 
+			
+				ListCtrlIndex = lboHomeTimezones->InsertItem(coldata);
+
+				if (intPref > 0 && intPref < 101){
+				
+					lboHomeTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+					
+				}
+
+				HomeTZList.erase(intValueSeek);
+				HomeTZListType.erase(intValueSeek);
+				HomeTZListTokens.erase(intValueSeek);				
+				HomeTZList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+				HomeTZListType.insert(std::make_pair(intValueSeek, wxT("home")));
+				HomeTZListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+			
+			} else if (intType == 2){ 
+			
+				ListCtrlIndex = lboBusinessTimezones->InsertItem(coldata);
+
+				if (intPref > 0 && intPref < 101){
+				
+					lboBusinessTimezones->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+					
+				}
+
+				BusinessTZList.erase(intValueSeek);
+				BusinessTZListType.erase(intValueSeek);
+				BusinessTZListTokens.erase(intValueSeek);				
+				BusinessTZList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+				BusinessTZListType.insert(std::make_pair(intValueSeek, wxT("work")));
+				BusinessTZListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
+			
+			}
+		
+			TZCount++;
+			intValueSeek++;	
+			
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadTitle.cpp b/source/contacteditor/frmContactEditor-LoadTitle.cpp
new file mode 100644
index 0000000..07638e5
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadTitle.cpp
@@ -0,0 +1,239 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadTitle(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *TitleCount){
+
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intPrevValue = 7;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 6;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	if (intType == 0){
+	
+		GeneralTitleList.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralTitleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralTitleListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralTitleListPref.insert(std::make_pair(intValueSeek, 0));
+		GeneralTitleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralTitleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));
+
+	} else if (intType == 1){
+	
+		HomeTitleList.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeTitleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeTitleListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeTitleListPref.insert(std::make_pair(intValueSeek, 0));
+		HomeTitleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeTitleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));				
+	
+	} else if (intType == 2){
+
+		BusinessTitleList.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessTitleListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessTitleListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessTitleListPref.insert(std::make_pair(intValueSeek, 0));
+		BusinessTitleListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessTitleListLanguage.insert(std::make_pair(intValueSeek, wxT("")));				
+	
+	}
+	
+	intPrevValue = 6;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}				
+		
+		ProcessCaptureStrings(&PropertyValue);
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ GeneralTitleListAltID.erase(intValueSeek); GeneralTitleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeTitleListAltID.erase(intValueSeek); HomeTitleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessTitleListAltID.erase(intValueSeek); BusinessTitleListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ GeneralTitleListPID.erase(intValueSeek); GeneralTitleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeTitleListPID.erase(intValueSeek); HomeTitleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessTitleListPID.erase(intValueSeek); BusinessTitleListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			if (intType == 0){ GeneralTitleListPref.erase(intValueSeek); GeneralTitleListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 1){ HomeTitleListPref.erase(intValueSeek); HomeTitleListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 2){ BusinessTitleListPref.erase(intValueSeek); BusinessTitleListPref.insert(std::make_pair(intValueSeek, intPref)); }
+		
+		} else if (PropertyName == wxT("LANGUAGE")){
+		
+			if (intType == 0){ GeneralTitleListLanguage.erase(intValueSeek); GeneralTitleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeTitleListLanguage.erase(intValueSeek); HomeTitleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessTitleListLanguage.erase(intValueSeek); BusinessTitleListLanguage.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+		
+				if (FirstToken == TRUE){
+			
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+			
+				} else {
+			
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+			
+				}
+		
+			}
+		
+		}
+	
+	}
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	ProcessCaptureStrings(&wxSPropertySeg2);
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(wxSPropertySeg2);
+	
+	if (intType == 0){
+	
+		ListCtrlIndex = lboTitles->InsertItem(coldata);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboTitles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+		
+		GeneralTitleList.erase(intValueSeek);
+		GeneralTitleListType.erase(intValueSeek);
+		GeneralTitleListTokens.erase(intValueSeek);
+		GeneralTitleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		GeneralTitleListType.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralTitleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 1){ 
+	
+		ListCtrlIndex = lboHomeTitles->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboHomeTitles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		HomeTitleList.erase(intValueSeek);
+		HomeTitleListType.erase(intValueSeek);
+		HomeTitleListTokens.erase(intValueSeek);				
+		HomeTitleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		HomeTitleListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		HomeTitleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 2){ 
+	
+		ListCtrlIndex = lboBusinessTitles->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboBusinessTitles->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		BusinessTitleList.erase(intValueSeek);
+		BusinessTitleListType.erase(intValueSeek);
+		BusinessTitleListTokens.erase(intValueSeek);				
+		BusinessTitleList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		BusinessTitleListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		BusinessTitleListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
+	
+	}
+	
+	TitleCount++;
+	intValueSeek++;
+
+
+}
\ No newline at end of file
diff --git a/source/contacteditor/frmContactEditor-LoadURL.cpp b/source/contacteditor/frmContactEditor-LoadURL.cpp
new file mode 100644
index 0000000..1955a41
--- /dev/null
+++ b/source/contacteditor/frmContactEditor-LoadURL.cpp
@@ -0,0 +1,235 @@
+#include "frmContactEditor.h"
+
+void frmContactEditor::LoadURL(wxString wxSPropertySeg1, wxString wxSPropertySeg2, int *URLCount){
+
+	std::map<int, int> SplitPoints;
+	std::map<int, int> SplitLength;
+	std::map<int, int>::iterator SLiter;			
+	wxString PropertyData;
+	wxString PropertyName;
+	wxString PropertyValue;
+	wxString PropertyTokens;
+	bool FirstToken = TRUE;
+	int intPrevValue = 5;
+	int intPref = 0;			
+	int intType = 0;
+	long ListCtrlIndex;
+	
+	SplitValues(&wxSPropertySeg1, &SplitPoints, &SplitLength, intPrevValue);
+	
+	intPrevValue = 4;
+	
+	// Look for type before continuing.
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		if (PropertyName == wxT("TYPE")){
+		
+			if (PropertyValue == wxT("work")){
+			
+				intType = 2;					
+			
+			} else if (PropertyValue == wxT("home")){
+
+				intType = 1;
+			
+			} else {
+			
+				intType = 0;
+			
+			}
+		
+		}
+	
+	}
+	
+	// Setup blank lines for later on.
+	
+	if (intType == 0){
+	
+		GeneralWebsiteList.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralWebsiteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralWebsiteListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralWebsiteListPref.insert(std::make_pair(intValueSeek, 0));
+		GeneralWebsiteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+
+	} else if (intType == 1){
+	
+		HomeWebsiteList.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeWebsiteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeWebsiteListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		HomeWebsiteListPref.insert(std::make_pair(intValueSeek, 0));
+		HomeWebsiteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	} else if (intType == 2){
+
+		BusinessWebsiteList.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessWebsiteListAltID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessWebsiteListPID.insert(std::make_pair(intValueSeek, wxT("")));
+		BusinessWebsiteListPref.insert(std::make_pair(intValueSeek, 0));
+		BusinessWebsiteListTokens.insert(std::make_pair(intValueSeek, wxT("")));
+	
+	}
+	
+	intPrevValue = 4;
+	
+	for (std::map<int, int>::iterator intiter = SplitPoints.begin(); 
+	intiter != SplitPoints.end(); ++intiter){
+	
+		SLiter = SplitLength.find(intiter->first);
+	
+		PropertyData = wxSPropertySeg1.Mid(intPrevValue, (SLiter->second));
+		
+		wxStringTokenizer PropertyElement (PropertyData, wxT("="));
+		PropertyName = PropertyElement.GetNextToken();				
+		PropertyValue = PropertyElement.GetNextToken();
+		
+		intPrevValue = intiter->second;
+		
+		// Process properties.
+		
+		size_t intPropertyValueLen = PropertyValue.Len();
+		
+		if (PropertyValue.Mid((intPropertyValueLen - 1), 1) == wxT("\"")){
+			
+			PropertyValue.Trim();
+			PropertyValue.RemoveLast();
+			
+		}				
+		
+		if (PropertyValue.Mid(0, 1) == wxT("\"")){
+			
+			PropertyValue.Remove(0, 1);
+			
+		}
+		
+		ProcessCaptureStrings(&PropertyValue);		
+		
+		if (PropertyName == wxT("ALTID")){
+
+			if (intType == 0){ GeneralWebsiteListAltID.erase(intValueSeek); GeneralWebsiteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeWebsiteListAltID.erase(intValueSeek); HomeWebsiteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessWebsiteListAltID.erase(intValueSeek); BusinessWebsiteListAltID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PID")){
+
+			if (intType == 0){ GeneralWebsiteListPID.erase(intValueSeek); GeneralWebsiteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeWebsiteListPID.erase(intValueSeek); HomeWebsiteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessWebsiteListPID.erase(intValueSeek); BusinessWebsiteListPID.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else if (PropertyName == wxT("PREF")){
+			
+			intPref = wxAtoi(PropertyValue);
+		
+			if (intType == 0){ GeneralWebsiteListPref.erase(intValueSeek); GeneralWebsiteListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 1){ HomeWebsiteListPref.erase(intValueSeek); HomeWebsiteListPref.insert(std::make_pair(intValueSeek, intPref)); }
+			else if (intType == 2){ BusinessWebsiteListPref.erase(intValueSeek); BusinessWebsiteListPref.insert(std::make_pair(intValueSeek, intPref)); }
+		
+		} else if (PropertyName == wxT("MEDIATYPE")){
+		
+			if (intType == 0){ GeneralWebsiteListMediatype.erase(intValueSeek); GeneralWebsiteListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 1){ HomeWebsiteListMediatype.erase(intValueSeek); HomeWebsiteListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+			else if (intType == 2){ BusinessWebsiteListMediatype.erase(intValueSeek); BusinessWebsiteListMediatype.insert(std::make_pair(intValueSeek, PropertyValue)); }
+		
+		} else {
+		
+			// Something else we don't know about so append
+			// to the tokens variable.
+		
+			if (!PropertyName.IsEmpty() && !PropertyValue.IsEmpty() && PropertyName != wxT("TYPE")){
+		
+				if (FirstToken == TRUE){
+			
+					PropertyTokens.Append(PropertyName + wxT("=") + PropertyValue);
+					FirstToken = FALSE;
+			
+				} else {
+			
+					PropertyTokens.Append(wxT(";") + PropertyName + wxT("=") + PropertyValue);
+			
+				}
+		
+			}
+		
+		}
+	
+	}
+	
+	// Add the data to the General/Home/Work address variables.
+	
+	ProcessCaptureStrings(&wxSPropertySeg2);
+	
+	wxListItem coldata;
+
+	coldata.SetId(intValueSeek);
+	coldata.SetData(intValueSeek);
+	coldata.SetText(wxSPropertySeg2);
+	
+	if (intType == 0){
+	
+		ListCtrlIndex = lboWebsites->InsertItem(coldata);
+		
+		if (intPref > 0 && intPref < 101){
+		
+			lboWebsites->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+		
+		GeneralWebsiteList.erase(intValueSeek);
+		GeneralWebsiteListType.erase(intValueSeek);
+		GeneralWebsiteListTokens.erase(intValueSeek);
+		GeneralWebsiteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		GeneralWebsiteListType.insert(std::make_pair(intValueSeek, wxT("")));
+		GeneralWebsiteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 1){ 
+	
+		ListCtrlIndex = lboHomeWebsites->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboHomeWebsites->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		HomeWebsiteList.erase(intValueSeek);
+		HomeWebsiteListType.erase(intValueSeek);
+		HomeWebsiteListTokens.erase(intValueSeek);				
+		HomeWebsiteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		HomeWebsiteListType.insert(std::make_pair(intValueSeek, wxT("home")));
+		HomeWebsiteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));
+	
+	} else if (intType == 2){ 
+	
+		ListCtrlIndex = lboBusinessWebsites->InsertItem(coldata);
+
+		if (intPref > 0 && intPref < 101){
+		
+			lboBusinessWebsites->SetItem(ListCtrlIndex, 1, wxString::Format(wxT("%i"), intPref));
+			
+		}
+
+		BusinessWebsiteList.erase(intValueSeek);
+		BusinessWebsiteListType.erase(intValueSeek);
+		BusinessWebsiteListTokens.erase(intValueSeek);				
+		BusinessWebsiteList.insert(std::make_pair(intValueSeek, wxSPropertySeg2));
+		BusinessWebsiteListType.insert(std::make_pair(intValueSeek, wxT("work")));
+		BusinessWebsiteListTokens.insert(std::make_pair(intValueSeek, PropertyTokens));				
+	
+	}
+	
+	URLCount++;
+	intValueSeek++;
+
+}
\ No newline at end of file
-- 
2.39.5