@SuppressWarnings("unchecked")
    public final <ValueT> ValueT valueFor(Class<? extends Property<ValueT>> propertyT)
    {
        Property property = this.properties.get(propertyT);
        return property == null ? null : (ValueT)property.value();
    }