diff --git a/apps/Makefile b/apps/Makefile
index 589293c1e6..02b705ddb2 100644
--- a/apps/Makefile
+++ b/apps/Makefile
@@ -16,23 +16,45 @@ MENUSELECT_CATEGORY=APPS
MENUSELECT_DESCRIPTION=Applications
MENUSELECT_OPTS_app_directory:=$(MENUSELECT_OPTS_app_voicemail)
-ifneq ($(findstring ODBC_STORAGE,$(MENUSELECT_OPTS_app_voicemail)),)
- MENUSELECT_DEPENDS_app_voicemail+=$(MENUSELECT_DEPENDS_ODBC_STORAGE)
-endif
-ifneq ($(findstring IMAP_STORAGE,$(MENUSELECT_OPTS_app_voicemail)),)
- MENUSELECT_DEPENDS_app_voicemail+=$(MENUSELECT_DEPENDS_IMAP_STORAGE)
-endif
all: _all
include $(ASTTOPDIR)/Makefile.moddir_rules
+.app_voicemail.moduleinfo: app_voicemail.c
+ @echo "" > $@
+ echo "core" >> $@
+ echo "yes" >> $@
+ echo "" >> $@
+ echo "" >> $@
+ echo "" >> $@
+
+.app_voicemail_imap.moduleinfo: app_voicemail_imap.c
+ @echo "" > $@
+ echo "core" >> $@
+ echo "no" >> $@
+ echo "imap_tk" >> $@
+ echo "" >> $@
+ echo "" >> $@
+ echo "" >> $@
+
+.app_voicemail_odbc.moduleinfo: app_voicemail_odbc.c
+ @echo "" > $@
+ echo "core" >> $@
+ echo "no" >> $@
+ echo "generic_odbc" >> $@
+ echo "" >> $@
+ echo "" >> $@
+ echo "" >> $@
+
$(call MOD_ADD_C,app_confbridge,$(wildcard confbridge/*.c))
app_confbridge.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION)
app_meetme.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION)
app_minivm.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION)
-app_voicemail.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION)
+app_voicemail.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION) -DFILE_STORAGE
+app_voicemail_odbc.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION) -DODBC_STORAGE
+app_voicemail_imap.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION) -DIMAP_STORAGE
app_while.o: _ASTCFLAGS+=$(AST_NO_FORMAT_TRUNCATION)
ifneq ($(findstring $(OSARCH), mingw32 cygwin ),)
diff --git a/apps/app_voicemail_imap.c b/apps/app_voicemail_imap.c
new file mode 120000
index 0000000000..fdb024a6e7
--- /dev/null
+++ b/apps/app_voicemail_imap.c
@@ -0,0 +1 @@
+app_voicemail.c
\ No newline at end of file
diff --git a/apps/app_voicemail_imap.exports.in b/apps/app_voicemail_imap.exports.in
new file mode 120000
index 0000000000..401e8f2240
--- /dev/null
+++ b/apps/app_voicemail_imap.exports.in
@@ -0,0 +1 @@
+app_voicemail.exports.in
\ No newline at end of file
diff --git a/apps/app_voicemail_odbc.c b/apps/app_voicemail_odbc.c
new file mode 120000
index 0000000000..fdb024a6e7
--- /dev/null
+++ b/apps/app_voicemail_odbc.c
@@ -0,0 +1 @@
+app_voicemail.c
\ No newline at end of file
diff --git a/apps/app_voicemail_odbc.exports.in b/apps/app_voicemail_odbc.exports.in
new file mode 120000
index 0000000000..401e8f2240
--- /dev/null
+++ b/apps/app_voicemail_odbc.exports.in
@@ -0,0 +1 @@
+app_voicemail.exports.in
\ No newline at end of file
diff --git a/configs/samples/modules.conf.sample b/configs/samples/modules.conf.sample
index 793245dc9b..134ab897d6 100644
--- a/configs/samples/modules.conf.sample
+++ b/configs/samples/modules.conf.sample
@@ -44,3 +44,10 @@ noload => res_hep_rtcp.so
; Do not load chan_sip by default, it may conflict with res_pjsip.
noload => chan_sip.so
+
+; The default voicemail module is app_voicemal. All voicemail modules
+; are mutually exclusive. Therefore it is better to make sure they
+; are not loaded at startup
+;
+noload => app_voicemail_odbc.so
+noload => app_voicemail_imap.so
diff --git a/doc/UPGRADE-staging/Build_all_3_app_voicemail_variants_at_the_same_time.txt b/doc/UPGRADE-staging/Build_all_3_app_voicemail_variants_at_the_same_time.txt
new file mode 100644
index 0000000000..22fb4f7fa5
--- /dev/null
+++ b/doc/UPGRADE-staging/Build_all_3_app_voicemail_variants_at_the_same_time.txt
@@ -0,0 +1,9 @@
+Subject: app_voicemail.c
+
+The "Voicemail Build Options" section of menuselect has been removed along with
+the FILE_STORAGE, ODBC_STORAGE and IMAP_STORAGE menuselect options. All 3 variants
+of the voicemail app can now be built at the same by enabling app_voicemail,
+app_voicemail_imap, and app_voicemail_odbc under the "Applications" section.
+By default, only app_voicemail is enabled. Also, the modules.conf sample has
+been updated to "noload" app_voicemail_imap and app_voicemail_odbc should they
+all be built. Packagers must update their build scripts appropriately.