standard here, the only things to note are that we are adding a has_one relation to the StaffPage page type and that we define $summary_fields and use the function name getCMSFields() ( not getCMSFields_forPopup() ). This is so that when we define our DOM in the next step, we don't need to supply these as arguments as DOM knows to look for these automatically. The StaffPage Page Type Now that we have our DataObject, we need a page that allows us to create them. We will be doing that through the StaffPage which will have a has_many relation to StaffMember . Remember that StaffMember has a has_one relation to StaffPage , Meaning that each StaffMember can only be accociated to a single StaffPage while each StaffPage can have lots of StaffMember s accociated with it. If this is confusing don't worry, you can leave understanding relations to another day :) Again, this stuff is pretty standard. Notice that our DOM definition on line 13-17 has far fewer arguments than many examples you will see. That is because as mentioned we used $summary_fields and getCMSFields() in our StaffMember DataObject so the DOM will pick these up automatically. Here are some pics of what your StaffPage should look like in the CMS: Now that we can create StaffMember objects, lets get a basic template together to display them in a list. You may have noticed something strange here. As we loop through the &lt;% control StaffMembers %&gt; we are using $Link as