diff --git a/README.md b/README.md
index 5e6cea5..6bd5eae 100644
--- a/README.md
+++ b/README.md
@@ -34,7 +34,7 @@
 {
     "state": "HEALTHY"
 }
-(voltha) preprovision_olt -t openolt -H <BBSim Docker container IP>
+(voltha) preprovision_olt -t bbsimolt -H <BBSim Docker container IP>
 success (device id = <deviceid>)
 (voltha) enable
 enabling <deviceid>
diff --git a/core/core_server.go b/core/core_server.go
index 7067b3f..be6b04a 100644
--- a/core/core_server.go
+++ b/core/core_server.go
@@ -54,6 +54,7 @@
 	VethEnv      []string
 	TestFlag     bool
 	Processes    []string
+	EnableServer *openolt.Openolt_EnableIndicationServer
 }
 
 type Packet struct {
@@ -86,6 +87,7 @@
 	for intfid := nnni; intfid < npon+nnni; intfid++ {
 		s.Onumap[intfid] = device.CreateOnus(oltid, intfid, nonus, nnni)
 	}
+	s.EnableServer = new(openolt.Openolt_EnableIndicationServer)
 	return s
 }
 
@@ -95,15 +97,7 @@
 	oltid := olt.ID
 	wg := &sync.WaitGroup{}
 
-	// DEBUG
-	log.Printf("pointer@activateOLT %p", s)
-	log.Printf("Ioinfos:%v\n", s.Ioinfos)
-	log.Printf("OLT Status:%v\n", s.Olt.OperState)
-	log.Printf("ONUmap:%v\n", s.Onumap)
-	log.Printf("VethEnv:%v\n", s.VethEnv)
-	log.Printf("Processes:%v\n", s.Processes)
-
-	if err := sendOltInd(stream, olt); err != nil {
+	if err := sendOltIndUp(stream, olt); err != nil {
 		return err
 	}
 	olt.OperState = "up"
@@ -296,12 +290,12 @@
 			ethtype := le.EthernetType
 			if ethtype == 0x888e {
 				log.Printf("Received upstream packet is EAPOL.")
-				log.Println(unipkt.Pkt.Dump())
-				log.Println(pkt.Dump())
+				//log.Println(unipkt.Pkt.Dump())
+				//log.Println(pkt.Dump())
 			} else if layerDHCP := pkt.Layer(layers.LayerTypeDHCPv4); layerDHCP != nil {
 				log.Printf("Received upstream packet is DHCP.")
-				log.Println(unipkt.Pkt.Dump())
-				log.Println(pkt.Dump())
+				//log.Println(unipkt.Pkt.Dump())
+				//log.Println(pkt.Dump())
 			} else {
 				continue
 			}
@@ -336,7 +330,6 @@
 				log.Println("Closed unichannel !")
 				close(nnichannel)
 				log.Println("Closed nnichannel !")
-
 				flag = true
 				return nil
 			}
