Differences

This shows you the differences between the selected revisions of the page.

index 2015-02-13 index 2024-11-21 (current)
Line 1: Line 1:
====== Index ====== ====== Index ======
-  * [[start|Contents]]+  * [[start|Documentation]]
===== About WinSCP ===== ===== About WinSCP =====
Line 21: Line 21:
      * [[Requirements]]       * [[Requirements]]
      * [[Installation]]       * [[Installation]]
 +        * [[ui_installer|WinSCP Installer]]
 +          * [[ui_installer_license|License Agreement]]
 +          * [[ui_installer_setuptype|Setup Type]]
 +          * [[ui_installer_selectdir|Select Destination Location]]
 +          * [[ui_installer_selectcomponents|Select Components]]
 +          * [[ui_installer_selecttasks|Select Additional Tasks]]
 +          * [[ui_installer_interface|Initial User Settings]]
 +          * [[ui_installer_ready|Ready to Install]]
 +          * [[ui_installer_finished|Completing the Wizard]]
 +      * [[microsoft_store]]
      * [[custom_distribution]]       * [[custom_distribution]]
      * [[administration]]       * [[administration]]
Line 38: Line 48:
          * [[ftp_modes]]           * [[ftp_modes]]
        * [[webdav|WebDAV]]         * [[webdav|WebDAV]]
 +        * [[s3]]
        * [[tls]]         * [[tls]]
          * [[tls_ciphersuites]]           * [[tls_ciphersuites]]
        * [[ssh|SSH]]         * [[ssh|SSH]]
          * [[ssh_verifying_the_host_key]]           * [[ssh_verifying_the_host_key]]
 +          * [[ssh_keys]]
          * [[public_key|Using Public Keys for Authentication]]           * [[public_key|Using Public Keys for Authentication]]
            * [[ui_puttygen]]             * [[ui_puttygen]]
            * [[ui_pageant]]             * [[ui_pageant]]
 +          * [[ssh_algorithms]]
      * [[security|Security]]       * [[security|Security]]
        * [[security_credentials]]         * [[security_credentials]]
Line 60: Line 73:
          * [[scriptcommand_chmod]]           * [[scriptcommand_chmod]]
          * [[scriptcommand_close]]           * [[scriptcommand_close]]
 +          * [[scriptcommand_cp]]
          * [[scriptcommand_echo]]           * [[scriptcommand_echo]]
          * [[scriptcommand_exit]]           * [[scriptcommand_exit]]
Line 94: Line 108:
          * [[script_vbnet_robust_example|Running WinSCP from VB.NET]]           * [[script_vbnet_robust_example|Running WinSCP from VB.NET]]
          * [[script_upload_file_list]]           * [[script_upload_file_list]]
 +          * [[script_custom_listing_format_csv|Custom directory listing format (CSV)]]
 +          * [[script_retry]]
 +          * [[script_formatting_timestamp_batch_file|Formatting timestamp in batch file]]
 +          * [[script_downloading_when_done_file_exists]]
 +          * [[script_download_files_to_same_folder]]
 +          * [[script_email]]
        * [[rawsettings|Raw Site Settings]]         * [[rawsettings|Raw Site Settings]]
 +        * [[rawconfig|Raw Configuration]]
 +        * [[rawtransfersettings]]
      * [[interfaces|User Interfaces]]       * [[interfaces|User Interfaces]]
      * [[config|Configuration Storage]]       * [[config|Configuration Storage]]
Line 107: Line 129:
      * [[remote_command|Remote Commands]]       * [[remote_command|Remote Commands]]
      * [[custom_command|Custom Commands]]       * [[custom_command|Custom Commands]]
 +        * [[extension|Extensions]]
 +          * [[extension_generate_http_url]]
 +          * [[extension_compare_files]]
 +          * [[extension_archive_and_download]]
 +          * [[extension_synchronize_another_server]]
        * [[custom_commands|Useful Custom Commands]]         * [[custom_commands|Useful Custom Commands]]
      * [[transfer_queue]]       * [[transfer_queue]]
Line 132: Line 159:
      * [[session_configuration]]       * [[session_configuration]]
      * [[workspace]]       * [[workspace]]
 +      * [[file_encryption|File Encryption]]
 +        * [[file_encryption_decrypt_script]]
 +      * [[clipboard]]
