added object-oriented:D