diff --git a/acceptance/rackspace/lb/v1/acl_test.go b/acceptance/rackspace/lb/v1/acl_test.go
index c61f462..7a38027 100644
--- a/acceptance/rackspace/lb/v1/acl_test.go
+++ b/acceptance/rackspace/lb/v1/acl_test.go
@@ -13,7 +13,6 @@
 )
 
 func TestACL(t *testing.T) {
-	return
 	client := setup(t)
 
 	ids := createLB(t, client, 1)
diff --git a/acceptance/rackspace/lb/v1/lb_test.go b/acceptance/rackspace/lb/v1/lb_test.go
index 8038092..c67ddec 100644
--- a/acceptance/rackspace/lb/v1/lb_test.go
+++ b/acceptance/rackspace/lb/v1/lb_test.go
@@ -171,6 +171,8 @@
 	th.AssertNoErr(t, err)
 	t.Logf("LB %d log enabled? %s", id, strconv.FormatBool(res))
 
+	waitForLB(client, id, lbs.ACTIVE)
+
 	err = lbs.DisableLogging(client, id).ExtractErr()
 	th.AssertNoErr(t, err)
 	t.Logf("Disabled logging for LB %d", id)
@@ -196,3 +198,17 @@
 
 	t.Logf("Stats for LB %d: %#v", id, stats)
 }
+
+func checkCaching(t *testing.T, client *gophercloud.ServiceClient, id int) {
+	err := lbs.EnableCaching(client, id).ExtractErr()
+	th.AssertNoErr(t, err)
+	t.Logf("Enabled caching for LB %d", id)
+
+	res, err := lbs.IsContentCached(client, id)
+	th.AssertNoErr(t, err)
+	t.Logf("Is caching enabled for LB? %s", strconv.FormatBool(res))
+
+	err = lbs.DisableCaching(client, id).ExtractErr()
+	th.AssertNoErr(t, err)
+	t.Logf("Disabled caching for LB %d", id)
+}
diff --git a/acceptance/rackspace/lb/v1/monitor_test.go b/acceptance/rackspace/lb/v1/monitor_test.go
index a198c04..c1a8e24 100644
--- a/acceptance/rackspace/lb/v1/monitor_test.go
+++ b/acceptance/rackspace/lb/v1/monitor_test.go
@@ -12,7 +12,6 @@
 )
 
 func TestMonitors(t *testing.T) {
-	return
 	client := setup(t)
 
 	ids := createLB(t, client, 1)
diff --git a/acceptance/rackspace/lb/v1/node_test.go b/acceptance/rackspace/lb/v1/node_test.go
index 0b9e86f..18b9fe7 100644
--- a/acceptance/rackspace/lb/v1/node_test.go
+++ b/acceptance/rackspace/lb/v1/node_test.go
@@ -17,7 +17,6 @@
 )
 
 func TestNodes(t *testing.T) {
-	return
 	client := setup(t)
 
 	serverIP := findServer(t)
@@ -35,6 +34,9 @@
 	listEvents(t, client, lbID)
 
 	deleteNode(t, client, lbID, nodeID)
+
+	waitForLB(client, lbID, lbs.ACTIVE)
+	deleteLB(t, client, lbID)
 }
 
 func findServer(t *testing.T) string {
diff --git a/acceptance/rackspace/lb/v1/session_test.go b/acceptance/rackspace/lb/v1/session_test.go
index d71514e..8d85655 100644
--- a/acceptance/rackspace/lb/v1/session_test.go
+++ b/acceptance/rackspace/lb/v1/session_test.go
@@ -11,7 +11,6 @@
 )
 
 func TestSession(t *testing.T) {
-	return
 	client := setup(t)
 
 	ids := createLB(t, client, 1)
diff --git a/acceptance/rackspace/lb/v1/throttle_test.go b/acceptance/rackspace/lb/v1/throttle_test.go
index f0a69d5..1cc1235 100644
--- a/acceptance/rackspace/lb/v1/throttle_test.go
+++ b/acceptance/rackspace/lb/v1/throttle_test.go
@@ -11,7 +11,6 @@
 )
 
 func TestThrottle(t *testing.T) {
-	return
 	client := setup(t)
 
 	ids := createLB(t, client, 1)
@@ -35,7 +34,13 @@
 }
 
 func createThrottleConfig(t *testing.T, client *gophercloud.ServiceClient, lbID int) {
-	opts := throttle.CreateOpts{MaxConnections: 200}
+	opts := throttle.CreateOpts{
+		MaxConnections:    200,
+		MaxConnectionRate: 100,
+		MinConnections:    0,
+		RateInterval:      10,
+	}
+
 	err := throttle.Create(client, lbID, opts).ExtractErr()
 	th.AssertNoErr(t, err)
 	t.Logf("Enable throttling for %d", lbID)
diff --git a/acceptance/rackspace/lb/v1/vip_test.go b/acceptance/rackspace/lb/v1/vip_test.go
index e594093..bc0c2a8 100644
--- a/acceptance/rackspace/lb/v1/vip_test.go
+++ b/acceptance/rackspace/lb/v1/vip_test.go
@@ -13,7 +13,6 @@
 )
 
 func TestVIPs(t *testing.T) {
-	return
 	client := setup(t)
 
 	ids := createLB(t, client, 1)
@@ -26,6 +25,9 @@
 	deleteVIP(t, client, lbID, vipIDs[0])
 
 	bulkDeleteVIPs(t, client, lbID, vipIDs[1:])
+
+	waitForLB(client, lbID, lbs.ACTIVE)
+	deleteLB(t, client, lbID)
 }
 
 func listVIPs(t *testing.T, client *gophercloud.ServiceClient, lbID int) {
diff --git a/rackspace/lb/v1/lbs/requests.go b/rackspace/lb/v1/lbs/requests.go
index 2d80062..8e53020 100644
--- a/rackspace/lb/v1/lbs/requests.go
+++ b/rackspace/lb/v1/lbs/requests.go
@@ -433,7 +433,7 @@
 	_, res.Err = perigee.Request("PUT", loggingURL(client, id), perigee.Options{
 		MoreHeaders: client.AuthenticatedHeaders(),
 		ReqBody:     &reqBody,
-		OkCodes:     []int{200},
+		OkCodes:     []int{202},
 	})
 
 	return res
@@ -447,7 +447,7 @@
 	_, res.Err = perigee.Request("PUT", loggingURL(client, id), perigee.Options{
 		MoreHeaders: client.AuthenticatedHeaders(),
 		ReqBody:     &reqBody,
-		OkCodes:     []int{200},
+		OkCodes:     []int{202},
 	})
 
 	return res
@@ -509,6 +509,14 @@
 	return res
 }
 
