--- /dev/null
+diff -ruN ekg-20020528.org/src/ekg.c ekg-20020528/src/ekg.c
+--- ekg-20020528.org/src/ekg.c Tue May 28 19:57:44 2002
++++ ekg-20020528/src/ekg.c Wed May 29 15:26:51 2002
+@@ -385,15 +385,15 @@
+ fprintf(stderr, "\n\
+ *** Naruszenie ochrony pamiêci ***\n\
+ \n\
+-Próbujê zapisaæ ustawienia do pliku ~/.gg/config.%d i listê kontaktów\n\
+-do pliku ~/.gg/userlist.%d, ale nie obiecujê, ¿e cokolwiek z tego\n\
++Próbujê zapisaæ ustawienia do pliku %s/config.%d i listê kontaktów\n\
++do pliku %s/userlist.%d, ale nie obiecujê, ¿e cokolwiek z tego\n\
+ wyjdzie.\n\
+ \n\
+-Je¶li zostanie utworzony plik ~/.gg/core, spróbuj uruchomiæ program ,,gdb''\n\
++Je¶li zostanie utworzony plik %s/core, spróbuj uruchomiæ program ,,gdb''\n\
+ zgodnie z instrukcjami zawartymi w pliku README. Dziêki temu autorzy\n\
+ dowiedz± siê, w którym miejscu wyst±pi³ b³±d i najprawdopodobniej pozwoli\n\
+ to unikn±æ tego typu b³êdów w przysz³o¶ci.\n\
+-\n", getpid(), getpid());
++\n", config_dir, getpid(), config_dir, getpid(), config_dir);
+
+ config_write_crash();
+ userlist_write_crash();
+@@ -480,6 +480,11 @@
+ return 1;
+ }
+
++ if (getenv("CONFIG_DIR"))
++ config_dir = saprintf("%s/%s/gg", home_dir, getenv("CONFIG_DIR"));
++ else
++ config_dir = saprintf("%s/.gg", home_dir);
++
+ signal(SIGSEGV, sigsegv_handler);
+ signal(SIGCONT, sigcont_handler);
+ signal(SIGHUP, sighup_handler);
+@@ -705,9 +710,9 @@
+
+ if (!config_log_path) {
+ if (config_user != "")
+- config_log_path = saprintf("%s/.gg/%s/history", home_dir, config_user);
++ config_log_path = saprintf("%s/%s/history", config_dir, config_user);
+ else
+- config_log_path = saprintf("%s/.gg/history", home_dir);
++ config_log_path = saprintf("%s/history", config_dir);
+ }
+
+ changed_dcc("dcc");
+diff -ruN ekg-20020528.org/src/stuff.c ekg-20020528/src/stuff.c
+--- ekg-20020528.org/src/stuff.c Thu May 23 12:53:11 2002
++++ ekg-20020528/src/stuff.c Wed May 29 14:15:15 2002
+@@ -315,14 +315,14 @@
+
+ if (!filename || !*filename) {
+ if (config_user && *config_user)
+- snprintf(path, sizeof(path), "%s/.gg/%s", home_dir, config_user);
++ snprintf(path, sizeof(path), "%s/%s", config_dir, config_user);
+ else
+- snprintf(path, sizeof(path), "%s/.gg", home_dir);
++ snprintf(path, sizeof(path), "%s", config_dir);
+ } else {
+ if (config_user && *config_user)
+- snprintf(path, sizeof(path), "%s/.gg/%s/%s", home_dir, config_user, filename);
++ snprintf(path, sizeof(path), "%s/%s/%s", config_dir, config_user, filename);
+ else
+- snprintf(path, sizeof(path), "%s/.gg/%s", home_dir, filename);
++ snprintf(path, sizeof(path), "%s/%s", config_dir, filename);
+ }
+
+ return path;
+@@ -562,8 +562,7 @@
+ char name[32];
+ FILE *f;
+
+- chdir(home_dir);
+- chdir(".gg");
++ chdir(config_dir);
+
+ snprintf(name, sizeof(name), "config.%d", getpid());
+ if (!(f = fopen(name, "w")))
+diff -ruN ekg-20020528.org/src/stuff.h ekg-20020528/src/stuff.h
+--- ekg-20020528.org/src/stuff.h Thu May 23 12:53:12 2002
++++ ekg-20020528/src/stuff.h Wed May 29 15:24:02 2002
+@@ -131,6 +131,7 @@
+ int config_emoticons;
+
+ char *home_dir;
++char *config_dir;
+ int in_readline;
+ int away;
+ int in_autoexec;
+diff -ruN ekg-20020528.org/src/userlist.c ekg-20020528/src/userlist.c
+--- ekg-20020528.org/src/userlist.c Fri May 17 22:44:52 2002
++++ ekg-20020528/src/userlist.c Wed May 29 14:18:43 2002
+@@ -307,8 +307,7 @@
+ char name[32];
+ FILE *f;
+
+- chdir(home_dir);
+- chdir(".gg");
++ chdir(config_dir);
+
+ snprintf(name, sizeof(name), "userlist.%d", getpid());
+ if (!(f = fopen(name, "w")))