diff --git a/cmd/releasebot/github.go b/cmd/releasebot/github.go
index 2d53949..50a3ccf 100644
--- a/cmd/releasebot/github.go
+++ b/cmd/releasebot/github.go
@@ -158,11 +158,12 @@
 		// Nothing to do.
 		return
 	}
+
 	if err := goRepo.ForeachIssue(func(gi *maintner.GitHubIssue) error {
-		if gi.Milestone == nil || gi.Milestone.Title != w.Milestone.Title {
+		if gi.Milestone == nil || gi.Milestone.ID != w.Milestone.ID {
 			return nil
 		}
-		if gi.Title == w.releaseStatusTitle() {
+		if gi.Number == int32(w.ReleaseIssue) {
 			return nil
 		}
 		// All issues are unrelated if this is a security release.
@@ -202,6 +203,38 @@
 
 }
 
+func (w *Work) removeOkayAfterBeta1() {
+	if !w.BetaRelease || !strings.HasSuffix(w.Version, "beta1") {
+		// Nothing to do.
+		return
+	}
+
+	if err := goRepo.ForeachIssue(func(gi *maintner.GitHubIssue) error {
+		if gi.Milestone == nil || gi.Milestone.ID != w.Milestone.ID {
+			return nil
+		}
+		if gi.Number == int32(w.ReleaseIssue) {
+			return nil
+		}
+		if gi.Closed || !gi.HasLabel("release-blocker") || !gi.HasLabel("okay-after-beta1") {
+			return nil
+		}
+		w.log.Printf("removing okay-after-beta1 label in issue %d", gi.Number)
+		if dryRun {
+			return nil
+		}
+		_, err := githubClient.Issues.RemoveLabelForIssue(context.Background(),
+			projectOwner, projectRepo, int(gi.Number), "okay-after-beta1")
+		if err != nil {
+			return fmt.Errorf("#%d: %s", gi.Number, err)
+		}
+		return nil
+	}); err != nil {
+		w.logError("error removing okay-after-beta1 label from issues in current milestone: %v", err)
+		return
+	}
+}
+
 func postGithubComment(number int, body string) error {
 	if dryRun {
 		return errors.New("attemted write operation in dry-run mode")
diff --git a/cmd/releasebot/main.go b/cmd/releasebot/main.go
index f9614e1..be6db5f 100644
--- a/cmd/releasebot/main.go
+++ b/cmd/releasebot/main.go
@@ -426,9 +426,12 @@
 			return
 		}
 
-		if !w.BetaRelease && !w.RCRelease {
+		switch {
+		case !w.BetaRelease && !w.RCRelease:
 			w.pushIssues()
 			w.closeMilestone()
+		case w.BetaRelease && strings.HasSuffix(w.Version, "beta1"):
+			w.removeOkayAfterBeta1()
 		}
 		w.nextStepsRelease()
 	}
@@ -448,7 +451,7 @@
 
 func (w *Work) checkReleaseBlockers() {
 	if err := goRepo.ForeachIssue(func(gi *maintner.GitHubIssue) error {
-		if gi.Milestone == nil || gi.Milestone.Title != w.Milestone.Title {
+		if gi.Milestone == nil || gi.Milestone.ID != w.Milestone.ID {
 			return nil
 		}
 		if !gi.Closed && gi.HasLabel("release-blocker") {
@@ -463,7 +466,7 @@
 
 func (w *Work) checkBeta1ReleaseBlockers() {
 	if err := goRepo.ForeachIssue(func(gi *maintner.GitHubIssue) error {
-		if gi.Milestone == nil || gi.Milestone.Title != w.Milestone.Title {
+		if gi.Milestone == nil || gi.Milestone.ID != w.Milestone.ID {
 			return nil
 		}
 		if !gi.Closed && gi.HasLabel("release-blocker") && !gi.HasLabel("okay-after-beta1") {
