diff -u -r grim/config.c grim2/config.c
--- grim/config.c	2004-09-08 09:32:47.000000000 -0700
+++ grim2/config.c	2004-09-22 09:16:24.000000000 -0700
@@ -20,6 +20,7 @@
 	fprintf(f, "auth login.oscar.aol.com\n");
 	fprintf(f, "port 5190\n");
 	fprintf(f, "res grim\n");
+    fprintf(f, "log 0\n");
 	fclose(f);
 
 	fprintf(stderr, "Please modify your %s\n", path);
@@ -66,6 +67,8 @@
 				si.port = atoi(line + 5);
 			} else if (!strncmp(line, "res ", 4)) {
 				si.resource = strdup(line + 4);
+			} else if (!strncmp(line, "log ", 4)) {
+				si.do_logging = atoi(strdup(line + 4));
 			}
 		}
 		fclose(f);
diff -u -r grim/display.c grim2/display.c
--- grim/display.c	2004-09-08 09:32:47.000000000 -0700
+++ grim2/display.c	2004-09-22 09:16:24.000000000 -0700
@@ -541,6 +541,22 @@
 	return y;
 }
 
+void log_msg(char *from, char *msg)
+{
+    if(!si.do_logging) return;
+
+	char path[8192];
+	FILE *f;
+
+	sprintf(path, "%s/.%s/%s.log", getenv("HOME"), PROG, from);
+	if (!(f = fopen(path, "a"))) {
+		fprintf(stderr, "Can't write %s\n", path);
+		return;
+	}
+    fprintf(f,"%s\n",msg);
+    fclose(f);
+}
+
 void got_im(char *from, char *msg, int away)
 {
 	struct tab *t = find_tab(from);
@@ -559,6 +575,7 @@
 				away ? "<AUTO> " : "", from, h);
 
 	t->text = append_text(t->text, x);
+    log_msg(from, x);
 	free(x);
 
 	if (list_nth(tabs, cur_tab) != t)
@@ -661,6 +678,7 @@
 				si.screenname, h);
 
 	t->text = append_text(t->text, x);
+    log_msg(t->title, x);
 
 	draw_tabs();
 	refresh();
diff -u -r grim/main.h grim2/main.h
--- grim/main.h	2004-09-08 09:32:47.000000000 -0700
+++ grim2/main.h	2004-09-22 09:16:24.000000000 -0700
@@ -39,6 +39,8 @@
 	char *password;
 	char *resource;
 
+    int do_logging;
+
 	int killme;
 };
 

