diff --git a/.gitignore b/.gitignore
index f977972..24f73e3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,16 @@
-bin
 api/abstract_olt_api.pb.go
 api/abstract_olt_api.pb.gw.go
 api/abstract_olt_api.swagger.json
 client/client
 cmd/AbstractOLT/AbstractOLT
+bin/AbstractOLT
+bin/AbstractOLT.log
+bin/backup/ATLEDGEVOLT1
+bin/build.sh
+bin/buildParams.sh
+bin/cert/
+bin/demo.sh
+bin/output
+bin/client
+
 
diff --git a/README.md b/README.md
index 648b197..5f2b3ae 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@
 ```sh
 cd bin
 mkdir cert
-openssl genrsa -out cert/server.key 204
+openssl genrsa -out cert/server.key 2048
 openssl req -new -x509 -sha256 -key cert/server.key -out cert/server.crt -days 3650
 openssl req -new -sha256 -key cert/server.key -out cert/server.csr
 openssl x509 -req -sha256 -in cert/server.csr -signkey cert/server.key -out cert/server.crt -days 3650
diff --git a/api/handler.go b/api/handler.go
index 2d5c5ed..ce5c7a1 100644
--- a/api/handler.go
+++ b/api/handler.go
@@ -43,6 +43,7 @@
 Echo - Tester function which just returns same string sent to it
 */
 func (s *Server) Echo(ctx context.Context, in *EchoMessage) (*EchoReplyMessage, error) {
+	fmt.Println("HELLO WTF")
 	ping := in.GetPing()
 	pong := EchoReplyMessage{Pong: ping}
 	return &pong, nil
@@ -82,7 +83,7 @@
 	}
 
 	abstractChassis := abstract.GenerateChassis(clli, int(in.GetRack()), int(in.GetShelf()))
-	phyChassis := physical.Chassis{CLLI: clli, XOSAddress: xosAddress, Rack: rack, Shelf: shelf}
+	phyChassis := physical.Chassis{CLLI: clli, XOSUser: xosUser, XOSPassword: xosPassword, XOSAddress: xosAddress, Rack: rack, Shelf: shelf}
 
 	chassisHolder = &models.ChassisHolder{AbstractChassis: abstractChassis, PhysicalChassis: phyChassis}
 	if settings.GetDebug() {
diff --git a/bin/backup/BackupPlaceHolder b/bin/backup/BackupPlaceHolder
new file mode 100644
index 0000000..592c67a
--- /dev/null
+++ b/bin/backup/BackupPlaceHolder
@@ -0,0 +1,15 @@
+ Copyright 2017 the original author or authors.
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+ purpose of this file is to let git save the backup directory which is a requirement to run AbstractOLT for now
diff --git a/cmd/AbstractOLT/AbstractOLT.go b/cmd/AbstractOLT/AbstractOLT.go
index eee3b0f..869c2c0 100644
--- a/cmd/AbstractOLT/AbstractOLT.go
+++ b/cmd/AbstractOLT/AbstractOLT.go
@@ -251,14 +251,18 @@
 	for _, file := range files {
 		fmt.Println(file.Name())
 		chassisHolder := models.ChassisHolder{}
-		fileName := fmt.Sprintf("backup/%s", file.Name())
-		json, _ := ioutil.ReadFile(fileName)
-		err := chassisHolder.Deserialize([]byte(json))
-		if err != nil {
-			fmt.Printf("Deserialize threw an error %v\n", err)
+		if file.Name() != "BackupPlaceHolder" {
+			fileName := fmt.Sprintf("backup/%s", file.Name())
+			json, _ := ioutil.ReadFile(fileName)
+			err := chassisHolder.Deserialize([]byte(json))
+			if err != nil {
+				fmt.Printf("Deserialize threw an error %v\n", err)
+			}
+			chassisMap := models.GetChassisMap()
+			(*chassisMap)[file.Name()] = &chassisHolder
+		} else {
+			fmt.Println("Ignoring BackupPlaceHolder")
 		}
-		chassisMap := models.GetChassisMap()
-		(*chassisMap)[file.Name()] = &chassisHolder
 	}
 
 	log.Printf("Entering infinite loop")
diff --git a/models/physical/chassis.go b/models/physical/chassis.go
index 0c164e9..8f76a5e 100644
--- a/models/physical/chassis.go
+++ b/models/physical/chassis.go
@@ -125,5 +125,54 @@
 }
 func (chassis *Chassis) deleteONT(ont Ont) {
 	//TODO - api call to provison s/c vlans and ont serial number etc
+	//TODO - api call to provison s/c vlans and ont serial number etc
 	log.Printf("chassis.deleteONT(%s,SVlan:%d,CVlan:%d)\n", ont.SerialNumber, ont.Svlan, ont.Cvlan)
+	ponPort := ont.Parent
+	slot := ponPort.Parent
+
+	//func NewOntProvision(serialNumber string, oltIP net.IP, ponPortNumber int) OntProvision {
+	ontStruct := tosca.NewOntProvision(ont.SerialNumber, slot.Address.IP, ponPort.Number)
+	yaml, _ := ontStruct.ToYaml()
+	fmt.Println(yaml)
+
+	requestList := fmt.Sprintf("http://%s:%d/delete", chassis.XOSAddress.IP.String(), chassis.XOSAddress.Port)
+	client := &http.Client{}
+	if settings.GetDummy() {
+		log.Printf("yaml:%s\n", yaml)
+		log.Println("YAML IS NOT BEING SET TO XOS")
+	} else {
+
+		log.Println(requestList)
+		log.Println(yaml)
+		if settings.GetDummy() {
+			return
+		}
+		req, err := http.NewRequest("POST", requestList, strings.NewReader(yaml))
+		req.Header.Add("xos-username", chassis.XOSUser)
+		req.Header.Add("xos-password", chassis.XOSPassword)
+		resp, err := client.Do(req)
+		if err != nil {
+			log.Printf("ERROR :) %v\n", err)
+			// handle error
+		}
+		log.Printf("Response is %v\n", resp)
+	}
+	deleteOntStruct := tosca.NewOntDelete(ont.SerialNumber)
+	yaml, _ = deleteOntStruct.ToYaml()
+	fmt.Println(yaml)
+	if settings.GetDummy() {
+		log.Printf("yaml:%s\n", yaml)
+		log.Println("YAML IS NOT BEING SET TO XOS")
+		return
+	} else {
+		req, err := http.NewRequest("POST", requestList, strings.NewReader(yaml))
+		req.Header.Add("xos-username", chassis.XOSUser)
+		req.Header.Add("xos-password", chassis.XOSPassword)
+		resp, err := client.Do(req)
+		if err != nil {
+			log.Printf("ERROR :) %v\n", err)
+			// handle error
+		}
+		log.Printf("Response is %v\n", resp)
+	}
 }
diff --git a/models/tosca/deleteOnt.go b/models/tosca/deleteOnt.go
new file mode 100644
index 0000000..5854d57
--- /dev/null
+++ b/models/tosca/deleteOnt.go
@@ -0,0 +1,78 @@
+/*
+   Copyright 2017 the original author or authors.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
+package tosca
+
+import (
+	"fmt"
+
+	yaml "gopkg.in/yaml.v2"
+)
+
+// type: tosca.nodes.ONUDevice
+var ontDeleteTemplate = `tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+  - custom_types/onudevice.yaml
+description: Delete an ont
+topology_template:
+  node_templates:
+    device#onu:
+      type: tosca.nodes.ONUDevice
+      properties:
+        serial_number:`
+
+/*var ontDeleteTemplate = `tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+  - custom_types/onudevice.yaml
+description: Create a simulated OLT Device in VOLTHA
+topology_template:
+  node_templates:
+    device#onu:
+      type: something
+      properties:
+        serial_number:`*/
+
+type OntDelete struct {
+	ToscaDefinitionsVersion string   `yaml:"tosca_definitions_version"`
+	Imports                 []string `yaml:"imports"`
+	Description             string   `yaml:"description"`
+	TopologyTemplate        struct {
+		NodeTemplates struct {
+			DeviceOnt struct {
+				DeviceType string `yaml:"type"`
+				Properties struct {
+					SerialNumber string `yaml:"serial_number"`
+				} `yaml:"properties"`
+			} `yaml:"device#onu"`
+		} `yaml:"node_templates"`
+	} `yaml:"topology_template"`
+}
+
+func NewOntDelete(serialNumber string) OntDelete {
+	o := OntDelete{}
+	err := yaml.Unmarshal([]byte(ontDeleteTemplate), &o)
+	if err != nil {
+		fmt.Println(err)
+	}
+	props := &o.TopologyTemplate.NodeTemplates.DeviceOnt.Properties
+	props.SerialNumber = serialNumber
+	return o
+
+}
+func (ont *OntDelete) ToYaml() (string, error) {
+	b, err := yaml.Marshal(ont)
+	ret := string(b)
+	return ret, err
+}
diff --git a/models/tosca/deleteOnt_test.go b/models/tosca/deleteOnt_test.go
new file mode 100644
index 0000000..e9f9c82
--- /dev/null
+++ b/models/tosca/deleteOnt_test.go
@@ -0,0 +1,46 @@
+/*
+   Copyright 2017 the original author or authors.
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+*/
+
+package tosca_test
+
+import (
+	"testing"
+
+	"gerrit.opencord.org/abstract-olt/models/tosca"
+)
+
+var deleteExpected = `tosca_definitions_version: tosca_simple_yaml_1_0
+imports:
+- custom_types/onudevice.yaml
+description: Delete an ont
+topology_template:
+  node_templates:
+    device#onu:
+      type: tosca.nodes.ONUDevice
+      properties:
+        serial_number: some_serial
+`
+var ontToDelete tosca.OntDelete
+
+//func NewOntProvision(serialNumber string, oltIP net.IP, ponPortNumber int) OntProvision {
+
+func TestOntDelete_NewOntDelete(t *testing.T) {
+	ontToDelete = tosca.NewOntDelete("some_serial")
+	ontYaml, _ := ontToDelete.ToYaml()
+	if ontYaml != deleteExpected {
+		t.Fatalf("Didn't generate the expected yaml\n Generated:\n%s \nExpected:\n%s\n", ontYaml, deleteExpected)
+	}
+}
