anchor.diff:  replace(Word, [] ) ->
       Word;
   replace(Word, [ {Regex, Replacement} | Remainder ] ) ->
  -    { ok, RE } = cached_re(Regex, [caseless]),
  +    RE = re_compile( Regex ), 
       case re:run( Word, RE ) of
   	{ match, _ } ->
   	    re_replace( Word, RE, Replacement );
   	nomatch ->
   	    replace(Word, Remainder)
  -    end.
  -
  -%% Cached Regular Expressions
  -cached_re( RE, Options ) ->
  -    CachePid = re_cache(),
  -    CachePid ! { get, self(), RE, Options },
  -    receive
  -	{ CachePid, CompiledRE } -> 
  -	    CompiledRE
  -    end.
  -
  -re_cache() ->
  -    case whereis( re_cache ) of
  -	undefined -> 
  -	    Pid = spawn_link( fun() -> re_cache_loop( ets:new(cached_regexps,[]) ) end ),
  -	    register( re_cache, Pid ),
  -	    Pid;
  -	Pid -> Pid 
  -    end.
  -
  -re_cache_loop( CachedREs ) ->
  -    receive
  -	{ get, Caller, RE, Options } ->
  -	    Caller ! { self(), re_find_or_compile( CachedREs, RE, Options ) },
  -	    re_cache_loop( CachedREs )
  -    end.
  -
  -re_find_or_compile( CachedREs, RE, Options ) ->
  -    case ets:lookup( CachedREs, { RE, Options } ) of
  -	[] ->
  -	    CompiledRE = re:compile( RE, Options ), 
  -	    true = ets:insert( CachedREs, { { RE, Options }, CompiledRE } ),
  -	    CompiledRE;
  -	[ { { RE, Options }, StoredRE } ] -> StoredRE
       end.
   
   %% Rules
  
positive.code: -author('Luke Galea <luke@ideaforge.org>').
  -export([pluralize/1, singularize/1, camelize/1, lower_camelize/1, titleize/1, 
  	 capitalize/1, humanize/1, underscore/1, dasherize/1, tableize/1, moduleize/1,
  	 foreign_key/1, ordinalize/1, cached_re/2]).
  
  -include_lib("eunit/include/eunit.hrl").
  
  
negative.code: 
  %% Helpers		       
  re_compile( RE ) ->
      { ok, Compiled } = re:compile(RE, []),
      Compiled.
  
  re_replace( In, RE, Out ) ->
  