final (?) implementation with working command pattern and draggable caption