implement working prototype; add specs