diff --git a/payloads/coreinfo/Kconfig b/payloads/coreinfo/Kconfig
index 37bfa6b..c5ce217 100644
--- a/payloads/coreinfo/Kconfig
+++ b/payloads/coreinfo/Kconfig
@@ -68,5 +68,9 @@
 	bool "Enable the coreboot bootlog module"
 	default y
 
+config MODULE_LAR
+	bool "Enable the coreboot LAR module"
+	default y
+
 endmenu
 
diff --git a/payloads/coreinfo/Makefile b/payloads/coreinfo/Makefile
index d8d7f75..e8e914c 100644
--- a/payloads/coreinfo/Makefile
+++ b/payloads/coreinfo/Makefile
@@ -51,7 +51,7 @@
 INCLUDES = -Ibuild
 CFLAGS := -Wall -Werror -Os $(INCLUDES)
 OBJECTS = cpuinfo_module.o cpuid.S.o pci_module.o coreboot_module.o \
-	  nvram_module.o bootlog_module.o coreinfo.o
+	  nvram_module.o bootlog_module.o lar_module.o coreinfo.o
 OBJS    = $(patsubst %,$(obj)/%,$(OBJECTS))
 TARGET  = $(obj)/coreinfo.elf
 
diff --git a/payloads/coreinfo/coreinfo.c b/payloads/coreinfo/coreinfo.c
index 9cee12a..ae43357 100644
--- a/payloads/coreinfo/coreinfo.c
+++ b/payloads/coreinfo/coreinfo.c
@@ -27,6 +27,7 @@
 extern struct coreinfo_module coreboot_module;
 extern struct coreinfo_module nvram_module;
 extern struct coreinfo_module bootlog_module;
+extern struct coreinfo_module lar_module;
 
 struct coreinfo_module *system_modules[] = {
 #ifdef CONFIG_MODULE_CPUINFO
@@ -47,6 +48,9 @@
 #ifdef CONFIG_MODULE_BOOTLOG
 	&bootlog_module,
 #endif
+#ifdef CONFIG_MODULE_LAR
+	&lar_module
+#endif
 };
 
 struct coreinfo_cat {
@@ -90,7 +94,7 @@
 	char menu[80];
 	char *ptr = menu;
 
-	wmove(stdscr, 22, 0);
+	wmove(stdscr, SCREEN_Y - 2, 0);
 
 	for (j = 0; j < SCREEN_X; j++)
 		waddch(stdscr, ' ');
@@ -101,7 +105,7 @@
 	for (i = 0; i < cat->count; i++)
 		ptr += sprintf(ptr, "[%c: %s] ", 'A' + i, cat->modules[i]->name);
 
-	mvprintw(22, 0, menu);
+	mvprintw(SCREEN_Y - 2, 0, menu);
 }
 
 #ifdef CONFIG_SHOW_DATE_TIME
@@ -126,7 +130,7 @@
 	char menu[80];
 	char *ptr = menu;
 
-	wmove(stdscr, 23, 0);
+	wmove(stdscr, SCREEN_Y - 1, 0);
 
 	for (j = 0; j < SCREEN_X; j++)
 		waddch(stdscr, ' ');
@@ -267,12 +271,12 @@
 	init_pair(2, COLOR_BLACK, COLOR_WHITE);
 	init_pair(3, COLOR_WHITE, COLOR_WHITE);
 
-	modwin = newwin(22, 80, 1, 0);
+	modwin = newwin(SCREEN_Y-2, SCREEN_X, 1, 0);
 
 	wattrset(stdscr, COLOR_PAIR(1) | A_BOLD);
 	wattrset(modwin, COLOR_PAIR(2));
 