@@ -346,7 +339,7 @@
 }
 
 func (s *Server) exeAAATest() error {
-	log.Println("exeAAATest Start")
+	log.Println("exeAAATest starts to sleep....")
 	infos, err := s.getUniIoinfos("outside")
 	if err != nil {
 		return err
@@ -363,7 +356,7 @@
 			log.Println("exeAAATest thread receives close !")
 			return nil
 		case <- time.After(time.Second * time.Duration(s.AAAWait)):
-			log.Println("timeout")
+			log.Println("exeAAATest Start")
 			err = setup.ActivateWPASups(univeths)
 			if err != nil {
 				return err
@@ -377,7 +370,7 @@
 }
 
 func (s *Server) exeDHCPTest() error {
-	log.Println("exeDHCPTest Start")
+	log.Println("exeDHCPTest starts to sleep....")
 	info, err := s.identifyNniIoinfo("outside")
 
 	if err != nil {
@@ -406,7 +399,7 @@
 			log.Println("exeDHCPTest thread receives close !")
 			return nil
 		case <- time.After(time.Second * time.Duration(s.DhcpWait)):
-			log.Println("timeout")
+			log.Println("exeDHCPTest Start")
 			err = setup.ActivateDHCPClients(univeths)
 			if err != nil {
 				return err
@@ -426,10 +419,10 @@
 		ethtype := pkt.EthernetType
 		if ethtype == 0x888e {
 			log.Printf("Received downstream packet is EAPOL.")
-			log.Println(rawpkt.Dump())
+			//log.Println(rawpkt.Dump())
 		} else if layerDHCP := rawpkt.Layer(layers.LayerTypeDHCPv4); layerDHCP != nil {
 			log.Printf("Received downstream packet is DHCP.")
-			log.Println(rawpkt.Dump())
+			//log.Println(rawpkt.Dump())
 			rawpkt, _, _ = PopVLAN(rawpkt)
 			rawpkt, _, _ = PopVLAN(rawpkt)
 		} else {
diff --git a/core/grpc_service.go b/core/grpc_service.go
index e647c9d..90bdf35 100644
--- a/core/grpc_service.go
+++ b/core/grpc_service.go
@@ -25,11 +25,16 @@
 	"google.golang.org/grpc"
 	"log"
 	"net"
+	"os/exec"
 )
 
 // gRPC Service
 func (s *Server) DisableOlt(c context.Context, empty *openolt.Empty) (*openolt.Empty, error) {
 	log.Printf("OLT receives DisableOLT()\n")
+	if err := sendOltIndDown(*s.EnableServer); err != nil {
+		return new(openolt.Empty), err
+	}
+	log.Println("Successfuly sent OLT DOWN indication !")
 	return new(openolt.Empty), nil
 }
 
@@ -134,15 +139,16 @@
 
 func (s *Server) Reboot(c context.Context, empty *openolt.Empty) (*openolt.Empty, error) {
 	log.Printf("OLT %d receives Reboot ().\n", s.Olt.ID)
-	log.Printf("pointer@Reboot %p", s)
 	// Initialize OLT & Env
 	if s.TestFlag == true{
-		log.Println("Initialize by Reboot")
+		log.Println("Initialized by Reboot")
 		cleanUpVeths(s.VethEnv)
 		close(s.Endchan)
 		processes := s.Processes
 		log.Println("processes:", processes)
 		killProcesses(processes)
+		exec.Command("rm", "/var/run/dhcpd.pid").Run()
+		exec.Command("touch", "/var/run/dhcpd.pid").Run()
 		s.Initialize()
 	}
 	olt := s.Olt
@@ -159,6 +165,7 @@
 	defer func() {
 		s.gRPCserver.Stop()
 	}()
+	s.EnableServer = &stream
 	log.Printf("OLT receives EnableInd.\n")
 	if err := s.activateOLT(stream); err != nil {
 		log.Printf("Failed to activate OLT: %v\n", err)
diff --git a/core/openolt_service.go b/core/openolt_service.go
index ffded4d..dbb7644 100644
--- a/core/openolt_service.go
+++ b/core/openolt_service.go
@@ -22,10 +22,19 @@
 	"log"
 )
 
-func sendOltInd(stream openolt.Openolt_EnableIndicationServer, olt *device.Olt) error {
+func sendOltIndUp(stream openolt.Openolt_EnableIndicationServer, olt *device.Olt) error {
 	data := &openolt.Indication_OltInd{OltInd: &openolt.OltIndication{OperState: "up"}}
 	if err := stream.Send(&openolt.Indication{Data: data}); err != nil {
-		log.Printf("Failed to send OLT indication: %v\n", err)
+		log.Printf("Failed to send OLT UP indication: %v\n", err)
+		return err
+	}
+	return nil
+}
+
+func sendOltIndDown(stream openolt.Openolt_EnableIndicationServer) error {
+	data := &openolt.Indication_OltInd{OltInd: &openolt.OltIndication{OperState: "down"}}
+	if err := stream.Send(&openolt.Indication{Data: data}); err != nil {
+		log.Printf("Failed to send OLT DOWN indication: %v\n", err)
 		return err
 	}
 	return nil
