diff --git a/README.md b/README.md
index 923827fa01bef1ccb6a96cbb8e5dbc71450589d9..02ed52c864e66be5be80448c3c8c9b980e6f116a 100644
--- a/README.md
+++ b/README.md
@@ -100,3 +100,15 @@ in `etc/translation.vars` can be overridden by creating the file
     ```
     $ tx push -s
     ```
+
+## Updating spec tags:
+
+ctags is used to generate references to the specifications.
+The tags file is i2p2www/spec/spectags.
+When the specifications are changed, the file should be regenerated and checked in.
+
+Command to generate the file:
+
+    ```
+    $ cd i2p2www/spec && ctags -f spectags --langdef=rst --langmap=rst:.rst --regex-rst=/_type-\([a-zA-Z0-9]+\)/\\1/t,type/ --regex-rst=/_struct-\([a-zA-Z0-9]+\)/\\1/s,struct/ --regex-rst=/_msg-\([a-zA-Z]+\)/\\1/m,msg/ -R -n *.rst
+    ```
diff --git a/i2p2www/spec/spectags b/i2p2www/spec/spectags
index f1c30bc2191f26988e82b3f54c4ba2c35f57a4fc..28f5aa8e256293a6eb344b4ebeaeb79f87c200d4 100644
--- a/i2p2www/spec/spectags
+++ b/i2p2www/spec/spectags
@@ -4,73 +4,81 @@
 !_TAG_PROGRAM_NAME	Exuberant Ctags	//
 !_TAG_PROGRAM_URL	http://ctags.sourceforge.net	/official site/
 !_TAG_PROGRAM_VERSION	5.9~svn20110310	//
