refactored withdraw interface