* Added project properties to the JSON output
* Added support for project properties to the Ruby wrapper
* Added support for reading data from a standalone Primavera P6 SQLite database
* Fixed [Issue 267](https://sourceforge.net/p/mpxj/bugs/267): XXE security vulnerability
* Fixed [Issue 266](https://sourceforge.net/p/mpxj/bugs/266): Task Number fields not saved to file if the value would floor to zero
* Fixed [Issue 255](https://sourceforge.net/p/mpxj/bugs/255): Not all project calendars are read in for Project 2013 files (based on a contribution by Colin Rodriguez)
* Renamed TaskContainer class to ChildTaskContainer
* Renamed ProjectHeader class to ProjectProperties
* Introduced ProjectConfig class
* Introduced TaskContainer class
* Introduced ResourceContainer class
* Introduced ResourceAssignmentContainer class
* Introduced ProjectCalendarContainer class
* Renamed ProjectFile.getProjectHeader to getProjectProperties
* Renamed ProjectFile.getCalendar to getDefaultCalendar
* Renamed ProjectFile.setCalendar to setDefaultCalendar
* Renamed MppReader.getReadHeaderOnly to getReadPropertiesOnly
* Renamed MppReader.setReadHeaderOnly to setReadPropertiesOnly
* Renamed ProjectFile.getCalendarUniqueID to ProjectConfig.getNextCalendarUniqueID
* Renamed ProjectFile.getResourceUniqueID to ProjectConfig.getNextResourceUniqueID
* Renamed ProjectFile.getTaskUniqueID to ProjectConfig.getNextTaskUniqueID
* Renamed ProjectFile.getAssignmentUniqueID to ProjectConfig.getNextAssignmentUniqueID
* Renamed ProjectFile.getResourceID to ProjectConfig.getNextResourceID
* Renamed ProjectFile.getTaskID to ProjectConfig.getNextTaskID
* Renamed ProjectHeader.getApplicationName to getShortApplicationName
* Renamed ProjectHeader.setApplicationName to setShortApplicationName
* Renamed ProjectHeader.setCalendarName to setDefaultCalendarName
* Renamed ProjectHeader.getCalendarName to getDefaultCalendarName
* Moved ProjectFile.getProjectFilePath to ProjectHeader.getProjectFilePath
* Moved ProjectFile.setProjectFilePath to ProjectHeader.setProjectFilePath
* Moved ProjectFile.getApplicationName to ProjectHeader.getFullApplicationName
* Moved ProjectFile.setApplicationName to ProjectHeader.setFullApplicationName
* Moved FileCreationRecord.setDelimiter to ProjectHeader.setMpxDelimiter
* Moved FileCreationRecord.getDelimiter to ProjectHeader.getMpxDelimiter
* Moved FileCreationRecord.setProgramName to ProjectHeader.setMpxProgramName
* Moved FileCreationRecord.getProgramName to ProjectHeader.getMpxProgramName
* Moved FileCreationRecord.setFileVersion to ProjectHeader.setMpxFileVersion
* Moved FileCreationRecord.getFileVersion to ProjectHeader.getMpxFileVersion
* Moved FileCreationRecord.setCodePage to ProjectHeader.setMpxCodePage
* Moved FileCreationRecord.getCodePage to ProjectHeader.getMpxCodePage
* Moved ProjectFile.getMppFileType to ProjectHeader.getMppFileType
* Moved ProjectFile.setMppFileType to ProjectHeader.setMppFileType
* Moved ProjectFile.getApplicationVersion to ProjectHeader.getApplicationVersion
* Moved ProjectFile.setApplicationVersion to ProjectHeader.setApplicationVersion
* Moved ProjectFile.setAutoFilter to ProjectHeader.setAutoFilter
* Moved ProjectFile.getAutoFilter to ProjectHeader.getAutoFilter
* Removed ProjectFile.getAliasTaskField, replaced by ProjectFile.getTaskFieldAliases().getField()
* Removed ProjectFile.getAliasResourceField, replaced by ProjectFile.getResourceFieldAliases().getField()
* Removed ProjectFile.getTaskFieldAlias, replaced by ProjectFile.getTaskFieldAliases().getAlias()
* Removed ProjectFile.setTaskFieldAlias, replaced by ProjectFile.getTaskFieldAliases().setAlias()
* Removed ProjectFile.getResourceFieldAlias, replaced by ProjectFile.getResourceFieldAliases().getAlias()
* Removed ProjectFile.setResourceFieldAlias, replaced by ProjectFile.getResourceFieldAliases().setAlias()
* Removed ProjectFile.getTaskFieldAliasMap, replaced by ProjectFile.getTaskFieldAliases
* Removed ProjectFile.getResourceFieldAliasMap, replaced by ProjectFile.getResourceFieldAliases
* Removed ProjectFile.addTable, replaced by ProjectFile.getTables().add()
* Removed ProjectFile.getTaskTableByName, replaced by ProjectFile.getTables().getTaskTableByName()
* Removed ProjectFile.getResourceTableByName, replaced by ProjectFile.getTables().getResourceTableByName()
* Removed ProjectFile.addFilter, replaced by ProjectFile.getFilters().addFilter()
* Removed ProjectFile.removeFilter, replaced by ProjectFile.getFilters().rmoveFilter()
* Removed ProjectFile.getAllResourceFilters, replaced by ProjectFile.getFilters().getResourceFilters()
* Removed ProjectFile.getAllTaskFilters, replaced by ProjectFile.getFilters().getTaskFilters()
* Removed ProjectFile.getFilterByName, replaced by ProjectFile.getFilters().getFilterByName()
* Removed ProjectFile.getFilterByID, replaced by ProjectFile.getFilters().getFilterByID()
* Removed ProjectFile.getAllGroups, replaced by ProjectFile.getGroups()
* Removed ProjectFile.getGroupByName, replaced by ProjectFile.getGroups().getByName()
* Removed ProjectFile.addGroups, replaced by ProjectFile.getGroups().add()
* Removed ProjectFile.addView, replaced by ProjectFile.getViews().add()
* Removed ProjectFile.setViewState, replaced by ProjectFile.getViews().setViewState()
* Removed ProjectFile.getViewState, replaced by ProjectFile.getViews().getViewState()
* Removed ProjectFile.getResourceSubProject, replaced by ProjectFile.getSubProjects().getResourceSubProject()
* Removed ProjectFile.setResourceSubProject, replaced by ProjectFile.getSubProjects().setResourceSubProject()
* Removed ProjectFile.addSubProject, replaced by ProjectFile.getSubProjects().add()
* Removed ProjectFile.getAllSubProjects, replaced by ProjectFile.getSubProjects
* Removed ProjectFile.fireTaskReadEvent, replaced by ProjectFile.getEventManager().fireTaskReadEvent()
* Removed ProjectFile.fireTaskWrittenEvent, replaced by ProjectFile.getEventManager().fireTaskWrittenEvent()
* Removed ProjectFile.fireResourceReadEvent, replaced by ProjectFile.getEventManager().fireResourceReadEvent()
* Removed ProjectFile.fireResourceWrittenEvent, replaced by ProjectFile.getEventManager().fireResourceWrittenEvent()
* Removed ProjectFile.fireCalendarReadEvent, replaced by ProjectFile.getEventManager().fireCalendarReadEvent()
* Removed ProjectFile.fireAssignmentReadEvent, replaced by ProjectFile.getEventManager().fireAssignmentReadEvent()
* Removed ProjectFile.fireAssignmentWrittenEvent, replaced by ProjectFile.getEventManager().fireAssignmentWrittenEvent()
* Removed ProjectFile.fireRelationReadEvent, replaced by ProjectFile.getEventManager().fireRelationReadEvent()
* Removed ProjectFile.fireRelationWrittenEvent, replaced by ProjectFile.getEventManager().fireRelationWrittenEvent()
* Removed ProjectFile.fireCalendarWrittenEvent, replaced by ProjectFile.getEventManager().fireCalendarWrittenEvent()
* Removed ProjectFile.addProjectListener, replaced by ProjectFile.getEventManager().addProjectListener()
* Removed ProjectFile.addProjectListeners, replaced by ProjectFile.getEventManager().addProjectListeners()
* Removed ProjectFile.removeProjectListener, replaced by ProjectFile.getEventManager().removeProjectListener()
* Removed ProjectFile.addGraphicalIndicator
* Removed ProjectFile.getGraphicalIndicator, replaced by ProjectFile.getCustomFields().getCustomField().getGraphicalIndicator()