diff --git a/stp/STP_Tests.ttcn b/stp/STP_Tests.ttcn
index 032a900..990518c 100644
--- a/stp/STP_Tests.ttcn
+++ b/stp/STP_Tests.ttcn
@@ -42,93 +42,6 @@
 
 const OCT1 c_M3UA_SI_SCCP := '03'O;
 
-
-/* copy+pasted from SCCP_Emulation.ttcn, where for some reason it is marked as "runs on SCCP_CT"
- * without depending on anything of that component */
-  function ConvertASPAddressToEncodedAddress_itu( in SCCP_PAR_Address pl_ASPAddress)
-    return SCCP_param_CPartyAddressEnc
-  {
-
-    var SCCP_param_CPartyAddress_itu vl_PDUAddress; //structured fit to encoding
-    var SCCP_param_CPartyAddressEnc vl_PDUAddressEncoded;
-
-    vl_PDUAddress.addressIndicator.pointCodeIndic:=
-      pl_ASPAddress.addressIndicator.pointCodeIndic;
-
-    vl_PDUAddress.addressIndicator.ssnIndicator:=
-      pl_ASPAddress.addressIndicator.ssnIndicator;
-
-    vl_PDUAddress.addressIndicator.globalTitleIndic:=
-     pl_ASPAddress.addressIndicator.globalTitleIndic;
-
-    vl_PDUAddress.addressIndicator.routingIndicator:=
-      pl_ASPAddress.addressIndicator.routingIndicator;
-
-    vl_PDUAddress.addressIndicator.reserved:='0'B;
-    // if (ischosen(pl_ASPAddress.signPointCode) ) not used because it is mandatory field (???)
-
-    //----signPointCode handling
-    if ( ispresent( pl_ASPAddress.signPointCode )) {
-      vl_PDUAddress.signPointCode :=
-        '00'B&pl_ASPAddress.signPointCode;
-    } else {
-      vl_PDUAddress.signPointCode := omit;
-    };
-
-    //----subsystemNumber handling
-    if ( ispresent( pl_ASPAddress.subsystemNumber ) ){
-      vl_PDUAddress.subsystemNumber := pl_ASPAddress.subsystemNumber;
-    } else {
-      vl_PDUAddress.subsystemNumber :=omit;
-    };
-
-    // --- globalTitle handling--
-    if ( ispresent(pl_ASPAddress.globalTitle))
-    {//startif1
-
-      var SCCP_ASPfield_GlobalTitle tmpGT ;
-      tmpGT := pl_ASPAddress.globalTitle;
-
-      if (ischosen(tmpGT.gti0001))
-      {
-        vl_PDUAddress.globalTitle.gti0001.natureOfAddress:=tmpGT.gti0001.natureOfAddress;
-        vl_PDUAddress.globalTitle.gti0001.oddeven:=tmpGT.gti0001.oddeven;
-        vl_PDUAddress.globalTitle.gti0001.globalTitleAddress:=tmpGT.gti0001.globalTitleAddress;
-      }
-      else if (ischosen(tmpGT.gti0010))
-      {
-        vl_PDUAddress.globalTitle.gti0010.translationType:=tmpGT.gti0010.translationType;
-        vl_PDUAddress.globalTitle.gti0010.globalTitleAddress:=tmpGT.gti0010.globalTitleAddress;
-      }
-      else if (ischosen(tmpGT.gti0011))
-      {
-        vl_PDUAddress.globalTitle.gti0011.translationType:=tmpGT.gti0011.translationType;
-        vl_PDUAddress.globalTitle.gti0011.encodingScheme:=tmpGT.gti0011.encodingScheme;
-        vl_PDUAddress.globalTitle.gti0011.numberingPlan:=tmpGT.gti0011.numberingPlan;
-        vl_PDUAddress.globalTitle.gti0011.globalTitleAddress:=tmpGT.gti0011.globalTitleAddress;
-      }
-      else if (ischosen(tmpGT.gti0100))
-      {
-        vl_PDUAddress.globalTitle.gti0100.translationType:=tmpGT.gti0100.translationType;
-        vl_PDUAddress.globalTitle.gti0100.encodingScheme:=tmpGT.gti0100.encodingScheme;
-        vl_PDUAddress.globalTitle.gti0100.numberingPlan:=tmpGT.gti0100.numberingPlan;
-        vl_PDUAddress.globalTitle.gti0100.natureOfAddress:=tmpGT.gti0100.natureOfAddress;
-        vl_PDUAddress.globalTitle.gti0100.reserved:='0'B;
-        vl_PDUAddress.globalTitle.gti0100.globalTitleAddress:=tmpGT.gti0100.globalTitleAddress;
-      }
-    }
-    else
-    {
-        vl_PDUAddress.globalTitle := omit;
-    };
-
-    vl_PDUAddressEncoded.addr:= enc_PDU_SCCP_Address_itu( vl_PDUAddress);
-    vl_PDUAddressEncoded.paramLength:= lengthof(vl_PDUAddressEncoded.addr);
-
-    return vl_PDUAddressEncoded;
-
-  } //ConvertASPAddressToEncodedAddress_itu
-
 template (value) PDU_SCCP ts_SCCP_UDT(SCCP_PAR_Address called, SCCP_PAR_Address calling,
 					template (value) octetstring data,
 					template (value) BIT4 msg_hdl := '0000'B) := {
