diff -u base/plugins/defaulttheme/defaulttheme.C hvirtual-1.1.5/plugins/defaulttheme/defaulttheme.C
--- base/plugins/defaulttheme/defaulttheme.C	2003-05-01 01:02:24.000000000 +0200
+++ hvirtual-1.1.5/plugins/defaulttheme/defaulttheme.C	2003-05-01 00:17:54.000000000 +0200
@@ -43,6 +43,7 @@
 
 DefaultThemeMain::~DefaultThemeMain()
 {
+
 }
 
 char* DefaultThemeMain::plugin_title()
@@ -69,6 +70,31 @@
 
 DefaultTheme::~DefaultTheme()
 {
+	delete rgui_batch;
+	delete rgui_controls;
+	delete rgui_list;
+	delete rmonitor_panel;
+	delete rmonitor_meters;
+	delete mbutton_left;
+	delete mbutton_right;
+
+	delete clock_bg;
+
+	delete tracks_bg;     
+	delete zoombar_left;
+	delete zoombar_right;
+	delete statusbar_left;
+	delete statusbar_right;
+	delete cpanel_bg;
+	delete cbuttons_left;
+	delete cbuttons_right;
+	delete cmeter_bg;
+	delete vbuttons_left;
+	delete vbuttons_right;
+	delete vmeter_bg;
+	delete preferences_bg;
+	delete new_bg;
+	delete setformat_bg; 
 }
 
 void DefaultTheme::initialize()
@@ -251,7 +277,8 @@
 	static VFrame *default_outpoint[] = { new VFrame(get_image("out_up.png")), new VFrame(get_image("out_hi.png")), new VFrame(get_image("out_checked.png")), new VFrame(get_image("out_dn.png")), new VFrame(get_image("out_checkedhi.png")) };
 	static VFrame *default_labeltoggle[] = { new VFrame(get_image("labeltoggle_up.png")), new VFrame(get_image("labeltoggle_uphi.png")), new VFrame(get_image("label_checked.png")), new VFrame(get_image("labeltoggle_dn.png")), new VFrame(get_image("label_checkedhi.png")) };
 	static VFrame *default_inpoint[] = { new VFrame(get_image("in_up.png")), new VFrame(get_image("in_hi.png")), new VFrame(get_image("in_checked.png")), new VFrame(get_image("in_dn.png")), new VFrame(get_image("in_checkedhi.png")) };
-	static VFrame *default_wrench_data[] = { new VFrame(get_image("wrench_up.png")), new VFrame(get_image("wrench_hi.png")), new VFrame(get_image("wrench_dn.png")) };
+// this is never used
+//	static VFrame *default_wrench_data[] = { new VFrame(get_image("wrench_up.png")), new VFrame(get_image("wrench_hi.png")), new VFrame(get_image("wrench_dn.png")) };
 	static VFrame *transport_bg[] = { new VFrame(get_image("transportup.png")), new VFrame(get_image("transporthi.png")), new VFrame(get_image("transportdn.png")) };
 
 	static VFrame *default_statusbar_cancel[] = 
@@ -260,6 +287,9 @@
 		new VFrame(get_image("statusbar_cancel_hi.png")),
 		new VFrame(get_image("statusbar_cancel_dn.png"))
 	};
+	in_point = default_inpoint;
+	label_toggle = default_labeltoggle;
+	out_point = default_outpoint;
 	statusbar_cancel_data = default_statusbar_cancel;
 
 
@@ -314,9 +344,6 @@
 	build_transport(rewind_data, get_image("rewind.png"), transport_bg, 0);
 	build_transport(stop_data, get_image("stop.png"), transport_bg, 1);
 	build_transport(stoprec_data, get_image("stoprec.png"), transport_bg, 2);
-	in_point = default_inpoint;
-	label_toggle = default_labeltoggle;
-	out_point = default_outpoint;
 	flush_images();
 
 	title_font = MEDIUMFONT_3D;
@@ -536,7 +563,6 @@
 	static VFrame *default_expandpatch_data[] = { new VFrame(get_image("expandpatch_up.png")), new VFrame(get_image("expandpatch_hi.png")), new VFrame(get_image("expandpatch_checked.png")), new VFrame(get_image("expandpatch_dn.png")), new VFrame(get_image("expandpatch_checkedhi.png")) };
 	static VFrame *default_gangpatch_data[] = { new VFrame(get_image("gangpatch_up.png")), new VFrame(get_image("gangpatch_hi.png")), new VFrame(get_image("gangpatch_checked.png")), new VFrame(get_image("gangpatch_dn.png")), new VFrame(get_image("gangpatch_checkedhi.png")) };
 	static VFrame *default_mutepatch_data[] = { new VFrame(get_image("mutepatch_up.png")), new VFrame(get_image("mutepatch_hi.png")), new VFrame(get_image("mutepatch_checked.png")), new VFrame(get_image("mutepatch_dn.png")), new VFrame(get_image("mutepatch_checkedhi.png")) };
-	static VFrame *default_patchbay_bg = new VFrame(get_image("patchbay_bg.png"));
 	static VFrame *default_playpatch_data[] = { new VFrame(get_image("playpatch_up.png")), new VFrame(get_image("playpatch_hi.png")), new VFrame(get_image("playpatch_checked.png")), new VFrame(get_image("playpatch_dn.png")), new VFrame(get_image("playpatch_checkedhi.png")) };
 	static VFrame *default_recordpatch_data[] = { new VFrame(get_image("recordpatch_up.png")), new VFrame(get_image("recordpatch_hi.png")), new VFrame(get_image("recordpatch_checked.png")), new VFrame(get_image("recordpatch_dn.png")), new VFrame(get_image("recordpatch_checkedhi.png")) };
 
@@ -545,9 +571,12 @@
 	expandpatch_data = default_expandpatch_data;
 	gangpatch_data = default_gangpatch_data;
 	mutepatch_data = default_mutepatch_data;
-	patchbay_bg = default_patchbay_bg;
 	playpatch_data = default_playpatch_data;
 	recordpatch_data = default_recordpatch_data;
+
+// this is already allocated in initialize();
+//	static VFrame *default_patchbay_bg = new VFrame(get_image("patchbay_bg.png"));
+//	patchbay_bg = default_patchbay_bg;
 }
 
 void DefaultTheme::build_overlays()
diff -u base/plugins/defaulttheme/defaulttheme.h hvirtual-1.1.5/plugins/defaulttheme/defaulttheme.h
--- base/plugins/defaulttheme/defaulttheme.h	2002-07-29 20:31:00.000000000 +0200
+++ hvirtual-1.1.5/plugins/defaulttheme/defaulttheme.h	2003-04-30 22:38:35.000000000 +0200
@@ -44,7 +44,6 @@
 	VFrame *mbutton_left;
 	VFrame *mbutton_right;
 	VFrame *clock_bg;
-	VFrame *patchbay_bg;
 	VFrame *tracks_bg;
 	VFrame *zoombar_left;
 	VFrame *zoombar_right;
diff -u base/guicast/arraylist.h hvirtual-1.1.5/guicast/arraylist.h
--- base/guicast/arraylist.h	2002-11-16 18:48:53.000000000 +0100
+++ hvirtual-1.1.5/guicast/arraylist.h	2003-04-29 20:35:48.000000000 +0200
@@ -36,9 +36,12 @@
 
 	TYPE* values;
 	long total;
+	void set_array_delete();
+
 
 private:
 	long available;
+	short array_delete;
 };
 
 template<class TYPE>
@@ -46,6 +49,7 @@
 {
 	total = 0;
 	available = 1;
+	array_delete = 0;
 	values = new TYPE[available];
 }
 
@@ -58,6 +62,12 @@
 }
 
 template<class TYPE>
