supports private states for each element