public static void requestPlayerTeleportToYou( String player, String target ) {
        final BSPlayer bp = PlayerManager.getPlayer( player );
        final BSPlayer bt = PlayerManager.getSimilarPlayer( target );
        if ( playerHasPendingTeleport( bp ) ) {
            bp.sendMessage( Messages.PLAYER_TELEPORT_PENDING );
            return;
        }
        if ( bt == null ) {
            bp.sendMessage( Messages.PLAYER_NOT_ONLINE );
            return;
        }
        if ( !playerIsAcceptingTeleports( bt ) ) {
            bp.sendMessage( Messages.TELEPORT_UNABLE );
            return;
        }
        if ( playerHasPendingTeleport( bt ) ) {
            bp.sendMessage( Messages.PLAYER_TELEPORT_PENDING_OTHER );
            return;
        }
        pendingTeleportsTPAHere.put( bt, bp );
        bp.sendMessage( Messages.TELEPORT_REQUEST_SENT );
        bt.sendMessage( Messages.PLAYER_REQUESTS_YOU_TELEPORT_TO_THEM.replace( "{player}", bp.getDisplayingName() ) );
        ProxyServer.getInstance().getScheduler().schedule( BungeeSuite.instance, new Runnable() {
            @Override
            public void run() {
                if ( pendingTeleportsTPAHere.containsKey( bt ) ) {
                    if ( !pendingTeleportsTPAHere.get( bt ).equals( bp ) ) {
                        return;
                    }
                    if ( bp != null ) {
                        bp.sendMessage( Messages.TPAHERE_REQUEST_TIMED_OUT.replace( "{player}", bt.getDisplayingName() ) );
                    }
                    pendingTeleportsTPAHere.remove( bt );
                    if ( bt != null ) {
                        bt.sendMessage( Messages.TP_REQUEST_OTHER_TIMED_OUT.replace( "{player}", bp.getDisplayingName() ) );
                    }
                }
            }
        }, expireTime, TimeUnit.SECONDS );
    }