diff --git a/mutalyzer/db/models.py b/mutalyzer/db/models.py
index 73a99c48994c3240b13875057bef2f113b823236..8d47461bb4457bdbee805a1a6975e138428b5586 100644
--- a/mutalyzer/db/models.py
+++ b/mutalyzer/db/models.py
@@ -468,6 +468,38 @@ class TranscriptMapping(db.Base):
     def cds(self, cds):
         self.cds_start, self.cds_stop = cds or (None, None)
 
+    def get_reference(self, include_version=True):
+        """
+        Get fully qualified reference for this transcript.
+
+        You would usually want to use the simpler :attr:`reference` property
+        instead, except if the accession number may not include version number
+        (which we consider bad practice).
+        """
+        if include_version and self.version:
+            accession = '%s.%i' % (self.accession, self.version)
+        else:
+            accession = self.accession
+
+        if self.select_transcript:
+            if self.reference_type == 'lrg':
+                selector = 't%d' % self.transcript
+            elif self.transcript:
+                selector = '(%s_v%.3i)' % (self.gene, self.transcript)
+            else:
+                selector = '(%s)' % self.gene
+        else:
+            selector = ''
+
+        return '%s%s' % (accession, selector)
+
+    @property
+    def reference(self):
+        """
+        Fully qualified reference for this transcript.
+        """
+        return self.get_reference()
+
 
 Index('transcript_mapping_transcript',
       TranscriptMapping.accession, TranscriptMapping.version,
diff --git a/mutalyzer/mapping.py b/mutalyzer/mapping.py
index d71f3aeaec8e31e989413872fb3f2e83f335bd62..e0ae81adfa79088b804bf1add7d66520ce74ed93 100644
--- a/mutalyzer/mapping.py
+++ b/mutalyzer/mapping.py
@@ -735,20 +735,7 @@ class Converter(object) :
             if not core_mapping:
                 #balen
                 continue
-            # construct the variant description
-            if self.mapping.reference_type == 'lrg':
-                accNo = self.mapping.accession
-            else:
-                accNo = "%s.%s" % (self.mapping.accession, self.mapping.version)
-            if self.mapping.select_transcript:
-                if self.mapping.reference_type == 'lrg':
-                    selector = 't%d' % self.mapping.transcript
-                elif self.mapping.transcript:
-                    selector = '(%s_v%.3i)' % (self.mapping.gene, self.mapping.transcript)
-                else:
-                    selector = '(%s)' % self.mapping.gene
-            else:
-                selector = ''
+            reference = self.mapping.reference
             geneName = self.mapping.gene
             strand = self.mapping.orientation == 'forward'
 
@@ -798,7 +785,7 @@ class Converter(object) :
             else:
                 mutation = '[' + ';'.join(mutations) + ']'
 
-            description = "%s%s:%c.%s" % (accNo, selector, mtype, mutation)
+            description = "%s:%c.%s" % (reference, mtype, mutation)
             HGVS_notatations[geneName].append(description)
             NM_list.append(description)
         #for
diff --git a/mutalyzer/services/rpc.py b/mutalyzer/services/rpc.py
index 93ca06898087fb1273e2cfc6aeb506fe84190187..767c6a5f811ec637fc09f77b7f26f8c055c1a5f5 100644
--- a/mutalyzer/services/rpc.py
+++ b/mutalyzer/services/rpc.py
@@ -264,24 +264,8 @@ class MutalyzerService(ServiceBase):
                      "Finished processing getTranscripts(%s %s %s %s)"
                      % (build, chrom, pos, versions))
 
-        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
+        return [mapping.get_reference(include_version=versions)
+                for mapping in mappings]
     #getTranscripts
 
     @srpc(Mandatory.Unicode, Mandatory.Unicode, _returns=Array(Mandatory.Unicode))
@@ -309,24 +293,7 @@ class MutalyzerService(ServiceBase):
         L.addMessage(__file__, -1, "INFO",
             "Finished processing getTranscriptsByGene(%s %s)" % (build, name))
 
-        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
+        return [mapping.reference for mapping in mappings]
     #getTranscriptsByGeneName
 
     @srpc(Mandatory.Unicode, Mandatory.Unicode, Mandatory.Integer,
@@ -414,24 +381,8 @@ class MutalyzerService(ServiceBase):
             "Finished processing getTranscriptsRange(%s %s %s %s %s)" % (
             build, chrom, pos1, pos2, method))
 
-        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
+        return [mapping.get_reference(include_version=versions)
+                for mapping in mappings]
     #getTranscriptsRange
 
     @srpc(Mandatory.Unicode, Mandatory.Unicode, Mandatory.Integer,
@@ -527,22 +478,7 @@ class MutalyzerService(ServiceBase):
 
         for mapping in mappings:
             t = TranscriptMappingInfo()
-
-            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 = ''
-            t.transcript = '%s%s' % (accession, selector)
-
+            t.transcript = mapping.reference
             t.name = mapping.accession
             t.version = mapping.version
             t.gene = mapping.gene