code: private boolean setValue(String propertyName, String value, boolean sync) throws NullPointerException
      {
          gatekeeper.signIn();
          try
          {
              ChangeStack<String> stack = properties.get(propertyName);
              if (stack == null)
              {
                  ChangeStack<String> newStack = new ChangeStack<String>(value,
                                                                         sync);
                  stack = properties.putIfAbsent(propertyName, newStack);
                  if (stack == null)
                  {
                      return true;
                  }
              }
  
              return sync ? stack.sync(value) : stack.push(value);
          }
          finally
          {
              gatekeeper.signOut();
          }
      }
docs: Push or sync the given value to the appropriate stack. This method will
  create a new stack if this property has never had a value before.
  
  @param propertyName
  the property whose value will be set
  @param value
  the value to set
  @param sync
  a flag to determine whether the value is
  {@link ChangeStack#sync(Object) synced} or simply
  {@link ChangeStack#push(Object) pushed}
  @return <code>true</code> if the value of the given property changed as a
  result of this call; <code>false</code> otherwise
  @throws NullPointerException
  if the given value is <code>null</code>