diff --git content.crud.test content.crud.test
index 48b5427..d66d035 100644
--- content.crud.test
+++ content.crud.test
@@ -1234,3 +1234,176 @@ class ContentOptionWidgetTest extends ContentCrudTestCase {
 
 }
 
+class ContentMultigroupTest extends ContentCrudTestCase {
+  function getInfo() {
+    return array(
+      'name' => t('Multigroup'),
+      'description' => t('Tests fields in a multigroup. <strong>Requires <a href="@schema_link">Schema module</a>.</strong>', array('@schema_link' => 'http://www.drupal.org/project/schema')),
+      'group' => t('CCK'),
+    );
+  }
+
+  function setUp() {
+    parent::setUp('fieldgroup', 'content_multigroup');
+    $this->loginWithPermissions();
+    $this->acquireContentTypes(3);
+    $this->acquireNodes();
+  }
+  
+  function testAddGroupFieldsUI() {
+    // Add a content type with a random name (to avoid schema module problems).
+    $type = 'simpletest'. mt_rand();
+    $type_name = $this->randomName(10);
+    $edit = array(
+      'type' => $type,
+      'name' => $type_name,
+    );
+    $this->drupalPost('admin/content/types/add', $edit, 'Save content type');
+    $admin_type_url = 'admin/content/node-type/'. $type;
+    
+    // Add a multigroup to the content type.
+    $group_name = strtolower($this->randomName(10));
+    $group_label = $this->randomName(10);
+    $edit = array(
+      '_add_new_group[label]' => $group_label,
+      '_add_new_group[group_name]' => $group_name,
+      '_add_new_group[group_type]' => 'multigroup',
+    );
+    $this->drupalPost($admin_type_url .'/fields', $edit, 'Save');
+    $group_name = 'group_'. $group_name;
+    // Check if multigroup was created.
+    $this->assertRaw($admin_type_url .'/groups/'. $group_name, 'Group created');
+    
+    // Add new field to the group.
+    $field1_label = $this->randomName(10);
+    $field1_name = strtolower($this->randomName(10));
+    $edit = array(
+      '_add_new_field[label]' => $field1_label,
+      '_add_new_field[field_name]' => $field1_name,
+      '_add_new_field[type]' => 'text',
+      '_add_new_field[widget_type]' => 'text_textfield',
+      '_add_new_field[parent]' => $group_name,
+    );
+    $this->drupalPost($admin_type_url .'/fields', $edit, 'Save');
+    $this->assertRaw('These settings apply only to the <em>'. $field1_label .'</em> field', 'Field settings page for new field displayed');
+    // Submit new field settings
+    $edit = array();
+    $this->drupalPost(NULL, $edit, 'Save field settings');
+    $this->assertRaw('Added field <em>'. $field1_label .'</em>.', 'Field settings for new field saved');
+    $field1_name = 'field_'. $field1_name;
+    $field1_type_url = $admin_type_url .'/fields/'. $field1_name;
+    $this->assertRaw($field1_type_url, 'New field displayed in overview');
+    $this->assertRaw($admin_type_url .'/groups/'. $group_name, 'New group displayed in overview');
+    
+    // Add another new field to the group.
+    $field2_label = $this->randomName(10);
+    $field2_name = strtolower($this->randomName(10));
+    $edit = array(
+      '_add_new_field[label]' => $field2_label,
+      '_add_new_field[field_name]' => $field2_name,
+      '_add_new_field[type]' => 'text',
+      '_add_new_field[widget_type]' => 'text_textfield',
+      '_add_new_field[parent]' => $group_name,
+    );
+    $this->drupalPost($admin_type_url .'/fields', $edit, 'Save');
+    $this->assertRaw('These settings apply only to the <em>'. $field2_label .'</em> field', 'Field settings page for second field displayed');
+    // Submit new field settings
+    $edit = array();
+    $this->drupalPost(NULL, $edit, 'Save field settings');
+    $this->assertRaw('Added field <em>'. $field2_label .'</em>.', 'Field settings for second field saved');
+    $field2_name = 'field_'. $field2_name;
+    $field2_type_url = $admin_type_url .'/fields/'. $field2_name;
+    $this->assertRaw($field2_type_url, 'Second field displayed in overview');
+    $this->assertRaw($admin_type_url .'/groups/'. $group_name, 'New group displayed in overview');
+    
+    // Check Parenting
+    $groups = fieldgroup_groups($type, FALSE, TRUE);
+    $this->assertTrue(isset($groups[$group_name]['fields'][$field1_name]), 'First field in correct group');
+    $this->assertFieldByXPath('//select[@id="edit-'. strtr($field1_name, '_', '-') .'-parent"]//option[@selected]', $group_name, 'Parenting for first field correct in overview');
+    $this->assertTrue(isset($groups[$group_name]['fields'][$field2_name]), 'Second field in correct group');
+    $this->assertFieldByXPath('//select[@id="edit-'. strtr($field2_name, '_', '-') .'-parent"]//option[@selected]', $group_name, 'Parenting for second field correct in overview');
+  }
+  
+  function testAddContentUI() {
+    // Add a content type with a random name (to avoid schema module problems).
+    $type = 'simpletest'. mt_rand();
+    $type_name = $this->randomName(10);
+    $edit = array(
+      'type' => $type,
+      'name' => $type_name,
+    );
+    $this->drupalPost('admin/content/types/add', $edit, 'Save content type');
+    $admin_type_url = 'admin/content/node-type/'. $type;
+    
+    // Add a multigroup to the content type.
+    $group_name = strtolower($this->randomName(10));
+    $group_label = $this->randomName(10);
+    $edit = array(
+      '_add_new_group[label]' => $group_label,
+      '_add_new_group[group_name]' => $group_name,
+      '_add_new_group[group_type]' => 'multigroup',
+    );
+    $this->drupalPost($admin_type_url .'/fields', $edit, 'Save');
+    $group_name = 'group_'. $group_name;
+    
+    // Add new field to the group.
+    $field1_label = $this->randomName(10);
+    $field1_name = strtolower($this->randomName(10));
+    $edit = array(
+      '_add_new_field[label]' => $field1_label,
+      '_add_new_field[field_name]' => $field1_name,
+      '_add_new_field[type]' => 'text',
+      '_add_new_field[widget_type]' => 'text_textfield',
+      '_add_new_field[parent]' => $group_name,
+    );
+    $this->drupalPost($admin_type_url .'/fields', $edit, 'Save');
+    // Submit new field settings
+    $edit = array();
+    $this->drupalPost(NULL, $edit, 'Save field settings');
+    $field1_name = 'field_'. $field1_name;
+    
+    // Add another new field to the group.
+    $field2_label = $this->randomName(10);
+    $field2_name = strtolower($this->randomName(10));
+    $edit = array(
+      '_add_new_field[label]' => $field2_label,
+      '_add_new_field[field_name]' => $field2_name,
+      '_add_new_field[type]' => 'text',
+      '_add_new_field[widget_type]' => 'text_textfield',
+      '_add_new_field[parent]' => $group_name,
+    );
+    $this->drupalPost($admin_type_url .'/fields', $edit, 'Save');
+    // Submit new field settings
+    $edit = array();
+    $this->drupalPost(NULL, $edit, 'Save field settings');
+    $field2_name = 'field_'. $field2_name;
+
+    // Check that fields are displayed.
+    $this->drupalGet('node/add/' . $type);
+    $this->assertText($group_label, 'Group label displayed on add form');
+    
+    $value1 = $this->randomName(20);
+    $value2 = $this->randomName(20);
+    $value3 = $this->randomName(20);
+    $value4 = $this->randomName(20);
+    $edit = array();
+    $edit['title'] = $this->randomName(20);
+    $edit['body'] = $this->randomName(20);
+    $edit[$group_name . '[0][' . $field1_name . '][value]'] = $value1;
+    $edit[$group_name . '[0][' . $field2_name . '][value]'] = $value2;
+    
+    $this->drupalPost('node/add/'. $type, $edit, 'Add more values'); // Non-JS method.
+
+    $edit[$group_name . '[1][' . $field1_name . '][value]'] = $value3;
+    $edit[$group_name . '[1][' . $field2_name . '][value]'] = $value4;
+    // Save a node with multiple content in the fields.
+    $this->drupalPost(NULL, $edit, 'Save');
+    $node = node_load(array('title' => $edit['title']));
+    $this->drupalGet('node/'. $node->nid);
+    
+    $this->assertText($value1, 'First value saved and displayed');
+    $this->assertText($value2, 'Second value saved and displayed');
+    $this->assertText($value3, 'Third value saved and displayed');
+    $this->assertText($value4, 'Fourth value saved and displayed');
+  }
+}
