Index: src/includes/core/actions.php
--- src/includes/core/actions.php
+++ src/includes/core/actions.php
@@ -180,6 +180,9 @@
 add_action( 'bbp_edit_forum_post_extras',        'bbp_save_forum_extras', 2 );
 add_action( 'bbp_forum_attributes_metabox_save', 'bbp_save_forum_extras', 2 );
 
+// Forum visibility save actions
+add_action( 'bbp_register_post_statuses', 'bbp_register_default_forum_visibility_save_actions', 10 );
+
\ No newline at end of file
 // New/Edit Reply
 add_action( 'bbp_new_reply',  'bbp_update_reply', 10, 7 );
 add_action( 'bbp_edit_reply', 'bbp_update_reply', 10, 7 );
Index: src/includes/forums/functions.php
--- src/includes/forums/functions.php
+++ src/includes/forums/functions.php
@@ -651,34 +651,25 @@
 
 	/** Forum Visibility **************************************************/
 
-	if ( !empty( $_POST['bbp_forum_visibility'] ) && in_array( $_POST['bbp_forum_visibility'], array( bbp_get_public_status_id(), bbp_get_private_status_id(), bbp_get_hidden_status_id() ) ) ) {
+	if ( !empty( $_POST['bbp_forum_visibility'] ) && in_array( $_POST['bbp_forum_visibility'], array_keys( bbp_get_forum_visibilities() ) ) ) {
 
-		// Get forums current visibility
-		$visibility = bbp_get_forum_visibility( $forum_id );
+		// Sanitize new visibility
+		$new_visibility = sanitize_key( $_POST['bbp_forum_visibility'] );
 
-		// What is the new forum visibility setting?
-		switch ( $_POST['bbp_forum_visibility'] ) {
-
-			// Hidden
-			case bbp_get_hidden_status_id()  :
-				bbp_hide_forum( $forum_id, $visibility );
-				break;
-
-			// Private
-			case bbp_get_private_status_id() :
-				bbp_privatize_forum( $forum_id, $visibility );
-				break;
-
-			// Publish (default)
-			case bbp_get_public_status_id()  :
-			default        :
-				bbp_publicize_forum( $forum_id, $visibility );
-				break;
-		}
+		/**
+		 * Handles forum visibility changes.
+		 *
+		 * Hook in here if you have a custom visibility.
+		 *
+		 * @since bbPress (r5586)
+		 * @see bbp_get_forum_visibilities()
+		 * @see bbp_register_default_forum_visibility_save_actions()
+		 */
+		do_action( "bbp_save_forum_visibility_{$new_visibility}", $forum_id, bbp_get_forum_visibility( $forum_id ) );
 	}
 }
 
-/** Forum Actions *************************************************************/
+/** Forum Open/Close **********************************************************/
 
 /**
  * Closes a forum
@@ -729,6 +720,8 @@
 	return $forum_id;
 }
 
+/** Forum Type ****************************************************************/
+
 /**
  * Make the forum a category
  *
@@ -773,7 +766,29 @@
 	return $forum_id;
 }
 
+/** Forum Visibility **********************************************************/
+
 /**
+ * Register default forum visibility save actions
+ *
+ * This helper function ensures public, private, and hidden forum visibilities
+ * are made available by default.
+ *
+ * @since bbPress (r5586)
+ */
+function bbp_register_default_forum_visibility_save_actions() {
+
+	// Public
+	add_action( 'bbp_save_forum_visibility_' . bbp_get_public_status_id(),  'bbp_publicize_forum', 10, 2 );
+
+	// Private
+	add_action( 'bbp_save_forum_visibility_' . bbp_get_private_status_id(), 'bbp_privatize_forum', 10, 2 );
+
+	// Hidden
+	add_action( 'bbp_save_forum_visibility_' . bbp_get_hidden_status_id(),  'bbp_hide_forum',      10, 2 );
+}
+
+/**
  * Mark the forum as public
  *
  * @since bbPress (r2746)
