diff --git src/bp-groups/bp-groups-classes.php src/bp-groups/bp-groups-classes.php
index 7121ea4..e53f30c 100644
--- src/bp-groups/bp-groups-classes.php
+++ src/bp-groups/bp-groups-classes.php
@@ -765,7 +765,7 @@ class BP_Groups_Group {
 			$sql[] = "ORDER BY {$orderby} {$order}";
 		}
 
-		if ( ! empty( $r['per_page'] ) && ! empty( $r['page'] ) ) {
+		if ( ! empty( $r['per_page'] ) && ! empty( $r['page'] ) && $r['per_page'] != -1 ) {
 			$sql['pagination'] = $wpdb->prepare( "LIMIT %d, %d", intval( ( $r['page'] - 1 ) * $r['per_page']), intval( $r['per_page'] ) );
 		}
 
diff --git tests/phpunit/testcases/groups/class-bp-groups-group.php tests/phpunit/testcases/groups/class-bp-groups-group.php
index 3cc7237..b3e5c5f 100644
--- tests/phpunit/testcases/groups/class-bp-groups-group.php
+++ tests/phpunit/testcases/groups/class-bp-groups-group.php
@@ -338,6 +338,110 @@ class BP_Tests_BP_Groups_Group_TestCases extends BP_UnitTestCase {
 		$this->assertEquals( '1', $groups['total'] );
 	}
 
+	/**
+	 * @group get
+	 * @ticket BP5477
+	 */
+	public function test_get_groups_set_perpage_paged() {
+		// Standard
+		$time = time();
+
+		$g1 = $this->factory->group->create( array(
+			'name' => 'A Group',
+			'date_created' => bp_core_current_time(),
+		) );
+		$g2 = $this->factory->group->create( array(
+			'name' => 'D Group',
+			'date_created' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
+		) );
+		$g3 = $this->factory->group->create( array(
+			'name' => 'B Group',
+			'date_created' => gmdate( 'Y-m-d H:i:s', $time - 100000 ),
+		) );
+		$g4 = $this->factory->group->create( array(
+			'name' => 'C Group',
+			'date_created' => gmdate( 'Y-m-d H:i:s', $time - 1000 ),
+		) );
+
+		// If "per_page" and "page" are both set, should result in pagination being applied.
+		$groups = BP_Groups_Group::get( array(
+			'per_page' 	=> 	2,
+			'page'		=>	1
+		) );
+
+		// Should return top 2 groups only
+		$this->assertEquals( '2', count( $groups['groups'] ) );
+	}
+
+	/**
+	 * @group get
+	 * @ticket BP5477
+	 */
+	public function test_get_all_groups_null_page_perpage() {
+		// Standard
+		$time = time();
+
+		$g1 = $this->factory->group->create( array(
+			'name' => 'A Group',
+			'date_created' => bp_core_current_time(),
+		) );
+		$g2 = $this->factory->group->create( array(
+			'name' => 'D Group',
+			'date_created' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
+		) );
+		$g3 = $this->factory->group->create( array(
+			'name' => 'B Group',
+			'date_created' => gmdate( 'Y-m-d H:i:s', $time - 100000 ),
+		) );
+		$g4 = $this->factory->group->create( array(
+			'name' => 'C Group',
+			'date_created' => gmdate( 'Y-m-d H:i:s', $time - 1000 ),
+		) );
+
+		// Passing false to 'per_page' and 'page' should result in pagination not being applied
+		$groups = BP_Groups_Group::get( array(
+			'per_page' 	=> 	false,
+			'page'		=> 	false
+		) );
+
+		// Should return all groups; "paged" group total should be 4
+		$this->assertEquals( '4', count( $groups['groups'] ) );
+	}
+
+	/**
+	 * @group get
+	 * @ticket BP5477
+	 */
+	public function test_get_all_groups_perpage_minus_one() {
+		// Standard
+		$time = time();
+
+		$g1 = $this->factory->group->create( array(
+			'name' => 'A Group',
+			'date_created' => bp_core_current_time(),
+		) );
+		$g2 = $this->factory->group->create( array(
+			'name' => 'D Group',
+			'date_created' => gmdate( 'Y-m-d H:i:s', $time - 100 ),
+		) );
+		$g3 = $this->factory->group->create( array(
+			'name' => 'B Group',
+			'date_created' => gmdate( 'Y-m-d H:i:s', $time - 100000 ),
+		) );
+		$g4 = $this->factory->group->create( array(
+			'name' => 'C Group',
+			'date_created' => gmdate( 'Y-m-d H:i:s', $time - 1000 ),
+		) );
+
+		// Passing 'per_page' => -1 should result in pagination not being applied.
+		$groups = BP_Groups_Group::get( array(
+			'per_page' 	=> 	-1
+		) );
+
+		// Should return all groups; "paged" group total should match 4
+		$this->assertEquals( '4', count( $groups['groups'] ) );
+	}
+
 	/** convert_type_to_order_orderby() **********************************/
 
 	/**
