diff -u --recursive ./asterisk-1.2.4/apps/app_voicemail.c ./asterisk-1.2.4-vmru/apps/app_voicemail.c
--- ./asterisk-1.2.4/apps/app_voicemail.c	2006-01-12 09:14:22.000000000 +0300
+++ ./asterisk-1.2.4-vmru/apps/app_voicemail.c	2006-02-26 19:43:53.000000000 +0300
@@ -4492,6 +4492,111 @@
 	return res;
 }
 
+static int get_lastdigits(int num) {                                                                                             
+        if (num < 20) {                                                                                                             
+                return num;                                                                                                         
+        } else if (num < 100) {                                                                                                     
+                return get_lastdigits(num % 10);
+        } else if (num < 1000) {                                                                                                    
+                return get_lastdigits(num % 100);
+        }                                                                                
+        return 0;       /* number too big */                                                                                        
+}
+
+
+static int vm_intro_ru(struct ast_channel *chan,struct vm_state *vms)
+{
+        int res;
+  int lastnum;
+  int dcnum;
+        res = ast_play_and_wait(chan, "vm-youhave");
+        if (!res) {
+   lastnum=get_lastdigits(vms->newmessages);
+   if (vms->newmessages) {
+      if (vms->newmessages == 1) {
+                                res = ast_play_and_wait(chan, "digits/ru/odno");
+                        }
+      else
+      if((vms->newmessages >20) && (lastnum == 1)){
+       dcnum=(vms->newmessages)-lastnum;
+                                res = say_and_wait(chan, dcnum, chan->language);
+       res = ast_play_and_wait(chan, "odno");
+                        }
+      else {
+      res = say_and_wait(chan, vms->newmessages, chan->language);
+      }
+
+      if (!res) {
+                                if ((lastnum == 1) && (vms->newmessages != 11))
+                                        res = ast_play_and_wait(chan, "vm-novoe");
+                                else
+                                        res = ast_play_and_wait(chan, "vm-novyh");
+                        }
+                        
+      if (vms->oldmessages && !res)
+                                res = ast_play_and_wait(chan, "vm-and");
+                        else if (!res) {
+                                if ((lastnum == 1) && (vms->newmessages != 11))
+                                res = ast_play_and_wait(chan, "vm-soobshenie");
+       else
+       if (((vms->newmessages < 10) || (vms->newmessages > 21)) && (lastnum < 5))
+                         res = ast_play_and_wait(chan, "vm-soobsheniya");
+       else
+                         res = ast_play_and_wait(chan, "vm-soobsheniy");
+       }
+       
+                        }
+
+                if (!res && vms->oldmessages) {
+      lastnum=get_lastdigits(vms->oldmessages);
+      
+      if ((vms->oldmessages == 1)) {
+                                 res = ast_play_and_wait(chan, "digits/ru/odno");
+                        }
+      else
+      if((vms->oldmessages >20) && (lastnum == 1))
+      {
+       dcnum=vms->oldmessages-lastnum;
+                                res = say_and_wait(chan, dcnum, chan->language);
+       res = ast_play_and_wait(chan, "odno");
+                        }
+      else 
+      {
+       res = say_and_wait(chan, vms->oldmessages, chan->language);
+      }
+      
+      
+      if (!res) {
+                                if ((lastnum == 1) && (vms->oldmessages != 11))
+                                        res = ast_play_and_wait(chan, "vm-staroe");
+                                else
+                                        res = ast_play_and_wait(chan, "vm-staryh");
+                        }
+                        
+                        if (!res) {
+      
+                                if ((lastnum == 1) && (vms->oldmessages != 11))
+                                res = ast_play_and_wait(chan, "vm-soobshenie");
+       else     
+       if (((vms->oldmessages < 10) || (vms->oldmessages > 21)) && (lastnum < 5))
+                         res = ast_play_and_wait(chan, "vm-soobsheniya");
+       else
+                         res = ast_play_and_wait(chan, "vm-soobsheniy");
+      } 
+      }
+       
+                  if (!res) {  
+                        if (!vms->oldmessages && !vms->newmessages) {
+                                res = ast_play_and_wait(chan, "vm-no");
+                                if (!res)
+                                        res = ast_play_and_wait(chan, "vm-soobsheniy");
+                        }
+           }
+  }
+        return res;
+}
+
+
 static int vm_intro(struct ast_channel *chan,struct vm_state *vms)
 {
 	/* Play voicemail intro - syntax is different for different languages */
@@ -4515,6 +4620,8 @@
 		return vm_intro_se(chan, vms);
 	} else if (!strcasecmp(chan->language, "no")) {	/* NORWEGIAN syntax */
 		return vm_intro_no(chan, vms);
+	} else if (!strcasecmp(chan->language, "ru")) {   /* RUSSIAN syntax */
+		return vm_intro_ru(chan, vms);
 	} else {					/* Default to ENGLISH */
 		return vm_intro_en(chan, vms);
 	}