diff --git a/ethchain/bloom9.go b/ethchain/bloom9.go
new file mode 100644
index 0000000000000000000000000000000000000000..eef0a9d3fb22983577689401eb8aebd1dadb553e
--- /dev/null
+++ b/ethchain/bloom9.go
@@ -0,0 +1,38 @@
+package ethchain
+
+import "github.com/ethereum/go-ethereum/vm"
+
+func CreateBloom(txs Transactions) uint64 {
+	var bin uint64
+	for _, tx := range txs {
+		bin |= logsBloom(tx.logs)
+	}
+
+	return bin
+}
+
+func logsBloom(logs []vm.Log) uint64 {
+	var bin uint64
+	for _, log := range logs {
+		data := []byte{log.Address}
+		for _, topic := range log.Topics {
+			data = append(data, topic.Bytes())
+		}
+		data = append(data, log.Data)
+
+		for _, b := range data {
+			bin |= bloom9(b)
+		}
+	}
+
+	return bin
+}
+
+func bloom9(b []byte) uint64 {
+	var r uint64
+	for _, i := range []int{0, 2, 4} {
+		r |= 1 << (b[i+1] + 256*(b[i]&1))
+	}
+
+	return r
+}