diff --git a/api/abstract_olt_api.proto b/api/abstract_olt_api.proto
index 86f9a72..12c8941 100644
--- a/api/abstract_olt_api.proto
+++ b/api/abstract_olt_api.proto
@@ -21,14 +21,8 @@
    string VCoreIP =2;
    int32 VCorePort=3;
 }
-message Error {
-   int32 ErrorNum = 1;
-   string ErrorMessage=2;
-   int32 Serverity=3;
-}
 message AddChassisReturn{
    string DeviceID = 1;
-   Error error = 2;
 }
 message AddOLTChassisMessage{
    string CLLI=1;
@@ -55,14 +49,13 @@
 message AddOLTChassisReturn {
    string DeviceID =1;
    string ChassisDeviceID =2;
-   Error error = 3;
 }
 message ActivateSlotMessage{
-   string SlotDeviceID = 1;
+   string CLLI =1;
+   int32 SlotNumber = 2;
 }
 message ActivateSlotReturn{
    bool Success = 1;
-   Error error = 2;
 }
 message AddOntMessage{
    string CLLI=1;
@@ -73,7 +66,6 @@
 }
 message AddOntReturn{
    bool Success=1;
-   Error error = 2;
 }
 
 service AbstractOLT{
diff --git a/api/handler_test.go b/api/handler_test.go
index 50c5355..c319e6d 100644
--- a/api/handler_test.go
+++ b/api/handler_test.go
@@ -22,6 +22,7 @@
 
 	"gerrit.opencord.org/abstract-olt/api"
 	"gerrit.opencord.org/abstract-olt/models/abstract"
+	"gerrit.opencord.org/abstract-olt/models/physical"
 	"golang.org/x/net/context"
 )
 
@@ -40,7 +41,6 @@
 		t.Fatalf("CreateChassis failed %v\n", err)
 	}
 	clli = ret.DeviceID
-
 }
 func TestHandler_CreateOLTChassis(t *testing.T) {
 	fmt.Println("in handlerTest_CreateChassis")
@@ -51,6 +51,30 @@
 		t.Fatalf("CreateOLTChassis failed %v\n", err)
 	}
 	fmt.Printf("CreateOLTChassis success %v\n", ret)
+}
+func TestHandler_EnableSlot(t *testing.T) {
+	ctx = context.Background()
+	server = api.Server{}
+	fmt.Println("in handler_test_EnableSlot")
+	// slot number 1 should be provisioned above
+	message := &api.ActivateSlotMessage{CLLI: clli, SlotNumber: 1}
+	ret, err := server.EnableSlot(ctx, message)
+	if err != nil {
+		t.Fatalf("EnableSlot failed with %v\n", err)
+	}
+	fmt.Printf("EnableSlot succeeded with %v\n", ret)
+	// Slot 2 isn't provisioned and should fail
+	message = &api.ActivateSlotMessage{CLLI: clli, SlotNumber: 2}
+	ret, err = server.EnableSlot(ctx, message)
+	if err != nil {
+		switch err.(type) {
+		case *physical.UnprovisionedSlotError:
+			fmt.Printf("EnableSlot failed as it should with %v\n", err)
+		default:
+			t.Fatalf("EnableSlot failed with %v\n", err)
+		}
+		t.Fatalf("EnableSlot should have failed but didn't")
+	}
 
 }
 func TestHandler_ProvisionOnt(t *testing.T) {
@@ -65,6 +89,7 @@
 	}
 	// this one should fail
 	fmt.Println("here")
+	//SlotNumber 1 hasn't been provisioned
 	message = &api.AddOntMessage{CLLI: clli, SlotNumber: 2, PortNumber: 3, OntNumber: 2, SerialNumber: "2033029402"}
 	ret, err = server.ProvisionOnt(ctx, message)
 	if err != nil {
@@ -78,5 +103,4 @@
 		t.Fatalf("ProvsionOnt should have failed but didn't")
 	}
 	fmt.Printf("ProvisionOnt success %v\n", ret)
-
 }
diff --git a/models/abstract/chassis.go b/models/abstract/chassis.go
index 74a288c..65bd228 100644
--- a/models/abstract/chassis.go
+++ b/models/abstract/chassis.go
@@ -59,6 +59,6 @@
 	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)
+	err := chassis.Slots[slotNumber-1].Ports[portNumber-1].provisionOnt(ontNumber, serialNumber)
 	return err
 }
diff --git a/models/physical/chassis.go b/models/physical/chassis.go
index 3f050aa..8f60838 100644
--- a/models/physical/chassis.go
+++ b/models/physical/chassis.go
@@ -30,6 +30,14 @@
 	Dataswitch   DataSwitch
 	Linecards    []OLT
 }
+type UnprovisionedSlotError struct {
+	CLLI       string
+	SlotNumber int
+}
+
+func (e *UnprovisionedSlotError) Error() string {
+	return fmt.Sprintf("SlotNumber %d in Chassis %s is currently unprovsioned", e.SlotNumber, e.CLLI)
+}
 
 /*
 AddOLTChassis - adds a reference to a new olt chassis
@@ -43,3 +51,10 @@
 	//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)
 }
+func (chassis *Chassis) ActivateSlot(slotNumber int) error {
+	// AT&T backend systems start at 1 and not 0 :P
+	if chassis.Linecards[slotNumber-1] == nil {
+		return &UnprovisionedSlotError{CLLI: chassis.CLLI, SlotNumber: slotNumber}
+	}
+	return chassis.Linecards[slotNumber-1].activate()
+}
diff --git a/models/physical/olt.go b/models/physical/olt.go
index beffec8..121fdac 100644
--- a/models/physical/olt.go
+++ b/models/physical/olt.go
@@ -29,6 +29,7 @@
 	GetPorts() []PONPort
 	GetParent() *Chassis
 	GetDataSwitchPort() int
+	activate() error
 }
 
 /*
@@ -73,3 +74,8 @@
 func (s *SimpleOLT) GetDataSwitchPort() int {
 	return s.DataSwitchPort
 }
+func (s *SimpleOLT) activate() error {
+	s.Active = true
+	//TODO make call to XOS to activate phyiscal OLT
+	return nil
+}
