rewrite ISUP party number rewriting as recursive function over parameter list
diff --git a/src/mgw_nat.erl b/src/mgw_nat.erl
index 992ff0a..32f249f 100644
--- a/src/mgw_nat.erl
+++ b/src/mgw_nat.erl
@@ -97,16 +97,28 @@
 -define(MSRN_PFX_MSC,	[8,9,0,9,9]).
 -define(MSRN_PFX_STP,	[9,2,9,9,4,2,0,0]).
 
-mangle_rx_isup(From, MsgType, Msg = #isup_msg{parameters = Params}) when
-				  MsgType == ?ISUP_MSGT_IAM	->
-	CalledNum = proplists:get_value(?ISUP_PAR_CALLED_P_NUM, Params),
-	CalledNumOut = mangle_isup_number(From, MsgType, ?ISUP_PAR_CALLED_P_NUM, CalledNum),
-	ParamsDel = proplists:delete(?ISUP_PAR_CALLED_P_NUM, Params),
-	ParamsOut = [{?ISUP_PAR_CALLED_P_NUM, CalledNumOut}|ParamsDel],
-	Msg#isup_msg{parameters = ParamsOut};
-% default case: no mangling
-mangle_rx_isup(_From, _Type, Msg) when is_record(Msg, isup_msg) ->
-	Msg.
+% iterate over list of parameters and call mangle_rx_isup_par() for each one
+mangle_rx_isup_params(_From, _MsgType, _Msg, ParListOut, []) ->
+	ParListOut;
+mangle_rx_isup_params(From, MsgType, Msg, ParListOut, [Par|ParList]) ->
+	ParOut = mangle_rx_isup_par(From, MsgType, Msg, Par),
+	mangle_rx_isup_params(From, MsgType, Msg, ParListOut++[ParOut], ParList).
+
+% manipulate phone numbers
+mangle_rx_isup_par(From, MsgType, Msg, {ParType, ParBody}) when
+					ParType == ?ISUP_PAR_CALLED_P_NUM;
+					ParType == ?ISUP_PAR_CALLING_P_NUM ->
+	NewParBody = mangle_isup_number(From, MsgType, ParType, ParBody),
+	{ParType, NewParBody};
+% defauly case: do not mangle this parameter
+mangle_rx_isup_par(_From, _MsgType, _Msg, Par) ->
+	Par.
+
+% mangle an incoming ISUP message
+mangle_rx_isup(From, MsgType, Msg = #isup_msg{parameters = Params}) ->
+	ParamsOut = mangle_rx_isup_params(From, MsgType, Msg, [], Params),
+	% return message with modified parameter list
+	Msg#isup_msg{parameters = ParamsOut}.
 
 % Mangle a Party Number in IAM from STP -> MSC
 mangle_isup_number(from_stp, ?ISUP_MSGT_IAM, NumType, PartyNum) ->