majority basic functionality implemented