Implementation without R6