diff --git a/bbsim.go b/bbsim.go
index 1950668..0374700 100644
--- a/bbsim.go
+++ b/bbsim.go
@@ -17,8 +17,6 @@
 package main
 
 import (
-	"gerrit.opencord.org/voltha-bbsim/protos"
-	"gerrit.opencord.org/voltha-bbsim/core"
 	"flag"
 	"fmt"
 	"log"
@@ -28,6 +26,9 @@
 	"strings"
 	"sync"
 	"time"
+
+	"gerrit.opencord.org/voltha-bbsim/core"
+	"gerrit.opencord.org/voltha-bbsim/protos"
 )
 
 func printBanner() {
@@ -39,7 +40,7 @@
 	log.Println("/________/ /________/ /________/ /_/ /_/ /_/ /_/  ")
 }
 
-func getOptions() (uint32, string, uint32, uint32, uint32, int, int, string, core.Mode) {
+func getOptions() (uint32, string, uint32, uint32, uint32, int, int, string, int, core.Mode) {
 	addressport := flag.String("H", ":50060", "IP address:port")
 	oltid := flag.Int("id", 0, "OLT-ID")
 	nintfs := flag.Int("i", 1, "Number of PON-IF ports")
@@ -48,6 +49,7 @@
 	aaawait := flag.Int("a", 30, "Wait time (sec) for activation WPA supplicants")
 	dhcpwait := flag.Int("d", 10, "Wait time (sec) for activation DHCP clients")
 	dhcpservip := flag.String("s", "182.21.0.1", "DHCP Server IP Address")
+	delay := flag.Int("delay", 1, "Delay between ONU events")
 	mode := core.DEFAULT
 	flag.Parse()
 	if *modeopt == "aaa" {
@@ -58,13 +60,13 @@
 	address := strings.Split(*addressport, ":")[0]
 	tmp, _ := strconv.Atoi(strings.Split(*addressport, ":")[1])
 	port := uint32(tmp)
-	return uint32(*oltid), address, port, uint32(*nintfs), uint32(*nonus), *aaawait, *dhcpwait, *dhcpservip, mode
+	return uint32(*oltid), address, port, uint32(*nintfs), uint32(*nonus), *aaawait, *dhcpwait, *dhcpservip, *delay, mode
 }
 
 func main() {
 	// CLI Shows up
 	printBanner()
-	oltid, ip, port, npon, nonus, aaawait, dhcpwait, dhcpservip, mode := getOptions()
+	oltid, ip, port, npon, nonus, aaawait, dhcpwait, dhcpservip, delay, mode := getOptions()
 	log.Printf("ip:%s, baseport:%d, npon:%d, nonus:%d, mode:%d\n", ip, port, npon, nonus, mode)
 
 	// Set up gRPC Server
@@ -73,7 +75,7 @@
 	addressport := ip + ":" + strconv.Itoa(int(port))
 	endchan := make(chan int, 1)
 	listener, gserver, err := core.CreateGrpcServer(oltid, npon, nonus, addressport)
-	server := core.Create(oltid, npon, nonus, aaawait, dhcpwait, dhcpservip, gserver, mode, endchan)
+	server := core.Create(oltid, npon, nonus, aaawait, dhcpwait, dhcpservip, delay, gserver, mode, endchan)
 	if err != nil {
 		log.Println(err)
 	}
diff --git a/core/core_server.go b/core/core_server.go
index 8b52e49..76c219f 100644
--- a/core/core_server.go
+++ b/core/core_server.go
@@ -17,6 +17,12 @@
 package core
 
 import (
+	"errors"
+	"log"
+	"strconv"
+	"sync"
+	"time"
+
 	"gerrit.opencord.org/voltha-bbsim/device"
 	"gerrit.opencord.org/voltha-bbsim/protos"
 	"gerrit.opencord.org/voltha-bbsim/setup"
@@ -24,11 +30,6 @@
 	"github.com/google/gopacket/layers"
 	"github.com/google/gopacket/pcap"
 	"google.golang.org/grpc"
-	"errors"
-	"log"
-	"strconv"
-	"sync"
-	"time"
 )
 
 type Mode int
@@ -50,6 +51,7 @@
 	AAAWait      int
 	DhcpWait     int
 	DhcpServerIP string
+	Delay        int
 	gRPCserver   *grpc.Server
 	VethEnv      []string
 	TestFlag     bool
@@ -63,7 +65,7 @@
 	Pkt  gopacket.Packet
 }
 
-func (s *Server)Initialize(){
+func (s *Server) Initialize() {
 	s.VethEnv = []string{}
 	s.Endchan = make(chan int)
 	s.TestFlag = false
@@ -71,7 +73,7 @@
 	s.Ioinfos = []*Ioinfo{}
 }
 
-func Create(oltid uint32, npon uint32, nonus uint32, aaawait int, dhcpwait int, ip string, g *grpc.Server, mode Mode, e chan int) *Server {
+func Create(oltid uint32, npon uint32, nonus uint32, aaawait int, dhcpwait int, ip string, delay int, g *grpc.Server, mode Mode, e chan int) *Server {
 	s := new(Server)
 	s.Olt = device.CreateOlt(oltid, npon, 1)
 	nnni := s.Olt.NumNniIntf
@@ -81,6 +83,7 @@
 	s.DhcpWait = dhcpwait
 	s.DhcpServerIP = ip
 	s.gRPCserver = g
+	s.Delay = delay
 	s.Mode = mode
 	s.Endchan = e
 	s.VethEnv = []string{}
@@ -92,11 +95,11 @@
 
 	//TODO: To be fixed
 	s.CtagMap = make(map[string]uint32)
-	for i := 0; i < MAX_ONUS_PER_PON; i ++ {
+	for i := 0; i < MAX_ONUS_PER_PON; i++ {
 		oltid := s.Olt.ID
 		intfid := uint32(1)
 		sn := convB2S(device.CreateSN(oltid, intfid, uint32(i)))
-		s.CtagMap[sn] = uint32(900 + i)	// This is hard coded for BBWF
+		s.CtagMap[sn] = uint32(900 + i) // This is hard coded for BBWF
 	}
 	return s
 }
@@ -148,7 +151,7 @@
 	}
 
 	for intfid, _ := range s.Onumap {
-		sendOnuInd(stream, s.Onumap[intfid])
+		sendOnuInd(stream, s.Onumap[intfid], s.Delay)
 		log.Printf("OLT id:%d sent ONUInd.\n", olt.ID)
 	}
 
@@ -168,7 +171,7 @@
 
 		errchan := make(chan error)
 		go func() {
-			<- errchan
+			<-errchan
 			close(s.Endchan)
 		}()
 
@@ -222,7 +225,7 @@
 	return nil
 }
 
-func createIoinfos(oltid uint32, vethenv []string, onumap map[uint32][]*device.Onu)([]*Ioinfo, []string, error){
+func createIoinfos(oltid uint32, vethenv []string, onumap map[uint32][]*device.Onu) ([]*Ioinfo, []string, error) {
 	ioinfos := []*Ioinfo{}
 	var err error
 	for intfid, _ := range onumap {
@@ -309,7 +312,7 @@
 				//C-TAG
 				onu, _ := s.getOnuByID(onuid)
 				sn := convB2S(onu.SerialNumber.VendorSpecific)
-				if ctag, ok := s.CtagMap[sn]; ok == true{
+				if ctag, ok := s.CtagMap[sn]; ok == true {
 					tagpkt, err := PushVLAN(pkt, uint16(ctag))
 					if err != nil {
 						log.Println("Error happend in C-tag tagging")
@@ -373,14 +376,14 @@
 		univeths = append(univeths, info.name)
 	}
 
-	for  {
+	for {
 		select {
 		case <-s.Endchan:
 			log.Println("exeAAATest thread receives close !")
 			return nil
-		case <- time.After(time.Second * time.Duration(s.AAAWait)):
+		case <-time.After(time.Second * time.Duration(s.AAAWait)):
 			log.Println("exeAAATest Start")
-			err = setup.ActivateWPASups(univeths)
+			err = setup.ActivateWPASups(univeths, s.Delay)
 			if err != nil {
 				return err
 			}
@@ -416,14 +419,14 @@
 		univeths = append(univeths, info.name)
 	}
 
-	for  {
+	for {
 		select {
 		case <-s.Endchan:
 			log.Println("exeDHCPTest thread receives close !")
 			return nil
-		case <- time.After(time.Second * time.Duration(s.DhcpWait)):
+		case <-time.After(time.Second * time.Duration(s.DhcpWait)):
 			log.Println("exeDHCPTest Start")
-			err = setup.ActivateDHCPClients(univeths)
+			err = setup.ActivateDHCPClients(univeths, s.Delay)
 			if err != nil {
 				return err
 			}
@@ -479,7 +482,7 @@
 	return nil
 }
 
-func (s *Server)IsAllOnuActive(regonus map[uint32][]*device.Onu) bool {
+func (s *Server) IsAllOnuActive(regonus map[uint32][]*device.Onu) bool {
 	for _, onus := range regonus {
 		for _, onu := range onus {
 			if onu.GetIntStatus() != device.ONU_ACTIVATED {
@@ -543,7 +546,7 @@
 }
 
 func killProcesses(pnames []string) error {
-	for _, pname := range  pnames {
+	for _, pname := range pnames {
 		setup.KillProcess(pname)
 	}
 	return nil
@@ -584,7 +587,7 @@
 func convB2S(b []byte) string {
 	s := ""
 	for _, i := range b {
-		s = s + strconv. FormatInt(int64(i/16), 16) + strconv. FormatInt(int64(i%16), 16)
+		s = s + strconv.FormatInt(int64(i/16), 16) + strconv.FormatInt(int64(i%16), 16)
 	}
 	return s
-}
\ No newline at end of file
+}
diff --git a/core/openolt_service.go b/core/openolt_service.go
index dbb7644..a0d00bf 100644
--- a/core/openolt_service.go
+++ b/core/openolt_service.go
@@ -17,9 +17,11 @@
 package core
 
 import (
-	"gerrit.opencord.org/voltha-bbsim/protos"
-	"gerrit.opencord.org/voltha-bbsim/device"
 	"log"
+	"time"
+
+	"gerrit.opencord.org/voltha-bbsim/device"
+	"gerrit.opencord.org/voltha-bbsim/protos"
 )
 
 func sendOltIndUp(stream openolt.Openolt_EnableIndicationServer, olt *device.Olt) error {
@@ -43,7 +45,7 @@
 func sendIntfInd(stream openolt.Openolt_EnableIndicationServer, olt *device.Olt) error {
 	for i := uint32(0); i < olt.NumPonIntf+olt.NumNniIntf; i++ {
 		intf := olt.Intfs[i]
-		if intf.Type == "pon"{	// There is no need to send IntfInd for NNI
+		if intf.Type == "pon" { // There is no need to send IntfInd for NNI
 			data := &openolt.Indication_IntfInd{&openolt.IntfIndication{IntfId: intf.IntfID, OperState: intf.OperState}}
 			if err := stream.Send(&openolt.Indication{Data: data}); err != nil {
 				log.Printf("Failed to send Intf [id: %d] indication : %v\n", i, err)
@@ -80,8 +82,9 @@
 	return nil
 }
 
-func sendOnuInd(stream openolt.Openolt_EnableIndicationServer, onus []*device.Onu) error {
+func sendOnuInd(stream openolt.Openolt_EnableIndicationServer, onus []*device.Onu, delay int) error {
 	for i, onu := range onus {
+		time.Sleep(time.Duration(delay) * time.Second)
 		data := &openolt.Indication_OnuInd{&openolt.OnuIndication{IntfId: onu.IntfID, OnuId: onu.OnuID, OperState: "up", AdminState: "up", SerialNumber: onu.SerialNumber}}
 		log.Printf("sendONUInd Onuid: %d\n", i)
 		if err := stream.Send(&openolt.Indication{Data: data}); err != nil {
diff --git a/setup/setup_env.go b/setup/setup_env.go
index 6d9981d..82dd6cf 100644
--- a/setup/setup_env.go
+++ b/setup/setup_env.go
@@ -19,6 +19,7 @@
 import (
 	"log"
 	"os/exec"
+	"time"
 )
 
 const (
@@ -28,8 +29,10 @@
 	NNI_VETH_DW_PFX = "sim_nd"
 )
 
-func ActivateWPASups(vethnames []string) error {
+func ActivateWPASups(vethnames []string, delay int) error {
 	for _, vethname := range vethnames {
+		time.Sleep(time.Duration(delay) * time.Second)
+		log.Printf("ActivateWPASups for interface %v\n", vethname)
 		if err := activateWPASupplicant(vethname); err != nil {
 			return err
 		}
@@ -37,8 +40,10 @@
 	return nil
 }
 
-func ActivateDHCPClients(vethnames []string) error {
+func ActivateDHCPClients(vethnames []string, delay int) error {
 	for _, vethname := range vethnames {
+		time.Sleep(time.Duration(delay) * time.Second)
+		log.Printf("activateDHCPClient for interface %v\n", vethname)
 		if err := activateDHCPClient(vethname); err != nil {
 			return err
 		}
@@ -103,21 +108,29 @@
 	conf := "/etc/wpa_supplicant/wpa_supplicant.conf"
 	err = exec.Command(cmd, "-D", "wired", "-i", vethname, "-c", conf).Start()
 	if err != nil {
-		log.Printf("[ERROR] Fail to activateWPASupplicant() for :%s %v\n", vethname, err)
+		log.Printf("[ERROR] Fail to activateWPASupplicant() for: %s %v\n", vethname, err)
 		return
 	}
-	log.Printf("activateWPASupplicant() for :%s\n", vethname)
+	log.Printf("activateWPASupplicant() for: %s\n", vethname)
 	return
 }
 
 func activateDHCPClient(vethname string) (err error) {
-	cmd := "/usr/local/bin/dhclient"
-	err = exec.Command(cmd, vethname).Start()
-	if err != nil {
-		log.Printf("[ERROR] Faile to activateWPASupplicant() for :%s %v\n", vethname, err)
-		return
+	log.Printf("activateDHCPClient() start for: %s\n", vethname)
+	cmd := exec.Command("/usr/local/bin/dhclient", vethname)
+	// if err := cmd.Run(); err != nil {
+	if err := cmd.Start(); err != nil {
+		log.Printf("[ERROR] Failed to activateDHCPClient() for: %s", vethname)
+		log.Panic(err)
 	}
-	log.Printf("activateDHCPClient() for: %s\n", vethname)
+
+	// if the dhclient commands return we got an IP,
+	// so kill it
+	// if err := KillProcess("/usr/local/bin/dhclient"); err != nil {
+	// 	log.Printf("[ERROR] Failed to kill activateDHCPClient() for: %s", vethname, err)
+	// }
+
+	log.Printf("activateDHCPClient() done for: %s\n", vethname)
 	return
 }
 
