diff --git a/src/boot/after_store.js b/src/boot/after_store.js
index 90c558f6..ea5d4ecd 100644
--- a/src/boot/after_store.js
+++ b/src/boot/after_store.js
@@ -56,6 +56,8 @@ const afterStoreSetup = ({store, i18n}) => {
           var formattingOptionsEnabled = (config.formattingOptionsEnabled)
           var collapseMessageWithSubject = (config.collapseMessageWithSubject)
           var loginMethod = (config.loginMethod)
+          var scopeCopy = (config.scopeCopy)
+          var subjectLineBehavior = (config.subjectLineBehavior)
 
           store.dispatch('setInstanceOption', { name: 'theme', value: theme })
           store.dispatch('setInstanceOption', { name: 'background', value: background })
@@ -71,6 +73,8 @@ const afterStoreSetup = ({store, i18n}) => {
           store.dispatch('setInstanceOption', { name: 'formattingOptionsEnabled', value: formattingOptionsEnabled })
           store.dispatch('setInstanceOption', { name: 'collapseMessageWithSubject', value: collapseMessageWithSubject })
           store.dispatch('setInstanceOption', { name: 'loginMethod', value: loginMethod })
+          store.dispatch('setInstanceOption', { name: 'scopeCopy', value: scopeCopy })
+          store.dispatch('setInstanceOption', { name: 'subjectLineBehavior', value: subjectLineBehavior })
           if (chatDisabled) {
             store.dispatch('disableChat')
           }
diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js
index c0e34d72..fa86ee59 100644
--- a/src/components/post_status_form/post_status_form.js
+++ b/src/components/post_status_form/post_status_form.js
@@ -24,7 +24,7 @@ const PostStatusForm = {
     'replyTo',
     'repliedUser',
     'attentions',
-    'messageScope',
+    'copyMessageScope',
     'subject'
   ],
   components: {
@@ -46,6 +46,10 @@ const PostStatusForm = {
       statusText = buildMentionsString({ user: this.repliedUser, attentions: this.attentions }, currentUser)
     }
 
+    const scope = (this.copyMessageScope && this.$store.state.config.copyScope || this.copyMessageScope === 'direct')
+          ? this.copyMessageScope
+          : this.$store.state.users.currentUser.default_scope
+
     return {
       dropFiles: [],
       submitDisabled: false,
@@ -58,7 +62,7 @@ const PostStatusForm = {
         contentType: 'text/plain',
         nsfw: false,
         files: [],
-        visibility: this.messageScope || this.$store.state.users.currentUser.default_scope
+        visibility: scope
       },
       caret: 0
     }
diff --git a/src/components/settings/settings.js b/src/components/settings/settings.js
index 67110841..910eea63 100644
--- a/src/components/settings/settings.js
+++ b/src/components/settings/settings.js
@@ -34,6 +34,12 @@ const settings = {
         ? instance.collapseMessageWithSubject
         : user.collapseMessageWithSubject,
       collapseMessageWithSubjectDefault: this.$t('settings.values.' + instance.collapseMessageWithSubject),
+      subjectLineBehaviorLocal: typeof user.subjectLineBehavior === 'undefined'
+        ? instance.subjectLineBehavior
+        : user.subjectLineBehavior,
+      subjectLineBehaviorDefault: instance.subjectLineBehavior,
+      scopeCopyLocal: user.scopeCopy,
+      scopeCopyDefault: this.$t('settings.values.' + instance.scopeCopy),
       stopGifs: user.stopGifs,
       loopSilentAvailable:
         // Firefox
@@ -113,6 +119,12 @@ const settings = {
     collapseMessageWithSubjectLocal (value) {
       this.$store.dispatch('setOption', { name: 'collapseMessageWithSubject', value })
     },
+    scopeCopyLocal (value) {
+      this.$store.dispatch('setOption', { name: 'scopeCopy', value })
+    },
+    subjectLineBehaviorLocal (value) {
+      this.$store.dispatch('setOption', { name: 'subjectLineBehavior', value })
+    },
     stopGifs (value) {
       this.$store.dispatch('setOption', { name: 'stopGifs', value })
     }
diff --git a/src/components/settings/settings.vue b/src/components/settings/settings.vue
index 652bdcc1..4a236d23 100644
--- a/src/components/settings/settings.vue
+++ b/src/components/settings/settings.vue
@@ -53,6 +53,41 @@
             </li>
           </ul>
         </div>
+
+        <div class="setting-item">
+          <h2>{{$t('settings.composing')}}</h2>
+          <ul class="setting-list">
+            <li>
+              <input type="checkbox" id="scopeCopy" v-model="scopeCopyLocal">
+              <label for="scopeCopy">
+                {{$t('settings.scope_copy')}} {{$t('settings.instance_default', { value: scopeCopyDefault })}}
+              </label>
+            </li>
+            <li>
+              <div>
+                {{$t('settings.subject_line_behavior')}}
+                <label for="subjectLineBehavior" class="select">
+                  <select id="subjectLineBehavior" v-model="subjectLineBehaviorLocal">
+                    <option value="email">
+                      {{$t('settings.subject_line_email')}}
+                      {{subjectLineBehaviorDefault == 'email' ? $t('settings.instance_default_simple') : ''}}
+                    </option>
+                    <option value="masto">
+                      {{$t('settings.subject_line_mastodon')}}
+                      {{subjectLineBehaviorDefault == 'mastodon' ? $t('settings.instance_default_simple') : ''}}
+                    </option>
+                    <option value="noop">
+                      {{$t('settings.subject_line_noop')}}
+                      {{subjectLineBehaviorDefault == 'noop' ? $t('settings.instance_default_simple') : ''}}
+                    </option>
+                  </select>
+                  <i class="icon-down-open"/>
+                </label>
+              </div>
+            </li>
+          </ul>
+        </div>
+
         <div class="setting-item">
           <h2>{{$t('settings.attachments')}}</h2>
           <ul class="setting-list">
diff --git a/src/components/status/status.js b/src/components/status/status.js
index f1afcac7..10716583 100644
--- a/src/components/status/status.js
+++ b/src/components/status/status.js
@@ -181,10 +181,16 @@ const Status = {
       return true
     },
     replySubject () {
-      if (this.status.summary && !this.status.summary.match(/^re[: ]/i)) {
+      if (!this.status.summary) return ''
+      const behavior = this.$store.state.config.subjectLineBehavior
+      const startsWithRe = this.status.summary.match(/^re[: ]/i)
+      if (behavior !== 'noop' && startsWithRe || behavior === 'masto') {
+        return this.status.summary
+      } else if (behavior === 'email') {
         return 're: '.concat(this.status.summary)
+      } else if (behavior === 'noop') {
+        return ''
       }
-      return this.status.summary
     },
     attachmentSize () {
       if ((this.$store.state.config.hideAttachments && !this.inConversation) ||
diff --git a/src/components/status/status.vue b/src/components/status/status.vue
index eb521280..8087d392 100644
--- a/src/components/status/status.vue
+++ b/src/components/status/status.vue
@@ -106,7 +106,7 @@
       </div>
       <div class="container" v-if="replying">
         <div class="reply-left"/>
-        <post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" :message-scope="status.visibility" :subject="replySubject" v-on:posted="toggleReplying"/>
+        <post-status-form class="reply-body" :reply-to="status.id" :attentions="status.attentions" :repliedUser="status.user" :copy-message-scope="status.visibility" :subject="replySubject" v-on:posted="toggleReplying"/>
       </div>
     </template>
   </div>
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 4201ba22..314fa083 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -91,6 +91,7 @@
     "change_password_error": "There was an issue changing your password.",
     "changed_password": "Password changed successfully!",
     "collapse_subject": "Collapse posts with subjects",
+    "composing": "Composing",
     "confirm_new_password": "Confirm new password",
     "current_avatar": "Your current avatar",
     "current_password": "Current password",
@@ -120,6 +121,7 @@
     "import_theme": "Load preset",
     "inputRadius": "Input fields",
     "instance_default": "(default: {value})",
+    "instance_default_simple" : "(default)",
     "interfaceLanguage": "Interface language",
     "invalid_theme_imported": "The selected file is not a supported Pleroma theme. No changes to your theme were made.",
     "limited_availability": "Unavailable in your browser",
@@ -152,10 +154,15 @@
     "saving_err": "Error saving settings",
     "saving_ok": "Settings saved",
     "security_tab": "Security",
+    "scope_copy": "Copy scope when replying (DMs are always copied)",
     "set_new_avatar": "Set new avatar",
     "set_new_profile_background": "Set new profile background",
     "set_new_profile_banner": "Set new profile banner",
     "settings": "Settings",
+    "subject_line_behavior": "Copy subject when replying",
+    "subject_line_email": "Like email: \"re: subject\"",
+    "subject_line_mastodon": "Like mastodon: copy as is",
+    "subject_line_noop": "Do not copy",
     "stop_gifs": "Play-on-hover GIFs",
     "streaming": "Enable automatic streaming of new posts when scrolled to the top",
     "text": "Text",
diff --git a/src/i18n/fr.json b/src/i18n/fr.json
index b5ad5e49..129b7d7c 100644
--- a/src/i18n/fr.json
+++ b/src/i18n/fr.json
@@ -119,6 +119,7 @@
     "import_theme": "Charger le thème",
     "inputRadius": "Champs de texte",
     "instance_default": "(default: {value})",
+    "instance_default_simple" : "(default)",
     "interfaceLanguage": "Langue de l'interface",
     "invalid_theme_imported": "Le fichier sélectionné n'est pas un thème Pleroma pris en charge. Aucun changement n'a été apporté à votre thème.",
     "limited_availability": "Non disponible dans votre navigateur",
diff --git a/src/modules/config.js b/src/modules/config.js
index 522940f6..0d36e9bf 100644
--- a/src/modules/config.js
+++ b/src/modules/config.js
@@ -5,7 +5,7 @@ const browserLocale = (window.navigator.language || 'en').split('-')[0]
 
 const defaultState = {
   colors: {},
-  collapseMessageWithSubject: undefined,
+  collapseMessageWithSubject: undefined, // instance default
   hideAttachments: false,
   hideAttachmentsInConv: false,
   hideNsfw: true,
@@ -25,7 +25,9 @@ const defaultState = {
   },
   muteWords: [],
   highlight: {},
-  interfaceLanguage: browserLocale
+  interfaceLanguage: browserLocale,
+  scopeCopy: undefined, // instance default
+  subjectLineBehavior: undefined // instance default
 }
 
 const config = {
diff --git a/src/modules/instance.js b/src/modules/instance.js
index 8b2c03d2..9a39cccf 100644
--- a/src/modules/instance.js
+++ b/src/modules/instance.js
@@ -21,6 +21,8 @@ const defaultState = {
   hidePostStats: false,
   hideUserStats: false,
   disableChat: false,
+  scopeCopy: true,
+  subjectLineBehavior: 'email',
   loginMethod: 'password',
 
   // Nasty stuff
diff --git a/static/config.json b/static/config.json
index 69a70741..67d84579 100644
--- a/static/config.json
+++ b/static/config.json
@@ -11,6 +11,8 @@
   "scopeOptionsEnabled": false,
   "formattingOptionsEnabled": false,
   "collapseMessageWithSubject": false,
+  "scopeCopy": false,
+  "subjectLineBehavior": "email",
   "hidePostStats": false,
   "hideUserStats": false,
   "loginMethod": "password"