added support generic type