diff -u base/cinelerra/assetpopup.C hvirtual-1.1.6/cinelerra/assetpopup.C
--- base/cinelerra/assetpopup.C	2003-07-23 20:38:12.000000000 +0200
+++ hvirtual-1.1.6/cinelerra/assetpopup.C	2003-08-03 00:56:35.000000000 +0200
@@ -53,7 +53,8 @@
 	mwindow->cwindow->gui->lock_window();
 
 	gui->collect_assets();
-	mwindow->paste_assets(mwindow->edl->local_session->selectionstart, 
+	mwindow->paste_assets(mwindow->edl->local_session->get_selectionstart(), 
+		mwindow->edl->local_session->get_selectionend(), 
 		mwindow->edl->tracks->first);
 
 	gui->unlock_window();
diff -u base/cinelerra/cwindowgui.C hvirtual-1.1.6/cinelerra/cwindowgui.C
--- base/cinelerra/cwindowgui.C	2003-08-01 02:22:02.000000000 +0200
+++ hvirtual-1.1.6/cinelerra/cwindowgui.C	2003-08-03 03:45:30.000000000 +0200
@@ -362,7 +362,8 @@
 			mwindow->undo->update_undo_before("insert assets", 
 				LOAD_ALL);
 			mwindow->load_assets(mwindow->session->drag_assets, 
-				mwindow->edl->local_session->selectionstart, 
+				mwindow->edl->local_session->selectionstart,
+				-1, // FIXME - need to honor in/out points? 
 				LOAD_PASTE,
 				mwindow->session->track_highlighted,
 				0,
@@ -379,6 +380,7 @@
 				LOAD_PASTE, 
 				mwindow->session->track_highlighted,
 				mwindow->edl->local_session->get_selectionstart(),
+				mwindow->edl->local_session->get_selectionend(),
 				mwindow->edl->session->labels_follow_edits, 
 				mwindow->edl->session->plugins_follow_edits);
 		}
diff -u base/cinelerra/edl.C hvirtual-1.1.6/cinelerra/edl.C
--- base/cinelerra/edl.C	2003-07-23 20:40:19.000000000 +0200
+++ hvirtual-1.1.6/cinelerra/edl.C	2003-08-03 02:28:47.000000000 +0200
@@ -708,8 +708,8 @@
 		presentations->clear(start, end);
 	}
 
-	local_session->selectionend = local_session->selectionstart = 
-		local_session->get_selectionstart();
+//	local_session->selectionend = local_session->selectionstart = 
+//		local_session->get_selectionstart();
 	return 0;
 }
 
diff -u base/cinelerra/menueffects.C hvirtual-1.1.6/cinelerra/menueffects.C
--- base/cinelerra/menueffects.C	2003-07-23 20:42:21.000000000 +0200
+++ hvirtual-1.1.6/cinelerra/menueffects.C	2003-08-03 01:29:02.000000000 +0200
@@ -472,6 +472,7 @@
 //printf("MenuEffectThread::run 18\n");
 		mwindow->load_assets(&assets,
 			-1,
+			-1,
 			load_mode,
 			0,
 			0,
diff -u base/cinelerra/mwindow.C hvirtual-1.1.6/cinelerra/mwindow.C
--- base/cinelerra/mwindow.C	2003-07-23 20:42:35.000000000 +0200
+++ hvirtual-1.1.6/cinelerra/mwindow.C	2003-08-03 01:34:08.000000000 +0200
@@ -904,6 +904,7 @@
 			load_mode,
 			0,
 			-1,
+			-1,
 			edl->session->labels_follow_edits, 
 			edl->session->plugins_follow_edits);
 	}
diff -u base/cinelerra/mwindowedit.C hvirtual-1.1.6/cinelerra/mwindowedit.C
--- base/cinelerra/mwindowedit.C	2003-07-23 20:42:46.000000000 +0200
+++ hvirtual-1.1.6/cinelerra/mwindowedit.C	2003-08-03 03:37:56.000000000 +0200
@@ -39,7 +39,7 @@
 #include "vwindow.h"
 #include "vwindowgui.h"
 #include "zoombar.h"
-
+#include "float.h"
 
 
 #include <string.h>
