diff --git a/acceptance/rackspace/lb/v1/lb_test.go b/acceptance/rackspace/lb/v1/lb_test.go
index 05744c2..8038092 100644
--- a/acceptance/rackspace/lb/v1/lb_test.go
+++ b/acceptance/rackspace/lb/v1/lb_test.go
@@ -3,6 +3,7 @@
 package v1
 
 import (
+	"strconv"
 	"testing"
 
 	"github.com/rackspace/gophercloud"
@@ -14,10 +15,10 @@
 )
 
 func TestLBs(t *testing.T) {
-	return
 	client := setup(t)
 
 	ids := createLB(t, client, 3)
+	id := ids[0]
 
 	listLBProtocols(t, client)
 
@@ -25,11 +26,17 @@
 
 	listLBs(t, client)
 
-	getLB(t, client, ids[0])
+	getLB(t, client, id)
 
-	updateLB(t, client, ids[0])
+	checkLBLogging(t, client, id)
 
-	deleteLB(t, client, ids[0])
+	checkErrorPage(t, client, id)
+
+	getStats(t, client, id)
+
+	updateLB(t, client, id)
+
+	deleteLB(t, client, id)
 
 	batchDeleteLBs(t, client, ids[1:])
 }
@@ -146,11 +153,46 @@
 func deleteLB(t *testing.T, client *gophercloud.ServiceClient, id int) {
 	err := lbs.Delete(client, id).ExtractErr()
 	th.AssertNoErr(t, err)
-	t.Logf("Deleted %d", id)
+	t.Logf("Deleted LB %d", id)
 }
 
 func batchDeleteLBs(t *testing.T, client *gophercloud.ServiceClient, ids []int) {
 	err := lbs.BulkDelete(client, ids).ExtractErr()
 	th.AssertNoErr(t, err)
-	t.Logf("Deleted %s", intsToStr(ids))
+	t.Logf("Deleted LB %s", intsToStr(ids))
+}
+
+func checkLBLogging(t *testing.T, client *gophercloud.ServiceClient, id int) {
+	err := lbs.EnableLogging(client, id).ExtractErr()
+	th.AssertNoErr(t, err)
+	t.Logf("Enabled logging for LB %d", id)
+
+	res, err := lbs.IsLoggingEnabled(client, id)
+	th.AssertNoErr(t, err)
+	t.Logf("LB %d log enabled? %s", id, strconv.FormatBool(res))
+
+	err = lbs.DisableLogging(client, id).ExtractErr()
+	th.AssertNoErr(t, err)
+	t.Logf("Disabled logging for LB %d", id)
+}
+
+func checkErrorPage(t *testing.T, client *gophercloud.ServiceClient, id int) {
+	content, err := lbs.SetErrorPage(client, id, "<html>New content!</html>").Extract()
+	t.Logf("Set error page for LB %d", id)
+
+	content, err = lbs.GetErrorPage(client, id).Extract()
+	th.AssertNoErr(t, err)
+	t.Logf("Error page for LB %d: %s", id, content)
+
+	err = lbs.DeleteErrorPage(client, id).ExtractErr()
+	t.Logf("Deleted error page for LB %d", id)
+}
+
+func getStats(t *testing.T, client *gophercloud.ServiceClient, id int) {
+	waitForLB(client, id, lbs.ACTIVE)
+
+	stats, err := lbs.GetStats(client, id).Extract()
+	th.AssertNoErr(t, err)
+
+	t.Logf("Stats for LB %d: %#v", id, stats)
 }
diff --git a/acceptance/rackspace/lb/v1/throttle_test.go b/acceptance/rackspace/lb/v1/throttle_test.go
index a8b66b8..f0a69d5 100644
--- a/acceptance/rackspace/lb/v1/throttle_test.go
+++ b/acceptance/rackspace/lb/v1/throttle_test.go
@@ -11,6 +11,7 @@
 )
 
 func TestThrottle(t *testing.T) {
+	return
 	client := setup(t)
 
 	ids := createLB(t, client, 1)
diff --git a/rackspace/lb/v1/sessions/fixtures.go b/rackspace/lb/v1/sessions/fixtures.go
index ae8feea..9596819 100644
--- a/rackspace/lb/v1/sessions/fixtures.go
+++ b/rackspace/lb/v1/sessions/fixtures.go
@@ -45,7 +45,7 @@
 }
     `)
 
-		w.WriteHeader(http.StatusOK)
+		w.WriteHeader(http.StatusAccepted)
 	})
 }
 
@@ -53,6 +53,6 @@
 	th.Mux.HandleFunc(_rootURL(lbID), func(w http.ResponseWriter, r *http.Request) {
 		th.TestMethod(t, r, "DELETE")
 		th.TestHeader(t, r, "X-Auth-Token", fake.TokenID)
-		w.WriteHeader(http.StatusOK)
+		w.WriteHeader(http.StatusAccepted)
 	})
 }
