diff --git tests/phpunit/tests/multisite/capabilities.php tests/phpunit/tests/multisite/capabilities.php
new file mode 100644
index 0000000000..08f6c36552
--- /dev/null
+++ tests/phpunit/tests/multisite/capabilities.php
@@ -0,0 +1,71 @@
+<?php
+
+if ( is_multisite() ) :
+
+	/**
+	 * Test get_site() wrapper of WP_Site in multisite.
+	 *
+	 * @group  ms-site
+	 * @group  multisite
+	 * @ticket 39944
+	 */
+	class Tests_Multisite_Capabilties extends WP_UnitTestCase {
+
+		public function test_capabilities_after_site_option_change() {
+			global $wp_roles, $wpdb;
+
+			// Set user option
+			update_site_option( 'add_new_users', true );
+
+			// Create a blog
+			$blog1_id = self::factory()->blog->create();
+
+			// Change network caps option
+			update_site_option( 'add_new_users', false );
+
+			$blog2_id = self::factory()->blog->create();
+
+			$admin_user = self::factory()->user->create( array(
+				'user_login' => 'testadmin',
+				'role'       => 'administrator',
+			) );
+
+			add_user_to_blog( $blog1_id, $admin_user, 'administrator' );
+			add_user_to_blog( $blog2_id, $admin_user, 'administrator' );
+
+			// Perform actions as admin
+			wp_set_current_user( $admin_user );
+
+			// Get roles & caps for blog1
+			update_site_option( 'add_new_users', true );
+			switch_to_blog( $blog1_id );
+			$blog1_roles = $wp_roles->roles;
+			$db1_roles   = get_option( $wpdb->get_blog_prefix() . 'user_roles' );
+
+			$this->assertTrue( current_user_can( 'list_users' ), 'Current user should be able to list users' );
+
+			restore_current_blog();
+
+			// Get roles & caps for blog2
+			update_site_option( 'add_new_users', false );
+			switch_to_blog( $blog2_id );
+			$blog2_roles = $wp_roles->roles;
+			$db2_roles   = get_option( $wpdb->get_blog_prefix() . 'user_roles' );
+
+			$this->assertFalse( current_user_can( 'list_users' ), 'Current user should not be able to list users' );
+
+			restore_current_blog();
+
+			foreach ( $blog1_roles as $key => $role ) {
+				$this->assertNotEquals( $db1_roles[ $key ]['capabilities'], $db2_roles[ $key ]['capabilities'], "Stored capabilities for {$role['name']} on Blog 1 match those on Blog 2" );
+				$this->assertEquals( $role['capabilities'], $blog2_roles[ $key ]['capabilities'], "Generated capabilities for {$role['name']} on Blog 1 do not match those on Blog 2" );
+			}
+
+			// Clean up
+			wpmu_delete_blog( $blog1_id, true );
+			wpmu_delete_blog( $blog2_id, true );
+		}
+
+	}
+
+endif;