@@ -473,6 +473,7 @@
 
 // Insert data from clipboard
 void MWindow::insert(double position, 
+	double end_position,
 	FileXML *file,
 	int edit_labels,
 	int edit_plugins,
@@ -508,11 +509,11 @@
 // printf("MWindow::insert 4 %f %f\n", 
 // vwindow->edl->local_session->in_point,
 // vwindow->edl->local_session->out_point);
-
 	paste_edls(&new_edls, 
 		LOAD_PASTE, 
 		0, 
 		position,
+		end_position,
 		edit_labels,
 		edit_plugins);
 // if(vwindow->edl)
@@ -975,10 +976,12 @@
 			end,
 			edit_labels,
 			edit_plugins);
+
 	}
 
 // Want to insert with assets shared with the master EDL.
-	insert(start, 
+	insert(start,
+			-1, // is it ok not to honor end? 
 			file,
 			edit_labels,
 			edit_plugins,
@@ -1006,15 +1009,23 @@
 	undo->update_undo_before("paste", LOAD_EDITS | LOAD_TIMEBAR);
 
 
+	printf("start: %f, end: %f\n", start, end);
 	if(!EQUIV(start, end))
 	{
 		edl->clear(start, 
 			end, 
 			edl->session->labels_follow_edits, 
 			edl->session->plugins_follow_edits);
+
+		// do not shorten it
+		edl->paste_silence(start, 
+			end, 
+			edl->session->labels_follow_edits, 
+			edl->session->plugins_follow_edits);
 	}
 
 	insert(start, 
+		end, // end position
 		&file, 
 		edl->session->labels_follow_edits, 
 		edl->session->plugins_follow_edits);
@@ -1034,7 +1045,7 @@
 	sync_parameters(CHANGE_EDL);
 }
 
-int MWindow::paste_assets(double position, Track *dest_track)
+int MWindow::paste_assets(double position, double end_position, Track *dest_track)
 {
 	int result = 0;
 
@@ -1048,7 +1059,8 @@
 	{
 //printf("MWindow::paste_assets 3\n");
 		load_assets(session->drag_assets, 
-			position, 
+			position,
+			end_position, 
 			LOAD_PASTE,
 			dest_track, 
 			0,
@@ -1068,6 +1080,7 @@
 			LOAD_PASTE, 
 			dest_track,
 			position, 
+			end_position,
 			edl->session->labels_follow_edits, 
 			edl->session->plugins_follow_edits);
 		result = 1;
@@ -1093,6 +1106,7 @@
 
 void MWindow::load_assets(ArrayList<Asset*> *new_assets, 
 	double position, 
+	double end_position,
 	int load_mode,
 	Track *first_track,
 	RecordLabels *labels,
@@ -1127,6 +1141,7 @@
 		load_mode, 
 		first_track,
 		position,
+		end_position,
 		edit_labels,
 		edit_plugins);
 //printf("MWindow::load_assets 4\n");
@@ -1203,6 +1218,7 @@
 	int load_mode, 
 	Track *first_track,
 	double current_position,
+	double end_position,
 	int edit_labels,
 	int edit_plugins)
 {
@@ -1305,13 +1321,7 @@
 			{
 				destination_tracks.append(current);
 
-				if(load_mode == LOAD_PASTE)
-					current->clear(edl->local_session->get_selectionstart(),
-						edl->local_session->get_selectionend(),
-						1,
-						edl->session->labels_follow_edits, 
-						edl->session->plugins_follow_edits,
-						1);
+		
 			}
 		}
 	}
@@ -1330,9 +1340,24 @@
 	for(int i = 0; i < new_edls->total; i++)
 	{
 		EDL *new_edl = new_edls->values[i];
+		// this is used only for knowing how far ahead to move labels
 		double edl_length = new_edl->local_session->clipboard_length ?
 			new_edl->local_session->clipboard_length :
 			new_edl->tracks->total_length();
+		if (end_position > 0 && current_position != end_position) 
+		{
+			// maximum pasting EDL length = end_position - current_position
+			if (edl_length > end_position - current_position) 
+				edl_length = end_position - current_position; 
+			new_edl->labels->clear(edl_length, FLT_MAX, 0);
+			for(Track *new_track = new_edl->tracks->first; 
+				new_track; 
+				new_track = new_track->next)
+			{
+				new_track->clear(edl_length, FLT_MAX, 1, 1, 1, 1);
+			}
+		}
+		
 // printf("MWindow::paste_edls 2\n");
 // new_edl->dump();
 
@@ -1348,6 +1373,7 @@
 
 
 
+
 //printf("MWindow::paste_edls 2 %d\n", new_edl->assets->total());
 // Add assets and prepare index files
 		edl->update_assets(new_edl);
@@ -1396,7 +1422,6 @@
 
 
 
-
 // Insert edl
 		if(load_mode != LOAD_RESOURCESONLY)
 		{
@@ -1437,7 +1462,14 @@
 							break;
 
 						case LOAD_PASTE:
+
 							current_position = paste_position[destination_track];
+							track->clear(current_position,
+								current_position + new_track->get_length(),
+								1,
+								edl->session->labels_follow_edits, 
+								edl->session->plugins_follow_edits,
+								1);				
 							paste_position[destination_track] += new_track->get_length();
 							break;
 					}
diff -u base/cinelerra/mwindow.h hvirtual-1.1.6/cinelerra/mwindow.h
--- base/cinelerra/mwindow.h	2003-07-23 20:42:38.000000000 +0200
+++ hvirtual-1.1.6/cinelerra/mwindow.h	2003-08-03 01:36:33.000000000 +0200
@@ -89,12 +89,13 @@
 // Takes the drag vectors from MainSession and
 // pastes either assets or clips depending on which is full.
 // Returns 1 if the vectors were full
-	int paste_assets(double position, Track *dest_track);
+	int paste_assets(double position, double end_position, Track *dest_track);
 	
 // Insert the assets at a point in the EDL.  Called by effect rendering,
 // rendering, and CWindow drops but recording calls paste_edls directly.
 	void load_assets(ArrayList<Asset*> *new_assets, 
 		double position, 
+		double end_position,
 		int load_mode,
 		Track *first_track /* = 0 */,
 		RecordLabels *labels /* = 0 */,
@@ -104,6 +105,7 @@
 		int load_mode, 
 		Track *first_track /* = 0 */,
 		double current_position /* = -1 */,
+		double end_position /* = -1 */,
 		int edit_labels,
 		int edit_plugins);
 // Reset everything for a load
@@ -205,6 +207,7 @@
 	long get_feather(int audio, int video);
 	float get_aspect_ratio();
 	void insert(double position, 
+		double end_position,
 		FileXML *file,
 		int edit_labels,
 		int edit_plugins,
diff -u base/cinelerra/record.C hvirtual-1.1.6/cinelerra/record.C
--- base/cinelerra/record.C	2003-07-23 20:44:21.000000000 +0200
+++ hvirtual-1.1.6/cinelerra/record.C	2003-08-03 01:46:32.000000000 +0200
@@ -633,6 +633,7 @@
 				load_mode,
 				0,
 				-1,
+				-1, 
 				mwindow->edl->session->labels_follow_edits,
 				mwindow->edl->session->plugins_follow_edits);
 //printf("Record::run 7\n");
diff -u base/cinelerra/render.C hvirtual-1.1.6/cinelerra/render.C
--- base/cinelerra/render.C	2003-07-23 20:44:56.000000000 +0200
+++ hvirtual-1.1.6/cinelerra/render.C	2003-08-03 01:46:27.000000000 +0200
@@ -577,6 +577,7 @@
 		ArrayList<Asset*> *assets = packages->get_asset_list();
 		mwindow->load_assets(assets, 
 			-1, 
+			-1,
 			load_mode,
 			0,
 			0,
diff -u base/cinelerra/trackcanvas.C hvirtual-1.1.6/cinelerra/trackcanvas.C
--- base/cinelerra/trackcanvas.C	2003-07-23 20:46:08.000000000 +0200
+++ hvirtual-1.1.6/cinelerra/trackcanvas.C	2003-08-03 01:48:52.000000000 +0200
@@ -527,7 +527,7 @@
 				double position_f = mwindow->session->track_highlighted->from_units(position);
 				Track *track = mwindow->session->track_highlighted;
 				mwindow->session->track_highlighted = 0;
-				result = mwindow->paste_assets(position_f, track);
+				result = mwindow->paste_assets(position_f, -1, track);
 			}
 			break;
 
