diff --git a/bin/generate-genesis-block.sh b/bin/generate-genesis-block.sh
index 1db59967a01b95fbf4fa679dca00ad96e3b67d34..12100e2bf1f4428bf9a1baadd959a379241edf54 100755
--- a/bin/generate-genesis-block.sh
+++ b/bin/generate-genesis-block.sh
@@ -1,17 +1,11 @@
 #!/bin/bash
 # Robert Martin-Legene <robert@nic.ar>
 
-# Don't let us call ourselves
-if [ -n "$LOOPCONTROL_GENESISCREATE" ]
-then
-    export LOOPCONTROL_GENESISCREATE=1
-    if [ -z "${BFAHOME}" ]; then echo "\$BFAHOME not set. Did you source bfa/bin/env ?" >&2; exit 1; fi
-    source ${BFAHOME}/bin/libbfa.sh || exit 1
+if [ -z "${BFAHOME}" ]; then echo "\$BFAHOME not set. Did you source bfa/bin/env ?" >&2; exit 1; fi
+source ${BFAHOME}/bin/libbfa.sh || exit 1
 
-    if [ ! -d "${BFANODEDIR}" -o ! -d "${BFANODEDIR}/geth/chaindata" ]
-    then
-        echo "Node is not initialised. Initialising with genesis."
-        geth --cache 0 --datadir "${BFANODEDIR}" --networkid ${BFANETWORKID} init "${BFANETWORKDIR}/genesis.json"
-    fi
+if [ ! -d "${BFANODEDIR}" -o ! -d "${BFANODEDIR}/geth/chaindata" ]
+then
+    echo "Node is not initialised. Initialising with genesis."
+    geth --cache 0 --datadir "${BFANODEDIR}" --networkid ${BFANETWORKID} init "${BFANETWORKDIR}/genesis.json"
 fi
-unset LOOPCONTROL_GENESISCREATE
diff --git a/bin/libbfa.sh b/bin/libbfa.sh
index 67679e6fe948ccf8413efc5b616b3a473ade7d44..eeacdc59eaa116ea8755e70e79e3fa4f272b066b 100644
--- a/bin/libbfa.sh
+++ b/bin/libbfa.sh
@@ -157,39 +157,49 @@ function contractSendTx
     echo    "contract.${func}.sendTransaction(${args} {from: eth.accounts[0], gas: 1000000} )"
 }
 
-###############
-#   bfainit   #
-test    -n "${BFAHOME}" -a  \
-        -d "${BFAHOME}"         ||
-    fatal   "\$BFAHOME in your environment must point to a directory."
-#
-# BFANETWORKID
-test    -n "${BFANETWORKID}"    ||  BFANETWORKID=47525974938
-#
-# BFANETWORKDIR
-test    -n "${BFANETWORKDIR}"   ||  BFANETWORKDIR="${BFAHOME}/network"
-mkdir   -p "${BFANETWORKDIR}"
-test    -d "${BFANETWORKDIR}"   ||  fatal "\$BFANETWORKDIR (\"${BFANETWORKDIR}\") not found."
-#
-# BFANODEDIR
-test    -n "$BFANODEDIR"        ||  BFANODEDIR="${BFANETWORKDIR}/node"
-if [ ! -d "${BFANODEDIR}" -o ! -d "${BFANODEDIR}/geth/chaindata" ]
+function bfainit
+{
+    ###############
+    #   bfainit   #
+    test    -n "${BFAHOME}" -a  \
+            -d "${BFAHOME}"         ||
+        fatal   "\$BFAHOME in your environment must point to a directory."
+    #
+    # BFANETWORKID
+    test    -n "${BFANETWORKID}"    ||  BFANETWORKID=47525974938
+    #
+    # BFANETWORKDIR
+    test    -n "${BFANETWORKDIR}"   ||  BFANETWORKDIR="${BFAHOME}/network"
+    mkdir   -p "${BFANETWORKDIR}"
+    test    -d "${BFANETWORKDIR}"   ||  fatal "\$BFANETWORKDIR (\"${BFANETWORKDIR}\") not found."
+    #
+    # BFANODEDIR
+    test    -n "$BFANODEDIR"        ||  BFANODEDIR="${BFANETWORKDIR}/node"
+    if [ ! -d "${BFANODEDIR}" -o ! -d "${BFANODEDIR}/geth/chaindata" ]
+    then
+        generate-genesis-block.sh
+    fi
+    #
+    # Default to IPC connections, because we have more geth modules available.
+    true ${BFASOCKETTYPE:=ipc}
+    case "${BFASOCKETTYPE}" in
+        ipc)
+            true ${BFASOCKETURL:="ipc:${BFANODEDIR}/geth.ipc"}
+            ;;
+        http)
+            true ${BFASOCKETURL:="http://127.0.0.1:8545"}
+            ;;
+        ws)
+            true ${BFASOCKETURL:="ws://127.0.0.1:8546"}
+            ;;
+        *)
+            echo "Unknown socket type. Supported types are http, ws, ipc" >&2
+            exit 1
+    esac
+}
+
+if [ -z "$SOURCED_BFAINIT_SH" ]
 then
-    generate-genesis-block.sh
+    SOURCED_BFAINIT_SH=yes
+    bfainit
 fi
-
-true ${BFASOCKETTYPE:=ipc}
-case "${BFASOCKETTYPE}" in
-    ipc)
-        test ${BFASOCKETURL:="ipc:${BFANODEDIR}/geth.ipc"}
-        ;;
-    http)
-        test ${BFASOCKETURL:="http://127.0.0.1:8545"}
-        ;;
-    ws)
-        test ${BFASOCKETURL:="ws://127.0.0.1:8546"}
-        ;;
-    *)
-        echo "Unknown socket type. Supported types are http, ws, ipc" >&2
-        exit 1
-esac