===== Using WinSCP ===== ===== Using WinSCP =====
Line 146: Line 176:
      * [[ui_context_menu]]       * [[ui_context_menu]]
      * [[ui_toolbars]]       * [[ui_toolbars]]
-      * [[ui_sessiontabs]]+      * [[ui_tabs]]
      * [[ui_permissions|Permissions]]       * [[ui_permissions|Permissions]]
      * [[ui_copy]]       * [[ui_copy]]
 +      * [[ui_copy_local]]
      * [[ui_console]]       * [[ui_console]]
      * [[ui_fsinfo]]       * [[ui_fsinfo]]
      * [[ui_select]]       * [[ui_select]]
      * [[ui_progress]]       * [[ui_progress]]
-      * [[ui_log]] 
      * [[ui_about]]       * [[ui_about]]
      * [[ui_transfer_custom]]       * [[ui_transfer_custom]]
Line 166: Line 196:
      * [[ui_save_workspace]]       * [[ui_save_workspace]]
      * [[ui_generateurl]]       * [[ui_generateurl]]
 +      * [[ui_tips]]
==== Basic Tasks  ==== ==== Basic Tasks  ====
Line 200: Line 231:
        * [[task_find|Finding files]]         * [[task_find|Finding files]]
          * [[ui_find]]           * [[ui_find]]
 +        * [[task_lock]]
 +        * [[task_change_password]]
 +        * [[task_file_management]]
