diff -u base/cinelerra/mwindowedit.C hvirtual-1.1.5/cinelerra/mwindowedit.C
--- base/cinelerra/mwindowedit.C	2003-05-01 15:10:50.000000000 +0200
+++ hvirtual-1.1.5/cinelerra/mwindowedit.C	2003-05-05 22:17:50.000000000 +0200
@@ -1212,6 +1212,7 @@
 	{
 		edl->save_defaults(defaults);
 		hide_plugins();
+		patches->delete_all_patches();    // this have to be cleaned because patches[x]->track points nowhere after next call
 		delete edl;
 		edl = new EDL;
 		edl->create_objects();
diff -u base/cinelerra/patchbay.C hvirtual-1.1.5/cinelerra/patchbay.C
--- base/cinelerra/patchbay.C	2003-05-01 15:10:47.000000000 +0200
+++ hvirtual-1.1.5/cinelerra/patchbay.C	2003-05-05 22:19:14.000000000 +0200
@@ -243,7 +243,11 @@
 
 
 #define PATCH_X 3
-
+int PatchBay::delete_all_patches()
+{
+	patches.remove_all_objects();
+	return 0;
+}
 int PatchBay::update()
 {
 	int patch_count = 0;
diff -u base/cinelerra/patchbay.h hvirtual-1.1.5/cinelerra/patchbay.h
--- base/cinelerra/patchbay.h	2003-05-01 15:10:47.000000000 +0200
+++ hvirtual-1.1.5/cinelerra/patchbay.h	2003-05-05 22:17:45.000000000 +0200
@@ -25,6 +25,7 @@
 
 // Synchronize with Master EDL
 	int update();
+	int delete_all_patches();
 	void update_meters(ArrayList<double> *module_levels);
 	void stop_meters();
 	void synchronize_faders(float value, int data_type, Track *skip);
diff -u base/cinelerra/virtualaconsole.C hvirtual-1.1.5/cinelerra/virtualaconsole.C
--- base/cinelerra/virtualaconsole.C	2003-05-01 15:10:51.000000000 +0200
+++ hvirtual-1.1.5/cinelerra/virtualaconsole.C	2003-05-05 19:37:19.000000000 +0200
@@ -32,10 +32,12 @@
 
 VirtualAConsole::~VirtualAConsole()
 {
-	for(int i = 0; i < ring_buffers; i++)
+	delete_input_buffers();     // we want to delete buffers by the same object they were allocated
+
+/*	for(int i = 0; i < ring_buffers; i++)
 	{
 		delete_input_buffer(i);
-	}
+	}*/
 }
 
 int VirtualAConsole::total_ring_buffers()
@@ -62,6 +64,8 @@
 
 void VirtualAConsole::delete_input_buffer(int ring_buffer)
 {
+//printf("VirtualAConsole::delete_input_buffer 1 %d\n", ring_buffer);
+
 	for(int i = 0; i < total_tracks; i++)
 	{
 		delete [] buffer_in[ring_buffer][i];
diff -u base/cinelerra/virtualconsole.C hvirtual-1.1.5/cinelerra/virtualconsole.C
--- base/cinelerra/virtualconsole.C	2003-05-05 16:24:53.000000000 +0200
+++ hvirtual-1.1.5/cinelerra/virtualconsole.C	2003-05-05 20:06:40.000000000 +0200
@@ -37,9 +37,9 @@
 /*	for(int i = 0; i < total_tracks; i++)
 		delete virtual_modules[i];
 
-	if(total_tracks) delete [] virtual_modules;*/
+	if(total_tracks) 
+		delete [] virtual_modules;*/
 	delete_virtual_console();
-	delete_input_buffers();
 
 	delete startup_lock;
 	if (playable_tracks) 
@@ -371,18 +371,12 @@
 	if (ring_buffers)
 	{
 
-		for(int buffer = 0; buffer < total_ring_buffers(); buffer++)
+		for(int buffer = 0; buffer < ring_buffers; buffer++)
 		{
-			delete_input_buffer(buffer);
+			delete_input_buffer(buffer);      // this is virtual function
+			delete input_lock[buffer];
+			delete output_lock[buffer];
 		}
-
-		for(int i = 0; i < total_ring_buffers(); i++)
-		{
-			delete input_lock[i];
-			delete output_lock[i];
-		}
-
-		total_tracks = 0;
 	}
 	return 0;
 }
diff -u base/cinelerra/virtualvconsole.C hvirtual-1.1.5/cinelerra/virtualvconsole.C
--- base/cinelerra/virtualvconsole.C	2003-05-01 15:10:47.000000000 +0200
+++ hvirtual-1.1.5/cinelerra/virtualvconsole.C	2003-05-05 19:50:49.000000000 +0200
@@ -25,10 +25,12 @@
 
 VirtualVConsole::~VirtualVConsole()
 {
-	for(int i = 0; i < ring_buffers; i++)
+	delete_input_buffers();     // we want to delete buffers by the same object they were allocated
+
+/*	for(int i = 0; i < ring_buffers; i++)
 	{
 		delete_input_buffer(i);
-	}
+	}*/
 }
 
 int VirtualVConsole::total_ring_buffers()
