diff --git a/docs/shell.rst b/docs/shell.rst
index 652e572..06e7f42 100644
--- a/docs/shell.rst
+++ b/docs/shell.rst
@@ -206,6 +206,24 @@
    :func: LinFixedEF.ShellCommands.upd_rec_dec_parser
 
 
+edit_record_decoded
+~~~~~~~~~~~~~~~~~~~
+.. argparse::
+   :module: pySim.filesystem
+   :func: LinFixedEF.ShellCommands.edit_rec_dec_parser
+
+This command will read the selected record, decode it to its JSON representation, save
+that JSON to a temporary file on your computer, and launch your configured text editor.
+
+You may then perform whatever modifications to the JSON representation, save + leave your
+text editor.
+
+Afterwards, the modified JSON will be re-encoded to the binary format, and the result written
+back to the record on the SIM card.
+
+This allows for easy interactive modification of records.
+
+
 
 Transparent EF commands
 -----------------------
@@ -268,6 +286,19 @@
   }
 
 
+edit_binary_decoded
+~~~~~~~~~~~~~~~~~~~
+This command will read the selected binary EF, decode it to its JSON representation, save
+that JSON to a temporary file on your computer, and launch your configured text editor.
+
+You may then perform whatever modifications to the JSON representation, save + leave your
+text editor.
+
+Afterwards, the modified JSON will be re-encoded to the binary format, and the result written
+to the SIM card.
+
+This allows for easy interactive modification of file contents.
+
 
 cmd2 settable parameters
 ------------------------
diff --git a/pySim/filesystem.py b/pySim/filesystem.py
index d2b8443..e771f3c 100644
--- a/pySim/filesystem.py
+++ b/pySim/filesystem.py
@@ -25,6 +25,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 import code
+import tempfile
 import json
 
 import cmd2
@@ -433,6 +434,26 @@
             if data:
                 self._cmd.poutput_json(data)
 
+        def do_edit_binary_decoded(self, opts):
+            """Edit the JSON representation of the EF contents in an editor."""
+            (orig_json, sw) = self._cmd.rs.read_binary_dec()
+            with tempfile.TemporaryDirectory(prefix='pysim_') as dirname:
+                filename = '%s/file' % dirname
+                # write existing data as JSON to file
+                with open(filename, 'w') as text_file:
+                    json.dump(orig_json, text_file, indent=4)
+                # run a text editor
+                self._cmd._run_editor(filename)
+                with open(filename, 'r') as text_file:
+                    edited_json = json.load(text_file)
+                if edited_json == orig_json:
+                    self._cmd.poutput("Data not modified, skipping write")
+                else:
+                    (data, sw) = self._cmd.rs.update_binary_dec(edited_json)
+                    if data:
+                        self._cmd.poutput_json(data)
+
+
     def __init__(self, fid:str, sfid:str=None, name:str=None, desc:str=None, parent:CardDF=None,
                  size={1,None}):
         """
@@ -622,6 +643,32 @@
             if data:
                 self._cmd.poutput(data)
 
+        edit_rec_dec_parser = argparse.ArgumentParser()
+        edit_rec_dec_parser.add_argument('record_nr', type=int, help='Number of record to be edited')
+        @cmd2.with_argparser(edit_rec_dec_parser)
+        def do_edit_record_decoded(self, opts):
+            """Edit the JSON representation of one record in an editor."""
+            (orig_json, sw) = self._cmd.rs.read_record_dec(opts.record_nr)
+            dirname = tempfile.mkdtemp(prefix='pysim_')
+            try:
+                filename = '%s/file' % dirname
+                # write existing data as JSON to file
+                with open(filename, 'w') as text_file:
+                    json.dump(orig_json, text_file, indent=4)
+                # run a text editor
+                self._cmd._run_editor(filename)
+                with open(filename, 'r') as text_file:
+                    edited_json = json.load(text_file)
+                if edited_json == orig_json:
+                    self._cmd.poutput("Data not modified, skipping write")
+                else:
+                    (data, sw) = self._cmd.rs.update_record_dec(opts.record_nr, edited_json)
+                    if data:
+                        self._cmd.poutput_json(data)
+            finally:
+                shutil.rmtree(dirname)
+
+
     def __init__(self, fid:str, sfid:str=None, name:str=None, desc:str=None,
                  parent:Optional[CardDF]=None, rec_len={1,None}):
         """