==== Guides ==== ==== Guides ====
Line 224: Line 258:
          * [[guide_interpreting_xml_log]]           * [[guide_interpreting_xml_log]]
          * [[guide_ftp_script_to_sftp|Converting Windows FTP script to WinSCP SFTP script]]           * [[guide_ftp_script_to_sftp|Converting Windows FTP script to WinSCP SFTP script]]
 +          * [[guide_psftp_script_to_winscp|Converting PuTTY PSFTP script to WinSCP script]]
          * [[guide_protecting_credentials_for_automation|Protecting credentials used for automation]]           * [[guide_protecting_credentials_for_automation|Protecting credentials used for automation]]
          * [[guide_debugging_scheduler]]           * [[guide_debugging_scheduler]]
          * [[guide_custom_commands_automation]]           * [[guide_custom_commands_automation]]
 +          * [[guide_filezilla_automation]]
        * [[guides#cloud|Cloud Computing]]         * [[guides#cloud|Cloud Computing]]
-          * [[guide_amazon_ec2]] +          * [[guides#amazon|Amazon AWS]] 
-          * [[guide_google_compute_engine]] +············* [[guide_amazon_ec2]] 
-          * [[guide_microsoft_azure|Azure]]+            * [[guide_amazon_s3_sftp|Setting up an SFTP Access to Amazon S3]] 
 +            * [[guide_amazon_s3]] 
 +          * [[guides#google|Google Cloud Platform]] 
 +············* [[guide_google_compute_engine]] 
 +            * [[guide_google_bucket]] 
 +          * [[guides#azure|Microsoft Azure]] 
 +············* [[guide_microsoft_azure|Azure]]
            * [[guide_azure_ftps_server]]             * [[guide_azure_ftps_server]]
-··········* [[guide_microsoft_azure_webjob_sftp]]+············* [[guide_microsoft_azure_webjob_sftp]] 
 +            * [[guide_microsoft_azure_function_sftp]] 
 +          * [[guide_digitalocean]] 
 +          * [[guide_injecting_sftp_ftp_url_to_page]] 
 +          * [[guide_microsoft_onedrive]] 
 +          * [[guide_backblaze]] 
 +          * [[guide_cloudflare]] 
 +          * [[guide_oracle]]
        * Other         * Other
          * [[guide_winscp_as_putty_session_manager]]           * [[guide_winscp_as_putty_session_manager]]
          * [[guide_windows_ftps_server]]           * [[guide_windows_ftps_server]]
 +          * [[guide_windows_openssh_server]]
 +          * [[guide_config_cloud]]
      * [[howtos|How To]]       * [[howtos|How To]]
        * [[howto]]         * [[howto]]
Line 243: Line 294:
    * Configuration     * Configuration
      * [[ui_login|Login Dialog]]       * [[ui_login|Login Dialog]]
 +        * [[ui_login_raw]]
        * [[ui_login_advanced|Advanced]]         * [[ui_login_advanced|Advanced]]
          * [[ui_login_environment|Environment]]           * [[ui_login_environment|Environment]]
            * [[ui_login_directories|Directories]]             * [[ui_login_directories|Directories]]
            * [[ui_login_recycle_bin|Recycle Bin]]             * [[ui_login_recycle_bin|Recycle Bin]]
 +            * [[ui_login_encryption|Recycle Bin]]
            * [[ui_login_sftp|SFTP]]             * [[ui_login_sftp|SFTP]]
            * [[ui_login_scp|SCP/Shell]]             * [[ui_login_scp|SCP/Shell]]
            * [[ui_login_ftp|FTP]]             * [[ui_login_ftp|FTP]]
 +            * [[ui_login_s3|S3]]
 +            * [[ui_login_webdav|WebDAV]]
          * [[ui_login_connection|Connection]]           * [[ui_login_connection|Connection]]
            * [[ui_login_proxy|Proxy]]             * [[ui_login_proxy|Proxy]]
Line 267: Line 322:
          * [[ui_pref_languages]]           * [[ui_pref_languages]]
        * [[ui_pref_panels|Panels]]         * [[ui_pref_panels|Panels]]
 +          * [[ui_pref_file_colors|File Colors]]
 +            * [[ui_file_color]]
          * [[ui_pref_panels_remote|Remote]]           * [[ui_pref_panels_remote|Remote]]
          * [[ui_pref_panels_local|Local]]           * [[ui_pref_panels_local|Local]]
        * [[ui_pref_editor|Editors]]         * [[ui_pref_editor|Editors]]
 +          * [[ui_pref_editor_internal|Internal Editor]]
          * [[ui_editor_preferences]]           * [[ui_editor_preferences]]
        * [[ui_pref_transfer|Transfer]]         * [[ui_pref_transfer|Transfer]]
          * [[ui_transfer_preset]]           * [[ui_transfer_preset]]
-          * [[ui_pref_dragdrop|Drag·&·Drop]]+          * [[ui_pref_dragdrop|Drag&Drop]]
          * [[ui_pref_background|Background]]           * [[ui_pref_background|Background]]
          * [[ui_pref_resume|Endurance]]           * [[ui_pref_resume|Endurance]]
Line 279: Line 337:
        * [[ui_pref_security|Security]]         * [[ui_pref_security|Security]]
          * [[ui_master_password_change]]           * [[ui_master_password_change]]
 +          * [[ui_ssh_host_ca]]
        * [[ui_pref_logging|Logging]]         * [[ui_pref_logging|Logging]]
        * [[ui_pref_integration|Integration]]         * [[ui_pref_integration|Integration]]
Line 286: Line 345:
        * [[ui_pref_storage|Storage]]         * [[ui_pref_storage|Storage]]
        * [[ui_pref_updates|Updates]]         * [[ui_pref_updates|Updates]]
 +        * [[ui_pref_search]]
===== Library ===== ===== Library =====
Line 300: Line 360:
        * [[library_example_recursive_search_text]]         * [[library_example_recursive_search_text]]
        * [[library_example_verify_file_checksum]]         * [[library_example_verify_file_checksum]]
 +        * [[library_example_recursive_download_custom_error_handling]]
 +        * [[library_example_find_duplicate_files]]
 +        * [[library_example_parallel_transfers]]
 +        * [[library_example_check_existence_timestamp]]
 +        * [[library_example_zip_and_upload]]
 +        * [[library_example_known_hosts]]
 +        * [[library_example_moves_files_keeping_directory_structure]]
 +        * [[library_example_download_clipboard]]
 +        * [[library_example_watch_for_changes]]
 +        * [[library_example_advanced_rename]]
 +        * [[library_example_keep_local_directory_up_to_date]]
 +        * [[library_example_remember_downloaded_files]]
 +        * [[library_example_winforms_progressbar]]
 +        * [[library_example_two_way_synchronize_delete]]
      * [[library_from_script|Converting Script to Code Based on .NET Assembly]]       * [[library_from_script|Converting Script to Code Based on .NET Assembly]]
        * [[library_from_script_transfer_settings]]         * [[library_from_script_transfer_settings]]
      * [[library_session|Session Class]]       * [[library_session|Session Class]]
-        * [[library_session_getfiles]] 
        * [[library_session_listdirectory]]         * [[library_session_listdirectory]]
        * [[library_session_open]]         * [[library_session_open]]
 +        * [[library_session_putfile]]
        * [[library_session_putfiles]]         * [[library_session_putfiles]]
 +        * [[library_session_putfilestodirectory]]
 +        * [[library_session_putfiletodirectory]]
        * [[library_session_close]]         * [[library_session_close]]
        * [[library_session_dispose]]         * [[library_session_dispose]]
Line 312: Line 388:
        * [[library_session_fileexists]]         * [[library_session_fileexists]]
        * [[library_session_getfileinfo]]         * [[library_session_getfileinfo]]
 +        * [[library_session_trygetfileinfo]]
 +        * [[library_session_getfile]]
        * [[library_session_getfiles]]         * [[library_session_getfiles]]
 +        * [[library_session_getfilestodirectory]]
 +        * [[library_session_getfiletodirectory]]
 +        * [[library_session_removefile]]
        * [[library_session_removefiles]]         * [[library_session_removefiles]]
        * [[library_session_synchronizedirectories]]         * [[library_session_synchronizedirectories]]
Line 325: Line 406:
        * [[library_session_addrawconfiguration]]         * [[library_session_addrawconfiguration]]
        * [[library_session_calculatefilechecksum]]         * [[library_session_calculatefilechecksum]]
 +        * [[library_session_translateremotepathtolocal]]
 +        * [[library_session_combinepaths|CombinePaths]]
 +        * [[library_session_enumerateremotefiles]]
 +        * [[library_session_scanfingerprint]]
 +        * [[library_session_translatelocalpathtoremote]]
 +        * [[library_session_duplicatefile]]
 +        * [[library_session_queryreceived]]
 +        * [[library_session_comparedirectories]]
      * [[library_remotefileinfo|RemoteFileInfo Class]]       * [[library_remotefileinfo|RemoteFileInfo Class]]
      * [[library_sessionoptions|SessionOptions Class]]       * [[library_sessionoptions|SessionOptions Class]]
Line 330: Line 419:
        * [[library_sessionoptions_parseurl]]         * [[library_sessionoptions_parseurl]]
      * [[library_transferoptions|TransferOptions Class]]       * [[library_transferoptions|TransferOptions Class]]
 +        * [[library_transferoptions_addrawsettings]]
      * [[library_chmodeventargs|ChmodEventArgs Class]]       * [[library_chmodeventargs|ChmodEventArgs Class]]
      * [[library_failedeventargs|FailedEventArgs Class]]       * [[library_failedeventargs|FailedEventArgs Class]]
Line 351: Line 441:
      * [[library_doc_collections]]       * [[library_doc_collections]]
      * [[library_wildcard]]       * [[library_wildcard]]
 +      * [[library_queryreceivedeventargs]]
 +      * [[library_remotepath|RemotePath Class]]
 +        * [[library_remotepath_adddirectoryseparator]]
 +        * [[library_remotepath_getdirectoryname]]
 +        * [[library_remotepath_getfilename]]
 +        * [[library_remotepath_escapefilemask]]
 +        * [[library_remotepath_escapeoperationmask]]
 +        * [[library_remotepath_combinepaths]]
 +        * [[library_remotepath_combine]]
 +        * [[library_remotepath_translateremotepathtolocal]]
 +        * [[library_remotepath_translatelocalpathtoremote]]
 +      * [[library_comparisonfileinfo]]
 +      * [[library_comparisondifference|ComparisonDifference]]
 +        * [[library_comparisondifference_resolve]]
 +        * [[library_comparisondifference_reverse]]
===== Misc ===== ===== Misc =====
Line 356: Line 461:
    * [[Screenshots]]     * [[Screenshots]]
    * [[History]]     * [[History]]
 +      * [[incompatible_changes]]
      * [[history_old]]       * [[history_old]]
    * [[languages]]     * [[languages]]
Line 376: Line 482:
          * [[faq_remote_drive|How do I change drive on the remote panel?]]           * [[faq_remote_drive|How do I change drive on the remote panel?]]
          * [[faq_owner|Why can't I change the owner and the group of a file?]]           * [[faq_owner|Why can't I change the owner and the group of a file?]]
-          * [[faq_selection|Why does selecting a file in WinSCP not work as I expect (that is, in the normal MS Windows way)?]] 
          * [[faq_environment|Why does WinSCP not work in a new environment (operating system, machine, user account, network), when it works for me in a different environment already?]]           * [[faq_environment|Why does WinSCP not work in a new environment (operating system, machine, user account, network), when it works for me in a different environment already?]]
        * [[faq#connecting|Connecting to the Server]]         * [[faq#connecting|Connecting to the Server]]
          * [[faq_username|Where do I get a username and password?]]           * [[faq_username|Where do I get a username and password?]]
 +          * [[faq_login]]
          * [[faq_connection_refused|Why is WinSCP not able to connect to a server, when other clients are?]]           * [[faq_connection_refused|Why is WinSCP not able to connect to a server, when other clients are?]]
 +          * [[faq_new_session]]
          * [[faq_ftp|Can I connect to an FTP server?]]           * [[faq_ftp|Can I connect to an FTP server?]]
          * [[faq_security|How do I know if the connection is secure?]]           * [[faq_security|How do I know if the connection is secure?]]
          * [[faq_sftp_large_packet|I get the message "Received too large (??? B) SFTP packet" when I login. What is the problem?]]           * [[faq_sftp_large_packet|I get the message "Received too large (??? B) SFTP packet" when I login. What is the problem?]]
          * [[faq_ip|Where should I type the IP address of my remote host?]]           * [[faq_ip|Where should I type the IP address of my remote host?]]
-          * [[faq_openssh_win|How can I use WinSCP with OpenSSH for Windows?]] 
          * [[faq_passphrase|How can I connect without entering private key passphrase each time?]]           * [[faq_passphrase|How can I connect without entering private key passphrase each time?]]
          * [[faq_password_prompt|Why does WinSCP keep on asking me for a session password?]]           * [[faq_password_prompt|Why does WinSCP keep on asking me for a session password?]]
          * [[faq_password_reject|Why is WinSCP rejecting my session password?]]           * [[faq_password_reject|Why is WinSCP rejecting my session password?]]
          * [[faq_password_reset|Can you reset my password?]]           * [[faq_password_reset|Can you reset my password?]]
 +          * [[faq_hostkey]]
 +          * [[faq_mainframe]]
 +          * [[faq_root_path]]
        * [[faq#transferring|Transferring Files]]         * [[faq#transferring|Transferring Files]]
          * [[faq_fxp|Can I transfer files between two remote servers with WinSCP (FXP)?]]           * [[faq_fxp|Can I transfer files between two remote servers with WinSCP (FXP)?]]
-          * [[faq_drag_move|When I drop files outside of WinSCP, they are moved to the drop target. I want to copy them. How do I do that?]] 
          * [[faq_slow|File transfer speed is very low. WinSCP does not utilize all available bandwidth. How do I improve the transfer speed?]]           * [[faq_slow|File transfer speed is very low. WinSCP does not utilize all available bandwidth. How do I improve the transfer speed?]]
-          * [[faq_download_temp|Downloaded files are stored first to a temporary directory and only after that, they are moved to the destination directory. How do I prevent storing files to a temporary directory?]] 
          * [[faq_not_owner|I need to overwrite a remote file that isn't owned by me, but I'm member of its group. The file has write permission for group. After transfer I get a message like "Upload of file <filename> was successful, but error occurred while setting the permissions and/or timestamp"]]           * [[faq_not_owner|I need to overwrite a remote file that isn't owned by me, but I'm member of its group. The file has write permission for group. After transfer I get a message like "Upload of file <filename> was successful, but error occurred while setting the permissions and/or timestamp"]]
          * [[faq_transfer_mode|Where can I change the file transfer mode (binary, ascii) or enable the auto-select transfer mode option?]]           * [[faq_transfer_mode|Where can I change the file transfer mode (binary, ascii) or enable the auto-select transfer mode option?]]
Line 402: Line 509:
          * [[faq_transfer_size_change|Why does file size and/or content change during transfer?]]           * [[faq_transfer_size_change|Why does file size and/or content change during transfer?]]
          * [[faq_line_breaks]]           * [[faq_line_breaks]]
 +          * [[faq_uploaded_file_missing]]
 +          * [[faq_upload_empty]]
        * [[faq#configuring_session|Configuring the Session]]         * [[faq#configuring_session|Configuring the Session]]
          * [[faq_dir_default|How can I configure the default local or remote directory for the session?]]           * [[faq_dir_default|How can I configure the default local or remote directory for the session?]]
Line 415: Line 524:
          * [[faq_delete_synchronized_files|How do I create script that synchronizes files and deletes synchronized files from source afterwards?]]           * [[faq_delete_synchronized_files|How do I create script that synchronizes files and deletes synchronized files from source afterwards?]]
          * [[faq_script_non_recursive|How do I transfer (or synchronize) directory non-recursively?]]           * [[faq_script_non_recursive|How do I transfer (or synchronize) directory non-recursively?]]
-          * [[faq_script_hostkey]] +          * [[faq_batch_file]]· 
-          * [[faq_script_prefer_open|Why should I be using open command in scripting instead of opening session using session URL on command-line?]]+          * [[faq_library_parameters]] 
 +line?]]
        * [[faq#synchronization|Synchronization]]         * [[faq#synchronization|Synchronization]]
          * [[faq_synchronize|Synchronization or keep remote directory up to date functions are not working. Why?]]           * [[faq_synchronize|Synchronization or keep remote directory up to date functions are not working. Why?]]
          * [[faq_synch_direction|What do direction options (local, remote, both) for Synchronization mean?]]           * [[faq_synch_direction|What do direction options (local, remote, both) for Synchronization mean?]]
-          * [[faq_keep_local_up_to_date|Can I keep local directory up to date?]] 
        * [[faq#ios|Working with iPhone, iPod Touch or iPad]]         * [[faq#ios|Working with iPhone, iPod Touch or iPad]]
          * [[faq_iphone|How do I connect to my iPhone, iPod Touch or iPad?]]           * [[faq_iphone|How do I connect to my iPhone, iPod Touch or iPad?]]
Line 426: Line 535:
        * [[faq#misc|Miscellaneous]]         * [[faq#misc|Miscellaneous]]
          * [[faq_su|How do I change user after login (e.g. su root)?]]           * [[faq_su|How do I change user after login (e.g. su root)?]]
-          * [[faq_change_passwd|Can I change my account password with WinSCP?]] 
          * [[faq_breaks_permissions|Why WinSCP breaks permissions (jail, chroot)?]]           * [[faq_breaks_permissions|Why WinSCP breaks permissions (jail, chroot)?]]
-          * [[faq_filemanager|Can I have a local directory in both panels (turn WinSCP into file manager)?]] 
-          * [[|Why is remote file timestamp shown in WinSCP panel shifted by one hour from actual timestamp of the file?]] 
          * [[faq_utf8|How do I make WinSCP show localized and/or UTF-8 encoded (Unicode) filenames correctly?]]           * [[faq_utf8|How do I make WinSCP show localized and/or UTF-8 encoded (Unicode) filenames correctly?]]
          * [[faq_web_cache|Why are the changes, I upload to webserver, not visible in the web browser?]]           * [[faq_web_cache|Why are the changes, I upload to webserver, not visible in the web browser?]]
-          * [[faq_http_url|Can WinSCP show me HTTP URL address for the selected file?]] 
          * [[faq_map_drive|Can I map a remote directory as a network drive in Windows?]]           * [[faq_map_drive|Can I map a remote directory as a network drive in Windows?]]
          * [[faq_error_code|What is error code 4?]]           * [[faq_error_code|What is error code 4?]]
Line 446: Line 551:
          * [[faq_undelete|Can I undelete remote file removed with WinSCP?]]           * [[faq_undelete|Can I undelete remote file removed with WinSCP?]]
          * [[faq_error_codes|Where is documentation for error codes?]]           * [[faq_error_codes|Where is documentation for error codes?]]
 +          * [[faq_no_window]]
 +          * [[faq_local_folders]]
===== WinSCP Plugins to File Managers ===== ===== WinSCP Plugins to File Managers =====
Line 460: Line 567:
===== Announcements ===== ===== Announcements =====
  * Announcements   * Announcements
-    * [[announcement_winscp55|WinSCP 5.5 - What's New?]]+    * [[announcement_winscp55]
 + ···* [[announcement_winscp57]] 
 +   * [[announcement_winscp59]] 
 +   * [[announcement_winscp511]]

Last modified: by martin