diff -bur cinelerra_master/cinelerra-5.1/cinelerra/batchrender.C cinelerra_work/cinelerra-5.1/cinelerra/batchrender.C
--- cinelerra_master/cinelerra-5.1/cinelerra/batchrender.C	2021-09-25 20:52:12.607422095 +0200
+++ cinelerra_work/cinelerra-5.1/cinelerra/batchrender.C	2021-10-14 21:23:40.066002349 +0200
@@ -597,8 +597,10 @@
 	else {
 		BC_Trace::disable_locks();
 	}
-
+// In batch mode there is no mwindow, so init_plugins is called with
+// mwindow* = NULL.
 	MWindow::init_plugins(0, preferences);
+	MWindow::init_ladspa_plugins(0, preferences);  
 	char font_path[BCTEXTLEN];
 	strcpy(font_path, preferences->plugin_dir);
 	strcat(font_path, "/" FONT_SEARCHPATH);
diff -bur cinelerra_master/cinelerra-5.1/cinelerra/mwindow.C cinelerra_work/cinelerra-5.1/cinelerra/mwindow.C
--- cinelerra_master/cinelerra-5.1/cinelerra/mwindow.C	2021-10-12 16:25:14.011443994 +0200
+++ cinelerra_work/cinelerra-5.1/cinelerra/mwindow.C	2021-10-14 21:31:09.950000928 +0200
@@ -240,7 +240,6 @@
 	sighandler = 0;
 	restart_status = 0;
 	screens = 1;
-	appimageDir = getenv("APPDIR"); //NULL if not running as appimage
 	in_destructor = 0;
 	speed_edl = 0;
 	beeper = 0;
@@ -561,9 +560,8 @@
 * @brief Load plugins according to an index file.
 * 
 * @details Builds an ArrayList of plugin servers only if there is no
-* mismatch for file layout version, index identifier, or executable
-* timestamp mismatch for the built-in plugins. If OK, add the plugin
-* servers to the global list.
+* mismatch for file layout version, index identifier, or timestamp of
+* the built-in plugins. If OK, add the plugin servers to the global list.
 * 
 * @note If an error is returned the index file needs to be rebuilt, and
 * then this function must be called again.
@@ -673,9 +671,13 @@
 	}
 	return 0;
 }
-/*
+
+/**
 * @brief Load built-in and LV2 plugins as specified in index file,
 *        rebuild the index file if needed.
+* @param[in]	mwindow: GUI class pointer, will be NULL for batch
+*               rendering or renderfarm client.
+* @param[in]	preferences: Information from cinelerra_rc file.
 */
 int MWindow::init_plugins(MWindow *mwindow, Preferences *preferences)
 {
@@ -689,7 +691,7 @@
 	// index_id is 2nd line of the index file, normally full plugin path,
 	// but fixed value if AppImage because the path changes on each run.
 	// And if the second line does not match on the next run the index is rebuilt.
-	if( mwindow->appimageDir ) strcpy(index_id, getenv("CINGG_BUILD"));
+	if( getenv("APPDIR") && getenv("CINGG_BUILD")) strcpy(index_id, getenv("CINGG_BUILD"));
 	else strcpy(index_id, plugin_path);
 	FILE *fp = fopen(index_path,"a+");
 	if( !fp ) {
@@ -723,14 +725,18 @@
 	return ret;
 }
 
-/*
+/**
 * @brief Load ladspa plugins as specified in index files, for each ladspa
 *        directory keep a separate index file. Rebuild index file(s) if needed.
-**/
+* @param[in]	mwindow: GUI class pointer, will be NULL for batch
+*               rendering or renderfarm client.
+* @param[in]	preferences: Information from cinelerra_rc file.
+*/
 int MWindow::init_ladspa_plugins(MWindow *mwindow, Preferences *preferences)
 {
 #ifdef HAVE_LADSPA
 	char *path = getenv("LADSPA_PATH");
+	char *appdir = getenv("APPDIR");
 	char ladspa_path[BCTEXTLEN];
 	if( !path ) {  			// if no env var, use CinGG's own ladspa dir
 		strncpy(ladspa_path, File::get_ladspa_path(), sizeof(ladspa_path));
@@ -749,7 +755,7 @@
 		// If the first part of the plugin_path matches the APPDIR, we are
 		// referring to CinGG's ladspa, replace the path by a fixed ID. APPDIR
 		// only exists if we are running as AppImage (with variable mount points).
-		if( mwindow->appimageDir && strncmp(plugin_path, mwindow->appimageDir, strlen(mwindow->appimageDir)) == 0 )
+		if( appdir && strncmp(plugin_path, appdir, strlen(appdir)) == 0 )
 			strcpy(index_id, getenv("CINGG_BUILD"));
 		else strcpy(index_id, plugin_path);
 
@@ -818,7 +824,7 @@
 		char fs_path[BCTEXTLEN], path[BCTEXTLEN];
 		get_plugin_path(fs_path, 0, fs.dir_list[i]->path);
 		get_plugin_path(path, plug_dir, fs_path);
-		if( fs.is_dir(fs_path) ) {
+		if( fs.is_dir(fs_path) ) {	// recursively scan child directory
 			scan_plugin_index(mwindow, preferences, fp, plug_dir, path, idx);
 			continue;
 		}
diff -bur cinelerra_master/cinelerra-5.1/cinelerra/mwindow.h cinelerra_work/cinelerra-5.1/cinelerra/mwindow.h
--- cinelerra_master/cinelerra-5.1/cinelerra/mwindow.h	2021-10-12 16:25:14.011443994 +0200
+++ cinelerra_work/cinelerra-5.1/cinelerra/mwindow.h	2021-10-14 21:12:59.142004373 +0200
@@ -858,7 +858,6 @@
 	SigHandler *sighandler;
 	int restart_status;
 	int screens;
-	const char *appimageDir;
 	int in_destructor;
 	Shuttle *shuttle;
 	WinTV *wintv;
diff -bur cinelerra_master/cinelerra-5.1/cinelerra/render.C cinelerra_work/cinelerra-5.1/cinelerra/render.C
--- cinelerra_master/cinelerra-5.1/cinelerra/render.C	2021-09-25 20:52:12.679421084 +0200
+++ cinelerra_work/cinelerra-5.1/cinelerra/render.C	2021-10-14 20:55:40.122007653 +0200
@@ -684,7 +684,7 @@
 	render->result = 0;
 
 // Create rendering command
-	TransportCommand *command = new TransportCommand(mwindow->preferences);
+	TransportCommand *command = new TransportCommand(render->preferences);
 	command->command = NORMAL_FWD;
 	command->get_edl()->copy_all(edl);
 	command->change_type = CHANGE_ALL;
diff -bur cinelerra_master/cinelerra-5.1/cinelerra/renderfarmclient.C cinelerra_work/cinelerra-5.1/cinelerra/renderfarmclient.C
--- cinelerra_master/cinelerra-5.1/cinelerra/renderfarmclient.C	2021-09-25 20:52:12.679421084 +0200
+++ cinelerra_work/cinelerra-5.1/cinelerra/renderfarmclient.C	2021-10-14 21:29:17.998001282 +0200
@@ -77,6 +77,7 @@
 	boot_preferences = new Preferences;
 	boot_preferences->load_defaults(boot_defaults);
 	MWindow::init_plugins(0, boot_preferences);
+	MWindow::init_ladspa_plugins(0, boot_preferences);  
 	BC_Signals::set_catch_segv(boot_preferences->trap_sigsegv);
 	BC_Signals::set_catch_intr(0);
         if( boot_preferences->trap_sigsegv ) {

