I do not understand why my values keep getting switched. I think it assigns the value of the first input value box to the first item added and the value fields are not in order of the objects. <apex:outputPanel id="OutputBox"> <apex:inputText value="{!...}" rendered="{!OR(contains(...), contains(...))}"> </apex:inputText> <apex:inputCheckbox value="{!...}" rendered="{!contains(...)}"> </apex:inputCheckbox> <apex:SelectList rendered="{!contains(...)}" size="1" value="{!...}"> <apex:SelectOptions value="{!picklist}" /> </apex:SelectList> </apex:outputPanel> // Sample Output when initially added Name Value Object2 55 // Added Second datatype: String Object1 33 //Added First datatype: String Output after save button is clicked once Object1 33 Object2 55 Output after clicking the save button again, the values will keep switching. Object1 55 Object2 33 // Object are stored in a Map which is changed to a list using map.value() for displaying: The list is of the subclass objects from below. public class AccountDetailInstance { public List<SelectOption> pickList {get; set;} public String textValue {get; set;} } The list is saved into the salesforce object by duplicating the values and the list gets regenerated based off of the salesforce objects that were saved everytime. //This method loads all the instances for a page private void loadInstances() { instancesMap = new Map<Id, sObject>([SELECT Id, Name, Value__c, Type__C, content__c FROM sObject); //debug account ... for (sObject items: instancesMap.values()) { subClassObject subItem = new subClassObject(items.Name); subItem.Id = Item.Id; if (items.Type__c.equals('Picklist') || adi.Type__c.equals('Multipicklist')) { subItem.pickList = createLists(content__c); //generates selection list based on values } if (item.Type__c.equals('String')) { subItem.value = Item.value__c' } } } // This method adds an instance from a selection list which the user chooses in the UI public void addItem() { for (String id : selectedInstances) { //creates new sublcass object and adds it to the instanceMap instanceMap.put(subItem.Name, subItem); } } } public PageReference save() { Account account = (Account) controller.getRecord(); List<sObject> sObjectList = new List<sObject>(); subClass subItem; for (subClass subItem : InstanceMap.Values()) { //Set all the fields for the sObject sObjectList.add(subItem); } upsert detailInstanceList; return ApexPages.currentPage(); }