refactored to not to use topcoat