anchor.diff:  						EapMessage1, PortServer, Request, NextStateData),
   				{next_state, identity, NextStateData, ?TIMEOUT};
   			#eap_packet{code = response, type = ?Identity,
  -					identifier = StartEapID, data = Identity} ->
  +					identifier = StartEapID,
  +					data = <<?PERM_AKA, _/bits>> = Identity} ->
  +				NextEapID = (StartEapID rem 255) + 1,
  +				EapData = ocs_eap_codec:eap_aka(#eap_aka_identity{fullauth_id_req = true}),
  +				NextStateData = NewStateData#statedata{request = undefined,
  +						eap_id = NextEapID, identity = Identity, id_req = full},
  +				EapPacket = #eap_packet{code = request,
  +						type = ?AKA, identifier = NextEapID, data = EapData},
  +				EapMessage1 = ocs_eap_codec:eap_packet(EapPacket),
  +				send_diameter_response(SessionId, AuthReqType,
  +						?'DIAMETER_BASE_RESULT-CODE_MULTI_ROUND_AUTH', OHost, ORealm,
  +						EapMessage1, PortServer, Request, NextStateData),
  +				{next_state, identity, NextStateData, ?TIMEOUT};
  +			#eap_packet{code = response, type = ?Identity,
  +					identifier = StartEapID,
  +					data = <<?PERM_AKAp, _/bits>> = Identity} ->
  +				NextEapID = (StartEapID rem 255) + 1,
  +				EapData = ocs_eap_codec:eap_aka(#eap_aka_identity{fullauth_id_req = true}),
  +				NextStateData = NewStateData#statedata{request = undefined,
  +						eap_id = NextEapID, identity = Identity, id_req = full},
  +				EapPacket = #eap_packet{code = request,
  +						type = ?AKAprime, identifier = NextEapID, data = EapData},
  +				EapMessage1 = ocs_eap_codec:eap_packet(EapPacket),
  +				send_diameter_response(SessionId, AuthReqType,
  +						?'DIAMETER_BASE_RESULT-CODE_MULTI_ROUND_AUTH', OHost, ORealm,
  +						EapMessage1, PortServer, Request, NextStateData),
  +				{next_state, identity, NextStateData, ?TIMEOUT};
  +			#eap_packet{code = response, type = ?Identity,
  +					identifier = StartEapID,
  +					data = <<Tag:6, _/bits>> = Identity}
  +					when ((Tag =:= ?FAST_AKA) or (Tag =:= ?TEMP_AKA)) ->
  +				NextEapID = (StartEapID rem 255) + 1,
  +				EapData = ocs_eap_codec:eap_aka(#eap_aka_identity{fullauth_id_req = true}),
  +				NextStateData = NewStateData#statedata{request = undefined,
  +						eap_id = NextEapID, identity = Identity, id_req = full},
  +				EapPacket = #eap_packet{code = request,
  +						type = ?AKA, identifier = NextEapID, data = EapData},
  +				EapMessage1 = ocs_eap_codec:eap_packet(EapPacket),
  +				send_diameter_response(SessionId, AuthReqType,
  +						?'DIAMETER_BASE_RESULT-CODE_MULTI_ROUND_AUTH', OHost, ORealm,
  +						EapMessage1, PortServer, Request, NextStateData),
  +				{next_state, identity, NextStateData, ?TIMEOUT};
  +			#eap_packet{code = response, type = ?Identity,
  +					identifier = StartEapID,
  +					data = <<Tag:6, _/bits>> = Identity}
  +					when ((Tag =:= ?FAST_AKAp) or (Tag =:= ?TEMP_AKAp)) ->
   				NextEapID = (StartEapID rem 255) + 1,
   				EapData = ocs_eap_codec:eap_aka(#eap_aka_identity{fullauth_id_req = true}),
   				NextStateData = NewStateData#statedata{request = undefined,
  
positive.code: 						{next_state, vector, NextStateData, ?TIMEOUT};
  					#eap_packet{code = response, type = ?Identity,
  							identifier = StartEapID,
  							data = <<?TEMP_TAG:6, _/bits>> = Identity}
  							when Trusted == true ->
  						NextStateData = NewStateData#statedata{eap_id = StartEapID,
  								identity = Identity},
  						[Pseudonym | _] = binary:split(Identity, <<$@>>, []),
  
negative.code: 						NewStateData = StateData#statedata{request = Request,
  								identity = Identity},
  						{next_state, vector, NewStateData, ?TIMEOUT};
  					#eap_aka_identity{identity = <<?TEMP_AKA:6, _/bits>> = Identity}
  							when IdReq == full ->
  						[Pseudonym | _] = binary:split(Identity, <<$@>>, []),
  						CompressedIMSI = decrypt_imsi(Pseudonym, Keys),
  						IMSI = compressed_imsi(CompressedIMSI),
  						% @todo handle DIAMETER ANID AVP
  						gen_fsm:send_event(AucFsm, {self(), IMSI, "WLAN"}),
  						NewStateData = StateData#statedata{request = Request,
  								identity = Identity},
  						{next_state, vector, NewStateData, ?TIMEOUT}
  				end;
  			#eap_packet{code = response, type = ?AKAprime, identifier = EapID, data = Data} ->
  				case ocs_eap_codec:eap_aka(Data) of
  					#eap_aka_identity{identity = <<?PERM_AKAp,
  							PermanentID/binary>> = Identity} when IdReq == full ->
  						[IMSI | _] = binary:split(PermanentID, <<$@>>, []),
  						% @todo handle DIAMETER ANID AVP
  						gen_fsm:send_event(AucFsm, {self(), IMSI, "WLAN"}),
  						NewStateData = StateData#statedata{request = Request,
  								identity = Identity},
  						{next_state, vector, NewStateData, ?TIMEOUT};
  					#eap_aka_identity{identity = <<?TEMP_AKAp:6, _/bits>> = Identity}
  							when IdReq == full ->
  						[Pseudonym | _] = binary:split(Identity, <<$@>>, []),
  						CompressedIMSI = decrypt_imsi(Pseudonym, Keys),
  