diff --git a/models/abstract/ChassisUtils.go b/models/abstract/ChassisUtils.go
index 4c41698..2377453 100644
--- a/models/abstract/ChassisUtils.go
+++ b/models/abstract/ChassisUtils.go
@@ -16,8 +16,6 @@
 
 package abstract
 
-import "errors"
-
 /*
 GenerateChassis - constructs a new AbstractOLT Chassis
 */
@@ -82,24 +80,3 @@
 /*
 NextPort pulls the first unMapped port in the abstract chassis so the next physical port can be mapped to it
 */
-func (chassis *Chassis) NextPort() (*Port, error) {
-	info := &chassis.AllocInfo
-
-	if info.outOfPorts {
-		return nil, errors.New("Abstract chassis out of ports")
-	}
-
-	nextPort := &chassis.Slots[info.slot].Ports[info.port]
-
-	info.port++
-	if info.port == MAX_PORTS {
-		info.port = 0
-		info.slot++
-		if info.slot == MAX_SLOTS {
-			info.slot = 0
-			info.outOfPorts = true
-		}
-	}
-
-	return nextPort, nil
-}
diff --git a/models/abstract/chassis.go b/models/abstract/chassis.go
index 52de90d..74a288c 100644
--- a/models/abstract/chassis.go
+++ b/models/abstract/chassis.go
@@ -16,6 +16,8 @@
 
 package abstract
 
+import "errors"
+
 const MAX_SLOTS int = 16
 const MAX_PORTS int = 16
 
@@ -34,3 +36,29 @@
 	port       int
 	outOfPorts bool
 }
+
+func (chassis *Chassis) NextPort() (*Port, error) {
+	info := &chassis.AllocInfo
+
+	if info.outOfPorts {
+		return nil, errors.New("Abstract chassis out of ports")
+	}
+
+	nextPort := &chassis.Slots[info.slot].Ports[info.port]
+
+	info.port++
+	if info.port == MAX_PORTS {
+		info.port = 0
+		info.slot++
+		if info.slot == MAX_SLOTS {
+			info.slot = 0
+			info.outOfPorts = true
+		}
+	}
+
+	return nextPort, nil
+}
+func (chassis *Chassis) ActivateONT(slotNumber int, portNumber int, ontNumber int, serialNumber string) error {
+	err := chassis.Slots[slotNumber-1].Ports[portNumber].provisionOnt(ontNumber, serialNumber)
+	return err
+}
diff --git a/models/abstract/port.go b/models/abstract/port.go
index c23249a..5dfa195 100644
--- a/models/abstract/port.go
+++ b/models/abstract/port.go
@@ -16,7 +16,11 @@
 
 package abstract
 
-import "gerrit.opencord.org/abstract-olt/models/physical"
+import (
+	"fmt"
+
+	"gerrit.opencord.org/abstract-olt/models/physical"
+)
 
 /*
 Port represents a single PON port on the OLT chassis
@@ -28,3 +32,26 @@
 	PhysPort *physical.PONPort
 	Parent   *Slot `json:"-"`
 }
+
+type UnprovisonedPortError struct {
+	oltNum  int
+	clli    string
+	portNum int
+}
+
+func (e *UnprovisonedPortError) Error() string {
+	return fmt.Sprintf("Port %d for olt %d on AbstractChasis  %s is not provisioned", e.portNum, e.oltNum, e.clli)
+}
+func (port *Port) provisionOnt(ontNumber int, serialNumber string) error {
+	if port.PhysPort == nil {
+		slot := port.Parent
+		chassis := slot.Parent
+		err := UnprovisonedPortError{oltNum: slot.Number, clli: chassis.CLLI, portNum: port.Number}
+		return &err
+	}
+
+	phyPort := port.PhysPort
+	ont := port.Onts[ontNumber-1]
+	phyPort.ActivateOnt(ontNumber, ont.Svlan, ont.Cvlan, serialNumber)
+	return nil
+}
diff --git a/models/physical/chassis.go b/models/physical/chassis.go
index 339a610..3f050aa 100644
--- a/models/physical/chassis.go
+++ b/models/physical/chassis.go
@@ -16,7 +16,10 @@
 
 package physical
 
-import "net"
+import (
+	"fmt"
+	"net"
+)
 
 /*
 Chassis is a model that takes up to 16 discreet OLT chassis as if it is a 16 slot OLT chassis
@@ -27,3 +30,16 @@
 	Dataswitch   DataSwitch
 	Linecards    []OLT
 }
+
+/*
+AddOLTChassis - adds a reference to a new olt chassis
+*/
+func (chassis *Chassis) AddOLTChassis(olt OLT) {
+	chassis.Linecards = append(chassis.Linecards, olt)
+	//TODO - api call to add olt i.e. preprovision_olt
+	fmt.Printf("chassis.AddOLTChassis(%s)\n", olt.GetHostname())
+}
+func (chassis *Chassis) provisionONT(ont Ont) {
+	//TODO - api call to provison s/c vlans and ont serial number etc
+	fmt.Printf("chassis.provisionONT(%s,SVlan:%d,CVlan:%d)\n", ont.SerialNumber, ont.Svlan, ont.Cvlan)
+}
diff --git a/models/physical/edgecore.go b/models/physical/edgecore.go
index 196d44e..cded2dc 100644
--- a/models/physical/edgecore.go
+++ b/models/physical/edgecore.go
@@ -29,6 +29,9 @@
 func CreateEdgecore(olt *SimpleOLT) *Edgecore {
 	var newPorts [16]PONPort
 	edge := Edgecore{SimpleOLT: *olt}
+	for i := 0; i < 16; i++ {
+		newPorts[i].Parent = &edge
+	}
 	edge.Ports = newPorts[:]
 	return &edge
 }
diff --git a/models/physical/olt.go b/models/physical/olt.go
index 3c2094d..beffec8 100644
--- a/models/physical/olt.go
+++ b/models/physical/olt.go
@@ -41,6 +41,7 @@
 	Address        net.TCPAddr
 	Number         int
 	Ports          []PONPort
+	Active         bool
 	Parent         *Chassis `json:"-"`
 	DataSwitchPort int
 }
diff --git a/models/physical/ont.go b/models/physical/ont.go
index 4bd47ac..4a9ca89 100644
--- a/models/physical/ont.go
+++ b/models/physical/ont.go
@@ -20,8 +20,9 @@
 Ont represents a single ont/onu connect to a splitter on a Port
 */
 type Ont struct {
-	Number int
-	Svlan  int
-	Cvlan  int
-	Parent *PONPort `json:"-"`
+	Number       int
+	Svlan        int
+	Cvlan        int
+	SerialNumber string
+	Parent       *PONPort `json:"-"`
 }
diff --git a/models/physical/ponport.go b/models/physical/ponport.go
index 99c282a..e17a07e 100644
--- a/models/physical/ponport.go
+++ b/models/physical/ponport.go
@@ -17,7 +17,7 @@
 package physical
 
 /*
-Port represents a single PON port on the OLT chassis
+PONPort represents a single PON port on the OLT chassis
 */
 type PONPort struct {
 	Number   int
@@ -25,3 +25,10 @@
 	Onts     [64]Ont
 	Parent   *Edgecore `json:"-"`
 }
+
+func (port *PONPort) ActivateOnt(number int, sVlan int, cVlan int, serialNumber string) {
+	ont := Ont{Number: number, Svlan: sVlan, Cvlan: cVlan, SerialNumber: serialNumber, Parent: port}
+	port.Onts[number-1] = ont
+	port.Parent.Parent.provisionONT(ont)
+
+}
