diff --git a/Telegram/build/updates.py b/Telegram/build/updates.py
index 876ae67c8..ee01efb85 100644
--- a/Telegram/build/updates.py
+++ b/Telegram/build/updates.py
@@ -8,6 +8,7 @@ today = ''
 nextLast = False
 nextDate = False
 building = True
+composing = False
 for arg in sys.argv:
     if nextLast:
         lastCommit = arg
@@ -17,8 +18,11 @@ for arg in sys.argv:
         nextDate = False
     elif arg == 'send':
         building = False
+        composing = False
     elif arg == 'from':
         nextLast = True
+        building = False
+        composing = True
     elif arg == 'date':
         nextDate = True
 
@@ -103,60 +107,82 @@ if building:
     print('Finished.')
     finish(0)
 
+if composing:
+    templatePath = scriptPath + '/../../../TelegramPrivate/updates_template.txt'
+    if not os.path.exists(templatePath):
+        print('[ERROR] Template file "' + templatePath + '" not found.')
+        finish(1)
+
+    if not re.match(r'^[a-f0-9]{40}$', lastCommit):
+        print('[ERROR] Wrong last commit: ' + lastCommit)
+        finish(1)
+
+    log = subprocess.check_output(['git', 'log', lastCommit+'..HEAD'])
+    logLines = log.split('\n')
+    firstCommit = ''
+    commits = []
+    for line in logLines:
+        if line.startswith('commit '):
+            commit = line.split(' ')[1]
+            if not len(firstCommit):
+                firstCommit = commit
+            commits.append('')
+        elif line.startswith('    '):
+            stripped = line[4:]
+            if not len(stripped):
+                continue
+            elif not len(commits):
+                print('[ERROR] Bad git log output:')
+                print(log)
+                finish(1)
+            if len(commits[len(commits) - 1]):
+                commits[len(commits) - 1] += '\n' + stripped
+            else:
+                commits[len(commits) - 1] = '- ' + stripped
+    commits.reverse()
+    if not len(commits):
+        print('[ERROR] No commits since last build :(')
+        finish(1)
+
+    changelog = '\n'.join(commits)
+    print('\n\nReady! File: ' + archive + '\nChangelog:\n' + changelog)
+    with open(templatePath, 'r') as template:
+        with open(scriptPath + '/../../out/Debug/' + outputFolder + '/command.txt', 'w') as f:
+            for line in template:
+                if line.startswith('//'):
+                    continue
+                line = line.replace('{path}', scriptPath + '/../../out/Debug/' + outputFolder + '/' + archive)
+                line = line.replace('{caption}', 'TDesktop at ' + today.replace('_', '.') + ':\n\n' + changelog)
+                f.write(line)
+    finish(0)
+
+commandPath = scriptPath + '/../../out/Debug/' + outputFolder + '/command.txt'
+if not os.path.exists(commandPath):
+    print('[ERROR] Command file not found.')
+    finish(1)
+
+readingCaption = False
+caption = ''
+with open(commandPath, 'r') as f:
+    for line in f:
+        if readingCaption:
+            caption = caption + line
+        elif line.startswith('caption: '):
+            readingCaption = True
+            caption = line[len('caption: '):]
+            if not caption.startswith('TDesktop at ' + today.replace('_', '.') + ':'):
+                print('[ERROR] Wrong caption start.')
+                finish(1)
+print('\n\nSending! File: ' + archive + '\nChangelog:\n' + caption)
+if len(caption) > 1024:
+    print('[ERROR] Length: ' + str(len(caption)))
+    print('vi ' + commandPath)
+    finish(1)
 
 if not os.path.exists('../out/Debug/' + outputFolder + '/' + archive):
     print('[ERROR] Not built yet.')
     finish(1)
 
-templatePath = scriptPath + '/../../../TelegramPrivate/updates_template.txt'
-if not os.path.exists(templatePath):
-    print('[ERROR] Template file "' + templatePath + '" not found.')
-    finish(1)
-
-if not re.match(r'^[a-f0-9]{40}$', lastCommit):
-    print('[ERROR] Wrong last commit: ' + lastCommit)
-    finish(1)
-
-log = subprocess.check_output(['git', 'log', lastCommit+'..HEAD'])
-logLines = log.split('\n')
-firstCommit = ''
-commits = []
-for line in logLines:
-    if line.startswith('commit '):
-        commit = line.split(' ')[1]
-        if not len(firstCommit):
-            firstCommit = commit
-        commits.append('')
-    elif line.startswith('    '):
-        stripped = line[4:]
-        if not len(stripped):
-            continue
-        elif not len(commits):
-            print('[ERROR] Bad git log output:')
-            print(log)
-            finish(1)
-        if len(commits[len(commits) - 1]):
-            commits[len(commits) - 1] += '\n' + stripped
-        else:
-            commits[len(commits) - 1] = '- ' + stripped
-commits.reverse()
-if not len(commits):
-    print('[ERROR] No commits since last build :(')
-    finish(1)
-
-changelog = '\n'.join(commits)
-print('\n\nReady! File: ' + archive + '\nChangelog:\n' + changelog)
-if len(changelog) > 1024:
-    print('[ERROR] Length: ' + str(len(changelog)))
-    finish(1)
-with open(templatePath, 'r') as template:
-    with open(scriptPath + '/../../out/Debug/' + outputFolder + '/command.txt', 'w') as f:
-        for line in template:
-            if line.startswith('//'):
-                continue
-            line = line.replace('{path}', scriptPath + '/../../out/Debug/' + outputFolder + '/' + archive)
-            line = line.replace('{caption}', 'TDesktop at ' + today.replace('_', '.') + ':\n\n' + changelog)
-            f.write(line)
 subprocess.call(scriptPath + '/../../out/Debug/Telegram.app/Contents/MacOS/Telegram -sendpath interpret://' + scriptPath + '/../../out/Debug/' + outputFolder + '/command.txt', shell=True)
 
 finish(0)