def teleport(self, hostname, tcpport, password, max_downtime):
        """Teleport the VM to a different host machine or process.
        
        @todo Explain the details.

        in hostname of type str
            The name or IP of the host to teleport to.

        in tcpport of type int
            The TCP port to connect to (1..65535).

        in password of type str
            The password.

        in max_downtime of type int
            The maximum allowed downtime given as milliseconds. 0 is not a valid
            value. Recommended value: 250 ms.
            
            The higher the value is, the greater the chance for a successful
            teleportation. A small value may easily result in the teleportation
            process taking hours and eventually fail.
            
            
            The current implementation treats this a guideline, not as an
            absolute rule.

        return progress of type :class:`IProgress`
            Progress object to track the operation completion.

        raises :class:`VBoxErrorInvalidVmState`
            Virtual machine not running or paused.
        
        """
        if not isinstance(hostname, basestring):
            raise TypeError("hostname can only be an instance of type basestring")
        if not isinstance(tcpport, baseinteger):
            raise TypeError("tcpport can only be an instance of type baseinteger")
        if not isinstance(password, basestring):
            raise TypeError("password can only be an instance of type basestring")
        if not isinstance(max_downtime, baseinteger):
            raise TypeError("max_downtime can only be an instance of type baseinteger")
        progress = self._call("teleport",
                     in_p=[hostname, tcpport, password, max_downtime])
        progress = IProgress(progress)
        return progress