diff --git a/quantumlayer-emu-prng.go b/quantumlayer-emu-prng.go
index 6865c8210b47dfa518a4825ab1c30d717e55c170..0f8e7e712d144792b9ed578e2f9c90f0a9a082cf 100644
--- a/quantumlayer-emu-prng.go
+++ b/quantumlayer-emu-prng.go
@@ -54,19 +54,28 @@ func NewQuantumlayerEmuPRNG() (newql *QuantumlayerEmuPRNG) {
 
 // Power on the quantum layer, i.e., open up the communication ports for the
 // other quantum module
-func (qlemuprng *QuantumlayerEmuPRNG) PowerOn() {
+func (qlemuprng *QuantumlayerEmuPRNG) PowerOn(localQLAddress ...string) {
 	qlemuprng.poweron = false
 	log.Println("QuantumlayerEmuPRNG is powering on...charging.")
 
-	// Start receiving numberstore
+	// Start receiving numberstores
 	go qlemuprng.peerNumbers.receiveNumbers(qlemuprng.incomingRandNums)
 	go qlemuprng.myNumbers.receiveNumbers(qlemuprng.outgoingRandNums)
 
 	// serve UDP incoming
 	go func() {
 		// Get UDP server part going...
+		// Determine if a local UDP address should be used or not
+		var udpAddrString string
+		if len(localQLAddress) == 0 {
+			// No input
+			udpAddrString = ":0"
+		} else {
+			udpAddrString = localQLAddress[0]
+		}
+		log.Printf("localQLAddress is %s", localQLAddress[0])
 		// This reads random numbers from other Quantum end
-		udpSrvPort, err := net.ResolveUDPAddr("udp", ":0")
+		udpSrvPort, err := net.ResolveUDPAddr("udp", udpAddrString)
 		if err != nil {
 			log.Fatalf("QuantumlayerEmuPRNG UDP failure: %s", err)
 			return
@@ -160,7 +169,10 @@ func (qlemuprng *QuantumlayerEmuPRNG) AddPeer(addr net.UDPAddr) {
 					log.Printf("json.Marshal error %s", err)
 				}
 
-				qlemuprng.udpSrvConn.WriteMsgUDPAddrPort(jsonPayload, nil, addr.AddrPort())
+				_, _, err = qlemuprng.udpSrvConn.WriteMsgUDPAddrPort(jsonPayload, nil, addr.AddrPort())
+				if err != nil {
+					log.Fatalf("WriteMsgUDPAddrPort failed: %s", err)
+				}
 				qlemuprng.outgoingRandNums <- qpe
 				time.Sleep(5 * time.Second)
 			}
diff --git a/quantumlayer-emu-prng_test.go b/quantumlayer-emu-prng_test.go
new file mode 100644
index 0000000000000000000000000000000000000000..69d30b582e35da3b1ebd99fca9a1ba38eb78a3a4
--- /dev/null
+++ b/quantumlayer-emu-prng_test.go
@@ -0,0 +1,63 @@
+package quantumlayer
+
+// Some tests
+
+import (
+	"fmt"
+	"net"
+	"testing"
+	"time"
+)
+
+func TestQuantumLayer(t *testing.T) {
+
+	ql1 := NewQuantumlayerEmuPRNG()
+	ql1.PowerOn()
+	defer ql1.PowerOff()
+
+	ql2 := NewQuantumlayerEmuPRNG()
+	ql2.PowerOn()
+	defer ql2.PowerOff()
+
+	// Generate UDPAddr for ql1 peer
+	udpQL2AddrString := fmt.Sprintf("127.0.0.1:%d", ql2.GetLocalQLPort().Port)
+	udpQL2Addr, err := net.ResolveUDPAddr("udp", udpQL2AddrString)
+	if err != nil {
+		t.Fatalf("QuantumlayerEmuPRNG UDP failure: %s", err)
+		return
+	}
+
+	// Generate UDPAddr for ql2 peer
+	udpQL1AddrString := fmt.Sprintf("127.0.0.1:%d", ql1.GetLocalQLPort().Port)
+	udpQL1Addr, err := net.ResolveUDPAddr("udp", udpQL1AddrString)
+	if err != nil {
+		t.Fatalf("QuantumlayerEmuPRNG UDP failure: %s", err)
+		return
+	}
+
+	ql1.AddPeer(*udpQL2Addr)
+	ql2.AddPeer(*udpQL1Addr)
+
+	for n := 0; n < 2; n++ {
+		resultQl1, err := ql1.GetKeyBatchPeer()
+		if err == nil {
+			t.Logf("run %d, *ql1* keyid %d \t keylen %d", n, resultQl1.BulkKeyId, resultQl1.BulkKeyLength)
+		}
+
+		//resultQl2 := ql2.GetBatchPeer()
+		resultQl2, err := ql2.GetKeyBatchPeer()
+		if err == nil {
+			t.Logf("*ql2* keyid %d \t keylen %d", resultQl2.BulkKeyId, resultQl1.BulkKeyLength)
+		}
+
+		resultQL2Local, err := ql2.GetKeyBatchLocal()
+		if err == nil {
+			t.Logf("Current key IDs are for ql2 local %d and for peer ql1 %d", resultQL2Local.BulkKeyId, resultQl1.BulkKeyId)
+
+		}
+
+		time.Sleep(5 * time.Second)
+
+	}
+
+}
diff --git a/quantumlayer.go b/quantumlayer.go
index 28749e520c19beda172d404952768ebe46132c8d..603027867ccebb915f712cc3a36071a9ac15a887 100644
--- a/quantumlayer.go
+++ b/quantumlayer.go
@@ -11,7 +11,7 @@ type QuantumLayerBulkKey struct {
 }
 
 type QuantumLayer interface {
-	PowerOn()                                       // switch on the quantum layer element
+	PowerOn(...string)                              // switch on the quantum layer element
 	PowerOff()                                      // switch off the quantum layer element
 	AddPeer()                                       // Adds a Quantum Layer Peer to the peer list
 	RemovePeer()                                    // Remmoves a Quantum Layer Peer to the peer list