diff --git a/apps/plugins/SOURCES.app_build b/apps/plugins/SOURCES.app_build
new file mode 100644
index 0000000..d4fcfa6
--- /dev/null
+++ b/apps/plugins/SOURCES.app_build
@@ -0,0 +1,40 @@
+/* plugins common to all models */
+credits.c
+properties.c
+search.c
+sort.c
+theme_remove.c
+vbrfix.c
+
+#ifdef HAVE_TEST_PLUGINS /* enable in advanced build options */
+#ifdef HAVE_ADJUSTABLE_CPU_FREQ
+test_boost.c
+#endif
+#if CONFIG_CODEC == SWCODEC
+test_codec.c
+#endif
+#ifdef HAVE_JPEG
+test_core_jpeg.c
+#endif
+test_disk.c
+#ifdef HAVE_LCD_BITMAP
+#if LCD_DEPTH < 4 && !defined(SIMULATOR)
+test_scanrate.c
+#endif
+#ifndef HAVE_LCD_COLOR
+test_grey.c
+test_greylib_bitmap_scale.c
+#endif
+#endif
+test_mem.c
+#ifdef HAVE_LCD_BITMAP
+test_mem_jpeg.c
+#endif
+#ifdef HAVE_LCD_COLOR
+test_resize.c
+#endif
+#if CONFIG_CODEC == SWCODEC
+test_sampr.c
+#endif
+test_viewports.c
+#endif /* HAVE_TEST_PLUGINS */
diff --git a/apps/plugins/SUBDIRS.app_build b/apps/plugins/SUBDIRS.app_build
new file mode 100644
index 0000000..dbf4382
--- /dev/null
+++ b/apps/plugins/SUBDIRS.app_build
@@ -0,0 +1,17 @@
+/* For all targets with a bitmap display */
+#ifdef HAVE_LCD_BITMAP
+
+#ifdef HAVE_TAGCACHE
+pictureflow
+#endif
+
+#endif /* HAVE_LCD_BITMAP */
+
+/* For all the swcodec targets */
+#if CONFIG_CODEC == SWCODEC
+
+#if MEMORYSIZE > 2 /* we need a lot of RAM for instruments */
+mikmod
+#endif
+
+#endif /* CONFIG_CODEC == SWCODEC */
diff --git a/apps/plugins/lib/simple_viewer.c b/apps/plugins/lib/simple_viewer.c
index 16cbcb3..5fc464b 100644
--- a/apps/plugins/lib/simple_viewer.c
+++ b/apps/plugins/lib/simple_viewer.c
@@ -48,8 +48,13 @@ static bool isbrchr(const unsigned char *str, int len)
     while(*p)
     {
         int n = rb->utf8seek(p, 1);
+#ifdef APPLICATION /* HACK, need to fix real cause */
+        if (len == n && !strncmp(p, str, len))
+            return true;
+#else
         if (len == n && !rb->strncmp(p, str, len))
             return true;
+#endif
         p += n;
     }
     return false;
diff --git a/apps/plugins/plugins.make b/apps/plugins/plugins.make
index 30cf26f..a7630ea 100644
--- a/apps/plugins/plugins.make
+++ b/apps/plugins/plugins.make
@@ -8,7 +8,11 @@
 #

 # single-file plugins:
+ifdef APP_TYPE
+PLUGINS_SRC = $(call preprocess, $(APPSDIR)/plugins/SOURCES.app_build)
+else
 PLUGINS_SRC = $(call preprocess, $(APPSDIR)/plugins/SOURCES)
+endif
 OTHER_SRC += $(PLUGINS_SRC)
 ROCKS1 := $(PLUGINS_SRC:.c=.rock)
 ROCKS1 := $(subst $(ROOTDIR),$(BUILDDIR),$(ROCKS1))
@@ -36,7 +40,11 @@ endif
 OTHER_SRC += $(ROOTDIR)/apps/plugins/plugin_crt0.c
 PLUGIN_CRT0 := $(BUILDDIR)/apps/plugins/plugin_crt0.o
 # multifile plugins (subdirs):
+ifdef APP_TYPE
+PLUGINSUBDIRS := $(call preprocess, $(APPSDIR)/plugins/SUBDIRS.app_build)
+else
 PLUGINSUBDIRS := $(call preprocess, $(APPSDIR)/plugins/SUBDIRS)
+endif

 # include <dir>.make from each subdir (yay!)
 $(foreach dir,$(PLUGINSUBDIRS),$(eval include $(dir)/$(notdir $(dir)).make))
diff --git a/tools/configure b/tools/configure
index 5648438..2f5eb30 100755
--- a/tools/configure
+++ b/tools/configure
@@ -2918,7 +2918,7 @@ fi
     output="rockbox"
     bootoutput="rockbox"
     appextra="recorder:gui:radio"
-    plugins=""
+    plugins="yes"
     swcodec="yes"
     # architecture, manufacturer and model for the target-tree build
     t_cpu="hosted"
@@ -2974,7 +2974,7 @@ fi
     output="rockbox"
     bootoutput="rockbox"
     appextra="recorder:gui:radio"
-    plugins=""
+    plugins="yes"
     swcodec="yes"
     # architecture, manufacturer and model for the target-tree build
     t_cpu="hosted"
@@ -3002,7 +3002,7 @@ fi
     output="rockbox"
     bootoutput="rockbox"
     appextra="recorder:gui:radio"
-    plugins=""
+    plugins="yes"
     swcodec="yes"
     # architecture, manufacturer and model for the target-tree build
     t_cpu="hosted"