diff --git a/lib/erl/include/thrift.hrl b/lib/erl/include/thrift.hrl
index efd2b43..395d45e 100644
--- a/lib/erl/include/thrift.hrl
+++ b/lib/erl/include/thrift.hrl
@@ -4,8 +4,6 @@
 %%% See accompanying file LICENSE or visit the Thrift site at:
 %%% http://developers.facebook.com/thrift/
 
--define(CONFIG_FILE, filename:join("conf", "thrift.conf")).
-
 -define(ERROR(F, D),
 	error_logger:format(F, D)).
 
diff --git a/lib/erl/include/thrift.hrl.orig b/lib/erl/include/thrift.hrl.orig
deleted file mode 100644
index 53128ce..0000000
--- a/lib/erl/include/thrift.hrl.orig
+++ /dev/null
@@ -1,19 +0,0 @@
-%%% Copyright (c) 2007- Facebook
-%%% Distributed under the Thrift Software License
-%%% 
-%%% See accompanying file LICENSE or visit the Thrift site at:
-%%% http://developers.facebook.com/thrift/
-
--define(APPLICATION, thrift).
-
--define(CONFIG_FILE, filename:join(code:priv_dir(?APPLICATION), 
-				   atom_to_list(?APPLICATION) ++ ".conf")).
-
--define(ERROR(F, D),
-	error_logger:format(F, D)).
-
--define(INFO(Type, Report),
-	error_logger:info_report({thrift_info, Type}, Report)).
-
--include("thrift_macros.hrl").
--include("thrift_constants.hrl").
diff --git a/lib/erl/priv/thrift.conf b/lib/erl/priv/thrift.conf
deleted file mode 100644
index b32d21d..0000000
--- a/lib/erl/priv/thrift.conf
+++ /dev/null
@@ -1,7 +0,0 @@
-{thrift_logger, {
-  {term_width, 110},
-  {force_one_line, true},
-  {omit, [oop_new]},             % req_processed
-  {gen_server_messages, false}, 
-  {lookup, true}                 % DNS
- }}.
diff --git a/lib/erl/src/thrift.app.src b/lib/erl/src/thrift.app.src
index 590e6a9..e1d6be1 100644
--- a/lib/erl/src/thrift.app.src
+++ b/lib/erl/src/thrift.app.src
@@ -32,10 +32,15 @@
 
   % configuration parameters similar to those in the config file specified
   % on the command line. can be fetched with gas:get_env
-  {env, []},
+  {env, [
+    {term_width, 110},
+    {force_one_line, false},
+    {omit_fmt, ["thrift ~p:new(~s) = ~s"]},
+    {gen_server_messages, true},
+    {lookup, false}                 % DNS
+  ]},
 
   % The Module and Args used to start this application.
   {mod, {thrift_app, []}}
  ]
 }.
-
diff --git a/lib/erl/src/thrift.erl b/lib/erl/src/thrift.erl
index 5dc8987..ef2c1fa 100644
--- a/lib/erl/src/thrift.erl
+++ b/lib/erl/src/thrift.erl
@@ -6,7 +6,7 @@
 
 -module(thrift).
 
--export([start/0, stop/0, config/1, config/2]).
+-export([start/0, stop/0, config/1, config/2, reconfig/1]).
 
 -include("thrift.hrl").
 
@@ -24,46 +24,42 @@
 %%% configuration
 %%%
 
-%% go to the global file by default
-config(Path) ->
-    config(Path, {file, ?CONFIG_FILE}).
+config(Item) ->
+    config(?MODULE, Item).
 
-config(Path, Source) ->
-    case config1(Path, Source) of
-	{error, file_error, R} ->
-	    ?ERROR("error opening config ~p: ~p", [Source, R]),
-	    false;
-	{error, bad_item, Tuple} ->
-	    ?ERROR("malformed config item ~p found at ~p in ~p", [Tuple, Path, Source]),
-	    false;
-	{error, not_found} ->
-	    ?ERROR("config item ~p not found in ~p", [Path, Source]),
-	    false;
-	{value, V} ->
-	    {value, V}
+config(App, Item) ->
+    case application:get_env(App, Item) of
+        {ok, Value} ->
+            Value;
+        undefined ->
+            ?ERROR("configuration for ~p is unavailable", [Item]),
+            unconfigured_item,
+            exit({missing_config, App, Item})
     end.
 
-%% go to a file
-config1(Path, {file, File}) ->
-    case file:consult(File) of
+reconfig(Config) ->
+    BFName = filename:basename(Config, ".config"),
+    FName  = filename:join(filename:dirname(Config),
+                           BFName ++ ".config"),
+
+    case file:consult(FName) of
 	{error, R={_,_,_}} ->
 	    {error, file_error, file:format_error(R)};
 	{error, Posix} ->
 	    {error, file_error, Posix};
-	{ok, List} when is_list(List) ->
-	    config1(Path, List)
-    end;
+	{ok, [List]} when is_list(List) ->
+            reconfig1(List)
+    end.
 
