diff --git a/mutalyzer/services/rpc.py b/mutalyzer/services/rpc.py
index e0137d9330aef341b422aa154309af15c5e8cb3b..ce2287a8d929100509e36ae0d624aca1ba3e8e7a 100644
--- a/mutalyzer/services/rpc.py
+++ b/mutalyzer/services/rpc.py
@@ -264,11 +264,24 @@ class MutalyzerService(ServiceBase):
                      "Finished processing getTranscripts(%s %s %s %s)"
                      % (build, chrom, pos, versions))
 
-        #filter out the accNo
-        if versions:
-            return ['%s.%s' % (m.accession, m.version) for m in mappings]
-        else:
-            return [m.accession for m in mappings]
+        transcripts = []
+        for mapping in mappings:
+            if versions and mapping.version:
+                accession = '%s.%i' % (mapping.accession, mapping.version)
+            else:
+                accession = mapping.accession
+            if mapping.select_transcript:
+                if mapping.reference_type == 'lrg':
+                    selector = 't%d' % mapping.transcript
+                elif mapping.transcript:
+                    selector = '(%s_v%.3i)' % (mapping.gene, mapping.transcript)
+                else:
+                    selector = '(%s)' % mapping.gene
+            else:
+                selector = ''
+            transcripts.append('%s%s' % (accession, selector))
+
+        return transcripts
     #getTranscripts
 
     @srpc(Mandatory.Unicode, Mandatory.Unicode, _returns=Array(Mandatory.Unicode))
@@ -296,12 +309,30 @@ class MutalyzerService(ServiceBase):
         L.addMessage(__file__, -1, "INFO",
             "Finished processing getTranscriptsByGene(%s %s)" % (build, name))
 
