diff --git a/pySim/transport/__init__.py b/pySim/transport/__init__.py
index 5f48657..6cccf8c 100644
--- a/pySim/transport/__init__.py
+++ b/pySim/transport/__init__.py
@@ -267,27 +267,17 @@
         return (rsp, sw)
 
 
-def argparse_add_reader_args(arg_parser):
+def argparse_add_reader_args(arg_parser: argparse.ArgumentParser):
     """Add all reader related arguments to the given argparse.Argumentparser instance."""
-    serial_group = arg_parser.add_argument_group('Serial Reader')
-    serial_group.add_argument('-d', '--device', metavar='DEV', default='/dev/ttyUSB0',
-                              help='Serial Device for SIM access')
-    serial_group.add_argument('-b', '--baud', dest='baudrate', type=int, metavar='BAUD', default=9600,
-                              help='Baud rate used for SIM access')
+    from pySim.transport.serial import SerialSimLink
+    from pySim.transport.pcsc import PcscSimLink
+    from pySim.transport.modem_atcmd import ModemATCommandLink
+    from pySim.transport.calypso import CalypsoSimLink
 
-    pcsc_group = arg_parser.add_argument_group('PC/SC Reader')
-    pcsc_group.add_argument('-p', '--pcsc-device', type=int, dest='pcsc_dev', metavar='PCSC', default=None,
-                            help='PC/SC reader number to use for SIM access')
-
-    modem_group = arg_parser.add_argument_group('AT Command Modem Reader')
-    modem_group.add_argument('--modem-device', dest='modem_dev', metavar='DEV', default=None,
-                             help='Serial port of modem for Generic SIM Access (3GPP TS 27.007)')
-    modem_group.add_argument('--modem-baud', type=int, metavar='BAUD', default=115200,
-                             help='Baud rate used for modem port')
-
-    osmobb_group = arg_parser.add_argument_group('OsmocomBB Reader')
-    osmobb_group.add_argument('--osmocon', dest='osmocon_sock', metavar='PATH', default=None,
-                              help='Socket path for Calypso (e.g. Motorola C1XX) based reader (via OsmocomBB)')
+    SerialSimLink.argparse_add_reader_args(arg_parser)
+    PcscSimLink.argparse_add_reader_args(arg_parser)
+    ModemATCommandLink.argparse_add_reader_args(arg_parser)
+    CalypsoSimLink.argparse_add_reader_args(arg_parser)
 
     return arg_parser
 
diff --git a/pySim/transport/calypso.py b/pySim/transport/calypso.py
index 3fd9992..ea97b69 100644
--- a/pySim/transport/calypso.py
+++ b/pySim/transport/calypso.py
@@ -20,7 +20,7 @@
 import struct
 import socket
 import os
-
+import argparse
 from typing import Optional
 
 from pySim.transport import LinkBase
@@ -164,3 +164,9 @@
 
     def __str__(self) -> str:
         return "osmocon:%s" % (self._sock_path)
+
+    @staticmethod
+    def argparse_add_reader_args(arg_parser: argparse.ArgumentParser):
+        osmobb_group = arg_parser.add_argument_group('OsmocomBB Reader')
+        osmobb_group.add_argument('--osmocon', dest='osmocon_sock', metavar='PATH', default=None,
+                                  help='Socket path for Calypso (e.g. Motorola C1XX) based reader (via OsmocomBB)')
diff --git a/pySim/transport/modem_atcmd.py b/pySim/transport/modem_atcmd.py
index 1b741b0..fee09c8 100644
--- a/pySim/transport/modem_atcmd.py
+++ b/pySim/transport/modem_atcmd.py
@@ -20,6 +20,7 @@
 import serial
 import time
 import re
+import argparse
 from typing import Optional
 
 from pySim.utils import Hexstr, ResTuple
@@ -173,3 +174,11 @@
 
     def __str__(self) -> str:
         return "modem:%s" % self._device
+
+    @staticmethod
+    def argparse_add_reader_args(arg_parser: argparse.ArgumentParser):
+        modem_group = arg_parser.add_argument_group('AT Command Modem Reader')
+        modem_group.add_argument('--modem-device', dest='modem_dev', metavar='DEV', default=None,
+                                 help='Serial port of modem for Generic SIM Access (3GPP TS 27.007)')
+        modem_group.add_argument('--modem-baud', type=int, metavar='BAUD', default=115200,
+                                 help='Baud rate used for modem port')
diff --git a/pySim/transport/pcsc.py b/pySim/transport/pcsc.py
index 3f3d06c..fbe7c0f 100644
--- a/pySim/transport/pcsc.py
+++ b/pySim/transport/pcsc.py
@@ -17,6 +17,7 @@
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 
+import argparse
 from typing import Optional
 
 from smartcard.CardConnection import CardConnection
@@ -96,3 +97,9 @@
 
     def __str__(self) -> str:
         return "PCSC:%u[%s]" % (self._reader_number,  self._reader)
+
+    @staticmethod
+    def argparse_add_reader_args(arg_parser: argparse.ArgumentParser):
+        pcsc_group = arg_parser.add_argument_group('PC/SC Reader')
+        pcsc_group.add_argument('-p', '--pcsc-device', type=int, dest='pcsc_dev', metavar='PCSC', default=None,
+                                help='PC/SC reader number to use for SIM access')
diff --git a/pySim/transport/serial.py b/pySim/transport/serial.py
index 269ec9c..867317c 100644
--- a/pySim/transport/serial.py
+++ b/pySim/transport/serial.py
@@ -19,6 +19,7 @@
 import serial
 import time
 import os.path
+import argparse
 from typing import Optional
 
 from pySim.exceptions import NoCardError, ProtocolError
@@ -240,3 +241,11 @@
 
     def __str__(self) -> str:
         return "serial:%s" % (self._sl.name)
+
+    @staticmethod
+    def argparse_add_reader_args(arg_parser: argparse.ArgumentParser):
+        serial_group = arg_parser.add_argument_group('Serial Reader')
+        serial_group.add_argument('-d', '--device', metavar='DEV', default='/dev/ttyUSB0',
+                                  help='Serial Device for SIM access')
+        serial_group.add_argument('-b', '--baud', dest='baudrate', type=int, metavar='BAUD', default=9600,
+                                  help='Baud rate used for SIM access')
