yet another approach for better flexibility