anchor.diff:  					throw(end_iteration)
   			end
   		end, foo, config:get_value(temp, [?MODULE, lines, Chan], [])).
  +
  +apply_all_check(Line, Regexes) ->
  +	lists:foldl(fun({F,R,O},L) ->
  +			case re:replace(L,F,R,[{return,binary}|O]) of
  +				L ->
  +					throw(err_nochange);
  +				NL -> NL
  +			end
  +		end, Line, Regexes).
  +
  +apply_all(Line, Regexes) ->
  +	lists:foldl(fun({F,R,O},L) ->
  +			re:replace(L,F,[2,R,2],[{return,binary}|O])
  +		end, Line, Regexes).
   
   remove_line(Nick, Chan, Type, Line) ->
   	config:mod_get_value(temp, [?MODULE, lines, Chan],
  
positive.code: 		end),
  	ok.
  
  parse_regex([$s,$/|Rest]) ->
  	case split_slashes(Rest) of
  		[F,R] ->
  			{ok, F, R, []};
  		[F,R,O] ->
  			Opts = lists:map(fun
  						($g) -> global;
  						($i) -> caseless;
  						($u) -> unicode;
  						(T) -> throw({error, ["Unknown option character ",T]})
  					end, O),
  			{ok, F, R, Opts};
  		_ -> false
  	end;
  parse_regex(_) -> false.
  
  
  split_slashes(Str) -> split_slashes(Str, [], []).
  
  split_slashes([$/|Str], Curr, Lst) -> split_slashes(Str, [], [lists:reverse(Curr)|Lst]);
  split_slashes([$\\,$/|Str], Curr, Lst) -> split_slashes(Str, [$/|Curr], Lst);
  split_slashes([$\\,Chr|Str], Curr, Lst) -> split_slashes(Str, [[$\\,Chr]|Curr], Lst);
  split_slashes([Chr|Str], Curr, Lst) -> split_slashes(Str, [Chr|Curr], Lst);
  split_slashes([], Curr, Lst) -> lists:reverse([lists:reverse(Curr) | Lst]).
  
  % KEYBOARD LAYOUTS
  
  
negative.code: 	add_line(Nick, Chan, action, list_to_binary(string:join(Tokens, " " )));
  handle_event(_, _) -> ok.
  
  do_regex(What, Regexes, Chan, Nick) ->
  	catch lists:foldl(fun
  		({N,____,_},_) when What == self andalso N /= Nick -> ok;
  		({N,Type,T},_) ->
  			case catch apply_all_check(T, Regexes) of
  				err_nochange ->
  					ok;
  				NewT ->
  					remove_line(N, Chan, Type, T),
  					Show = apply_all(T, Regexes),
  					add_line(N, Chan, Type, NewT),
  					case Type of
  						msg ->
  