diff --git a/res/res_features.c b/res/res_features.c
index b55f1be5e0c568ed61f85babaec71e31d10eba9a..d03f7f3945a0b965f0ac6c48ce3c4e370b9ffa27 100755
--- a/res/res_features.c
+++ b/res/res_features.c
@@ -303,13 +303,14 @@ int ast_bridge_call(struct ast_channel *chan,struct ast_channel *peer,struct ast
 					transferer = chan;
 					transferee = peer;
 				}
-
-				/* Use the non-macro context to transfer the call */
-				if(strlen(transferer->macrocontext))
-					transferer_real_context=transferer->macrocontext;
-				else
-					transferer_real_context=transferer->context;
-
+				if(!(transferer_real_context=pbx_builtin_getvar_helper(transferee, "TRANSFER_CONTEXT")) &&
+				   !(transferer_real_context=pbx_builtin_getvar_helper(transferer, "TRANSFER_CONTEXT"))) {
+					/* Use the non-macro context to transfer the call */
+					if(strlen(transferer->macrocontext))
+						transferer_real_context=transferer->macrocontext;
+					else
+						transferer_real_context=transferer->context;
+				}
 				/* Start autoservice on chan while we talk
 				   to the originator */
 				ast_autoservice_start(transferee);