diff --git a/bin/generate-genesis-block.sh b/bin/generate-genesis-block.sh
new file mode 100755
index 0000000000000000000000000000000000000000..a437fc2709fbb54d325305bcb3d076ea3a8ba2af
--- /dev/null
+++ b/bin/generate-genesis-block.sh
@@ -0,0 +1,12 @@
+#!/bin/bash
+# Robert Martin-Legene <robert@nic.ar>
+
+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
+
diff --git a/bin/libbfa.js b/bin/libbfa.js
index 02a7aeb56f770c138ceab8dfde97cf17d4378235..c4b99374fc2f010f1be5da3740e2dfc8e771c2fa 100644
--- a/bin/libbfa.js
+++ b/bin/libbfa.js
@@ -46,11 +46,21 @@ module.exports = class Libbfa
             }
         }
         //
-        this.netport                    =   Number.parseInt( this.setfromfile( this.nodedir+'/netport', 30303 ));
-        this.rpcport                    =   Number.parseInt( this.setfromfile( this.nodedir+'/rpcport',  8545 ));
-        //this.provider                 =   'http://127.0.0.1:' + this.rpcport; // old
-        this.provider                   =   new this.Web3.providers.IpcProvider(this.nodedir+'/geth.ipc', net)
         this.account                    =   process.env.BFAACCOUNT;
+        this.netport                    =   30303;
+        this.rpcport                    =   8545;
+        this.sockettype                 =   'ipc';
+        this.socketurl                  =   'http://127.0.0.1:' + this.rpcport; // old
+        this.socketurl                  =   this.nodedir+'/geth.ipc'; // overwrite with newer ipc method
+        if ( this.sockettype == 'ipc' ) {
+            this.provider               =   new this.Web3.providers.IpcProvider( this.nodedir+'/geth.ipc', net );
+        } else if ( this.sockettype == 'ws' ) {
+            this.provider               =   new this.Web3.providers.WebsocketProvider( this.socketurl );
+        } else if ( this.sockettype == 'http') {
+            this.provider               =   new this.Web3.providers.HttpProvider( this.socketurl );
+        } else {
+            fatal("Unknown sockettype.");
+        }
     }
 
     contract(w3, name)
@@ -75,7 +85,7 @@ module.exports = class Libbfa
 
     fatal( txt )
     {
-        console.log( txt );
+        console.error( txt );
         process.exit( 1 );
     }
 
diff --git a/bin/libbfa.sh b/bin/libbfa.sh
index 6ee139d8aea2debb94e883848140e41cd1b7198f..c051466e1c80a48f0130ad753b8fad8465607f3e 100644
--- a/bin/libbfa.sh
+++ b/bin/libbfa.sh
@@ -65,12 +65,13 @@ function    geth_exec
     geth_attach --exec "$1" </dev/null
 }
 
+rpc_counter=0
 function    geth_rpc
 {
-    local   cmd=$1
-    test    -n "$cmd"
-    local   params=
+    local   params= connectstring= cmd=$1
     shift
+    test    -n "$cmd"
+    rpc_counter=$(( $rpc_counter + 1 ))
     if [ $# -gt 0 ]
     then
         params=',"params":['
@@ -82,12 +83,18 @@ function    geth_rpc
         # Eat the last comma and add a ]
         params=${params/%,/]}
     fi
+    if [ "$BFASOCKETTYPE" = "ipc" ]
+    then
+        connectstring="--unix-socket ${BFASOCKETURL}"
+    else
+        connectstring="${BFASOCKETURL}"
+    fi
     local   json=$(
-        curl    \
-            -H 'Content-type: application/json'                                     \
-            -X POST                                                                 \
-            --data "{\"jsonrpc\":\"2.0\",\"method\":\"${cmd}\"${params},\"id\":1}"  \
-            http://127.0.0.1:$rpcport                                               \
+        curl                                        \
+            -H 'Content-type: application/json'     \
+            -X POST                                 \
+            --data "{\"jsonrpc\":\"2.0\",\"method\":\"${cmd}\"${params},\"id\":${rpc_counter}}"  \
+            ${connectstring}                        \
             2>/dev/null
         )
     test -n "$json"
@@ -104,34 +111,9 @@ function    create_account
     geth --cache 0 --datadir ${BFANODEDIR} --password /dev/null account new
 }
 
