diff --git a/src/arch/blinkenrocket/Makefile.inc b/src/arch/blinkenrocket/Makefile.inc
index 1d99d0b24c83879e0467e906d729fdc9ba3b5026..5a4259fd9a49590b2f79df8443b184f4df8bd34a 100644
--- a/src/arch/blinkenrocket/Makefile.inc
+++ b/src/arch/blinkenrocket/Makefile.inc
@@ -27,6 +27,10 @@ else ifneq ($(findstring i2c,${arch_drivers}), )
 	TARGETS += src/arch/blinkenrocket/driver/i2c.cc
 endif
 
+ifneq (${i2c_freq}, )
+	COMMON_FLAGS += -DF_I2C=${i2c_freq}
+endif
+
 OBJECTS = ${TARGETS:.cc=.o}
 
 .cc.o:
diff --git a/src/arch/blinkenrocket/driver/i2c.cc b/src/arch/blinkenrocket/driver/i2c.cc
index 487c60eafd68f442144324408784e4445cf98626..df275ffe45458ad69293782fb8a88b4b1bdad6fe 100644
--- a/src/arch/blinkenrocket/driver/i2c.cc
+++ b/src/arch/blinkenrocket/driver/i2c.cc
@@ -3,6 +3,10 @@
 #include <avr/io.h>
 #include <avr/interrupt.h>
 
+#ifndef F_I2C
+#define F_I2C 100000UL
+#endif
+
 inline void await_twint(unsigned char twcr_values)
 {
 #if 1
@@ -27,7 +31,7 @@ static signed char i2c_start_read(unsigned char addr)
 	if (!(TWSR & 0x18)) // 0x08 == START ok, 0x10 == RESTART ok
 		return -1;
 
-	// Note: An adress with read bit set ("... | 1") causes the TWI momodule
+	// Note: An adress with read bit set ("... | 1") causes the TWI module
 	// to switch to Master Receive mode
 	TWDR = (addr << 1) | 1;
 	await_twint(_BV(TWEN));
@@ -106,7 +110,7 @@ static signed char i2c_receive(uint8_t len, uint8_t *data)
 signed char I2C::setup()
 {
 	TWSR = 0;
-	TWBR = ((F_CPU / 100000UL) - 16) / 2;
+	TWBR = ((F_CPU / F_I2C) - 16) / 2;
 
 	return 0;
 }