Ausgehend von den grundlegenden Funktionen eines einfachen Telefons wurde ein Java interface mit dem Namen EndPoint erstellt, das Methoden vorschreibt, mittels denen ein Switch ein Endgerät ansteuern kann. Eine Implementierung dieses Interfaces stellt die Klasse PhoneIN dar. Hierbei handelt es sich um ein appletcation mit graphischer Oberfläche, das ein Telefon veranschaulichen soll (vgl. Abbildung ). Gegenwärtig werden Instanzen von PhoneIN direkt von der Switch-Oberfläche aus erstellt und initialisiert. Durch die Kapselung der Funktionalität und der Ausführung von PhoneIN als Applet ist es jedoch mit geringem Aufwand (z. B. unter Benutzung einer Verteilungsplattform) möglich, die Endgeräte direkt im einem Web-Browser zu benutzen.
Wurde ein EndPoint erstellt, versucht er sich zunächst bei der CallControlFunction zu registrieren. Dies geschieht durch einen Aufruf an die CallControlFunction-Instanz, zu der seinem Konstruktor eine Referenz übergeben wurde. Obwohl eine Lösung mittels eines CallControlFunction-Singletons eleganter gewesen wäre, bietet diese Vorgehensweise den Vorteil, bei Bedarf mehrere CallControlFunction-Instanzen in der selben JVM zu benutzen. Für einen verteilten Switch ergibt sich jedoch das Problem, dem Endgerät die Referenz auf die ihm zugeordnete CallControlFunction-Instanz zu übergeben. Dies würde unter Umständen ein weiteres Objekt erfordern, das die Verwaltung der unterschiedlichen Switch-Instanzen übernimmt. Die Registrierung beim Switch entspricht in der realen Welt der Einrichtung eines Anschlusses durch den Netzbetreiber.
Während der Registrierung erstellt die CallControlFunction ein neues Proxy-Objekt (EndPointProxy) für das Endgerät und teilt diesem eine Rufnummer zu. Weiterhin werden jeweils eine Instanz von O_StateMachine und T_StateMachine erzeugt, initialisiert und dem EndPointProxy zugeordnet (vgl. Abbildung ). Nach erfolgter Registrierung verläuft die Kommunikation zwischen dem Endgerät und dem Switch ausschließlich über das EndPointProxy-Objekt.
Die Endgeräte- bzw. Teilnehmernummern werden mit Hilfe eines Objekts der Klasse SimpleNumberingPlan erzeugt und verwaltet; dieses ist der CallControlFunction-Instanz zugeordnet. In der gegenwärtigen Implementierung werden zweistellige, aufeinanderfolgende Nummern erzeugt, beginnend mit einer willkürlich eingestellten Nummer. Die Schnittstelle, die SimpleNumberingPlan definiert ist jedoch für die Verwaltung beliebig erzeugter Nummern anwendbar. Gegenwärtig kann zusätzlich zum Erzeugen und Löschen von Nummern die Gültigkeit einer Nummer oder einer Teilnummer überprüft werden. Es werden allerdings nur die Nummern selbst verwaltet, ihre Zuordnung zu Endgeräten wird von CallControlFunction selbst vorgenommen.