added experimental JSON-based approach