+void ArrayList<TYPE>::set_array_delete()
+{
+	array_delete=1;
+}
+
+template<class TYPE>
 void ArrayList<TYPE>::allocate(int total)
 {
 	if(total > available)
@@ -130,7 +140,10 @@
 void ArrayList<TYPE>::remove_object(TYPE value)                   // remove value from anywhere in list
 {
 	remove(value);
-	delete value;
+	if (array_delete) 
+		delete [] value;
+	else 
+		delete value;
 }
 
 
@@ -138,7 +151,11 @@
 template<class TYPE>
 void ArrayList<TYPE>::remove_object()                   // remove value from anywhere in list
 {
-	delete values[total - 1];
+//	delete values[total - 1];
+	if (array_delete) 
+		delete [] values[total - 1];
+	else 
+		delete values[total - 1];
 	remove();
 }
 
@@ -167,7 +184,10 @@
 void ArrayList<TYPE>::remove_all_objects()
 {
 //printf("ArrayList<TYPE>::remove_all_objects 1 %d\n", total);
-	for(int i = 0; i < total; i++) delete values[i];
+	if (array_delete)
+		for(int i = 0; i < total; i++) delete [] values[i];
+	else
+		for(int i = 0; i < total; i++) delete values[i];
 	total = 0;
 }
 
diff -u base/guicast/bcmeter.C hvirtual-1.1.5/guicast/bcmeter.C
--- base/guicast/bcmeter.C	2002-06-21 20:35:25.000000000 +0200
+++ hvirtual-1.1.5/guicast/bcmeter.C	2003-04-29 01:51:35.000000000 +0200
@@ -48,8 +48,8 @@
 	if(use_titles)
 	{
 		for(int i = 0; i < meter_titles; i++) delete [] db_titles[i];
+		if(db_titles) delete [] db_titles;
 	}
-	if(db_titles) delete [] db_titles;
 	if(title_pixel) delete [] title_pixel;
 	for(int i = 0; i < TOTAL_METER_IMAGES; i++) delete images[i];
 }
@@ -193,15 +193,20 @@
 	float division, division_step;
 	char string[1024];
 
-	for(int i = 0; i < meter_titles; i++) delete [] db_titles[i];
-	if(db_titles) delete [] db_titles;
+	if (use_titles) 
+	{
+		for(int i = 0; i < meter_titles; i++) delete [] db_titles[i];
+		if(db_titles) delete [] db_titles;
+	}
 	if(title_pixel) delete [] title_pixel;
-
 	meter_titles = labs((int)(min / 5)) + 1;
+	if (use_titles) 
+	{
+		db_titles = new char*[meter_titles];
+		for(i = 0; i < meter_titles; i++) db_titles[i] = 0;
+	}
 	title_pixel = new int[meter_titles];
-	db_titles = new char*[meter_titles];
-	for(i = 0; i < meter_titles; i++) db_titles[i] = 0;
-
+	
 	division = METER_MARGIN;
 	division_step = (float)(pixels - METER_MARGIN * 3) / (meter_titles - 1);
 	j = 0;     // number for title
