First monitoring API endpoint implemented
diff --git a/acceptance/openstack/identity/02-rbac-monitoring.go b/acceptance/openstack/identity/02-rbac-monitoring.go
new file mode 100644
index 0000000..707177e
--- /dev/null
+++ b/acceptance/openstack/identity/02-rbac-monitoring.go
@@ -0,0 +1,64 @@
+package main
+
+import (
+	"fmt"
+	"github.com/rackspace/gophercloud/openstack/identity"
+	"github.com/rackspace/gophercloud/openstack/utils"
+	"github.com/rackspace/gophercloud/rackspace/monitoring"
+	"github.com/rackspace/gophercloud/rackspace/monitoring/notificationPlans"
+)
+
+func main() {
+	ao, err := utils.AuthOptions()
+	if err != nil {
+		panic(err)
+	}
+
+	ao.AllowReauth = true
+	r, err := identity.Authenticate(ao)
+	if err != nil {
+		panic(err)
+	}
+
+	// Find the cloud monitoring API
+
+	sc, err := identity.ServiceCatalog(r)
+	if err != nil {
+		panic(err)
+	}
+
+	ces, err := sc.CatalogEntries()
+	if err != nil {
+		panic(err)
+	}
+
+	monUrl, err := findMonitoringEndpoint(ces)
+	if err != nil {
+		panic(err)
+	}
+
+	// Build ourselves an interface to cloud monitoring!
+
+	np := notificationPlans.NewClient(monitoring.Options{
+		Endpoint:       monUrl,
+		AuthOptions:    ao,
+		Authentication: r,
+	})
+
+	// Try to delete a bogus notification plan
+
+	dr, err := np.Delete("ajkhdlkajhdflkajshdf")
+	if err != nil {
+		panic(err)
+	}
+	fmt.Printf("%#v\n", dr)
+}
+
+func findMonitoringEndpoint(ces []identity.CatalogEntry) (string, error) {
+	for _, ce := range ces {
+		if ce.Type == "rax:monitor" {
+			return ce.Endpoints[0].PublicURL, nil
+		}
+	}
+	return "", fmt.Errorf("No monitoring API in the service catalog")
+}
diff --git a/openstack/identity/service_catalog.go b/openstack/identity/service_catalog.go
index fc2717a..af6bbdb 100644
--- a/openstack/identity/service_catalog.go
+++ b/openstack/identity/service_catalog.go
@@ -7,17 +7,17 @@
 }
 
 type CatalogEntry struct {
-	Name string
-	Type string
+	Name      string
+	Type      string
 	Endpoints []Endpoint
 }
 
 type Endpoint struct {
-	TenantId string
-	PublicURL string
+	TenantId    string
+	PublicURL   string
 	InternalURL string
-	Region string
-	VersionId string
+	Region      string
+	VersionId   string
 	VersionInfo string
 	VersionList string
 }
@@ -45,8 +45,8 @@
 			return ces, err
 		}
 		ces[i] = CatalogEntry{
-			Name: d["name"].(string),
-			Type: d["type"].(string),
+			Name:      d["name"].(string),
+			Type:      d["type"].(string),
 			Endpoints: eps,
 		}
 	}
diff --git a/openstack/identity/service_catalog_test.go b/openstack/identity/service_catalog_test.go
index 4411b9f..82e4d9a 100644
--- a/openstack/identity/service_catalog_test.go
+++ b/openstack/identity/service_catalog_test.go
@@ -1,8 +1,8 @@
 package identity
 
 import (
-	"testing"
 	"encoding/json"
+	"testing"
 )
 
 func TestServiceCatalog(t *testing.T) {
@@ -88,4 +88,4 @@
 		return true
 	}
 	return false
-}
\ No newline at end of file
+}
diff --git a/rackspace/monitoring/common.go b/rackspace/monitoring/common.go
new file mode 100644
index 0000000..d68a349
--- /dev/null
+++ b/rackspace/monitoring/common.go
@@ -0,0 +1,11 @@
+package monitoring
+
+import (
+	"github.com/rackspace/gophercloud/openstack/identity"
+)
+
+type Options struct {
+	Endpoint       string
+	AuthOptions    identity.AuthOptions
+	Authentication identity.AuthResults
+}
diff --git a/rackspace/monitoring/notificationPlans/requests.go b/rackspace/monitoring/notificationPlans/requests.go
new file mode 100644
index 0000000..b77cefd
--- /dev/null
+++ b/rackspace/monitoring/notificationPlans/requests.go
@@ -0,0 +1,32 @@
+package notificationPlans
+
+import (
+	"fmt"
+	"github.com/rackspace/gophercloud/rackspace/monitoring"
+	"github.com/racker/perigee"
+)
+
+var ErrNotImplemented = fmt.Errorf("notificationPlans feature not yet implemented")
+
+type Client struct {
+	options monitoring.Options
+}
+
+type DeleteResults map[string]interface{}
+
+func NewClient(mo monitoring.Options) *Client {
+	return &Client{
+		options: mo,
+	}
+}
+
+func (c *Client) Delete(id string) (DeleteResults, error) {
+	var dr DeleteResults
+
+	url := fmt.Sprintf("%s/notification_plans/%s", c.options.Endpoint, id)
+	err := perigee.Delete(url, perigee.Options{
+		Results: &dr,
+		OkCodes: []int{204},
+	})
+	return dr, err
+}