diff --git a/eeschema/symbol_editor/symbol_editor.cpp b/eeschema/symbol_editor/symbol_editor.cpp
index 27b6caa1d9..f943d25bf7 100644
--- a/eeschema/symbol_editor/symbol_editor.cpp
+++ b/eeschema/symbol_editor/symbol_editor.cpp
@@ -52,6 +52,7 @@
 #include "symbol_saveas_type.h"
 
 #include <widgets/symbol_filedlg_save_as.h>
+#include <io/kicad/kicad_io_utils.h>
 
 
 void SYMBOL_EDIT_FRAME::UpdateTitle()
@@ -1213,6 +1214,9 @@ void SYMBOL_EDIT_FRAME::CopySymbolToClipboard()
         SCH_IO_KICAD_SEXPR::FormatLibSymbol( tmp.get(), formatter );
     }
 
+    std::string prettyData = formatter.GetString();
+    KICAD_FORMAT::Prettify( prettyData );
+
     wxLogNull doNotLog; // disable logging of failed clipboard actions
 
     auto clipboard = wxTheClipboard;
@@ -1221,7 +1225,7 @@ void SYMBOL_EDIT_FRAME::CopySymbolToClipboard()
     if( !clipboardLock || !clipboard->IsOpened() )
         return;
 
-    auto data = new wxTextDataObject( wxString( formatter.GetString().c_str(), wxConvUTF8 ) );
+    auto data = new wxTextDataObject( wxString( prettyData.c_str(), wxConvUTF8 ) );
     clipboard->SetData( data );
 
     clipboard->Flush();
diff --git a/eeschema/tools/sch_editor_control.cpp b/eeschema/tools/sch_editor_control.cpp
index 58a20839bf..3f160e89e1 100644
--- a/eeschema/tools/sch_editor_control.cpp
+++ b/eeschema/tools/sch_editor_control.cpp
@@ -77,6 +77,7 @@
 #include <wx/log.h>
 #include <wx/treectrl.h>
 #include <wx/msgdlg.h>
+#include <io/kicad/kicad_io_utils.h>
 #include "sch_edit_table_tool.h"
 
 #ifdef KICAD_IPC_API
@@ -1341,16 +1342,19 @@ bool SCH_EDITOR_CONTROL::doCopy( bool aUseDuplicateClipboard )
 
     plugin.Format( &selection, &selPath, schematic, &formatter, true );
 
+    std::string prettyData = formatter.GetString();
+    KICAD_FORMAT::Prettify( prettyData );
+
     if( selection.IsHover() )
         m_toolMgr->RunAction( EE_ACTIONS::clearSelection );
 
     if( aUseDuplicateClipboard )
     {
-        m_duplicateClipboard = formatter.GetString();
+        m_duplicateClipboard = prettyData;
         return true;
     }
 
-    return SaveClipboard( formatter.GetString() );
+    return SaveClipboard( prettyData );
 }
 
 
diff --git a/eeschema/tools/symbol_editor_edit_tool.cpp b/eeschema/tools/symbol_editor_edit_tool.cpp
index d76290417f..40926fd806 100644
--- a/eeschema/tools/symbol_editor_edit_tool.cpp
+++ b/eeschema/tools/symbol_editor_edit_tool.cpp
@@ -49,6 +49,7 @@
 #include <sch_textbox.h>
 #include <wx/textdlg.h>     // for wxTextEntryDialog
 #include <math/util.h>      // for KiROUND
+#include <io/kicad/kicad_io_utils.h>
 
 SYMBOL_EDITOR_EDIT_TOOL::SYMBOL_EDITOR_EDIT_TOOL() :
         EE_TOOL_BASE( "eeschema.SymbolEditTool" ),
@@ -919,7 +920,10 @@ int SYMBOL_EDITOR_EDIT_TOOL::Copy( const TOOL_EVENT& aEvent )
     for( SCH_ITEM& item : symbol->GetDrawItems() )
         item.ClearFlags( STRUCT_DELETED );
 
-    if( SaveClipboard( formatter.GetString() ) )
+    std::string prettyData = formatter.GetString();
+    KICAD_FORMAT::Prettify( prettyData );
+
+    if( SaveClipboard( prettyData ) )
         return 0;
     else
         return -1;
diff --git a/pcbnew/kicad_clipboard.cpp b/pcbnew/kicad_clipboard.cpp
index 2c36e749c0..35cb8d3393 100644
--- a/pcbnew/kicad_clipboard.cpp
+++ b/pcbnew/kicad_clipboard.cpp
@@ -41,6 +41,7 @@
 #include <pcb_io/kicad_sexpr/pcb_io_kicad_sexpr_parser.h>
 #include <kicad_clipboard.h>
 #include <kidialog.h>
+#include <io/kicad/kicad_io_utils.h>
 
 CLIPBOARD_IO::CLIPBOARD_IO():
         PCB_IO_KICAD_SEXPR(CTL_FOR_CLIPBOARD ),
@@ -397,6 +398,9 @@ void CLIPBOARD_IO::SaveSelection( const PCB_SELECTION& aSelected, bool isFootpri
         m_formatter.Print( 0, "\n)" );
     }
 
+    std::string prettyData = m_formatter.GetString();
+    KICAD_FORMAT::Prettify( prettyData );
+
     // These are placed at the end to minimize the open time of the clipboard
     wxLogNull         doNotLog; // disable logging of failed clipboard actions
     auto clipboard = wxTheClipboard;
@@ -405,12 +409,11 @@ void CLIPBOARD_IO::SaveSelection( const PCB_SELECTION& aSelected, bool isFootpri
     if( !clipboardLock || !clipboard->IsOpened() )
         return;
 
-    clipboard->SetData( new wxTextDataObject( wxString( m_formatter.GetString().c_str(),
-                                                        wxConvUTF8 ) ) );
+    clipboard->SetData( new wxTextDataObject( wxString( prettyData.c_str(), wxConvUTF8 ) ) );
 
     clipboard->Flush();
 
-    #ifndef __WXOSX__
+#ifndef __WXOSX__
     // This section exists to return the clipboard data, ensuring it has fully
     // been processed by the system clipboard.  This appears to be needed for
     // extremely large clipboard copies on asynchronous linux clipboard managers
@@ -424,7 +427,7 @@ void CLIPBOARD_IO::SaveSelection( const PCB_SELECTION& aSelected, bool isFootpri
         clipboard->GetData( data );
         ignore_unused( data.GetText() );
     }
-    #endif
+#endif
 }
 
 
@@ -475,7 +478,9 @@ void CLIPBOARD_IO::SaveBoard( const wxString& aFileName, BOARD* aBoard,
 
     m_out = &formatter;
 
-    m_out->Print( 0, "(kicad_pcb (version %d) (generator \"pcbnew\") (generator_version \"%s\")\n", SEXPR_BOARD_FILE_VERSION, GetMajorMinorVersion().c_str().AsChar() );
+    m_out->Print( 0, "(kicad_pcb (version %d) (generator \"pcbnew\") (generator_version \"%s\")\n",
+                  SEXPR_BOARD_FILE_VERSION,
+                  GetMajorMinorVersion().c_str().AsChar() );
 
     Format( aBoard, 1 );