basic implementation
some dependencies