basic functionality compleated