-%% go through a list from a file or a sublist
-config1([P|Ps], List) when is_list(List) ->
-    case lists:keysearch(P, 1, List) of
-	{value, Tuple} when size(Tuple) == 2 ->
-	    List1 = element(2, Tuple), %% either another list or, if Ps is [], the item itself
-	    config1(Ps, List1);
-	{value, Tuple} ->
-	    {error, bad_item, Tuple};
-	false ->
-	    {error, not_found}
-    end;
-config1([], Item)     -> {value, Item};
-config1(Item, Source) -> config1([Item], Source).
+reconfig1([]) ->
+    ok;
+reconfig1([{App, List}|Tl]) ->
+    reconfig2(List, App, 0),
+    reconfig1(Tl).
+
+reconfig2([], App, Count) ->
+    ?INFO("application ~p reconfigured: ~p keys updated", [App, Count]),
+    ok;
+reconfig2([{Par, Val}|Tl], App, Count) ->
+    application:set_env(App, Par, Val),
+    reconfig2(Tl, App, Count+1).
diff --git a/lib/erl/src/thrift_logger.erl b/lib/erl/src/thrift_logger.erl
index 8528da3..e266ef4 100644
--- a/lib/erl/src/thrift_logger.erl
+++ b/lib/erl/src/thrift_logger.erl
@@ -8,10 +8,6 @@
 
 -behaviour(gen_event).
 
--record(state, {config}).
-
--define(CONFIG(Item), config(Item, State)).
-
 %% TODO(cpiro): either
 %% make exceptions know whether they need to be displayed
 %% or not exit with tExecptions for non-errors
@@ -25,12 +21,12 @@
 -export([init/1, handle_event/2, handle_call/2, 
          handle_info/2, terminate/2, code_change/3]).
 
--export([install/0, install/1, reconfig/0, reconfig/1]).
+-export([install/0]).
+
+-record(state, {}).
 
 %% ensure the regular logger is out and ours is in
 install() ->
-    install([]).
-install(Config) ->
     %% remove loggers
     io:format("starting logger~n"),
     lists:foreach(fun(Logger) ->
@@ -44,17 +40,8 @@
 
     gen_event:add_handler(error_logger, ?MODULE, []),
 
-    reconfig(Config),
-
     ok.
 
-%% load our config file and amend the given stuff
-reconfig() ->
-    reconfig([]).
-
-reconfig(Config) ->
-    gen_event:call(error_logger, ?MODULE, {reconfig, Config}).
-
 %%====================================================================
 %% gen_event callbacks
 %%====================================================================
@@ -67,17 +54,7 @@
 %% @end 
 %%--------------------------------------------------------------------
 init([]) ->
-    BootConfig = [
-      {term_width, 80},
-      {force_one_line, false},
-      {omit, []},
-      {omit_fmt, []},
-      {show_pid, false},
-      {gen_server_messages, true},
-      {lookup, false}
-    ], %% configuration before we try loading from file
-
-    State = #state{config=BootConfig},
+    State = #state{},
     {ok, State}.
 
 %%--------------------------------------------------------------------
@@ -101,7 +78,7 @@
 	end,
 
     Banner =
-        case ?CONFIG(show_pid) of
+        case config(show_pid) of
             true ->
                 sformat("~s ~s ~s", [Symbol, Pid, Type1]);
             false ->
@@ -114,7 +91,7 @@
     OutputSafe = sformat("~s", [MessageSafe]),
 
     Length =
-	case (length(OutputSafe) + BannerLen) < ?CONFIG(term_width) of
+	case (length(OutputSafe) + BannerLen) < config(term_width) of
 	    true  -> short;
 	    false -> long
 	end,
@@ -125,7 +102,7 @@
 	    false -> multiline
 	end,
 
-    case { ?CONFIG(force_one_line), Length, OneLine } of
+    case { config(force_one_line), Length, OneLine } of
 	%% one line and short ... print as is
 	{_, short, oneliner} ->
 	    format("~s~s~n", [Banner, OutputSafe]);
@@ -133,7 +110,7 @@
 	%% too long ... squash to one
 	{true, long, _} ->
 	    O = Banner ++ OutputSafe,
-	    Format = sformat("~~~ps >~n", [?CONFIG(term_width)-2]), % e.g. "~80s >~n"
+	    Format = sformat("~~~ps >~n", [config(term_width)-2]), % e.g. "~80s >~n"
 	    format(Format, [O]);
 
 	%% short but multiline... collapse to one
@@ -186,7 +163,7 @@
 	    Message = sformat("DATA DIDN'T MATCH: ~p~n", [Data]) ++ sformat(Format, Data),
 	    handle_event2(Symbol, Ref, "", Message, State);
 	{_, _} ->
-	    case lists:member(Format, ?CONFIG(omit_fmt)) of
+	    case lists:member(Format, config(omit_fmt)) of
 		false ->
 		    Message = sformat(Format, Data),
 		    handle_event2(Symbol, Ref, "", Message, State);
@@ -253,11 +230,6 @@
 %% handler to handle the request.
 %% @end 
 %%--------------------------------------------------------------------
-handle_call({reconfig, Amendments}, State) ->
-    {OkOrError, State1} = reconfig1(State, Amendments),
-    format(".. reconfig was ~p~n", [OkOrError]),
-    {ok, OkOrError, State1};
-    
 handle_call(_Request, State) ->
     Reply = ok,
     {ok, Reply, State}.
@@ -313,26 +285,8 @@
 sformat(Format, Data) ->
     thrift_utils:sformat(Format, Data).
 
-reconfig1(State, Amendments) ->
-    case thrift:config(thrift_logger) of
-	{value, Config} ->
-	    Config1     = lists:keysort(1, Config),
-	    Amendments1 = lists:keysort(1, Amendments),
-	    Config2     = lists:keymerge(1, Amendments1, Config1),
-
-	    State1 = State#state{config=Config2},
-	    {ok, State1};
-	_ -> 
-	    {error, State}
-    end.
-
-config(Item, State) ->
-    case thrift:config(Item, State#state.config) of
-	{value, V} ->
-	    V;
-	Else ->
-	    ?ERROR("config for ~p is unavailable: ~p", [Item, Else])
-    end.
+config(Item) ->
+    thrift:config(Item).
 
 do_print_crash_report(Report) ->
     case Report of