-BandwidthLimits	i2cp.rst	441;"	m
-Boolean	common-structures.rst	110;"	t
-BuildRequestRecord	i2np.rst	175;"	s
-BuildResponseRecord	i2np.rst	349;"	s
-Certificate	common-structures.rst	340;"	t
-CreateLeaseSet	i2cp.rst	469;"	m
-CreateSession	i2cp.rst	503;"	m
-Data	i2np.rst	1098;"	m
-DatabaseLookup	i2np.rst	653;"	m
-DatabaseSearchReply	i2np.rst	808;"	m
-DatabaseStore	i2np.rst	552;"	m
-Date	common-structures.rst	80;"	t
-DeliveryInstructions	common-structures.rst	1070;"	s
-DeliveryStatus	i2np.rst	882;"	m
-DestLookup	i2cp.rst	535;"	m
-DestReply	i2cp.rst	557;"	m
-Destination	common-structures.rst	680;"	s
-DestroySession	i2cp.rst	580;"	m
-Disconnect	i2cp.rst	599;"	m
-Garlic	i2np.rst	925;"	m
-GarlicClove	i2np.rst	394;"	s
-GarlicCloveDeliveryInstructions	i2np.rst	456;"	s
-GetBandwidthLimits	i2cp.rst	619;"	m
-GetDate	i2cp.rst	642;"	m
-Hash	common-structures.rst	293;"	t
-HostLookup	i2cp.rst	675;"	m
-HostReply	i2cp.rst	715;"	m
-I2CPMessageHeader	i2cp.rst	299;"	s
-I2NPMessageHeader	i2np.rst	93;"	s
-Integer	common-structures.rst	67;"	t
-KeysAndCert	common-structures.rst	580;"	s
-Lease	common-structures.rst	713;"	s
-LeaseSet	common-structures.rst	761;"	s
-Mapping	common-structures.rst	502;"	t
-MessageId	i2cp.rst	319;"	s
-MessagePayload	i2cp.rst	740;"	m
-MessageStatus	i2cp.rst	761;"	m
-Payload	i2cp.rst	338;"	s
-PrivateKey	common-structures.rst	145;"	t
-PublicKey	common-structures.rst	128;"	t
-ReceiveMessageBegin	i2cp.rst	903;"	m
-ReceiveMessageEnd	i2cp.rst	929;"	m
-ReconfigureSession	i2cp.rst	954;"	m
-ReportAbuse	i2cp.rst	984;"	m
-RequestLeaseSet	i2cp.rst	1012;"	m
-RequestVariableLeaseSet	i2cp.rst	1040;"	m
-RouterAddress	common-structures.rst	897;"	s
-RouterIdentity	common-structures.rst	651;"	s
-RouterInfo	common-structures.rst	969;"	s
-SendMessage	i2cp.rst	1066;"	m
-SendMessageExpires	i2cp.rst	1109;"	m
-SessionConfig	i2cp.rst	358;"	s
-SessionId	i2cp.rst	385;"	s
-SessionKey	common-structures.rst	162;"	t
-SessionStatus	i2cp.rst	1252;"	m
-SessionTag	common-structures.rst	308;"	t
-SetDate	i2cp.rst	1297;"	m
-Signature	common-structures.rst	254;"	t
-SigningPrivateKey	common-structures.rst	216;"	t
-SigningPublicKey	common-structures.rst	177;"	t
-String	common-structures.rst	94;"	t
-Tunnel	tunnel-message.rst	33;"	m
-TunnelBuild	i2np.rst	1127;"	m
-TunnelBuildReply	i2np.rst	1162;"	m
-TunnelData	i2np.rst	1020;"	m
-TunnelGateway	i2np.rst	1063;"	m
-TunnelId	common-structures.rst	323;"	t
-TunnelMessageDeliveryInstructions	tunnel-message.rst	161;"	s
-VariableTunnelBuild	i2np.rst	1180;"	m
-VariableTunnelBuildReply	i2np.rst	1213;"	m
+BandwidthLimits	i2cp.rst	467;"	m
+BlindingInfo	i2cp.rst	496;"	m
+BuildRequestRecord	i2np.rst	214;"	s
+BuildResponseRecord	i2np.rst	390;"	s
+Certificate	common-structures.rst	310;"	t
+CreateLeaseSet	i2cp.rst	585;"	m
+CreateLeaseSet	i2cp.rst	622;"	m
+CreateSession	i2cp.rst	679;"	m
+Data	i2np.rst	1337;"	m
+DatabaseLookup	i2np.rst	718;"	m
+DatabaseSearchReply	i2np.rst	1045;"	m
+DatabaseStore	i2np.rst	596;"	m
+Date	common-structures.rst	32;"	t
+DeliveryInstructions	common-structures.rst	1699;"	s
+DeliveryStatus	i2np.rst	1119;"	m
+DestLookup	i2cp.rst	711;"	m
+DestReply	i2cp.rst	733;"	m
+Destination	common-structures.rst	673;"	s
+DestroySession	i2cp.rst	756;"	m
+Disconnect	i2cp.rst	775;"	m
+EncryptedLeaseSet	common-structures.rst	1394;"	s
+Garlic	i2np.rst	1162;"	m
+GarlicClove	i2np.rst	435;"	s
+GarlicCloveDeliveryInstructions	i2np.rst	497;"	s
+GetBandwidthLimits	i2cp.rst	795;"	m
+GetDate	i2cp.rst	818;"	m
+Hash	common-structures.rst	263;"	t
+HostLookup	i2cp.rst	851;"	m
+HostReply	i2cp.rst	891;"	m
+I2CPMessageHeader	i2cp.rst	315;"	s
+I2NPMessageHeader	i2np.rst	116;"	s
+Integer	common-structures.rst	19;"	t
+KeysAndCert	common-structures.rst	573;"	s
+Lease	common-structures.rst	706;"	s
+Lease2	common-structures.rst	891;"	s
+LeaseSet	common-structures.rst	754;"	s
+LeaseSet2	common-structures.rst	1076;"	s
+LeaseSet2Header	common-structures.rst	1000;"	s
+Mapping	common-structures.rst	495;"	t
+MessageId	i2cp.rst	335;"	s
+MessagePayload	i2cp.rst	927;"	m
+MessageStatus	i2cp.rst	948;"	m
+MetaLease	common-structures.rst	1211;"	s
+MetaLeaseSet	common-structures.rst	1276;"	s
+OfflineSignature	common-structures.rst	944;"	s
+Payload	i2cp.rst	354;"	s
+PrivateKey	common-structures.rst	94;"	t
+PublicKey	common-structures.rst	62;"	t
+ReceiveMessageBegin	i2cp.rst	1090;"	m
+ReceiveMessageEnd	i2cp.rst	1116;"	m
+ReconfigureSession	i2cp.rst	1141;"	m
+ReportAbuse	i2cp.rst	1171;"	m
+RequestLeaseSet	i2cp.rst	1199;"	m
+RequestVariableLeaseSet	i2cp.rst	1227;"	m
+RouterAddress	common-structures.rst	1519;"	s
+RouterIdentity	common-structures.rst	644;"	s
+RouterInfo	common-structures.rst	1591;"	s
+SendMessage	i2cp.rst	1253;"	m
+SendMessageExpires	i2cp.rst	1296;"	m
+SessionConfig	i2cp.rst	374;"	s
+SessionId	i2cp.rst	409;"	s
+SessionKey	common-structures.rst	126;"	t
+SessionStatus	i2cp.rst	1439;"	m
+SessionTag	common-structures.rst	278;"	t
+SetDate	i2cp.rst	1484;"	m
+Signature	common-structures.rst	222;"	t
+SigningPrivateKey	common-structures.rst	182;"	t
+SigningPublicKey	common-structures.rst	141;"	t
+String	common-structures.rst	46;"	t
+Tunnel	tunnel-message.rst	36;"	m
+TunnelBuild	i2np.rst	1371;"	m
+TunnelBuildReply	i2np.rst	1412;"	m
+TunnelData	i2np.rst	1259;"	m
+TunnelGateway	i2np.rst	1302;"	m
+TunnelId	common-structures.rst	293;"	t
+TunnelMessageDeliveryInstructions	tunnel-message.rst	164;"	s
+VariableTunnelBuild	i2np.rst	1434;"	m
+VariableTunnelBuildReply	i2np.rst	1469;"	m