diff -Naur irc2.10.3p3-org/common/send.c irc2.10.3p3/common/send.c
--- irc2.10.3p3-org/common/send.c	2001-10-18 23:43:05.000000000 +0200
+++ irc2.10.3p3/common/send.c	2003-02-06 03:05:44.000000000 +0100
@@ -1391,6 +1391,10 @@
 	{ SCH_SERVICE,	"&SERVICES",	NULL },
 	{ SCH_DEBUG,	"&DEBUG",	NULL },
 	{ SCH_AUTH,	"&AUTH",	NULL },
+#ifdef CONNECTS
+	{ SCH_CONNECTS,	"&CONNECTS",	NULL },
+	{ SCH_CONNECTS,	"&USERS",	NULL },
+#endif
 };
 
 
diff -Naur irc2.10.3p3-org/common/struct_def.h irc2.10.3p3/common/struct_def.h
--- irc2.10.3p3-org/common/struct_def.h	2001-05-14 14:02:08.000000000 +0200
+++ irc2.10.3p3/common/struct_def.h	2003-02-06 03:01:30.000000000 +0100
@@ -47,7 +47,7 @@
 				*/
 #define	USERLEN		10
 #define	REALLEN	 	50
-#define	TOPICLEN	80
+#define	TOPICLEN	160
 #define	CHANNELLEN	50
 #define	PASSWDLEN 	20
 #define	KEYLEN		23
@@ -771,7 +771,13 @@
 #define	SCH_SERVICE	9
 #define	SCH_DEBUG	10
 #define	SCH_AUTH	11
+#ifdef CONNECTS
+#define SCH_CONNECTS	12
+#define SCH_USERS	13
+#define SCH_MAX		13
+#else
 #define	SCH_MAX		11
+#endif
 
 /* used for async dns values */
 
diff -Naur irc2.10.3p3-org/ircd/channel.c irc2.10.3p3/ircd/channel.c
--- irc2.10.3p3-org/ircd/channel.c	2001-07-07 16:29:33.000000000 +0200
+++ irc2.10.3p3/ircd/channel.c	2003-02-06 03:28:08.000000000 +0100
@@ -599,6 +599,16 @@
 	strcpy(chptr->topic, "SERVER MESSAGES: services joining and leaving");
 	add_user_to_channel(chptr, mp, CHFL_CHANOP);
 	chptr->mode.mode = smode;
+#ifdef CONNECTS
+	chptr = get_channel(mp, "&CONNECTS", CREATE);
+	strcpy(chptr->topic, "SERVER MESSAGES: connects");
+	add_user_to_channel(chptr, mp, CHFL_CHANOP);
+	chptr->mode.mode = smode|MODE_SECRET;
+	chptr = get_channel(mp, "&USERS", CREATE);
+	strcpy(chptr->topic, "SERVER MESSAGES: users part and join");
+	add_user_to_channel(chptr, mp, CHFL_CHANOP);
+	chptr->mode.mode = smode|MODE_SECRET;
+#endif
 #if defined(USE_IAUTH)
 	chptr = get_channel(mp, "&AUTH", CREATE);
 	strcpy(chptr->topic,
@@ -1766,6 +1776,13 @@
 	    && (lp == NULL))
 		return (ERR_INVITEONLYCHAN);
 
+#ifdef CONNECTS
+	if( (!strcmp(chptr->chname, "&USERS")
+	    || !strcmp(chptr->chname, "&CONNECTS") ) 
+		&& !IsAnOper(sptr) )
+	    return (ERR_INVITEONLYCHAN);
+#endif
+
 	if (*chptr->mode.key && (BadPtr(key) || mycmp(chptr->mode.key, key)))
 		return (ERR_BADCHANNELKEY);
 
@@ -2265,6 +2282,10 @@
 		*/
 		sendto_channel_butserv(chptr, sptr, ":%s JOIN :%s",
 						parv[0], name);
+#ifdef CONNECTS
+		sendto_flag(SCH_USERS, "%s JOIN [%s!%s@%s]", name, parv[0], 
+			sptr->user->username, sptr->user->host);
+#endif
 		if (s && UseModes(name))
 		    {
 			/* no need if user is creating the channel */
diff -Naur irc2.10.3p3-org/ircd/s_user.c irc2.10.3p3/ircd/s_user.c
--- irc2.10.3p3-org/ircd/s_user.c	2001-10-19 15:56:55.000000000 +0200
+++ irc2.10.3p3/ircd/s_user.c	2003-02-06 03:28:36.000000000 +0100
@@ -639,6 +639,10 @@
 		sprintf(buf, "%s!%s@%s", nick, user->username, user->host);
 		sptr->exitc = EXITC_REG;
 		sendto_one(sptr, rpl_str(RPL_WELCOME, nick), buf);
+#ifdef CONNECTS
+		sendto_flag(SCH_CONNECTS, "[%s] connected.", buf);
+#endif
+
 		/* This is a duplicate of the NOTICE but see below...*/
 		sendto_one(sptr, rpl_str(RPL_YOURHOST, nick),
 			   get_client_name(&me, FALSE), version);
diff -Naur irc2.10.3p3-org/support/config.h.dist irc2.10.3p3/support/config.h.dist
--- irc2.10.3p3-org/support/config.h.dist	2001-10-19 23:51:15.000000000 +0200
+++ irc2.10.3p3/support/config.h.dist	2003-02-06 01:51:59.000000000 +0100
@@ -592,3 +592,7 @@
 */
 #define	NOWRITEALARM	1
 
+/*
+Add local channel &CONNECTS (Neutrinka & Platynka)
+*/
+#undef CONNECTS
