diff --git a/UltiSnips/ada.snippets b/UltiSnips/ada.snippets
new file mode 100644
index 0000000..d33c777
--- /dev/null
+++ b/UltiSnips/ada.snippets
@@ -0,0 +1,324 @@
+priority -50
+
+global !p
+
+def ada_case(word):
+ out = word[0].upper()
+ for i in range(1, len(word)):
+ if word[i - 1] == '_':
+ out = out + word[i].upper()
+ else:
+ out = out + word[i]
+ return out
+
+def get_year():
+ import time
+ return time.strftime("%Y")
+
+endglobal
+
+snippet wi "with"
+with $1;$0
+endsnippet
+
+snippet pac "package"
+package ${1:`!p snip.rv = ada_case(snip.basename)`} is
+ $0
+end $1;
+endsnippet
+
+snippet pacb "package body"
+package body ${1:`!p snip.rv = ada_case(snip.basename)`} is
+ $0
+end $1;
+endsnippet
+
+snippet ent "entry ... when"
+entry $1($2) when $3 is
+begin
+ $0
+end $1;
+endsnippet
+
+snippet task "task"
+task $1 is
+ entry $0
+end $1;
+endsnippet
+
+snippet taskb "task body"
+task body $1 is
+ $2
+begin
+ $0
+end $1;
+endsnippet
+
+snippet acc "accept"
+accept $1($2) do
+ $0
+end $1;
+endsnippet
+
+snippet prot "protected type"
+protected type $1($2) is
+ $0
+end $1;
+endsnippet
+
+snippet prob "protected body"
+protected body $1 is
+ $2
+begin
+ $0
+end $1;
+endsnippet
+
+snippet gen "generic type"
+generic
+ type $1 is $2;$0
+endsnippet
+
+snippet ty "type"
+type $1 is $2;$0
+endsnippet
+
+snippet tyd "type with default value"
+type $1 is $2
+ with Default_Value => $3;$0
+endsnippet
+
+snippet subty "subtype"
+subtype $1 is $2;$0
+endsnippet
+
+snippet dec "declare block"
+declare
+ $1
+begin
+ $0
+end;
+endsnippet
+
+snippet decn "declare named block"
+$1:
+declare
+ $2
+begin
+ $0
+end $1;
+endsnippet
+
+snippet ifex "if expression"
+if $1 then $2 else $0
+endsnippet
+
+snippet casex "case expression"
+case $1 is
+ when $2 => $3,$0
+endsnippet
+
+snippet fora "for all"
+for all $1 ${2:in} $3 => $0
+endsnippet
+
+snippet fors "for some"
+for some $1 ${2:in} $3 => $0
+endsnippet
+
+snippet if "if"
+if $1 then
+ $0
+end if;
+endsnippet
+
+snippet ife "if ... else"
+if $1 then
+ $2
+else
+ $0
+end if;
+endsnippet
+
+snippet el "else"
+else
+ $0
+endsnippet
+
+snippet eif "elsif"
+elsif $1 then
+ $0
+endsnippet
+
+snippet wh "while"
+while $1 loop
+ $0
+end loop;
+endsnippet
+
+snippet nwh "named while"
+$1:
+while $2 loop
+ $0
+end loop $1;
+endsnippet
+
+snippet for "for"
+for ${1:I} in $2 loop
+ $0
+end loop;
+endsnippet
+
+snippet fore "for each"
+for $1 of $2 loop
+ $0
+end loop;
+endsnippet
+
+snippet nfor "named for"
+$1:
+for ${2:I} in $3 loop
+ $0
+end loop $1;
+endsnippet
+
+snippet nfore "named for each"
+$1:
+for $2 of $3 loop
+ $0
+end loop $1;
+endsnippet
+
+snippet proc "procedure"
+procedure $1($2) is
+ $3
+begin
+ $0
+end $1;
+endsnippet
+
+snippet procd "procedure declaration"
+procedure $1;$0
+endsnippet
+
+snippet fun "function"
+function $1($2) return $3 is
+ $4
+begin
+ $0
+end $1;
+endsnippet
+
+snippet fune "expression function"
+function $1 return $2 is
+ ($3);$0
+endsnippet
+
+snippet fund "function declaration"
+function $1 return $2;$0
+endsnippet
+
+snippet ret "extended return"
+return $1 do
+ $0
+end return;
+endsnippet
+
+snippet rec "record"
+record
+ $0
+end record;
+endsnippet
+
+snippet case "case"
+case $1 is
+ when $2 => $3;$0
+end case;
+endsnippet
+
+snippet whe "when"
+when $1 => $2;$0
+endsnippet
+
+snippet wheo "when others"
+when others => $1;$0
+endsnippet
+
+snippet lo "loop"
+loop
+ $0
+end loop;
+endsnippet
+
+snippet nlo "named loop"
+$1:
+loop
+ $0
+end loop $1;
+endsnippet
+
+snippet ex "exit when"
+exit when $1;$0
+endsnippet
+
+snippet put "Ada.Text_IO.Put"
+Ada.Text_IO.Put($1);$0
+endsnippet
+
+snippet putl "Ada.Text_IO.Put_Line"
+Ada.Text_IO.Put_Line($1);$0
+endsnippet
+
+snippet get "Ada.Text_IO.Get"
+Ada.Text_IO.Get($1);$0
+endsnippet
+
+snippet getl "Ada.Text_IO.Get_Line"
+Ada.Text_IO.Get_Line($1);$0
+endsnippet
+
+snippet newline "Ada.Text_IO.New_Line"
+Ada.Text_IO.New_Line(${1:1});$0
+endsnippet
+
+snippet gpl "GPL license header"
+-- This program is free software; you can redistribute it and/or modify
+-- it under the terms of the GNU ${1}General Public License as published by
+-- the Free Software Foundation; either version ${2:3} of the License, or
+-- (at your option) any later version.
+--
+-- This program is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU $1General Public License for more details.
+--
+-- You should have received a copy of the GNU $1General Public License
+-- along with this program; if not, see .
+--
+-- Copyright (C) ${3:Author}, ${4:`!p snip.rv = get_year()`}
+
+$0
+endsnippet
+
+snippet gplf "GPL file license header"
+-- This file is part of ${1:Program-Name}.
+--
+-- $1 is free software: you can redistribute it and/or modify
+-- it under the terms of the GNU ${2}General Public License as published by
+-- the Free Software Foundation, either version ${3:3} of the License, or
+-- (at your option) any later version.
+--
+-- $1 is distributed in the hope that it will be useful,
+-- but WITHOUT ANY WARRANTY; without even the implied warranty of
+-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+-- GNU $2General Public License for more details.
+--
+-- You should have received a copy of the GNU $2General Public License
+-- along with $1. If not, see .
+--
+-- Copyright (C) ${4:Author}, ${5:`!p snip.rv = get_year()`}
+
+$0
+endsnippet
+
+# vim:ft=snippets:
diff --git a/snippets/ada.snippets b/snippets/ada.snippets
new file mode 100644
index 0000000..ce377b9
--- /dev/null
+++ b/snippets/ada.snippets
@@ -0,0 +1,255 @@
+snippet wi with
+ with ${1};${0}
+
+snippet pac package
+ package ${1} is
+ ${0}
+ end $1;
+
+snippet pacb package body
+ package body ${1} is
+ ${0}
+ end $1;
+
+snippet ent entry ... when
+ entry ${1}(${2}) when ${3} is
+ begin
+ ${0}
+ end $1;
+
+snippet task task
+ task ${1} is
+ entry ${0}
+ end $1;
+
+snippet taskb task body
+ task body ${1} is
+ ${2}
+ begin
+ ${0}
+ end $1;
+
+snippet acc accept
+ accept ${1}(${2}) do
+ ${0}
+ end $1;
+
+snippet prot protected type
+ protected type ${1}(${2}) is
+ ${0}
+ end $1;
+
+snippet prob protected body
+ protected body ${1} is
+ ${2}
+ begin
+ ${0}
+ end $1;
+
+snippet gen generic type
+ generic
+ type ${1} is ${2};${0}
+
+snippet ty type
+ type ${1} is ${2};${0}
+
+snippet tyd type with default value
+ type ${1} is ${2}
+ with Default_Value => ${3};${0}
+
+snippet subty subtype
+ subtype ${1} is ${2};${0}
+
+snippet dec declare block
+ declare
+ ${1}
+ begin
+ ${0}
+ end;
+
+snippet decn declare named block
+ ${1}:
+ declare
+ ${2}
+ begin
+ ${0}
+ end $1;
+
+snippet ifex if expression
+ if ${1} then ${2} else ${0}
+
+snippet casex case expression
+ case ${1} is
+ when ${2} => ${3},${0}
+
+snippet fora for all
+ for all ${1} ${2:in} ${3} => ${0}
+
+snippet fors for some
+ for some ${1} ${2:in} ${3} => ${0}
+
+snippet if if
+ if ${1} then
+ ${0}
+ end if;
+
+snippet ife if ... else
+ if ${1} then
+ ${2}
+ else
+ ${0}
+ end if;
+
+snippet el else
+ else
+ ${0}
+
+snippet eif elsif
+ elsif ${1} then
+ ${0}
+
+snippet wh while
+ while ${1} loop
+ ${0}
+ end loop;
+
+snippet nwh named while
+ ${1}:
+ while ${2} loop
+ ${0}
+ end loop $1;
+
+snippet for for
+ for ${1:I} in ${2} loop
+ ${0}
+ end loop;
+
+snippet fore for each
+ for ${1} of ${2} loop
+ ${0}
+ end loop;
+
+snippet nfor named for
+ ${1}:
+ for ${2:I} in ${3} loop
+ ${0}
+ end loop $1;
+
+snippet nfore named for each
+ ${1}:
+ for ${2} of ${3} loop
+ ${0}
+ end loop $1;
+
+snippet proc procedure
+ procedure ${1}(${2}) is
+ ${3}
+ begin
+ ${0}
+ end $1;
+
+snippet procd procedure declaration
+ procedure ${1};${0}
+
+snippet fun function
+ function ${1}(${2}) return ${3} is
+ ${4}
+ begin
+ ${0}
+ end $1;
+
+snippet fune expression function
+ function ${1} return ${2} is
+ (${3});${0}
+
+snippet fund function declaration
+ function ${1} return ${2};${0}
+
+snippet ret extended return
+ return ${1} do
+ ${0}
+ end return;
+
+snippet rec record
+ record
+ ${0}
+ end record;
+
+snippet case case
+ case ${1} is
+ when ${2} => ${3};${0}
+ end case;
+
+snippet whe when
+ when ${1} => ${2};${0}
+
+snippet wheo when others
+ when others => ${1};${0}
+
+snippet lo loop
+ loop
+ ${0}
+ end loop;
+
+snippet nlo named loop
+ ${1}:
+ loop
+ ${0}
+ end loop $1;
+
+snippet ex exit when
+ exit when ${1};${0}
+
+snippet put Ada.Text_IO.Put
+ Ada.Text_IO.Put(${1});${0}
+
+snippet putl Ada.Text_IO.Put_Line
+ Ada.Text_IO.Put_Line(${1});${0}
+
+snippet get Ada.Text_IO.Get
+ Ada.Text_IO.Get(${1});${0}
+
+snippet getl Ada.Text_IO.Get_Line
+ Ada.Text_IO.Get_Line(${1});${0}
+
+snippet newline Ada.Text_IO.New_Line
+ Ada.Text_IO.New_Line(${1:1});${0}
+
+snippet gpl GPL license header
+ -- This program is free software; you can redistribute it and/or modify
+ -- it under the terms of the GNU ${1}General Public License as published by
+ -- the Free Software Foundation; either version ${2:3} of the License, or
+ -- (at your option) any later version.
+ --
+ -- This program is distributed in the hope that it will be useful,
+ -- but WITHOUT ANY WARRANTY; without even the implied warranty of
+ -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ -- GNU $1General Public License for more details.
+ --
+ -- You should have received a copy of the GNU $1General Public License
+ -- along with this program; if not, see .
+ --
+ -- Copyright (C) ${3:Author}, ${4:`strftime("%Y")`}
+
+ ${0}
+
+snippet gplf GPL file license header
+ -- This file is part of ${1:Program-Name}.
+ --
+ -- $1 is free software: you can redistribute it and/or modify
+ -- it under the terms of the GNU ${2}General Public License as published by
+ -- the Free Software Foundation, either version ${3:3} of the License, or
+ -- (at your option) any later version.
+ --
+ -- $1 is distributed in the hope that it will be useful,
+ -- but WITHOUT ANY WARRANTY; without even the implied warranty of
+ -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ -- GNU $2General Public License for more details.
+ --
+ -- You should have received a copy of the GNU $2General Public License
+ -- along with $1. If not, see .
+ --
+ -- Copyright (C) ${4:Author}, ${5:`strftime("%Y")`}
+
+ ${0}
+