-        return ['%s.%s' % (m.accession, m.version) for m in mappings]
-    #getTranscriptsByGene
+        transcripts = []
+        for mapping in mappings:
+            if mapping.version:
+                accession = '%s.%i' % (mapping.accession, mapping.version)
+            else:
+                accession = mapping.accession
+            if mapping.select_transcript:
+                if mapping.reference_type == 'lrg':
+                    selector = 't%d' % mapping.transcript
+                elif mapping.transcript:
+                    selector = '(%s_v%.3i)' % (mapping.gene, mapping.transcript)
+                else:
+                    selector = '(%s)' % mapping.gene
+            else:
+                selector = ''
+            transcripts.append('%s%s' % (accession, selector))
+
+        return transcripts
+    #getTranscriptsByGeneName
 
     @srpc(Mandatory.Unicode, Mandatory.Unicode, Mandatory.Integer,
-        Mandatory.Integer, Mandatory.Integer, _returns=Array(Mandatory.Unicode))
-    def getTranscriptsRange(build, chrom, pos1, pos2, method) :
+          Mandatory.Integer, Mandatory.Integer, Boolean,
+          _returns=Array(Mandatory.Unicode))
+    def getTranscriptsRange(build, chrom, pos1, pos2, method, versions=False):
         """
         Get all the transcripts that overlap with a range on a chromosome.
 
@@ -319,6 +350,8 @@ class MutalyzerService(ServiceBase):
             - 0 ; Return only the transcripts that completely fall in the range
                   [pos1, pos2].
             - 1 ; Return all hit transcripts.
+        @kwarg versions: If set to True, also include transcript versions.
+        @type versions: bool
 
         @return: A list of transcripts.
         @rtype: list
@@ -381,7 +414,24 @@ class MutalyzerService(ServiceBase):
             "Finished processing getTranscriptsRange(%s %s %s %s %s)" % (
             build, chrom, pos1, pos2, method))
 
-        return [m.accession for m in mappings]
+        transcripts = []
+        for mapping in mappings:
+            if versions and mapping.version:
+                accession = '%s.%i' % (mapping.accession, mapping.version)
+            else:
+                accession = mapping.accession
+            if mapping.select_transcript:
+                if mapping.reference_type == 'lrg':
+                    selector = 't%d' % mapping.transcript
+                elif mapping.transcript:
+                    selector = '(%s_v%.3i)' % (mapping.gene, mapping.transcript)
+                else:
+                    selector = '(%s)' % mapping.gene
+            else:
+                selector = ''
+            transcripts.append('%s%s' % (accession, selector))
+
+        return transcripts
     #getTranscriptsRange
 
     @srpc(Mandatory.Unicode, Mandatory.Unicode, Mandatory.Integer,
@@ -476,6 +526,9 @@ class MutalyzerService(ServiceBase):
 
         for mapping in mappings:
             t = TranscriptMappingInfo()
+            # TODO: This doesn't work so well for mappings with select_transcript
+            # set, for example LRG and mtDNA mappings, but it's not so easy to
+            # fix in a backwards compatible way.
             t.name = mapping.accession
             t.version = mapping.version
             t.gene = mapping.gene
diff --git a/tests/test_services_soap.py b/tests/test_services_soap.py
index 37a5799fba0a02f0a26aeeabbe906e4936250b3c..a02146da3b1b353d97caad85b3a4d53b4c37bb45 100644
--- a/tests/test_services_soap.py
+++ b/tests/test_services_soap.py
@@ -166,6 +166,52 @@ def test_numberconversion_gtoc_required_gene(api):
     assert 'XM_001715131.2:c.*19483A>G' in r.string
 
 
+@pytest.mark.usefixtures('hg19_transcript_mappings')
+def test_gettranscripts_lrg(api):
+    """
+    Running getTranscripts should give us overlapping transcripts.
+    list of transcripts including LRG transcripts.
+    """
+    r = api('getTranscripts', build='hg19', chrom='chr1',
+            pos=207646118)
+    assert type(r.string) == list
+    assert 'LRG_348t1' in r.string
+
+
+@pytest.mark.usefixtures('hg19_transcript_mappings')
+def test_gettranscripts_mtdna(api):
+    """
+    Running getTranscripts should give us overlapping transcripts.
+    list of transcripts, also on chrM.
+    """
+    r = api('getTranscripts', build='hg19', chrom='chrM',
+            pos=10765)
+    assert type(r.string) == list
+    assert 'NC_012920(ND4_v001)' in r.string
+
+
+@pytest.mark.usefixtures('hg19_transcript_mappings')
+def test_gettranscriptsrange_lrg(api):
+    """
+    Running getTranscriptsRange should give us overlapping transcripts.
+    list of transcripts including LRG transcripts.
+    """
+    r = api('getTranscriptsRange', 'hg19', 'chr1', 207646118, 207646118, 1)
+    assert type(r.string) == list
+    assert 'LRG_348t1' in r.string
+
+
+@pytest.mark.usefixtures('hg19_transcript_mappings')
+def test_gettranscriptsrange_mtdna(api):
+    """
+    Running getTranscripts should give us overlapping transcripts.
+    list of transcripts, also on chrM.
+    """
+    r = api('getTranscriptsRange', 'hg19', 'chrM', 10765, 10765, 1)
+    assert type(r.string) == list
+    assert 'NC_012920(ND4_v001)' in r.string
+
+
 @pytest.mark.usefixtures('hg19_transcript_mappings')
 def test_gettranscriptsbygenename_valid(api):
     """
@@ -180,6 +226,28 @@ def test_gettranscriptsbygenename_valid(api):
         assert t in r.string
 
 
+@pytest.mark.usefixtures('hg19_transcript_mappings')
+def test_gettranscriptsbygenename_valid_lrg(api):
+    """
+    Running getTranscriptsByGeneName with valid gene name should give a
+    list of transcripts including LRG transcripts.
+    """
+    r = api('getTranscriptsByGeneName', build='hg19', name='CR2')
+    assert type(r.string) == list
+    assert 'LRG_348t1' in r.string
+
+
+@pytest.mark.usefixtures('hg19_transcript_mappings')
+def test_gettranscriptsbygenename_valid_mtdna(api):
+    """
+    Running getTranscriptsByGeneName with valid gene name should give a
+    list of transcripts also on chrM.
+    """
+    r = api('getTranscriptsByGeneName', build='hg19', name='ND4')
+    assert type(r.string) == list
+    assert 'NC_012920.1(ND4_v001)' in r.string
+
+
 @pytest.mark.usefixtures('hg19_transcript_mappings')
 def test_gettranscriptsbygenename_invalid(api):
     """