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
