+# is it remotely connected anywhere (with exact callsign)?
+sub present
+{
+ my $call = uc shift;
+ return DXCluster->get_exact($call);
+}
+
+# is it remotely connected anywhere (ignoring SSIDS)?
+sub presentish
+{
+ my $call = uc shift;
+ return DXCluster->get($call);
+}
+
+# is it remotely connected anywhere (with exact callsign) and on node?
+sub present_on
+{
+ my $call = uc shift;
+ my $node = uc shift;
+ my $ref = DXCluster->get_exact($call);
+ return ($ref && $ref->mynode) ? $ref->mynode->call eq $node : undef;
+}
+
+# is it remotely connected anywhere (ignoring SSIDS) and on node?
+sub presentish_on
+{
+ my $call = uc shift;
+ my $node = uc shift;
+ my $ref = DXCluster->get($call);
+ return ($ref && $ref->mynode) ? $ref->mynode->call eq $node : undef;
+}
+
+# last time this thing was connected
+sub last_connect
+{
+ my $call = uc shift;
+ return $main::systime if DXChannel->get($call);
+ my $user = DXUser->get($call);
+ return $user ? $user->lastin : 0;
+}
+
+# disconnect a locally connected thing
+sub disconnect
+{
+ my $call = uc shift;
+ my $dxchan = DXChannel->get($call);
+ if ($dxchan) {
+ if ($dxchan->is_ak1a) {
+ $dxchan->send_now("D", DXProt::pc39($main::mycall, "$main::mycall DXCron"));
+ } else {
+ $dxchan->send_now('D', "");
+ }
+ $dxchan->disconnect;
+ }
+}
+
+# start a connect process off