+// IsContentCached will check to see whether the specified load balancer caches
+// content. When content caching is enabled, recently-accessed files are stored
+// on the load balancer for easy retrieval by web clients. Content caching
+// improves the performance of high traffic web sites by temporarily storing
+// data that was recently accessed. While it's cached, requests for that data
+// are served by the load balancer, which in turn reduces load off the back end
+// nodes. The result is improved response times for those requests and less
+// load on the web server.
 func IsContentCached(client *gophercloud.ServiceClient, id int) (bool, error) {
 	var body interface{}
 
@@ -537,6 +545,7 @@
 	}
 }
 
+// EnableCaching will enable content-caching for the specified load balancer.
 func EnableCaching(client *gophercloud.ServiceClient, id int) gophercloud.ErrResult {
 	reqBody := toCachingMap(true)
 	var res gophercloud.ErrResult
@@ -544,12 +553,13 @@
 	_, res.Err = perigee.Request("PUT", cacheURL(client, id), perigee.Options{
 		MoreHeaders: client.AuthenticatedHeaders(),
 		ReqBody:     &reqBody,
-		OkCodes:     []int{200},
+		OkCodes:     []int{202},
 	})
 
 	return res
 }
 
+// DisableCaching will disable content-caching for the specified load balancer.
 func DisableCaching(client *gophercloud.ServiceClient, id int) gophercloud.ErrResult {
 	reqBody := toCachingMap(false)
 	var res gophercloud.ErrResult
@@ -557,7 +567,7 @@
 	_, res.Err = perigee.Request("PUT", cacheURL(client, id), perigee.Options{
 		MoreHeaders: client.AuthenticatedHeaders(),
 		ReqBody:     &reqBody,
-		OkCodes:     []int{200},
+		OkCodes:     []int{202},
 	})
 
 	return res
diff --git a/rackspace/lb/v1/throttle/requests.go b/rackspace/lb/v1/throttle/requests.go
index 78c878f..8c2e4be 100644
--- a/rackspace/lb/v1/throttle/requests.go
+++ b/rackspace/lb/v1/throttle/requests.go
@@ -19,6 +19,15 @@
 type CreateOpts struct {
 	// Required - the maximum amount of connections per IP address to allow per LB.
 	MaxConnections int
+
+	// Deprecated as of v1.22.
+	MaxConnectionRate int
+
+	// Deprecated as of v1.22.
+	MinConnections int
+
+	// Deprecated as of v1.22.
+	RateInterval int
 }
 
 // ToCTCreateMap casts a CreateOpts struct to a map.
@@ -30,6 +39,10 @@
 	}
 
 	ct["maxConnections"] = opts.MaxConnections
+	ct["maxConnectionRate"] = opts.MaxConnectionRate
+	ct["minConnections"] = opts.MinConnections
+	ct["rateInterval"] = opts.RateInterval
+
 	return map[string]interface{}{"connectionThrottle": ct}, nil
 }
 
@@ -48,7 +61,7 @@
 		MoreHeaders: c.AuthenticatedHeaders(),
 		ReqBody:     &reqBody,
 		Results:     &res.Body,
-		OkCodes:     []int{200},
+		OkCodes:     []int{202},
 	})
 
 	return res
@@ -75,7 +88,7 @@
 
 	_, res.Err = perigee.Request("DELETE", rootURL(c, lbID), perigee.Options{
 		MoreHeaders: c.AuthenticatedHeaders(),
-		OkCodes:     []int{200},
+		OkCodes:     []int{202},
 	})
 
 	return res
