first really working version. basic functionality