@@ -209,10 +214,12 @@
 
 	for(i = 0; i < meter_titles; i++)
 	{
-		sprintf(string, "%.0f", fabs(-j));
-		db_titles[i] = new char[strlen(string) + 1];
-		strcpy(db_titles[i], string);
-
+		if (use_titles) 
+		{
+			sprintf(string, "%.0f", fabs(-j));
+			db_titles[i] = new char[strlen(string) + 1];
+			strcpy(db_titles[i], string);
+		}		
 		title_pixel[i] = (int)(division); 
 
 		division += division_step;
diff -u base/guicast/bcresources.C hvirtual-1.1.5/guicast/bcresources.C
--- base/guicast/bcresources.C	2002-07-08 10:04:50.000000000 +0200
+++ hvirtual-1.1.5/guicast/bcresources.C	2003-04-30 00:59:02.000000000 +0200
@@ -75,7 +75,14 @@
 
 BC_Resources::BC_Resources()
 {
-	display_info = new BC_DisplayInfo("", 0);
+	// cache the info & save some space
+	BC_DisplayInfo 	*display_info = new BC_DisplayInfo("", 0);
+	top_border = display_info->get_top_border();
+	bottom_border = display_info->get_bottom_border();
+	left_border = display_info->get_left_border();
+	right_border = display_info->get_right_border();
+	delete display_info;
+
 	use_xvideo = 1;
 #include "images/cancel_up_png.h"
 #include "images/cancel_hi_png.h"
@@ -526,22 +533,22 @@
 
 int BC_Resources::get_top_border()
 {
-	return display_info->get_top_border();
+	return top_border;
 }
 
 int BC_Resources::get_left_border()
 {
-	return display_info->get_left_border();
+	return left_border;
 }
 
 int BC_Resources::get_right_border()
 {
-	return display_info->get_right_border();
+	return right_border;
 }
 
 int BC_Resources::get_bottom_border()
 {
-	return display_info->get_bottom_border();
+	return bottom_border;
 }
 
 
diff -u base/guicast/bcresources.h hvirtual-1.1.5/guicast/bcresources.h
--- base/guicast/bcresources.h	2002-06-25 09:56:45.000000000 +0200
+++ hvirtual-1.1.5/guicast/bcresources.h	2003-04-30 00:56:25.000000000 +0200
@@ -165,7 +165,8 @@
 	int init_shm(BC_WindowBase *window);
 	void init_sizes(BC_WindowBase *window);
 	static int x_error_handler(Display *display, XErrorEvent *event);
-	BC_DisplayInfo *display_info;
+	int top_border,left_border,right_border,bottom_border;
+
 };
 
 
diff -u base/guicast/bcwindowbase.C hvirtual-1.1.5/guicast/bcwindowbase.C
--- base/guicast/bcwindowbase.C	2003-03-05 04:20:37.000000000 +0100
+++ hvirtual-1.1.5/guicast/bcwindowbase.C	2003-05-01 00:56:17.000000000 +0200
@@ -18,6 +18,7 @@
 #include "sizes.h"
 #include "vframe.h"
 
+
 #ifdef HAVE_GL
 #include <GL/gl.h>
 #endif
@@ -26,6 +27,10 @@
 #include <X11/extensions/Xvlib.h>
 #include <X11/extensions/shape.h>
 
+XFontStruct *BC_WindowBase::largefont = NULL;
+XFontStruct *BC_WindowBase::mediumfont = NULL;
+XFontStruct *BC_WindowBase::smallfont = NULL;
+
 BC_ResizeCall::BC_ResizeCall(int w, int h)
 {
 	this->w = w;
@@ -147,6 +152,7 @@
 
 	if(bg_pixmap && !shared_bg_pixmap) delete bg_pixmap;
 	if(icon_pixmap) delete icon_pixmap;
+	if(icon_window) delete icon_window;
 
 	if(window_type == MAIN_WINDOW) 
 	{
@@ -201,6 +207,7 @@
 	is_dragging = 0;
 	shared_bg_pixmap = 0;
 	icon_pixmap = 0;
+	icon_window = 0;
 	window_type = MAIN_WINDOW;
 	translation_count = 0;
 	x_correction = y_correction = 0;
@@ -283,7 +290,7 @@
 
 // get the display connection
 		display = init_display(display_name);
-
+		
 // Fudge window placement
 		root_w = get_root_w(1);
 		root_h = get_root_h();
@@ -509,6 +516,7 @@
 
 	while(!done)
 	{
+//		printf("dispatch: %s\n",get_title());
 		dispatch_event();
 	}
 //printf("BC_WindowBase::run_window 3\n");
@@ -1552,12 +1560,15 @@
 
 int BC_WindowBase::init_fonts()
 {
+	if (largefont == NULL) 
 	if((largefont = XLoadQueryFont(display, resources.large_font)) == NULL) 
 		largefont = XLoadQueryFont(display, "fixed"); 
 
+	if (mediumfont == NULL) 
 	if((mediumfont = XLoadQueryFont(display, resources.medium_font)) == NULL)
 		mediumfont = XLoadQueryFont(display, "fixed"); 
 
+	if (smallfont == NULL) 
 	if((smallfont = XLoadQueryFont(display, resources.small_font)) == NULL)
 		smallfont = XLoadQueryFont(display, "fixed"); 
 
@@ -1581,6 +1592,7 @@
 		{
 			curr_fontset = mediumfontset;
 			get_resources()->use_fontset = 1;
+			printf("using fontset\n");
 		}
 		else
 		{
@@ -2887,6 +2899,7 @@
 		PIXMAP_ALPHA,
 		1);
 
+	if(icon_window) delete icon_window;
 	icon_window = new BC_Popup(this, 
 		(int)BC_INFINITY, 
 		(int)BC_INFINITY, 
diff -u base/guicast/bcwindowbase.h hvirtual-1.1.5/guicast/bcwindowbase.h
--- base/guicast/bcwindowbase.h	2003-03-05 04:20:37.000000000 +0100
+++ hvirtual-1.1.5/guicast/bcwindowbase.h	2003-04-29 22:35:04.000000000 +0200
@@ -634,7 +634,7 @@
 	Atom ProtoXAtom;
 	Atom RepeaterXAtom;
 	Atom SetDoneXAtom;
-	XFontStruct *largefont, *mediumfont, *smallfont;
+	static XFontStruct *largefont, *mediumfont, *smallfont;
 	int current_cursor;
 	Cursor arrow_cursor;
 	Cursor cross_cursor;
diff -u base/cinelerra/atrack.C hvirtual-1.1.5/cinelerra/atrack.C
--- base/cinelerra/atrack.C	2002-11-16 18:48:52.000000000 +0100
+++ hvirtual-1.1.5/cinelerra/atrack.C	2003-04-30 01:49:19.000000000 +0200
@@ -39,14 +39,14 @@
 {
 	Track::synchronize_params(track);
 
-	ATrack *atrack = (ATrack*)track;
+//	ATrack *atrack = (ATrack*)track;   // this is not used
 }
 
 int ATrack::copy_settings(Track *track)
 {
 	Track::copy_settings(track);
 
-	ATrack *atrack = (ATrack*)track;
+//	ATrack *atrack = (ATrack*)track;   // this is not used
 	return 0;
 }
 
diff -u base/cinelerra/awindow.C hvirtual-1.1.5/cinelerra/awindow.C
--- base/cinelerra/awindow.C	2002-06-21 20:35:24.000000000 +0200
+++ hvirtual-1.1.5/cinelerra/awindow.C	2003-05-01 00:42:31.000000000 +0200
@@ -4,7 +4,7 @@
 #include "awindowgui.h"
 #include "clipedit.h"
 
-AWindow::AWindow(MWindow *mwindow) : Thread()
+AWindow::AWindow(MWindow *mwindow) : Thread(1)     // don't detach so we can join
 {
 	this->mwindow = mwindow;
 	current_folder[0] = 0;
@@ -13,7 +13,13 @@
 
 AWindow::~AWindow()
 {
+	delete clip_edit;
 	delete asset_edit;
+	delete asset_remove;
+
+	gui->set_done(0);
+	Thread::join();
+	delete gui;
 }
 
 int AWindow::create_objects()
diff -u base/cinelerra/awindowgui.C hvirtual-1.1.5/cinelerra/awindowgui.C
--- base/cinelerra/awindowgui.C	2002-11-16 18:48:52.000000000 +0100
+++ hvirtual-1.1.5/cinelerra/awindowgui.C	2003-05-01 00:21:40.000000000 +0200
@@ -231,6 +231,7 @@
 // mwindow->session->awindow_y, 
 // mwindow->session->awindow_w, 
 // mwindow->session->awindow_h);
+	
 	this->mwindow = mwindow;
 	this->awindow = awindow;
 }
@@ -246,6 +247,7 @@
 	displayed_assets[1].remove_all_objects();
 	delete file_icon;
 	delete audio_icon;
+	delete video_icon;
 	delete folder_icon;
 	delete clip_icon;
 	delete newfolder_thread;
@@ -1257,67 +1259,9 @@
 
 
 
-
-AWindowNewFolder::AWindowNewFolder(MWindow *mwindow, AWindowGUI *gui, int x, int y)
- : BC_Button(x, y, mwindow->theme->newbin_data)
-{
-	this->mwindow = mwindow;
-	this->gui = gui;
-	set_tooltip("New bin");
-}
-
-int AWindowNewFolder::handle_event()
-{
-	gui->newfolder_thread->start_new_folder();
-	return 1;
-}
-
-AWindowDeleteFolder::AWindowDeleteFolder(MWindow *mwindow, AWindowGUI *gui, int x, int y)
- : BC_Button(x, y, mwindow->theme->deletebin_data)
-{
-	this->mwindow = mwindow;
-	this->gui = gui;
-	set_tooltip("Delete bin");
-}
-
-int AWindowDeleteFolder::handle_event()
-{
-	if(gui->folder_list->get_selection(0, 0))
-	{
-		BC_ListBoxItem *folder = gui->folder_list->get_selection(0, 0);
-		mwindow->delete_folder(folder->get_text());
-	}
-	return 1;
-}
-
-AWindowRenameFolder::AWindowRenameFolder(MWindow *mwindow, AWindowGUI *gui, int x, int y)
- : BC_Button(x, y, mwindow->theme->renamebin_data)
-{
-	this->mwindow = mwindow;
-	this->gui = gui;
-	set_tooltip("Rename bin");
-}
-
-int AWindowRenameFolder::handle_event()
-{
-	return 1;
-}
-
-AWindowDeleteDisk::AWindowDeleteDisk(MWindow *mwindow, AWindowGUI *gui, int x, int y)
- : BC_Button(x, y, mwindow->theme->deletedisk_data)
-{
-	this->mwindow = mwindow;
-	this->gui = gui;
-	set_tooltip("Delete asset from disk");
-}
-
-int AWindowDeleteDisk::handle_event()
-{
-	return 1;
-}
-
 AWindowDeleteProject::AWindowDeleteProject(MWindow *mwindow, AWindowGUI *gui, int x, int y)
- : BC_Button(x, y, mwindow->theme->deleteproject_data)
+ : BC_Button(x, y, NULL)
+// : BC_Button(x, y, mwindow->theme->deleteproject_data)
 {
 	this->mwindow = mwindow;
 	this->gui = gui;
@@ -1329,46 +1273,6 @@
 	return 1;
 }
 
-AWindowInfo::AWindowInfo(MWindow *mwindow, AWindowGUI *gui, int x, int y)
- : BC_Button(x, y, mwindow->theme->infoasset_data)
-{
-	this->mwindow = mwindow;
-	this->gui = gui;
-	set_tooltip("Edit information on asset");
-}
-
-int AWindowInfo::handle_event()
-{
-	gui->awindow->asset_edit->edit_asset(gui->selected_asset());
-	return 1;
-}
-
-AWindowRedrawIndex::AWindowRedrawIndex(MWindow *mwindow, AWindowGUI *gui, int x, int y)
- : BC_Button(x, y, mwindow->theme->redrawindex_data)
-{
-	this->mwindow = mwindow;
-	this->gui = gui;
-	set_tooltip("Redraw index");
-}
-
-int AWindowRedrawIndex::handle_event()
-{
-	return 1;
-}
-
-AWindowPaste::AWindowPaste(MWindow *mwindow, AWindowGUI *gui, int x, int y)
- : BC_Button(x, y, mwindow->theme->pasteasset_data)
-{
-	this->mwindow = mwindow;
-	this->gui = gui;
-	set_tooltip("Paste asset on recordable tracks");
-}
-
-int AWindowPaste::handle_event()
-{
-	return 1;
-}
-
 AWindowAppend::AWindowAppend(MWindow *mwindow, AWindowGUI *gui, int x, int y)
  : BC_Button(x, y, mwindow->theme->appendasset_data)
 {
@@ -1381,16 +1285,3 @@
 {
 	return 1;
 }
-
-AWindowView::AWindowView(MWindow *mwindow, AWindowGUI *gui, int x, int y)
- : BC_Button(x, y, mwindow->theme->viewasset_data)
-{
-	this->mwindow = mwindow;
-	this->gui = gui;
-	set_tooltip("View asset");
-}
-
-int AWindowView::handle_event()
-{
-	return 1;
-}
diff -u base/cinelerra/awindowgui.h hvirtual-1.1.5/cinelerra/awindowgui.h
--- base/cinelerra/awindowgui.h	2002-06-21 20:35:24.000000000 +0200
+++ hvirtual-1.1.5/cinelerra/awindowgui.h	2003-04-30 23:57:27.000000000 +0200
@@ -14,17 +14,9 @@
 
 class AWindowAssets;
 class AWindowFolders;
-class AWindowNewFolder;
-class AWindowDeleteFolder;
-class AWindowRenameFolder;
-class AWindowDeleteDisk;
 class AWindowDeleteProject;
 class AWindowDivider;
-class AWindowInfo;
-class AWindowRedrawIndex;
-class AWindowPaste;
 class AWindowAppend;
-class AWindowView;
 
 
 class AWindowGUI;
@@ -195,16 +187,6 @@
 	int x, y;
 };
 
-class AWindowDeleteFolder : public BC_Button
-{
-public:
-	AWindowDeleteFolder(MWindow *mwindow, AWindowGUI *gui, int x, int y);
-	int handle_event();
-	MWindow *mwindow;
-	AWindowGUI *gui;
-	int x, y;
-};
-
 class AWindowRenameFolder : public BC_Button
 {
 public:
@@ -235,36 +217,6 @@
 	int x, y;
 };
 
-class AWindowInfo : public BC_Button
-{
-public:
-	AWindowInfo(MWindow *mwindow, AWindowGUI *gui, int x, int y);
-	int handle_event();
-	MWindow *mwindow;
-	AWindowGUI *gui;
-	int x, y;
-};
-
-class AWindowRedrawIndex : public BC_Button
-{
-public:
-	AWindowRedrawIndex(MWindow *mwindow, AWindowGUI *gui, int x, int y);
-	int handle_event();
-	MWindow *mwindow;
-	AWindowGUI *gui;
-	int x, y;
-};
-
-class AWindowPaste : public BC_Button
-{
-public:
-	AWindowPaste(MWindow *mwindow, AWindowGUI *gui, int x, int y);
-	int handle_event();
-	MWindow *mwindow;
-	AWindowGUI *gui;
-	int x, y;
-};
-
 class AWindowAppend : public BC_Button
 {
 public:
diff -u base/cinelerra/bezierautos.C hvirtual-1.1.5/cinelerra/bezierautos.C
--- base/cinelerra/bezierautos.C	2002-11-08 00:54:08.000000000 +0100
+++ hvirtual-1.1.5/cinelerra/bezierautos.C	2003-04-29 00:40:37.000000000 +0200
@@ -38,6 +38,8 @@
 
 BezierAutos::~BezierAutos()
 {
+	delete new_selected;
+	delete old_selected;
 }
 
 int BezierAutos::paste_derived(FileXML *xml, long start)
diff -u base/cinelerra/cwindow.C hvirtual-1.1.5/cinelerra/cwindow.C
--- base/cinelerra/cwindow.C	2002-11-16 18:48:52.000000000 +0100
+++ hvirtual-1.1.5/cinelerra/cwindow.C	2003-05-01 00:42:38.000000000 +0200
@@ -25,7 +25,7 @@
 
 
 CWindow::CWindow(MWindow *mwindow)
- : Thread()
+ : Thread(1)			// don't detach, so we can join...
 {
 	this->mwindow = mwindow;
 }
@@ -35,6 +35,10 @@
 {
 	delete playback_engine;
 	delete playback_cursor;
+
+	gui->set_done(0);
+	Thread::join();
+	delete gui;
 }
 
 int CWindow::create_objects()
diff -u base/cinelerra/editpanel.C hvirtual-1.1.5/cinelerra/editpanel.C
--- base/cinelerra/editpanel.C	2002-07-25 23:58:19.000000000 +0200
+++ hvirtual-1.1.5/cinelerra/editpanel.C	2003-05-01 00:37:48.000000000 +0200
@@ -111,8 +111,8 @@
 		if(use_copy) delete copy;
 		if(use_splice) delete splice;
 		if(use_overwrite) delete overwrite;
-		if(use_lift) delete lift;
-		if(use_extract) delete extract;
+//	FIX	if(use_lift) delete lift;
+//	FIX	if(use_extract) delete extract;
 // 	}
 // 	else
 // 	{
@@ -171,13 +171,15 @@
 	}
 	if(use_lift)
 	{
-		subwindow->add_subwindow(lift = new EditLift(mwindow, this, x1, y1));
-		x1 += lift->get_w();
+// this is never called because use_lift is always 0
+//		subwindow->add_subwindow(lift = new EditLift(mwindow, this, x1, y1));
+//		x1 += lift->get_w();
 	}
 	if(use_extract)
 	{
-		subwindow->add_subwindow(extract = new EditExtract(mwindow, this, x1, y1));
-		x1 += extract->get_w();
+// this is never called because use_extract is always 0
+//		subwindow->add_subwindow(extract = new EditExtract(mwindow, this, x1, y1));
+//		x1 += extract->get_w();
 	}
 	if(use_toclip)
 	{
@@ -337,13 +339,13 @@
 	}
 	if(use_lift)
 	{
-		lift->reposition_window(x1, y1);
-		x1 += lift->get_w();
+//		lift->reposition_window(x1, y1);
+//		x1 += lift->get_w();
 	}
 	if(use_extract)
 	{
-		extract->reposition_window(x1, y1);
-		x1 += extract->get_w();
+//		extract->reposition_window(x1, y1);
+//		x1 += extract->get_w();
 	}
 	if(use_toclip)
 	{
@@ -604,20 +606,20 @@
 	return 1;
 }
 
-EditLift::EditLift(MWindow *mwindow, EditPanel *panel, int x, int y)
- : BC_Button(x, y, mwindow->theme->lift_data)
-{
-	this->mwindow = mwindow;
-	this->panel = panel;
-	set_tooltip("Lift");
-}
-EditLift::~EditLift()
-{
-}
-int EditLift::handle_event()
-{
-	return 1;
-}
+//EditLift::EditLift(MWindow *mwindow, EditPanel *panel, int x, int y)
+// : BC_Button(x, y, mwindow->theme->lift_data)
+//{
+//	this->mwindow = mwindow;
+//	this->panel = panel;
+//	set_tooltip("Lift");
+//}
+//EditLift::~EditLift()
+//{
+//}
+//int EditLift::handle_event()
+//{
+//	return 1;
+//}
 
 EditOverwrite::EditOverwrite(MWindow *mwindow, EditPanel *panel, int x, int y)
  : BC_Button(x, y, mwindow->theme->overwrite_data)
@@ -644,21 +646,21 @@
 	return 0;
 }
 
-EditExtract::EditExtract(MWindow *mwindow, EditPanel *panel, int x, int y)
- : BC_Button(x, y, mwindow->theme->extract_data)
-{
-	this->mwindow = mwindow;
-	this->panel = panel;
-	set_tooltip("Extract");
-}
-EditExtract::~EditExtract()
-{
-}
-int EditExtract::handle_event()
-{
-//	mwindow->extract_selection();
-	return 1;
-}
+//EditExtract::EditExtract(MWindow *mwindow, EditPanel *panel, int x, int y)
+// : BC_Button(x, y, mwindow->theme->extract_data)
+//{
+//	this->mwindow = mwindow;
+//	this->panel = panel;
+//	set_tooltip("Extract");
+//}
+//EditExtract::~EditExtract()
+//{
+//}
+//int EditExtract::handle_event()
+//{
+////	mwindow->extract_selection();
+//	return 1;
+//}
 
 EditToClip::EditToClip(MWindow *mwindow, EditPanel *panel, int x, int y)
  : BC_Button(x, y, mwindow->theme->toclip_data)
@@ -749,41 +751,6 @@
 	return 1;
 }
 
-EditAppend::EditAppend(MWindow *mwindow, EditPanel *panel, int x, int y)
- : BC_Button(x, y, mwindow->theme->append_data)
-{
-	this->mwindow = mwindow;
-	this->panel = panel;
-	set_tooltip("Append to end of track");
-}
-EditAppend::~EditAppend()
-{
-}
-
-
-int EditAppend::handle_event()
-{
-	return 1;
-}
-
-
-EditInsert::EditInsert(MWindow *mwindow, EditPanel *panel, int x, int y)
- : BC_Button(x, y, mwindow->theme->insert_data)
-{
-	this->mwindow = mwindow;
-	this->panel = panel;
-	set_tooltip("Insert before beginning of track");
-}
-EditInsert::~EditInsert()
-{
-}
-
-
-int EditInsert::handle_event()
-{
-	
-	return 1;
-}
 
 
 EditPaste::EditPaste(MWindow *mwindow, EditPanel *panel, int x, int y)
@@ -813,36 +780,6 @@
 
 
 
-EditTransition::EditTransition(MWindow *mwindow, EditPanel *panel, int x, int y)
- : BC_Button(x, y, mwindow->theme->transition_data)
-{
-	this->mwindow = mwindow;
-	this->panel = panel;
-	set_tooltip("Set transition");
-}
-EditTransition::~EditTransition()
-{
-}
-int EditTransition::handle_event()
-{
-	return 1;
-}
-
-EditPresentation::EditPresentation(MWindow *mwindow, EditPanel *panel, int x, int y)
- : BC_Button(x, y, mwindow->theme->presentation_data)
-{
-	this->mwindow = mwindow;
-	this->panel = panel;
-	set_tooltip("Set presentation up to current position");
-}
-EditPresentation::~EditPresentation()
-{
-}
-int EditPresentation::handle_event()
-{
-	return 1;
-}
-
 EditUndo::EditUndo(MWindow *mwindow, EditPanel *panel, int x, int y)
  : BC_Button(x, y, mwindow->theme->undo_data)
 {
@@ -998,7 +935,7 @@
 KeyFrameButton::KeyFrameButton(MWindow *mwindow, int x, int y)
  : BC_Toggle(x, 
  	y, 
-	mwindow->theme->autokeyframe_data,
+	mwindow->theme->autokeyframe_data,                // FIXME uninitialized!
 	mwindow->edl->session->auto_keyframes,
 	"",
 	0,
diff -u base/cinelerra/editpanel.h hvirtual-1.1.5/cinelerra/editpanel.h
--- base/cinelerra/editpanel.h	2002-07-20 00:27:31.000000000 +0200
+++ hvirtual-1.1.5/cinelerra/editpanel.h	2003-05-01 00:05:12.000000000 +0200
@@ -16,8 +16,8 @@
 class EditSplice;
 class EditOverwrite;
 class EditToClip;
-class EditLift;
-class EditExtract;
+//class EditLift;
+//class EditExtract;
 class EditCut;
 class EditCopy;
 class EditPaste;
@@ -39,8 +39,8 @@
 		int use_keyframe, 
 		int use_splice,   // Extra buttons
 		int use_overwrite,
-		int use_lift,
-		int use_extract,
+		int use_lift,          // FIXME remove
+		int use_extract,	// FIXME remove
 		int use_copy,  // Use copy when in EDITING_ARROW
 		int use_paste, 
 		int use_undo,
@@ -100,8 +100,8 @@
 //	EditDelOutPoint *deloutpoint;
 	EditSplice *splice;
 	EditOverwrite *overwrite;
-	EditLift *lift;
-	EditExtract *extract;
+//	EditLift *lift;
+//	EditExtract *extract;
 	EditToClip *clip;
 	EditCut *cut;
 	EditCopy *copy;
@@ -183,25 +183,25 @@
 	EditPanel *panel;
 };
 
-class EditLift : public BC_Button
-{
-public:
-	EditLift(MWindow *mwindow, EditPanel *panel, int x, int y);
-	~EditLift();
-	int handle_event();
-	MWindow *mwindow;
-	EditPanel *panel;
-};
-
-class EditExtract : public BC_Button
-{
-public:
-	EditExtract(MWindow *mwindow, EditPanel *panel, int x, int y);
-	~EditExtract();
-	int handle_event();
-	MWindow *mwindow;
-	EditPanel *panel;
-};
+//class EditLift : public BC_Button
+//{
+//public:
+//	EditLift(MWindow *mwindow, EditPanel *panel, int x, int y);
+//	~EditLift();
+//	int handle_event();
+//	MWindow *mwindow;
+//	EditPanel *panel;
+//};
+
+//class EditExtract : public BC_Button
+//{
+//public:
+//	EditExtract(MWindow *mwindow, EditPanel *panel, int x, int y);
+//	~EditExtract();
+//	int handle_event();
+//	MWindow *mwindow;
+//	EditPanel *panel;
+//};
 
 class EditToClip : public BC_Button
 {
@@ -239,29 +239,6 @@
 	EditPanel *panel;
 };
 
-class EditAppend : public BC_Button
-{
-public:
-	EditAppend(MWindow *mwindow, EditPanel *panel, int x, int y);
-	~EditAppend();
-
-	int handle_event();
-
-	MWindow *mwindow;
-	EditPanel *panel;
-};
-
-class EditInsert : public BC_Button
-{
-public:
-	EditInsert(MWindow *mwindow, EditPanel *panel, int x, int y);
-	~EditInsert();
-
-	int handle_event();
-
-	MWindow *mwindow;
-	EditPanel *panel;
-};
 
 class EditPaste : public BC_Button
 {
@@ -276,25 +253,6 @@
 	EditPanel *panel;
 };
 
-class EditTransition : public BC_Button
-{
-public:
-	EditTransition(MWindow *mwindow, EditPanel *panel, int x, int y);
-	~EditTransition();
-	int handle_event();
-	MWindow *mwindow;
-	EditPanel *panel;
-};
-
-class EditPresentation : public BC_Button
-{
-public:
-	EditPresentation(MWindow *mwindow, EditPanel *panel, int x, int y);
-	~EditPresentation();
-	int handle_event();
-	MWindow *mwindow;
-	EditPanel *panel;
-};
 
 class EditUndo : public BC_Button
 {
diff -u base/cinelerra/edl.C hvirtual-1.1.5/cinelerra/edl.C
--- base/cinelerra/edl.C	2002-11-16 18:48:52.000000000 +0100
+++ hvirtual-1.1.5/cinelerra/edl.C	2003-04-29 21:00:52.000000000 +0200
@@ -34,6 +34,7 @@
 	presentations = 0;
 	vwindow_edl = 0;
 
+	folders.set_array_delete();
 	new_folder(CLIP_FOLDER);
 	new_folder(MEDIA_FOLDER);
 	id = next_id();
diff -u base/cinelerra/loadfile.C hvirtual-1.1.5/cinelerra/loadfile.C
--- base/cinelerra/loadfile.C	2002-11-16 18:48:52.000000000 +0100
+++ hvirtual-1.1.5/cinelerra/loadfile.C	2003-04-29 21:15:56.000000000 +0200
@@ -70,6 +70,7 @@
 	ArrayList<BC_ListBoxItem*> *dirlist;
 	FileSystem fs;
 	ArrayList<char*> path_list;
+	path_list.set_array_delete();
 	char default_path[1024];
 
 	sprintf(default_path, "~");
@@ -304,6 +305,8 @@
 int LoadPrevious::handle_event()
 {
 	ArrayList<char*> path_list;
+	path_list.set_array_delete();
+
 	char *out_path;
 	int load_mode = mwindow->defaults->get("LOAD_MODE", LOAD_REPLACE);
 
@@ -358,6 +361,8 @@
 int LoadBackup::handle_event()
 {
 	ArrayList<char*> path_list;
+	path_list.set_array_delete();
+
 	char *out_path;
 	char string[BCTEXTLEN];
 	strcpy(string, BACKUP_PATH);
diff -u base/cinelerra/mwindow.C hvirtual-1.1.5/cinelerra/mwindow.C
--- base/cinelerra/mwindow.C	2003-03-05 04:04:33.000000000 +0100
+++ hvirtual-1.1.5/cinelerra/mwindow.C	2003-05-01 00:42:58.000000000 +0200
@@ -110,6 +110,7 @@
 	plugin_gui_lock = new Mutex;
 	brender_lock = new Mutex;
 	brender = 0;
+	session = 0;
 }
 
 MWindow::~MWindow()
@@ -120,6 +121,9 @@
 	brender = 0;
 	brender_lock->unlock();
 	delete brender_lock;
+
+	if (session) delete session;
+
 //printf("MWindow::~MWindow 2\n");
 	clean_indexes();
 //printf("MWindow::~MWindow 1\n");
@@ -148,10 +152,14 @@
 	delete cwindow;
 	delete lwindow;
 //printf("MWindow::~MWindow 1\n");
+	delete theme;
+	delete_plugins();
 	plugin_guis->remove_all_objects();
+	colormodels.remove_all_objects();
 //printf("MWindow::~MWindow 2\n");
 	delete plugin_guis;
 //printf("MWindow::~MWindow 3\n");
+
 	delete plugin_gui_lock;
 //printf("MWindow::~MWindow 5\n");
 }
@@ -323,10 +331,11 @@
 
 void MWindow::delete_plugins()
 {
-	for(int i = 0; i < plugindb->total; i++)
+/*	for(int i = 0; i < plugindb->total; i++)
 	{
 		delete plugindb->values[i];
-	}
+	}*/
+	plugindb->remove_all_objects();
 	delete plugindb;
 }
 
diff -u base/cinelerra/recordgui.C hvirtual-1.1.5/cinelerra/recordgui.C
--- base/cinelerra/recordgui.C	2003-03-05 04:04:33.000000000 +0100
+++ hvirtual-1.1.5/cinelerra/recordgui.C	2003-05-01 00:11:29.000000000 +0200
@@ -1461,7 +1461,8 @@
 }
 
 RecordGUIResetTranslation::RecordGUIResetTranslation(MWindow *mwindow, RecordGUI *gui, int y)
- : BC_Button(250, y, mwindow->theme->reset_data)
+// : BC_Button(250, y, mwindow->theme->reset_data)  // never called anyway
+ : BC_Button(250, y, NULL)
 { this->gui = gui; }
 
 RecordGUIResetTranslation::~RecordGUIResetTranslation() 
diff -u base/cinelerra/theme.C hvirtual-1.1.5/cinelerra/theme.C
--- base/cinelerra/theme.C	2003-04-02 17:00:24.000000000 +0200
+++ hvirtual-1.1.5/cinelerra/theme.C	2003-05-01 00:41:20.000000000 +0200
@@ -68,7 +68,41 @@
 
 
 }
+void free_patch(VFrame** &data) 
+{
+	delete data[0];
+	delete data[1];
+	delete data[2];
+	delete data[3];
+	delete data[4];
+}
+
+
+void free_transport(VFrame** &data) 
+{
+	delete data[0];
+	delete data[1];
+	delete data[2];
+	delete [] data;
+}
+
+void free_toggle(VFrame** &data) 
+{
+	delete data[0];
+	delete data[1];
+	delete data[2];
+	delete data[3];
+	delete data[4];
+	delete [] data;
+}
 
+void free_button(VFrame** &data) 
+{
+	delete data[0];
+	delete data[1];
+	delete data[2];
+	delete [] data;
+}
 
 // Need to delete everything here
 Theme::~Theme()
@@ -83,143 +117,187 @@
 	zoom_values.remove_all_objects();
 
 
-
 	delete about_bg;
 	delete about_microsoft;
 	delete [] appendasset_data;
-	delete [] append_data;
-	delete [] arrow_data;
-	delete [] asset_append_data;
-	delete [] asset_disk_data;
-	delete [] asset_index_data;
-	delete [] asset_info_data;
-	delete [] asset_project_data;
-	delete [] autokeyframe_data;
+
+
+//	delete [] append_data;    This is never allocated
+//	delete [] asset_append_data;
+//	delete [] asset_disk_data;
+//	delete [] asset_index_data;
+//	delete [] asset_info_data;
+//	delete [] asset_project_data;
+
+
+
+//	delete [] browse_data;
+//	delete [] calibrate_data;
+//	delete [] cancel_data;
+//	delete [] chain_data;
+//	delete [] delete_all_indexes_data;
+//	delete [] deletebin_data;
+//	delete [] delete_data;
+//	delete [] deletedisk_data;
+//	delete [] deleteproject_data;
+//	delete [] detach_data;
+//	delete [] dntriangle_data;
+//	delete [] edit_data;
+//	delete [] edithandlein_data;
+//	delete [] edithandleout_data;
+
+//	delete [] default_button_images;
+//	delete [] default_hslider_data;
+//	delete [] default_progress_data
+//	delete [] default_tumbler_data;
+//	delete [] default_listbox_data;
+//	delete [] default_pan_data;
+//	delete [] default_hscroll_data;
+//	delete [] default_vscroll_data;
+
+
+// initialize()
+	delete timebar_bg_data;
+	delete timebar_brender_data;
+	delete patchbay_bg;
+	delete timebar_view_data;
+
+// build_icons()
+	delete mwindow_icon;
+	delete vwindow_icon;
+	delete cwindow_icon;
 	delete awindow_icon;
-	delete [] bottom_justify;
-	delete [] browse_data;
-	delete [] calibrate_data;
-	delete [] camera_data;
-	delete camerakeyframe_data;
-	delete [] cancel_data;
-	delete [] center_justify;
-	delete [] chain_data;
+	delete record_icon;
+	delete clip_icon;
+
+// build_bg_data()
 	delete channel_bg_data;
-	delete [] channel_data;
 	delete channel_position_data;
-	delete clip_icon;
-	delete [] copy_data;
-	delete [] crop_data;
-	delete [] cut_data;
-	delete cwindow_icon;
-	delete [] delete_all_indexes_data;
-	delete [] deletebin_data;
-	delete [] delete_data;
-	delete [] deletedisk_data;
-	delete [] deleteproject_data;
-	delete [] detach_data;
-	delete [] dntriangle_data;
-	delete [] drawpatch_data;
-	delete [] duplex_data;
-	delete [] edit_data;
-	delete [] edithandlein_data;
-	delete [] edithandleout_data;
-	delete [] end_data;
-	delete [] expandpatch_data;
-	delete [] extract_data;
-	delete [] fastfwd_data;
-	delete [] fastrev_data;
-	delete [] fit_data;
-	delete [] forward_data;
-	delete [] framefwd_data;
-	delete [] framerev_data;
-	delete [] gangpatch_data;
-	delete [] ibeam_data;
-	delete [] in_data;
-	delete [] indelete_data;
-	delete [] infoasset_data;
-	delete [] in_point;
-	delete [] insert_data;
-	delete keyframe_data;
-	delete [] labelbutton_data;
-	delete [] label_toggle;
-	delete [] left_justify;
-	delete [] lift_data;
-	delete [] magnify_button_data;
-	delete [] magnify_data;
-	delete [] mask_data;
-	delete maskkeyframe_data;
-	delete [] middle_justify;
-	delete modekeyframe_data;
-	delete [] movedn_data;
-	delete [] moveup_data;
-	delete [] mutepatch_data;
-	delete mwindow_icon;
-	delete [] newbin_data;
-	delete [] nextlabel_data;
-	delete [] no_data;
-	delete [] options_data;
-	delete [] out_data;
-	delete [] outdelete_data;
-	delete [] out_point;
-	delete [] over_button;
-	delete [] overwrite_data;
-	delete pankeyframe_data;
-	delete [] pasteasset_data;
-	delete [] paste_data;
-	delete patchbay_bg;
-	delete [] pause_data;
-	delete [] paused_data;
-	delete [] picture_data;
-	delete [] playpatch_data;
-	delete plugin_bg_data;
-	delete [] presentation_data;
-	delete [] presentation_loop;
-	delete [] presentation_stop;
-	delete [] prevlabel_data;
-	delete [] proj_data;
-	delete projectorkeyframe_data;
-	delete [] protect_data;
-	delete [] rec_data;
-	delete [] recframe_data;
-	delete record_icon;
-	delete [] recordpatch_data;
-	delete [] redo_data;
-	delete [] redrawindex_data;
-	delete [] renamebin_data;
-	delete [] reset_data;
 	delete resource1024_bg_data;
+	delete resource512_bg_data;
 	delete resource128_bg_data;
 	delete resource256_bg_data;
-	delete resource32_bg_data;
-	delete resource512_bg_data;
 	delete resource64_bg_data;
-	delete [] reverse_data;
-	delete [] rewind_data;
-	delete [] right_justify;
-	delete [] select_data;
-	delete [] show_meters;
-	delete [] splice_data;
-	delete [] start_over_data;
-	delete [] statusbar_cancel_data;
-	delete [] stop_data;
-	delete [] stoprec_data;
-	delete timebar_bg_data;
-	delete timebar_brender_data;
-	delete timebar_view_data;
+	delete resource32_bg_data;
+	delete plugin_bg_data;
 	delete title_bg_data;
-	delete [] titlesafe_data;
-	delete [] toclip_data;
-	delete [] tool_data;
-	delete [] top_justify;
-	delete [] transition_data;
-	delete [] undo_data;
-	delete [] uptriangle_data;
-	delete [] viewasset_data;
 	delete vtimebar_bg_data;
-	delete vwindow_icon;
-	delete [] wrench_data;
-	delete [] yes_data;
+
+// build_patches();
+
+	free_patch(drawpatch_data);
+	free_patch(expandpatch_data);
+	free_patch(gangpatch_data);
+	free_patch(mutepatch_data);
+	free_patch(playpatch_data);
+	free_patch(recordpatch_data);
+
+
+// build_overlays
+	delete keyframe_data;
+	delete camerakeyframe_data;
+	delete maskkeyframe_data;
+	delete modekeyframe_data;
+	delete pankeyframe_data;
+	delete projectorkeyframe_data;
+
+//FIXME	, content of these should be freed
+//	delete [] in_point;
+//	delete [] out_point;
+//	delete [] label_toggle;
+//	delete [] transport_bg
+//	delete [] statusbar_cancel_data;
+
+
+// these are not patches but arrays with 
+	free_patch(in_point);
+	free_patch(out_point);
+	free_patch(label_toggle);
+
+
+	free_button(bottom_justify);
+	free_button(center_justify);
+	free_button(channel_data);
+	free_button(copy_data);
+	free_button(cut_data);
+	free_button(fit_data);
+	free_button(in_data);
+	free_button(indelete_data);
+	free_button(labelbutton_data);
+	free_button(left_justify);
+	free_button(magnify_button_data);
+	free_button(middle_justify);
+	free_button(nextlabel_data);
+	free_button(out_data);
+	free_button(outdelete_data);
+	free_button(over_button);
+	free_button(overwrite_data);
+	free_button(paste_data);
+	free_button(prevlabel_data);
+	free_button(redo_data);
+	free_button(right_justify);
+	free_button(splice_data);
+	free_button(toclip_data);
+	free_button(top_justify);
+	free_button(undo_data);
+	free_button(wrench_data);
+
+	free_toggle(arrow_data);
+	free_toggle(autokeyframe_data);
+	free_toggle(camera_data);
+	free_toggle(crop_data);
+	free_toggle(ibeam_data);
+	free_toggle(magnify_data);
+	free_toggle(mask_data);
+	free_toggle(proj_data);
+	free_toggle(protect_data);
+	free_toggle(show_meters);
+	free_toggle(titlesafe_data);
+	free_toggle(tool_data);
+
+	free_transport(duplex_data);
+	free_transport(end_data);
+	free_transport(fastfwd_data);
+	free_transport(fastrev_data);
+	free_transport(forward_data);
+	free_transport(framefwd_data);
+	free_transport(framerev_data);
+	free_transport(rec_data);
+	free_transport(recframe_data);
+	free_transport(reverse_data);
+	free_transport(rewind_data);
+	free_transport(stop_data);
+	free_transport(stoprec_data);
+
+//	delete [] extract_data;
+//	delete [] infoasset_data;
+//	delete [] insert_data;
+//	delete [] lift_data;
+//	delete [] movedn_data;
+//	delete [] moveup_data;
+//	delete [] newbin_data;
+//	delete [] no_data;
+//	delete [] options_data;
+//	delete [] pasteasset_data;
+//	delete [] pause_data;
+//	delete [] paused_data;
+//	delete [] picture_data;
+//	delete [] presentation_data;
+//	delete [] presentation_loop;
+//	delete [] presentation_stop;
+
+
+//	delete [] redrawindex_data;
+//	delete [] renamebin_data;
+//	delete [] reset_data;
+
+
+//	delete [] select_data;
+//	delete [] start_over_data;
+//	delete [] transition_data;
+//	delete [] uptriangle_data;
+//	delete [] viewasset_data;
+//	delete [] yes_data;
 //printf("Theme::~Theme 2\n");
 }
 
@@ -426,6 +504,7 @@
 	}
 }
 
