diff --git a/automation/state.go b/automation/state.go
index 8a2116f..372e4b8 100644
--- a/automation/state.go
+++ b/automation/state.go
@@ -79,7 +79,7 @@
 	"Deployed": {
 		"New":                 []Action{Reset, Commission},
 		"Deployed":            []Action{Provision, Done},
-		"Ready":               []Action{Reset, Aquire},
+		"Ready":               []Action{Reset, Allocate},
 		"Allocated":           []Action{Reset, Deploy},
 		"Retired":             []Action{Reset, AdminState},
 		"Reserved":            []Action{Reset, AdminState},
@@ -87,12 +87,14 @@
 		"DiskErasing":         []Action{Reset, Wait},
 		"Deploying":           []Action{Reset, Wait},
 		"Commissioning":       []Action{Reset, Wait},
+		"Testing"            : []Action{Reset, Wait},
 		"Missing":             []Action{Reset, Fail},
 		"FailedReleasing":     []Action{Reset, Fail},
 		"FailedDiskErasing":   []Action{Reset, Fail},
 		"FailedDeployment":    []Action{Reset, Fail},
 		"Broken":              []Action{Reset, Fail},
 		"FailedCommissioning": []Action{Reset, Fail},
+		"FailedTesting":       []Action{Reset, Fail},
 	},
 }
 
@@ -105,10 +107,14 @@
         (Commissioning)->(Ready)
         (Ready)->(Deploying)
         (Ready)->(Allocated)
+		(Allocated)->(Testing)
         (Allocated)->(Deploying)
+        (Testing)->(Deploying)
+		(Testing)->(FailedTesting)
         (Deploying)->(Deployed)
         (Deploying)->(FailedDeployment)
         (FailedDeployment)->(Broken)
+		(FailedTesting)->(Broken)
         (Deployed)->(Releasing)
         (Releasing)->(FailedReleasing)
         (FailedReleasing)->(Broken)
@@ -140,12 +146,11 @@
 	for _, mac := range macs {
 		if name, ok := options.Mappings[mac]; ok {
 			if current != name {
-				nodesObj := client.GetSubObject("nodes")
-				nodeObj := nodesObj.GetSubObject(node.ID())
+				machineObj := client.GetSubObject("machines").GetSubObject(node.ID())
 				log.Infof("RENAME '%s' to '%s'\n", node.Hostname(), name)
 
 				if !options.Preview {
-					nodeObj.Update(url.Values{"hostname": []string{name}})
+					machineObj.Update(url.Values{"hostname": []string{name}})
 				}
 			}
 		}
@@ -265,11 +270,10 @@
 	}
 
 	if !options.Preview {
-		nodesObj := client.GetSubObject("nodes")
-		myNode := nodesObj.GetSubObject(node.ID())
+		machineObj := client.GetSubObject("machines").GetSubObject(node.ID())
 		// Start the node with the trusty distro. This should really be looked up or
 		// a parameter default
-		_, err := myNode.CallPost("start", url.Values{"distro_series": []string{"trusty"}})
+		_, err := machineObj.CallPost("deploy", url.Values{"distro_series": []string{"xenial"}})
 		if err != nil {
 			log.Errorf("DEPLOY '%s' : '%s'", node.Hostname(), err)
 			return err
@@ -278,10 +282,11 @@
 	return nil
 }
 
-// Aquire aquire a machine to a specific operator
-var Aquire = func(client *maas.MAASObject, node MaasNode, options ProcessingOptions) error {
-	log.Infof("AQUIRE: %s", node.Hostname())
-	nodesObj := client.GetSubObject("nodes")
+// Acquire a machine to a specific operator
+// Acquire is renamed to allocate for maas 2.0
+var Allocate = func(client *maas.MAASObject, node MaasNode, options ProcessingOptions) error {
+	log.Infof("ALLOCATE: %s", node.Hostname())
+	machinesObj := client.GetSubObject("machines")
 
 	if options.AlwaysRename {
 		updateNodeName(client, node, options)
@@ -371,10 +376,10 @@
 				}
 			}
 		}
-		_, err = nodesObj.CallPost("acquire",
+		_, err = machinesObj.CallPost("allocate",
 			url.Values{"name": []string{node.Hostname()}})
 		if err != nil {
-			log.Errorf("AQUIRE '%s' : '%s'", node.Hostname(), err)
+			log.Errorf("ALLOCATE '%s' : '%s'", node.Hostname(), err)
 			return err
 		}
 	}
@@ -393,10 +398,9 @@
 		// Attempt to turn the node off
 		log.Infof("POWER DOWN: %s", node.Hostname())
 		if !options.Preview {
-			//POST /api/1.0/nodes/{system_id}/ op=stop
-			nodesObj := client.GetSubObject("nodes")
-			nodeObj := nodesObj.GetSubObject(node.ID())
-			_, err := nodeObj.CallPost("stop", url.Values{"stop_mode": []string{"soft"}})
+			//POST /api/2.0/machines/{system_id}/ op=stop
+			machineObj := client.GetSubObject("machines").GetSubObject(node.ID())
+			_, err := machineObj.CallPost("power_off", url.Values{"stop_mode": []string{"soft"}})
 			if err != nil {
 				log.Errorf("Commission '%s' : changing power start to off : '%s'", node.Hostname(), err)
 			}
@@ -407,12 +411,11 @@
 		// We are off so move to commissioning
 		log.Infof("COMISSION: %s", node.Hostname())
 		if !options.Preview {
-			nodesObj := client.GetSubObject("nodes")
-			nodeObj := nodesObj.GetSubObject(node.ID())
+			machineObj := client.GetSubObject("machines").GetSubObject(node.ID())
 
 			updateNodeName(client, node, options)
 
-			_, err := nodeObj.CallPost("commission", url.Values{})
+			_, err := machineObj.CallPost("commission", url.Values{})
 			if err != nil {
 				log.Errorf("Commission '%s' : '%s'", node.Hostname(), err)
 			}
@@ -450,7 +453,14 @@
 					"power_pass":    power.PowerPassword,
 					"power_address": power.PowerAddress,
 				}
-				node.UpdatePowerParameters(power.Name, params)
+				machineNodeObj := client.GetSubObject("machines").GetSubObject(node.ID())
+				machineObj, err := machineNodeObj.Get();
+				if err != nil {
+					log.Errorf("Unable to get %s machine object %s ",node.ID(),err)
+					return err
+				}
+				machineNode := MaasNode{machineObj}
+				machineNode.UpdatePowerParameters(power.Name, params)
 			default:
 				log.Warningf("Unsupported power type discovered '%s'", power.Name)
 			}
@@ -511,11 +521,11 @@
 
 // ProcessNode something
 func ProcessNode(client *maas.MAASObject, node MaasNode, options ProcessingOptions) error {
-	substatus, err := node.GetInteger("substatus")
+	status, err := node.GetInteger("status")
 	if err != nil {
 		return err
 	}
-	actions, err := findActions("Deployed", MaasNodeStatus(substatus).String())
+	actions, err := findActions("Deployed", MaasNodeStatus(status).String())
 	if err != nil {
 		return err
 	}
