diff --git a/board/actux4/Makefile b/board/actux4/Makefile
new file mode 100644
index 0000000..845af93
--- /dev/null
+++ b/board/actux4/Makefile
@@ -0,0 +1,50 @@
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# 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; either version 2 of
+# the License, or (at your option) any later version.
+#
+# 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., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB	= $(obj)lib$(BOARD).a
+
+COBJS	:= actux4.o
+
+SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS	:= $(addprefix $(obj),$(COBJS))
+SOBJS	:= $(addprefix $(obj),$(SOBJS))
+
+$(LIB):	$(obj).depend $(OBJS)
+	$(AR) $(ARFLAGS) $@ $(OBJS)
+
+clean:
+	rm -f $(SOBJS) $(OBJS)
+
+distclean:	clean
+	rm -f $(LIB) core *.bak .depend
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/actux4/actux4.c b/board/actux4/actux4.c
new file mode 100644
index 0000000..84037fa
--- /dev/null
+++ b/board/actux4/actux4.c
@@ -0,0 +1,132 @@
+/*
+ * (C) Copyright 2007
+ * Michael Schwingen, michael@schwingen.org
+ *
+ * (C) Copyright 2006
+ * Stefan Roese, DENX Software Engineering, sr@denx.de.
+ *
+ * (C) Copyright 2002
+ * Kyle Harris, Nexus Technologies, Inc. kharris@nexus-tech.net
+ *
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <command.h>
+#include <malloc.h>
+#include <asm/arch/ixp425.h>
+
+#include <miiphy.h>
+
+#include "actux4_hw.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int board_init (void)
+{
+	gd->bd->bi_arch_number = MACH_TYPE_ACTUX4;
+
+	/* adress of boot parameters */
+	gd->bd->bi_boot_params = 0x00000100;
+
+	GPIO_OUTPUT_CLEAR (CFG_GPIO_nPWRON);
+	GPIO_OUTPUT_ENABLE (CFG_GPIO_nPWRON);
+
+	GPIO_OUTPUT_CLEAR (CFG_GPIO_IORST);
+	GPIO_OUTPUT_ENABLE (CFG_GPIO_IORST);
+
+	/* led not populated on board*/
+	GPIO_OUTPUT_ENABLE (CFG_GPIO_LED3);
+	GPIO_OUTPUT_SET (CFG_GPIO_LED3);
+
+	/* middle LED */
+	GPIO_OUTPUT_ENABLE (CFG_GPIO_LED2);
+	GPIO_OUTPUT_SET (CFG_GPIO_LED2);
+
+	/* right LED */
+	/* weak pulldown = LED weak on */
+	GPIO_OUTPUT_DISABLE (CFG_GPIO_LED1);
+	GPIO_OUTPUT_SET (CFG_GPIO_LED1);
+
+	/* Setup GPIO's for Interrupt inputs */
+	GPIO_OUTPUT_DISABLE (CFG_GPIO_USBINTA);
+	GPIO_OUTPUT_DISABLE (CFG_GPIO_USBINTB);
+	GPIO_OUTPUT_DISABLE (CFG_GPIO_USBINTC);
+	GPIO_OUTPUT_DISABLE (CFG_GPIO_RTCINT);
+	GPIO_OUTPUT_DISABLE (CFG_GPIO_PCI_INTA);
+	GPIO_OUTPUT_DISABLE (CFG_GPIO_PCI_INTB);
+
+	GPIO_INT_ACT_LOW_SET (CFG_GPIO_USBINTA);
+	GPIO_INT_ACT_LOW_SET (CFG_GPIO_USBINTB);
+	GPIO_INT_ACT_LOW_SET (CFG_GPIO_USBINTC);
+	GPIO_INT_ACT_LOW_SET (CFG_GPIO_RTCINT);
+	GPIO_INT_ACT_LOW_SET (CFG_GPIO_PCI_INTA);
+	GPIO_INT_ACT_LOW_SET (CFG_GPIO_PCI_INTB);
+
+	/* Setup GPIO's for 33MHz clock output */
+	*IXP425_GPIO_GPCLKR = 0x011001FF;
+	GPIO_OUTPUT_ENABLE (CFG_GPIO_EXTBUS_CLK);
+	GPIO_OUTPUT_ENABLE (CFG_GPIO_PCI_CLK);
+
+	*IXP425_EXP_CS1 = 0xbd113c42;
+
+	udelay (10000);
+	GPIO_OUTPUT_SET (CFG_GPIO_IORST);
+	udelay (10000);
+	GPIO_OUTPUT_CLEAR (CFG_GPIO_IORST);
+	udelay (10000);
+	GPIO_OUTPUT_SET (CFG_GPIO_IORST);
+
+	return 0;
+}
+
+/* Check Board Identity */
+int checkboard (void)
+{
+	puts ("Board: AcTux-4\n");
+	return (0);
+}
+
+int dram_init (void)
+{
+	gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
+	gd->bd->bi_dram[0].size = PHYS_SDRAM_1_SIZE;
+
+	return (0);
+}
+
+/*
+ * Hardcoded flash setup:
+ * Flash 0 is a non-CFI SST 39VF020 flash, 8 bit flash / 8 bit bus.
+ * Flash 1 is an Intel *16 flash using the CFI driver.
+ */
+ulong board_flash_get_legacy (ulong base, int banknum, flash_info_t * info)
+{
+	if (banknum == 0) {	/* non-CFI boot flash */
+		info->portwidth = 1;
+		info->chipwidth = 1;
+		info->interface = FLASH_CFI_X8;
+		return 1;
+	} else
+		return 0;
+}
diff --git a/board/actux4/actux4_hw.h b/board/actux4/actux4_hw.h
new file mode 100644
index 0000000..8b3ecf3
--- /dev/null
+++ b/board/actux4/actux4_hw.h
@@ -0,0 +1,49 @@
+/*
+ * (C) Copyright 2007
+ * Michael Schwingen, michael@schwingen.org
+ *
+ * hardware register definitions for the AcTux-4 board.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _ACTUX4_HW_H
+#define _ACTUX4_HW_H
+
+/*
+ * GPIO settings
+ */
+#define CFG_GPIO_USBINTA		0
+#define CFG_GPIO_USBINTB		1
+#define CFG_GPIO_USBINTC		2
+#define CFG_GPIO_nPWRON			3	/* Out */
+#define CFG_GPIO_I2C_SCL		4
+#define CFG_GPIO_I2C_SDA		5
+#define CFG_GPIO_PCI_INTB		6
+#define CFG_GPIO_BUTTON1		7
+#define CFG_GPIO_LED1			8	/* Out */
+#define CFG_GPIO_RTCINT			9
+#define CFG_GPIO_LED2			10	/* Out */
+#define CFG_GPIO_PCI_INTA		11
+#define CFG_GPIO_IORST			12	/* Out */
+#define CFG_GPIO_LED3			13	/* Out */
+#define CFG_GPIO_PCI_CLK		14	/* Out */
+#define CFG_GPIO_EXTBUS_CLK		15	/* Out */
+
+#endif
diff --git a/board/actux4/config.mk b/board/actux4/config.mk
new file mode 100644
index 0000000..9a634cd
--- /dev/null
+++ b/board/actux4/config.mk
@@ -0,0 +1,4 @@
+TEXT_BASE = 0x00e00000
+
+# include NPE ethernet driver
+BOARDLIBS = cpu/ixp/npe/libnpe.a
diff --git a/board/actux4/u-boot.lds b/board/actux4/u-boot.lds
new file mode 100644
index 0000000..c8784a0
--- /dev/null
+++ b/board/actux4/u-boot.lds
@@ -0,0 +1,65 @@
+/*
+ * (C) Copyright 2000
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * 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., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+OUTPUT_FORMAT ("elf32-bigarm", "elf32-bigarm", "elf32-bigarm")
+OUTPUT_ARCH (arm)
+ENTRY (_start)
+SECTIONS
+{
+	. = 0x00000000;
+
+	. = ALIGN (4);
+	.text : {
+		cpu/ixp/start.o(.text)
+		*(.text)
+	}
+
+	. = ALIGN (4);
+	.rodata : {
+		*(.rodata)
+	}
+
+	. = ALIGN (4);
+	.data : {
+		*(.data)
+	}
+
+	. = ALIGN (4);
+	.got : {
+		*(.got)
+	}
+
+	. =.;
+	__u_boot_cmd_start =.;
+	.u_boot_cmd : {
+		*(.u_boot_cmd)
+	}
+	__u_boot_cmd_end =.;
+
+	. = ALIGN (4);
+	__bss_start =.;
+	.bss (NOLOAD): {
+		*(.bss)
+	}
+	_end =.;
+}
