     return if @operationStack.isProcessing()
     return unless @isInterestingEvent(event)
 
-    if haveSomeNonEmptySelection(@editor)
+    nonEmptySelecitons = @editor.getSelections().filter (selection) -> not selection.isEmpty()
+    if nonEmptySelecitons.length
       submode = swrap.detectVisualModeSubmode(@editor)
       if @isMode('visual', submode)
+        for selection in nonEmptySelecitons when not swrap(selection).hasProperties()
+          swrap(selection).saveProperties()
         @updateCursorsVisibility()
       else
         @activate('visual', submode)

    refreshHighlightSearch = =>
      @highlightSearch.refresh()
    @subscriptions.add @editor.onDidStopChanging(refreshHighlightSearch)

    # [FIXME] #406 find better way to fix, this is very imperative, result of just worked through try&error.
    @subscriptions.add @editor.observeSelections (selection) =>
      return if selection.isEmpty()
      return if @operationStack.isProcessing()
      unless swrap(selection).hasProperties()
        swrap(selection).saveProperties()
        @updateCursorsVisibility()
        @editorElement.component.updateSync()

    @editorElement.classList.add(packageScope)
    if settings.get('startInInsertMode') or matchScopes(@editorElement, settings.get('startInInsertModeScopes'))

Input = require './input'
SearchInputElement = require './search-input'
{
  highlightRanges
  getVisibleEditors
  matchScopes
