anchor.diff:  		Password = radius_attributes:unhide(Secret, Authenticator, Hidden),
   		NewStateData = StateData#statedata{subscriber = Subscriber,
   				password = list_to_binary(Password)},
  -		radius(NewStateData)
  +		handle_radius1(NewStateData)
   	catch
   		_:_ ->
   			response(?AccessReject, [], StateData),
   			{stop, {shutdown, SessionID}, StateData}
  -	end;
  -radius(disconnected, StateData) ->
  -	radius2(StateData).
  -%% @hidden
  -radius(#statedata{subscriber = SubscriberId, password = <<>>} = StateData) ->
  +	end.
  +%% @hidden
  +handle_radius1(#statedata{subscriber = SubscriberId, password = <<>>} = StateData) ->
   	case ocs:authorize(ocs:normalize(SubscriberId), []) of
   		{ok, #subscriber{password = <<>>,
   				attributes = Attributes} = Subscriber} ->
   			NewStateData = StateData#statedata{res_attr = Attributes},
  -			radius1(Subscriber, NewStateData);
  +			handle_radius2(Subscriber, NewStateData);
   		{ok, PSK, #subscriber{attributes = Attributes}
   				= Subscriber} when is_binary(PSK) ->
   			VendorSpecific = {?Mikrotik, ?MikrotikWirelessPsk, binary_to_list(PSK)},
   			ResponseAttributes = radius_attributes:store(?VendorSpecific,
   					VendorSpecific, Attributes),
   			NewStateData = StateData#statedata{res_attr = ResponseAttributes},
  -			radius1(Subscriber, NewStateData);
  +			handle_radius2(Subscriber, NewStateData);
   		{error, Reason} ->
   			reject_radius(Reason, StateData)
   	end;
  -radius(#statedata{subscriber = SubscriberId, password = Password} = StateData) ->
  +handle_radius1(#statedata{subscriber = SubscriberId, password = Password} = StateData) ->
   	case ocs:authorize(ocs:normalize(SubscriberId), Password) of
   		{ok, #subscriber{attributes = Attributes} = Subscriber} ->
   			NewStateData = StateData#statedata{res_attr = Attributes},
  -			radius1(Subscriber, NewStateData);
  +			handle_radius2(Subscriber, NewStateData);
   		{error, Reason} ->
   			reject_radius(Reason, StateData)
   	end.
   %% @hidden
  -radius1(#subscriber{multisession = true}, StateData) ->
  +handle_radius2(#subscriber{multisession = true}, StateData) ->
   	NewStateData = StateData#statedata{multisession = true},
  -	radius2(NewStateData);
  -radius1(#subscriber{session_attributes = [], multisession = MultiSession}, StateData) ->
  +	handle_radius3(NewStateData);
  +handle_radius2(#subscriber{session_attributes = [], multisession = MultiSession}, StateData) ->
   	NewStateData = StateData#statedata{multisession = MultiSession},
  -	radius2(NewStateData);
  -radius1(#subscriber{multisession = false, session_attributes = SessionAttributes},
  +	handle_radius3(NewStateData);
  +handle_radius2(#subscriber{multisession = false, session_attributes = SessionAttributes},
   		#statedata{subscriber = SubscriberId, client_address = Address, client_port = ListenPort,
   		shared_secret = Secret, session_id = SessionID} = StateData) ->
   	case pg2:get_closest_pid(ocs_radius_acct_port_sup) of
  
positive.code: 			end
  	end.
  %% @hidden
  radius2(#statedata{subscriber = SubscriberId, multisession = MultiSession,
  		req_attr = RequestAttributes, res_attr = ResponseAttributes,
  		session_id = SessionID} = StateData) ->
  	F = fun() ->
  
negative.code: 				case supervisor:start_child(DiscSup, StartArgs) of
  					{ok, DiscFsm} ->
  						link(DiscFsm),
  						{next_state, request, NewStateData};
  					{error, Reason} ->
  						error_logger:error_report(["Failed to initiate session disconnect function",
  								{module, ?MODULE}, {subscriber, SubscriberId}, {nas, NAS},
  								{address, Address}, {session, SessionID}, {error, Reason}]),
  						{next_state, request, NewStateData}
  				end
  			catch
  				_:R ->
  