diff -Nur kdepim-3.4.1.orig/kpilot/conduits/memofileconduit/memofile-conduit.cc kdepim-3.4.1/kpilot/conduits/memofileconduit/memofile-conduit.cc
--- kdepim-3.4.1.orig/kpilot/conduits/memofileconduit/memofile-conduit.cc	2005-05-23 14:12:37.000000000 +0200
+++ kdepim-3.4.1/kpilot/conduits/memofileconduit/memofile-conduit.cc	2005-05-27 17:27:52.000000000 +0200
@@ -114,7 +114,7 @@
 	setFirstSync( _memofiles->isFirstSync() );
 	addSyncLogEntry(i18n(" Syncing with %1.").arg(_memo_directory));
 
-	if ( (syncMode() == SyncAction::SyncMode::eCopyHHToPC) || isFirstSync() ) {
+	if ( (syncMode() == SyncAction::SyncMode::eCopyHHToPC) || _memofiles->isFirstSync() ) {
 		addSyncLogEntry(i18n(" Copying Pilot to PC..."));
 #ifdef DEBUG
 		DEBUGCONDUIT << fname << ": copying Pilot to PC." << endl;
@@ -474,17 +474,11 @@
 	// Note: This will reset both fCategories and fMemoAppInfo, so
 	//       after this, we need to reinitialize our memofiles object...
 	setAppInfo();
-	cleanup();
 
 	// re-create our memofiles helper...
 	delete _memofiles;
 	_memofiles = new Memofiles(fCategories, *fMemoAppInfo, _memo_directory);
 
-	// make sure we are starting with a clean database on both ends...
-	fDatabase->deleteRecord(0, true);
-	fLocalDatabase->deleteRecord(0, true);
-	cleanup();
-
 	_memofiles->load(true);
 
 	QPtrList<Memofile> memofiles = _memofiles->getAll();
@@ -496,11 +490,39 @@
 	}
 
 	_memofiles->save();
-
+	
+	// now that we've copied from the PC to our handheld, remove anything extra from the
+	// handheld...
+	deleteUnsyncedHHRecords();
+	
 	return true;
 
 }
 
+void MemofileConduit::deleteUnsyncedHHRecords()
+{
+	FUNCTIONSETUP;
+	if ( syncMode()==SyncMode::eCopyPCToHH )
+	{
+		RecordIDList ids=fDatabase->idList();
+		RecordIDList::iterator it;
+		for ( it = ids.begin(); it != ids.end(); ++it )
+		{
+			if (!_memofiles->find(*it))
+			{
+#ifdef DEBUG
+				DEBUGCONDUIT << fname
+				<< "Deleting record with ID "<<*it <<" from handheld "
+				<< "(is not on PC, and syncing with PC->HH direction)"
+				<< endl;
+#endif
+				fDatabase->deleteRecord(*it);
+				fLocalDatabase->deleteRecord(*it);
+			}
+		}
+	}
+}
+
 int MemofileConduit::writeToPilot(Memofile * memofile)
 {
 	FUNCTIONSETUP;
diff -Nur kdepim-3.4.1.orig/kpilot/conduits/memofileconduit/memofile-conduit.h kdepim-3.4.1/kpilot/conduits/memofileconduit/memofile-conduit.h
--- kdepim-3.4.1.orig/kpilot/conduits/memofileconduit/memofile-conduit.h	2005-05-23 14:12:37.000000000 +0200
+++ kdepim-3.4.1/kpilot/conduits/memofileconduit/memofile-conduit.h	2005-05-27 17:27:52.000000000 +0200
@@ -88,6 +88,7 @@
 
 	bool	copyHHToPC();
 	bool	copyPCToHH();
+	void	deleteUnsyncedHHRecords();
 	bool	sync();
 
 	int 	writeToPilot(Memofile * memofile);
diff -Nur kdepim-3.4.1.orig/kpilot/lib/pilotDatabase.cc kdepim-3.4.1/kpilot/lib/pilotDatabase.cc
--- kdepim-3.4.1.orig/kpilot/lib/pilotDatabase.cc	2005-05-23 14:12:43.000000000 +0200
+++ kdepim-3.4.1/kpilot/lib/pilotDatabase.cc	2005-05-27 17:27:52.000000000 +0200
@@ -185,7 +185,7 @@
 	int len = CATEGORY_NAME_SIZE - 1;
 	QCString t = PilotAppCategory::codec()->fromUnicode(s,len);
 	memset(categoryInfo()->name[i],0,CATEGORY_NAME_SIZE);
-	qstrncpy(categoryInfo()->name[i],t,kMin(len,(int)CATEGORY_NAME_SIZE));
+	qstrncpy(categoryInfo()->name[i],t,CATEGORY_NAME_SIZE);
 	return true;
 }
 
diff -Nur kdepim-3.4.1.orig/kpilot/lib/pilotDatabase.h kdepim-3.4.1/kpilot/lib/pilotDatabase.h
--- kdepim-3.4.1.orig/kpilot/lib/pilotDatabase.h	2005-05-23 14:12:43.000000000 +0200
+++ kdepim-3.4.1/kpilot/lib/pilotDatabase.h	2005-05-27 17:27:52.000000000 +0200
@@ -279,9 +279,12 @@
 		int appLen = MAX_APPINFO_SIZE;
 		unsigned char buffer[MAX_APPINFO_SIZE];
 
-		appLen = d->readAppBlock(buffer,appLen);
-
-		(*unpack)(&fInfo, buffer, appLen);
+		if (d && d->isDBOpen())
+		{
+			appLen = d->readAppBlock(buffer,appLen);
+			(*unpack)(&fInfo, buffer, appLen);
+		}
+		// fInfo is just a struct, so we can point to it anyway.
 		init(&fInfo.category,appLen);
 	} ;
 
@@ -289,6 +292,10 @@
 	{
 		FUNCTIONSETUP;
 		unsigned char buffer[MAX_APPINFO_SIZE];
+		if (!d || !d->isDBOpen())
+		{
+			return -1;
+		}
 		int appLen = (*pack)(&fInfo, buffer, length());
 		if (appLen > 0)
 		{
diff -Nur kdepim-3.4.1.orig/kpilot/lib/pilotLocalDatabase.cc kdepim-3.4.1/kpilot/lib/pilotLocalDatabase.cc
--- kdepim-3.4.1.orig/kpilot/lib/pilotLocalDatabase.cc	2005-05-23 14:12:43.000000000 +0200
+++ kdepim-3.4.1/kpilot/lib/pilotLocalDatabase.cc	2005-05-27 17:27:52.000000000 +0200
@@ -618,7 +618,7 @@
 
 	int count;
 	pi_file_get_entries(dbFile, &count);
-	if (count > 0)
+	if (count >= 0)
 	{
 		KPILOT_DELETE(d);
 		d = new Private(count);