Visitor pattern and drag and drop functionality added