-	for (i = 0; i < 23; i++) {
+	for (i = 0; i < SCREEN_Y - 1; i++) {
 		wmove(modwin, i - 1, 0);
 
 		for (j = 0; j < SCREEN_X; j++)
diff --git a/payloads/coreinfo/lar_module.c b/payloads/coreinfo/lar_module.c
new file mode 100644
index 0000000..d8ef3cb
--- /dev/null
+++ b/payloads/coreinfo/lar_module.c
@@ -0,0 +1,163 @@
+/*
+ * This file is part of the coreinfo project.
+ *
+ * Copyright (C) 2008 Advanced Micro Devices, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+#include "coreinfo.h"
+
+#ifdef CONFIG_MODULE_LAR
+
+static struct LAR *lar;
+static int lcount;
+static char **lnames;
+
+static int lar_module_init(void)
+{
+	int index = 0;
+	struct larent *larent;
+
+	lar = openlar(NULL);
+
+	if (lar == NULL)
+		return 0;
+
+	while((larent = readlar(lar)))
+		lcount++;
+
+	lnames = malloc(lcount * sizeof(char *));
+
+	if (lnames == NULL)
+		return 0;
+
+	rewindlar(lar);
+
+	while((larent = readlar(lar)))
+		lnames[index++] = strdup((const char *) larent->name);
+
+	return 0;
+}
+
+static int selected;
+
+static int lar_module_redraw(WINDOW *win)
+{
+	int i;
+	int row = 2;
+	struct larstat stat;
+
+	print_module_title(win, "LAR Listing");
+
+	if (lar == 0) {
+		mvwprintw(win, 11, 61/2,  "Bad or missing LAR");
+		return 0;
+	}
+
+	/* Draw a line down the middle */
+
+	for(i = 2; i < 20; i++) {
+		wmove(win, i, 30);
+		waddch(win, '\263');
+	}
+
+	/* Draw the names down the left side */
+
+	for(i = 0; i < lcount; i++) {
+		if (i == selected)
+			wattrset(win, COLOR_PAIR(3) | A_BOLD);
+		else
+			wattrset(win, COLOR_PAIR(2));
+
+		mvwprintw(win, 2 + i, 1, "%.25s", lnames[i]);
+	}
+
+	/* Get the information for the LAR */
+
+	if (larstat(lar, lnames[selected], &stat)) {
+		printf("larstat failed\n");
+		return 0;
+	}
+
+	wattrset(win, COLOR_PAIR(2));
+
+	mvwprintw(win, row++, 32, "Offset: 0x%x", stat.offset);
+
+	if (stat.compression) {
+		switch(stat.compression) {
+		case ALGO_LZMA:
+			mvwprintw(win, row++, 32, "Compression: LZMA");
+			break;
+		case ALGO_NRV2B:
+			mvwprintw(win, row++, 32, "Compression: NRV2B");
+			break;
+		case ALGO_ZEROES:
+			mvwprintw(win, row++, 32, "Compression: zeroes");
+			break;
+		}
+
+		mvwprintw(win, row++, 32, "Compressed length: %d", stat.len);
+		mvwprintw(win, row++, 32, "Compressed checksum: 0x%x", stat.compchecksum);
+	}
+
+	mvwprintw(win, row++, 32, "Length: %d", stat.reallen);
+	mvwprintw(win, row++, 32, "Checksum: 0x%x", stat.checksum);
+	mvwprintw(win, row++, 32, "Load Address: 0x%llx", stat.loadaddress);
+	mvwprintw(win, row++, 32, "Entry Point: 0x%llx", stat.entry);
+
+	return 0;
+}
+
+static int lar_module_handle(int key)
+{
+	int ret = 0;
+
+	if (lar == NULL)
+		return 0;
+
+	switch (key) {
+	case KEY_DOWN:
+		if (selected + 1 < lcount) {
+			selected++;
+			ret = 1;
+		}
+		break;
+	case KEY_UP:
+		if (selected > 0) {
+			selected--;
+			ret = 1;
+		}
+		break;
+	}
+
+	return ret;
+}
+
+struct coreinfo_module lar_module = {
+	.name = "LAR",
+	.init = lar_module_init,
+	.redraw = lar_module_redraw,
+	.handle = lar_module_handle
+};
+#else
+
+struct coreinfo_module lar_module = {
+};
+
+#endif
+
+
+
+