-function    extradata
-{
-    local acct=$(
-        ls -1d "${BFANODEDIR}"/keystore/*--* 2>/dev/null    |
-        head -1                                             |
-        sed 's/.*--//'
-    )
-    if [ -n "$acct" ]
-    then
-        # something uniqueish
-        ## find default interface
-        local def_if=$(
-            ( ip -4 route show ; ip -6 route show ) |
-            expand |
-            sed -ne '/^default /{s/  */ /g;s/^.* dev //;s/ .*//;p;q}'
-        )
-        local mymac=$(
-            ip link show ${def_if} |
-            sed -ne '/link\|ether/{s/^.*link.ether //;s/ .*//;s/://g;p;q}'
-        )
-        #
-        echo -n "${acct:0:19}.${mymac:0:12}"
-    fi
-}
-
 function	prereq
 {
-	err=0
+	local err=0
 	while [ -n "$1" ]
 	do
 		if !  which $1 > /dev/null
@@ -193,30 +175,22 @@ test    -d "${BFANETWORKDIR}"   ||  fatal "\$BFANETWORKDIR (\"${BFANETWORKDIR}\"
 test    -n "$BFANODEDIR"        ||  BFANODEDIR="${BFANETWORKDIR}/node"
 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
-#
-# netport
-netport=30303
-if [ -r "${BFANODEDIR}/netport" ]
-then
-    netport=$(      cat ${BFANODEDIR}/netport )
-    test $? = 0
-fi
-if [ "$netport" != "30303" ]
-then
-    netportarg="--port ${netport}"
-fi
-#
-# rpcport
-rpcport=8545
-if [ -r "${BFANODEDIR}/rpcport" ]
-then
-    rpcport=$(      cat ${BFANODEDIR}/rpcport )
-    test $? = 0
-fi
-if [ "$rpcport" != "8545" ]
-then
-    rpcportarg="--rpcport ${rpcport}"
+    generate-genesis-block.sh
 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
+BFASOCKET
diff --git a/bin/localstate.pl b/bin/localstate.pl
index d8e1f3d6f15ecea2ddfec042fd9ffcf9287934b2..f3af0d1d20a2031c89afb18c90c6ae5c0324c3fc 100755
--- a/bin/localstate.pl
+++ b/bin/localstate.pl
@@ -264,7 +264,7 @@ if ( $result )
     my      $i                  =   0;
     if ( scalar @$result )
     {
-        foreach my $account ( sort @$result )
+        foreach my $account ( @$result )
         {
             my      $maymine    =   '';
             $maymine            =   'sealer'
diff --git a/bin/singlestart.sh b/bin/singlestart.sh
index a00962e11aeffb5b7eba180ba9924f8afa14369c..9963ecf8b6f7e8ed3b235b7c1f578844864a0ab5 100755
--- a/bin/singlestart.sh
+++ b/bin/singlestart.sh
@@ -88,7 +88,7 @@ PIDIDX[$!]="log.sh"
 exec > ${LOGPIPE} 2>&1
 
 echo "*** Starting geth."
-geth --config ${BFATOML} --gcmode archive --verbosity ${BFAVERBOSITY:-3} --allow-insecure-unlock &
+geth --config ${BFATOML} --gcmode archive --allow-insecure-unlock &
 PIDIDX[$!]="geth"
 
 # bootnode
diff --git a/bin/start.sh b/bin/start.sh
index 182bedb46d3c31fd4a55603b557fece2d4ecbcb3..4fc9770e1f830235080a87b1fb2eebfd0bdefb53 100755
--- a/bin/start.sh
+++ b/bin/start.sh
@@ -126,29 +126,12 @@ function geth_args
     # (re)configure parameters (you never know if they changed)
     flexargs="$( getsyncmode )"
     geth_capab
-    xtra=$( extradata )
-    if [ -n "$xtra" ]
-    then
-	flexargs="${flexargs} --extradata $( extradata )"
-    fi
-    unset xtra
     #
-    if [ "$netport" != 30303 ]
-    then
-        flexargs="${flexargs} --port $netport"
-    fi
-    if [ "$rpcport" != 30303 ]
-    then
-        flexargs="${flexargs} --rpcport $rpcport"
-    fi
-    if [ -n "$BFAVERBOSITY" -a "$BFAVERBOSITY" != 3 ]
-    then
-        flexargs="${flexargs} --verbosity ${BFAVERBOSITY:-3}"
-    fi
     # the basic modules
-    rpcapis="eth,net,web3,clique"
+    local rpcapis="eth,net,web3,clique"
     if [ -e "${BFANODEDIR}/opentx" ]
     then
+        local txhostnames dummy
         # If you want other hostnames, put them in this file (comma separated)
         read txhostnames dummy < ${BFANODEDIR}/opentx
         if [ "${txhostnames}" = "" ]
diff --git a/bin/walker.pl b/bin/walker.pl
index 5dfd3f566144672157d3b4ca300e7971b283ff96..292dd77abf6cc15c388031e88676f79aa3713b4c 100755
--- a/bin/walker.pl
+++ b/bin/walker.pl
@@ -74,7 +74,7 @@ sub hex2string($)
 sub rpcreq
 {
     my  ( $opname, @params ) = @_;
-    my  $req        =   HTTP::Request->new( POST => 'http://127.0.0.1:' . $libbfa->{'rpcport'} );
+    my  $req        =   HTTP::Request->new( POST => 'http://127.0.0.1:8545' );
     $req->content_type('application/json');
     my $extra      =   scalar @params
         ? sprintf(qq(,\"params\":[%s]), join(',', @params))