private boolean readObjectMember()
	throws IOException,
	       JSONSyntaxException {

	if( !this.skipWhitespace() )
	    throwJSONException( "Unexpected token: " + this.describeCurrentToken() + ". Expected object member or end of object '}'." );

	if( this.currentChar == '}' ) {
	    return false;
	}

	this.fireMemberBegin();

	//if( !this.skipWhitespace() )
	//    throwJSONException( "Unexpected token: " + this.describeCurrentToken() + ". Expected object member." );
	
	// Next token must be a quoted string! (RFC 4627 only expects double quoted strings)
	if( this.currentChar != '"' 
	    && this.currentChar != '\'' )
	    throwJSONException( "Unexpected token: " + this.describeCurrentToken() + ". Expected quoted string in object member." );
	StringBuffer nameBuffer = new StringBuffer();
	this.readString( false, nameBuffer );  // read the member's name, fire NO event here
	this.fireMemberNameRead( nameBuffer.toString() );
	
	// Read the name-separator ':'
	this.skipWhitespace();	
	if( this.currentChar != ':' )
	    throwJSONException( "Unexpected token: " + this.describeCurrentToken() + ". Name separator ':' expected." );
	
	// Read the member's value (will fire event)
	nameBuffer.delete( 0, nameBuffer.length()-1 );
	boolean success = this.readJSON(true,false);

	// Now tell observer the member ends here
	this.fireMemberEnd();

	return success;
    }