+
 void Theme::build_transport(VFrame** &data,
 	unsigned char *png_overlay,
 	VFrame **bg_data,
diff -u base/cinelerra/theme.h hvirtual-1.1.5/cinelerra/theme.h
--- base/cinelerra/theme.h	2002-11-16 18:48:53.000000000 +0100
+++ hvirtual-1.1.5/cinelerra/theme.h	2003-04-30 23:42:20.000000000 +0200
@@ -188,23 +188,22 @@
 	VFrame *about_bg;
 	VFrame *about_microsoft;
 	VFrame **appendasset_data;
-	VFrame **append_data;
+//	VFrame **append_data;
 	VFrame **arrow_data;
-	VFrame **asset_append_data;
-	VFrame **asset_disk_data;
-	VFrame **asset_index_data;
-	VFrame **asset_info_data;
-	VFrame **asset_project_data;
+//	VFrame **asset_append_data;
+//	VFrame **asset_disk_data;
+//	VFrame **asset_index_data;
+//	VFrame **asset_info_data;
+//	VFrame **asset_project_data;
 	VFrame **autokeyframe_data;
 	VFrame *awindow_icon;
 	VFrame **bottom_justify;
-	VFrame **browse_data;
-	VFrame **calibrate_data;
+//	VFrame **browse_data;
 	VFrame **camera_data;
 	VFrame *camerakeyframe_data;
-	VFrame **cancel_data;
+//	VFrame **cancel_data;
 	VFrame **center_justify;
-	VFrame **chain_data;
+//	VFrame **chain_data;
 	VFrame *channel_bg_data;
 	VFrame **channel_data;
 	VFrame *channel_position_data;
@@ -213,21 +212,22 @@
 	VFrame **crop_data;
 	VFrame **cut_data;
 	VFrame *cwindow_icon;
-	VFrame **delete_all_indexes_data;
-	VFrame **deletebin_data;
-	VFrame **delete_data;
-	VFrame **deletedisk_data;
-	VFrame **deleteproject_data;
-	VFrame **detach_data;
-	VFrame **dntriangle_data;
+//	VFrame **delete_all_indexes_data;
+//	VFrame **deletebin_data;
+//	VFrame **delete_data;
+//	VFrame **deletedisk_data;
+//	VFrame **deleteproject_data;
+//	VFrame **detach_data;
+//	VFrame **dntriangle_data;
 	VFrame **drawpatch_data;
 	VFrame **duplex_data;
-	VFrame **edit_data;
-	VFrame **edithandlein_data;
-	VFrame **edithandleout_data;
+//	VFrame **edit_data;
+	VFrame **edithandlein_data;	// FIXME not initialized in defaulttheme
+	VFrame **edithandleout_data;	// FIXME not initialized in defaulttheme
+	VFrame **calibrate_data;	// FIXME not initialized in defaulttheme
 	VFrame **end_data;
 	VFrame **expandpatch_data;
-	VFrame **extract_data;
+//	VFrame **extract_data;
 	VFrame **fastfwd_data;
 	VFrame **fastrev_data;
 	VFrame **fit_data;
@@ -238,45 +238,45 @@
 	VFrame **ibeam_data;
 	VFrame **in_data;
 	VFrame **indelete_data;
-	VFrame **infoasset_data;
+//	VFrame **infoasset_data;
 	VFrame **in_point;
-	VFrame **insert_data;
+//	VFrame **insert_data;
 	VFrame *keyframe_data;
 	VFrame **labelbutton_data;
 	VFrame **label_toggle;
 	VFrame **left_justify;
-	VFrame **lift_data;
+//	VFrame **lift_data;
 	VFrame **magnify_button_data;
 	VFrame **magnify_data;
 	VFrame **mask_data;
 	VFrame *maskkeyframe_data;
 	VFrame **middle_justify;
 	VFrame *modekeyframe_data;
-	VFrame **movedn_data;
-	VFrame **moveup_data;
+//	VFrame **movedn_data;
+//	VFrame **moveup_data;
 	VFrame **mutepatch_data;
 	VFrame *mwindow_icon;
-	VFrame **newbin_data;
+//	VFrame **newbin_data;
 	VFrame **nextlabel_data;
-	VFrame **no_data;
-	VFrame **options_data;
+//	VFrame **no_data;
+//	VFrame **options_data;
 	VFrame **out_data;
 	VFrame **outdelete_data;
 	VFrame **out_point;
 	VFrame **over_button;
 	VFrame **overwrite_data;
 	VFrame *pankeyframe_data;
-	VFrame **pasteasset_data;
+//	VFrame **pasteasset_data;
 	VFrame **paste_data;
 	VFrame *patchbay_bg;
-	VFrame **pause_data;
-	VFrame **paused_data;
-	VFrame **picture_data;
+//	VFrame **pause_data;
+//	VFrame **paused_data;
+//	VFrame **picture_data;
 	VFrame **playpatch_data;
 	VFrame *plugin_bg_data;
-	VFrame **presentation_data;
-	VFrame **presentation_loop;
-	VFrame **presentation_stop;
+//	VFrame **presentation_data;
+//	VFrame **presentation_loop;
+//	VFrame **presentation_stop;
 	VFrame **prevlabel_data;
 	VFrame **proj_data;
 	VFrame *projectorkeyframe_data;
@@ -286,9 +286,9 @@
 	VFrame *record_icon;
 	VFrame **recordpatch_data;
 	VFrame **redo_data;
-	VFrame **redrawindex_data;
-	VFrame **renamebin_data;
-	VFrame **reset_data;
+//	VFrame **redrawindex_data;
+//	VFrame **renamebin_data;
+//	VFrame **reset_data;
 	VFrame *resource1024_bg_data;
 	VFrame *resource128_bg_data;
 	VFrame *resource256_bg_data;
@@ -298,10 +298,10 @@
 	VFrame **reverse_data;
 	VFrame **rewind_data;
 	VFrame **right_justify;
-	VFrame **select_data;
+//	VFrame **select_data;
 	VFrame **show_meters;
 	VFrame **splice_data;
-	VFrame **start_over_data;
+//	VFrame **start_over_data;
 	VFrame **statusbar_cancel_data;
 	VFrame **stop_data;
 	VFrame **stoprec_data;
@@ -313,14 +313,14 @@
 	VFrame **toclip_data;
 	VFrame **tool_data;
 	VFrame **top_justify;
-	VFrame **transition_data;
+//	VFrame **transition_data;
 	VFrame **undo_data;
-	VFrame **uptriangle_data;
-	VFrame **viewasset_data;
+//	VFrame **uptriangle_data;
+//	VFrame **viewasset_data;
 	VFrame *vtimebar_bg_data;
 	VFrame *vwindow_icon;
 	VFrame **wrench_data;
-	VFrame **yes_data;
+//	VFrame **yes_data;
 
 
 	MWindow *mwindow;
diff -u base/cinelerra/track.C hvirtual-1.1.5/cinelerra/track.C
--- base/cinelerra/track.C	2003-03-05 04:04:33.000000000 +0100
+++ hvirtual-1.1.5/cinelerra/track.C	2003-04-30 02:26:42.000000000 +0200
@@ -58,11 +58,12 @@
 
 int Track::create_objects()
 {
-	selections = new Selections(edl, this);
+//	selections = new Selections(edl, this);
 	return 0;
 }
 
 
+
 int Track::copy_settings(Track *track)
 {
 	this->expand_view = track->expand_view;
@@ -168,7 +169,7 @@
 //printf("Track::operator= 1\n");
 	*this->automation = *track.automation;
 //printf("Track::operator= 1\n");
-	*this->selections = *track.selections;
+//	*this->selections = *track.selections;
 	this->track_w = track.track_w;
 	this->track_h = track.track_h;
 //printf("Track::operator= 2\n");
diff -u base/cinelerra/track.h hvirtual-1.1.5/cinelerra/track.h
--- base/cinelerra/track.h	2003-03-05 04:04:33.000000000 +0100
+++ hvirtual-1.1.5/cinelerra/track.h	2003-04-30 01:35:58.000000000 +0200
@@ -134,8 +134,6 @@
 // Plugin set uses key frames for automation
 	ArrayList<PluginSet*> plugin_set;
 	Automation *automation;
-// Only used by video track
-	Selections *selections;
 
 // Vertical offset from top of timeline
 	int y_pixel;
diff -u base/cinelerra/vtrack.C hvirtual-1.1.5/cinelerra/vtrack.C
--- base/cinelerra/vtrack.C	2002-11-16 18:48:53.000000000 +0100
+++ hvirtual-1.1.5/cinelerra/vtrack.C	2003-04-30 02:33:14.000000000 +0200
@@ -32,12 +32,13 @@
  : Track(edl, tracks)
 {
 	data_type = TRACK_VIDEO;
-	selections = 0;
 	draw = 1;
+	selections = 0;
 }
 
 VTrack::~VTrack()
 {
+	// FIXME - this is virtual destructor, so it should free everything that ~Track frees
 	if(selections) delete selections;
 }
 
@@ -63,8 +64,10 @@
 int VTrack::copy_settings(Track *track)
 {
 	Track::copy_settings(track);
+	
+//	VTrack *vtrack = (VTrack*)track;      ... this is not used
 
-	VTrack *vtrack = (VTrack*)track;
+//	selections = ((VTrack*)track)->selections;  // FIXME maybe this should be copied by value?
 	return 0;
 }
 
diff -u base/cinelerra/vtrack.h hvirtual-1.1.5/cinelerra/vtrack.h
--- base/cinelerra/vtrack.h	2002-11-16 18:48:53.000000000 +0100
+++ hvirtual-1.1.5/cinelerra/vtrack.h	2003-04-30 01:35:48.000000000 +0200
@@ -51,6 +51,8 @@
 	
 	
 	
+// Only used by video track
+	Selections *selections;
 	
 	
 	
diff -u base/cinelerra/vwindow.C hvirtual-1.1.5/cinelerra/vwindow.C
--- base/cinelerra/vwindow.C	2002-08-01 07:30:59.000000000 +0200
+++ hvirtual-1.1.5/cinelerra/vwindow.C	2003-05-01 00:42:45.000000000 +0200
@@ -19,7 +19,7 @@
 #include "vwindowgui.h"
 
 
-VWindow::VWindow(MWindow *mwindow) : Thread()
+VWindow::VWindow(MWindow *mwindow) : Thread(1)       // so we can join later...
 {
 	this->mwindow = mwindow;
 	edl = 0;
@@ -36,6 +36,12 @@
 	delete_edl();
 	delete clip_edit;
 //printf("VWindow::~VWindow 2\n");
+
+	gui->set_done(0);
+	Thread::join();
+	delete gui;
+
+
 }
 
 void VWindow::delete_edl()
