diff --git a/testing/btest/Baseline/istate.base/events b/testing/btest/Baseline/istate.base/events
new file mode 100644
index 0000000000..fbb3c23f28
--- /dev/null
+++ b/testing/btest/Baseline/istate.base/events
@@ -0,0 +1,33 @@
+Event [1301452424.097552] connection_pending([id=[orig_h=141.42.64.125, orig_p=56729/tcp, resp_h=125.190.109.199, resp_p=12345/tcp], orig=[size=0, state=1], resp=[size=0, state=6], start_time=1301452418.93139, duration=0.182432889938354, service={}, addl="", hot=0, history="Sr"])
+Event [1301452424.097552] connection_state_remove([id=[orig_h=141.42.64.125, orig_p=56729/tcp, resp_h=125.190.109.199, resp_p=12345/tcp], orig=[size=0, state=1], resp=[size=0, state=6], start_time=1301452418.93139, duration=0.182432889938354, service={}, addl="", hot=0, history="Sr"])
+Event [1301452424.099251] new_connection([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=0, state=1], resp=[size=0, state=0], start_time=1301452424.0315, duration=0.0, service={}, addl="cc=1", hot=0, history=""])
+Event [1301452424.280556] connection_established([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=0, state=4], resp=[size=0, state=4], start_time=1301452424.0315, duration=0.182510137557983, service={}, addl="", hot=0, history="Sh"])
+Event [1301452424.280556] protocol_confirmation([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=0, state=4], start_time=1301452424.0315, duration=0.183290958404541, service={}, addl="", hot=0, history="ShAD"]165)
+Event [1301452424.282557] http_request([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=0, state=4], start_time=1301452424.0315, duration=0.183290958404541, service={}, addl="", hot=0, history="ShAD"]"GET""/""/""1.0")
+Event [1301452424.282557] http_begin_entity([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=0, state=4], start_time=1301452424.0315, duration=0.183290958404541, service={}, addl="%events-send-1", hot=0, history="ShAD"]T)
+Event [1301452424.284421] http_header([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=0, state=4], start_time=1301452424.0315, duration=0.183290958404541, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShAD"]T"USER-AGENT""Wget/1.10")
+Event [1301452424.284421] http_header([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=0, state=4], start_time=1301452424.0315, duration=0.183290958404541, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShAD"]T"ACCEPT""*/*")
+Event [1301452424.284421] http_header([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=0, state=4], start_time=1301452424.0315, duration=0.183290958404541, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShAD"]T"HOST""www.icir.org")
+Event [1301452424.284421] http_header([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=0, state=4], start_time=1301452424.0315, duration=0.183290958404541, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShAD"]T"CONNECTION""Keep-Alive")
+Event [1301452424.284421] http_content_type([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=0, state=4], start_time=1301452424.0315, duration=0.183290958404541, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShAD"]T"TEXT""PLAIN")
+Event [1301452424.284421] http_end_entity([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=0, state=4], start_time=1301452424.0315, duration=0.183290958404541, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShAD"]T)
+Event [1301452424.284421] http_message_done([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=0, state=4], start_time=1301452424.0315, duration=0.183290958404541, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShAD"]T[start=1301452424.21479, interrupted=F, finish_msg="message ends normally", body_length=0, content_gap_length=0, header_length=86])
+Event [1301452424.465561] http_reply([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=1448, state=4], start_time=1301452424.0315, duration=0.367331027984619, service={}, addl="%events-send-1", hot=0, history="ShADd"]"1.1"200"OK")
+Event [1301452424.465561] http_begin_entity([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=1448, state=4], start_time=1301452424.0315, duration=0.367331027984619, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F)
+Event [1301452424.465561] http_header([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=1448, state=4], start_time=1301452424.0315, duration=0.367331027984619, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F"DATE""Fri, 07 Oct 2005 23:23:55 GMT")
+Event [1301452424.465561] http_header([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=1448, state=4], start_time=1301452424.0315, duration=0.367331027984619, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F"SERVER""Apache/1.3.33 (Unix)")
+Event [1301452424.465561] http_header([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=1448, state=4], start_time=1301452424.0315, duration=0.367331027984619, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F"LAST-MODIFIED""Fri, 07 Oct 2005 16:23:01 GMT")
+Event [1301452424.465561] http_header([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=1448, state=4], start_time=1301452424.0315, duration=0.367331027984619, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F"ETAG"""2c96c-23aa-4346a0e5"")
+Event [1301452424.465561] http_header([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=1448, state=4], start_time=1301452424.0315, duration=0.367331027984619, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F"ACCEPT-RANGES""bytes")
+Event [1301452424.465561] http_header([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=1448, state=4], start_time=1301452424.0315, duration=0.367331027984619, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F"CONTENT-LENGTH""9130")
+Event [1301452424.465561] http_header([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=1448, state=4], start_time=1301452424.0315, duration=0.367331027984619, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F"KEEP-ALIVE""timeout=15, max=100")
+Event [1301452424.465561] http_header([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=1448, state=4], start_time=1301452424.0315, duration=0.367331027984619, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F"CONNECTION""Keep-Alive")
+Event [1301452424.465561] http_header([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=1448, state=4], start_time=1301452424.0315, duration=0.367331027984619, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F"CONTENT-TYPE""text/html")
+Event [1301452424.465561] http_content_type([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=1448, state=4], start_time=1301452424.0315, duration=0.367331027984619, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F"TEXT""HTML")
+Event [1301452424.648565] http_entity_data([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=5792, state=4], start_time=1301452424.0315, duration=0.551820039749146, service={}, addl="%events-send-1", hot=0, history="ShADd"]F4096"^J
ICIR^J^J
^J^JICIR (The ICSI Center for Internet Research)^Jis a ^Jnon-profit^Jresearch institute at^JICSI^Jin ^JBerkeley, ^JCalifornia.
^JFor the three years from 1999 to 2001 we were named^JACIRI, the AT&T Center for Internet Research at ICSI, ^Jand were funded by AT&T.
^J^JThe goals of ICIR are to:^J
^J- Pursue research on the Internet architecture and related networking issues,^J
- ^JParticipate actively in the research (SIGCOMM and IRTF) and^Jstandards (IETF) communities,^J
- Bridge the gap between the Internet research community and commercial ^Jinterests by providing a neutral forum where topics of mutual technical ^Jinterest can be addressed.^J
^J^J^J
^J^J^J^J
^J^J^J^J^J^JPeople^J^J^J^J | ^J^J^J^JPublications^J^J^J^J^JProjects ^J^J^J^J^J | ^J^J^J ^JResearch^J Transport and Congestion^J^J^J Traffic and Topology^J^J- ^JIDMaps ^J(Internet Distance Mapping).^J
- The ^JInternet Traffic Archive.^J
- ^JMINC^J(Multicast-based Inference of Network-internal Characteristics).^J
- ^JNIMI^J(N")
+Event [1301452424.832570] http_entity_data([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=9417, state=4], start_time=1301452424.0315, duration=0.73563814163208, service={}, addl="%events-send-1", hot=0, history="ShADd"]F938"ational Internet Measurement Infrastructure).^J
^J^J^J^J^J^J | ^J^J
^J
^J
^J^J
^J^J
^JLast modified: June 2004. Copyright notice.^J^JOlder versions of this web page, in its ACIRI incarnation..^J
^JFor more information about this server, mail www@aciri.org. ^J
^JTo report unusual activity by any of our hosts, mail abuse@aciri.org.^J^J")
+Event [1301452424.832570] http_end_entity([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=9417, state=4], start_time=1301452424.0315, duration=0.73563814163208, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F)
+Event [1301452424.832570] http_message_done([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=9417, state=4], start_time=1301452424.0315, duration=0.73563814163208, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F[start=1301452424.39883, interrupted=F, finish_msg="message ends normally", body_length=9130, content_gap_length=0, header_length=265])
+Event [1301452424.990539] net_done(1301452424.99054)
+Event [1301452424.990539] bro_done()
diff --git a/testing/btest/Baseline/istate.base/receiver.conn.log b/testing/btest/Baseline/istate.base/receiver.conn.log
new file mode 100644
index 0000000000..6827ed1fee
--- /dev/null
+++ b/testing/btest/Baseline/istate.base/receiver.conn.log
@@ -0,0 +1 @@
+1301452418.931393 0.182433 141.42.64.125 125.190.109.199 other 56729 12345 tcp ? ? REJ X
diff --git a/testing/btest/Baseline/istate.base/receiver.http.log b/testing/btest/Baseline/istate.base/receiver.http.log
new file mode 100644
index 0000000000..74400b15d5
--- /dev/null
+++ b/testing/btest/Baseline/istate.base/receiver.http.log
@@ -0,0 +1,18 @@
+1301452424.282557 %events-rcv-1 start 141.42.64.125:56730 > 125.190.109.199:80
+1301452424.284421 %events-rcv-1 > USER-AGENT: Wget/1.10
+1301452424.284421 %events-rcv-1 > ACCEPT: */*
+1301452424.284421 %events-rcv-1 > HOST: www.icir.org
+1301452424.284421 %events-rcv-1 > CONNECTION: Keep-Alive
+1301452424.465561 %events-rcv-1 < DATE: Fri, 07 Oct 2005 23:23:55 GMT
+1301452424.465561 %events-rcv-1 < SERVER: Apache/1.3.33 (Unix)
+1301452424.465561 %events-rcv-1 < LAST-MODIFIED: Fri, 07 Oct 2005 16:23:01 GMT
+1301452424.465561 %events-rcv-1 < ETAG: "2c96c-23aa-4346a0e5"
+1301452424.465561 %events-rcv-1 < ACCEPT-RANGES: bytes
+1301452424.465561 %events-rcv-1 < CONTENT-LENGTH: 9130
+1301452424.465561 %events-rcv-1 < KEEP-ALIVE: timeout=15, max=100
+1301452424.465561 %events-rcv-1 < CONNECTION: Keep-Alive
+1301452424.465561 %events-rcv-1 < CONTENT-TYPE: text/html
+1301452424.648565 %events-rcv-1 <= 4096 bytes: "^J^J^JPublications^J
^J^J 125.190.109.199:80
+1301452424.214794 %events-send-1 > USER-AGENT: Wget/1.10
+1301452424.214794 %events-send-1 > ACCEPT: */*
+1301452424.214794 %events-send-1 > HOST: www.icir.org
+1301452424.214794 %events-send-1 > CONNECTION: Keep-Alive
+1301452424.398834 %events-send-1 < DATE: Fri, 07 Oct 2005 23:23:55 GMT
+1301452424.398834 %events-send-1 < SERVER: Apache/1.3.33 (Unix)
+1301452424.398834 %events-send-1 < LAST-MODIFIED: Fri, 07 Oct 2005 16:23:01 GMT
+1301452424.398834 %events-send-1 < ETAG: "2c96c-23aa-4346a0e5"
+1301452424.398834 %events-send-1 < ACCEPT-RANGES: bytes
+1301452424.398834 %events-send-1 < CONTENT-LENGTH: 9130
+1301452424.398834 %events-send-1 < KEEP-ALIVE: timeout=15, max=100
+1301452424.398834 %events-send-1 < CONNECTION: Keep-Alive
+1301452424.398834 %events-send-1 < CONTENT-TYPE: text/html
+1301452424.583323 %events-send-1 <= 4096 bytes: "^J^J^JPublications^J
^J^J^JICIR^J^J
^J^JICIR (The ICSI Center for Internet Research)^Jis a ^Jnon-profit^Jresearch institute at^JICSI^Jin ^JBerkeley, ^JCalifornia.
^JFor the three years from 1999 to 2001 we were named^JACIRI, the AT&T Center for Internet Research at ICSI, ^Jand were funded by AT&T.
^J^JThe goals of ICIR are to:^J
^J- Pursue research on the Internet architecture and related networking issues,^J
- ^JParticipate actively in the research (SIGCOMM and IRTF) and^Jstandards (IETF) communities,^J
- Bridge the gap between the Internet research community and commercial ^Jinterests by providing a neutral forum where topics of mutual technical ^Jinterest can be addressed.^J
^J^J^J
^J^J^J^J
^J^J^J^J^J^JPeople^J^J^J^J | ^J^J^J^JPublications^J^J^J^J^JProjects ^J^J^J^J^J | ^J^J^J ^JResearch^J Transport and Congestion^J^J^J Traffic and Topology^J^J- ^JIDMaps ^J(Internet Distance Mapping).^J
- The ^JInternet Traffic Archive.^J
- ^JMINC^J(Multicast-based Inference of Network-internal Characteristics).^J
- ^JNIMI^J(N")
+Event [1301459543.085124] http_entity_data([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=9417, state=4], start_time=1301459542.2806, duration=0.73563814163208, service={}, addl="%events-send-1", hot=0, history="ShADd"]F938"ational Internet Measurement Infrastructure).^J
^J^J^J^J^J^J | ^J^J
^J
^J
^J^J
^J^J
^JLast modified: June 2004. Copyright notice.^J^JOlder versions of this web page, in its ACIRI incarnation..^J
^JFor more information about this server, mail www@aciri.org. ^J
^JTo report unusual activity by any of our hosts, mail abuse@aciri.org.^J^J")
+Event [1301459543.085124] http_end_entity([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=9417, state=4], start_time=1301459542.2806, duration=0.73563814163208, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F)
+Event [1301459543.085124] http_message_done([id=[orig_h=141.42.64.125, orig_p=56730/tcp, resp_h=125.190.109.199, resp_p=80/tcp], orig=[size=98, state=4], resp=[size=9417, state=4], start_time=1301459542.2806, duration=0.73563814163208, service={}, addl="%events-send-1 %events-rcv-1", hot=0, history="ShADd"]F[start=1301459542.64793, interrupted=F, finish_msg="message ends normally", body_length=9130, content_gap_length=0, header_length=265])
+Event [1301459543.238173] net_done(1301459543.23817)
+Event [1301459543.238173] bro_done()
diff --git a/testing/btest/Baseline/istate.events/receiver.conn.log b/testing/btest/Baseline/istate.events/receiver.conn.log
new file mode 100644
index 0000000000..1677a7b6ab
--- /dev/null
+++ b/testing/btest/Baseline/istate.events/receiver.conn.log
@@ -0,0 +1 @@
+1301459537.180494 0.182433 141.42.64.125 125.190.109.199 other 56729 12345 tcp ? ? REJ X
diff --git a/testing/btest/Baseline/istate.events/receiver.http.log b/testing/btest/Baseline/istate.events/receiver.http.log
new file mode 100644
index 0000000000..b0ca7b5583
--- /dev/null
+++ b/testing/btest/Baseline/istate.events/receiver.http.log
@@ -0,0 +1,18 @@
+1301459542.533110 %events-rcv-1 start 141.42.64.125:56730 > 125.190.109.199:80
+1301459542.533110 %events-rcv-1 > USER-AGENT: Wget/1.10
+1301459542.533110 %events-rcv-1 > ACCEPT: */*
+1301459542.533110 %events-rcv-1 > HOST: www.icir.org
+1301459542.533110 %events-rcv-1 > CONNECTION: Keep-Alive
+1301459542.717115 %events-rcv-1 < DATE: Fri, 07 Oct 2005 23:23:55 GMT
+1301459542.717115 %events-rcv-1 < SERVER: Apache/1.3.33 (Unix)
+1301459542.717115 %events-rcv-1 < LAST-MODIFIED: Fri, 07 Oct 2005 16:23:01 GMT
+1301459542.717115 %events-rcv-1 < ETAG: "2c96c-23aa-4346a0e5"
+1301459542.717115 %events-rcv-1 < ACCEPT-RANGES: bytes
+1301459542.717115 %events-rcv-1 < CONTENT-LENGTH: 9130
+1301459542.717115 %events-rcv-1 < KEEP-ALIVE: timeout=15, max=100
+1301459542.717115 %events-rcv-1 < CONNECTION: Keep-Alive
+1301459542.717115 %events-rcv-1 < CONTENT-TYPE: text/html
+1301459542.901119 %events-rcv-1 <= 4096 bytes: "^J^J^JPublications^J
^J^J 125.190.109.199:80
+1301459542.463895 %events-send-1 > USER-AGENT: Wget/1.10
+1301459542.463895 %events-send-1 > ACCEPT: */*
+1301459542.463895 %events-send-1 > HOST: www.icir.org
+1301459542.463895 %events-send-1 > CONNECTION: Keep-Alive
+1301459542.647935 %events-send-1 < DATE: Fri, 07 Oct 2005 23:23:55 GMT
+1301459542.647935 %events-send-1 < SERVER: Apache/1.3.33 (Unix)
+1301459542.647935 %events-send-1 < LAST-MODIFIED: Fri, 07 Oct 2005 16:23:01 GMT
+1301459542.647935 %events-send-1 < ETAG: "2c96c-23aa-4346a0e5"
+1301459542.647935 %events-send-1 < ACCEPT-RANGES: bytes
+1301459542.647935 %events-send-1 < CONTENT-LENGTH: 9130
+1301459542.647935 %events-send-1 < KEEP-ALIVE: timeout=15, max=100
+1301459542.647935 %events-send-1 < CONNECTION: Keep-Alive
+1301459542.647935 %events-send-1 < CONTENT-TYPE: text/html
+1301459542.832424 %events-send-1 <= 4096 bytes: "^J^J^JPublications^J
^J^Jhttp.rec.log
+# @TEST-EXEC: cat sender/http.log | sed 's/^\([^ ]* \)\{2\}//' >http.snd.log
+# @TEST-EXEC: cmp http.rec.log http.snd.log
+#
+# @TEST-EXEC: bro -x receiver/events.bst | sed 's/127.0.0.1:[0-9]*//g' | grep -v Event.*remote_ >events
+# @TEST-EXEC: btest-diff events
+
+@TEST-START-FILE sender.bro
+
+@load tcp
+@load http-request
+@load http-reply
+@load http-header
+@load http-body
+@load http-abstract
+@load listen-clear
+
+@load capture-events
+
+redef peer_description = "events-send";
+
+# Make sure the HTTP connection really gets out.
+# (We still miss one final connection event because we shutdown before
+# it gets propagated but that's ok.)
+redef tcp_close_delay = 0secs;
+
+@TEST-END-FILE
+
+#############
+
+@TEST-START-FILE receiver.bro
+
+@load tcp
+@load http-request
+@load http-reply
+@load http-header
+@load http-body
+@load http-abstract
+
+@load capture-events
+@load remote
+
+redef peer_description = "events-rcv";
+
+redef Remote::destinations += {
+ ["foo"] = [$host = 127.0.0.1, $events = /.*/, $connect=T]
+};
+
+
+@TEST-END-FILE
diff --git a/testing/btest/istate/persistence.bro b/testing/btest/istate/persistence.bro
new file mode 100644
index 0000000000..7b078baefb
--- /dev/null
+++ b/testing/btest/istate/persistence.bro
@@ -0,0 +1,113 @@
+#
+# @TEST-EXEC: bro -r $TRACES/empty.trace write.bro %INPUT
+# @TEST-EXEC: cp vars.log vars.write.log
+# @TEST-EXEC: bro read.bro %INPUT
+# @TEST-EXEC: cp vars.log vars.read.log
+# @TEST-EXEC: btest-diff vars.read.log
+# @TEST-EXEC: btest-diff vars.write.log
+# @TEST-EXEC: cmp vars.read.log vars.write.log
+
+### Common code for reader and writer.
+
+event bro_done()
+ {
+ local out = open("vars.log");
+ print out, foo1;
+ print out, foo2;
+ print out, foo3;
+ print out, foo4;
+ print out, foo5;
+ print out, foo6;
+ print out, foo7;
+ print out, foo8;
+ print out, foo9;
+ print out, foo10;
+ print out, foo11;
+ print out, foo12;
+ print out, foo13;
+ print out, foo14;
+ print out, foo15;
+ print out, foo16;
+ print out, foo17;
+ }
+
+
+
+
+
+@TEST-START-FILE read.bro
+
+global foo1: count &persistent &synchronized;
+global foo2: int &persistent &synchronized;
+global foo3: string &persistent &synchronized;
+global foo4: addr &persistent &synchronized;
+global foo5: subnet &persistent &synchronized;
+global foo6: double &persistent &synchronized;
+global foo7: net &persistent &synchronized;
+global foo8: interval &persistent &synchronized;
+global foo9: table[count] of string &persistent &synchronized;
+global foo10: file &persistent &synchronized;
+global foo11: pattern &persistent &synchronized;
+global foo12: set[count] &persistent &synchronized;
+global foo13: table[count, string] of count &persistent &synchronized;
+global foo14: table[count] of pattern &persistent &synchronized;
+global foo15: port &persistent &synchronized;
+global foo16: vector of count &persistent &synchronized;
+
+type type1: record {
+ a: string;
+ b: count &default=42;
+ c: double &optional;
+ };
+
+type type2: record {
+ a: string;
+ b: type1;
+ c: type1;
+ d: double;
+ };
+
+global foo17: type2 &persistent &synchronized;
+
+@TEST-END-FILE
+
+@TEST-START-FILE write.bro
+
+global foo1 = 42 &persistent &synchronized;
+global foo2 = -42 &persistent &synchronized;
+global foo3 = "Hallihallo" &persistent &synchronized;
+global foo4 = 1.2.3.4 &persistent &synchronized;
+global foo5 = 1.2.0.0/16 &persistent &synchronized;
+global foo6 = 3.14 &persistent &synchronized;
+global foo7 = 131.159. &persistent &synchronized;
+global foo8 = 42 secs &persistent &synchronized;
+global foo9 = { [1] = "qwerty", [2] = "uiop" } &persistent &synchronized;
+global foo10 = open("test") &persistent &synchronized;
+global foo11 = /12345/ &persistent &synchronized;
+global foo12 = { 1,2,3,4,5 } &persistent &synchronized;
+global foo13 = { [1,"ABC"] = 101, [2,"DEF"] = 102, [3,"GHI"] = 103 } &persistent &synchronized;
+global foo14 = { [12345] = foo11, [12346] = foo11 } &persistent &synchronized;
+global foo15 = 42/udp &persistent &synchronized;
+global foo16: vector of count = [1,2,3] &persistent &synchronized;
+
+type type1: record {
+ a: string;
+ b: count &default=42;
+ c: double &optional;
+ };
+
+type type2: record {
+ a: string;
+ b: type1;
+ c: type1;
+ d: double;
+ };
+
+global foo17: type2 = [
+ $a = "yuyuyu",
+ $b = [$a="rec1", $b=100, $c=1.24],
+ $c = [$a="rec2", $b=200, $c=2.24],
+ $d = 7.77
+ ] &persistent &synchronized;
+
+@TEST-END-FILE
diff --git a/testing/btest/istate/pybroccoli.py b/testing/btest/istate/pybroccoli.py
new file mode 100644
index 0000000000..ae85345f9a
--- /dev/null
+++ b/testing/btest/istate/pybroccoli.py
@@ -0,0 +1,13 @@
+# @TEST-REQUIRES: grep -vq '#define BROv6' $BUILD/config.h
+# @TEST-REQUIRES: test -e $BUILD/aux/broccoli/src/libbroccoli.so
+# @TEST-REQUIRES: test -e $BUILD/aux/broccoli/bindings/broccoli-python/_broccoli_intern.so
+#
+# @TEST-EXEC: btest-bg-run bro bro $DIST/aux/broccoli/bindings/broccoli-python/tests/test.bro
+# @TEST-EXEC: sleep 1
+# @TEST-EXEC: btest-bg-run python python $DIST/aux/broccoli/bindings/broccoli-python/tests/test.py
+# @TEST-EXEC: sleep 1
+# @TEST-EXEC: btest-bg-wait -k 5
+# @TEST-EXEC: btest-diff bro/.stdout.log
+# @TEST-EXEC: btest-diff broccoli/.stdout.log
+
+
diff --git a/testing/btest/istate/sync.bro b/testing/btest/istate/sync.bro
new file mode 100644
index 0000000000..c3654fbd29
--- /dev/null
+++ b/testing/btest/istate/sync.bro
@@ -0,0 +1,164 @@
+#
+# @TEST-EXEC: btest-bg-run sender bro %INPUT ../sender.bro
+# @TEST-EXEC: sleep 1
+# @TEST-EXEC: btest-bg-run receiver bro %INPUT ../receiver.bro
+# @TEST-EXEC: sleep 1
+# @TEST-EXEC: btest-bg-wait -k 5
+#
+# @TEST-EXEC: btest-diff sender/vars.log
+# @TEST-EXEC: btest-diff receiver/vars.log
+# @TEST-EXEC: cmp sender/vars.log receiver/vars.log
+
+### Common code for sender and receiver.
+
+# Instantiate variables.
+
+global foo1 = 42 &persistent &synchronized;
+global foo2 = -42 &persistent &synchronized;
+global foo3 = "Hallihallo" &persistent &synchronized;
+global foo4 = 1.2.3.4 &persistent &synchronized;
+global foo5 = 1.2.0.0/16 &persistent &synchronized;
+global foo6 = 3.14 &persistent &synchronized;
+global foo7 = 131.159. &persistent &synchronized;
+global foo8 = 42 secs &persistent &synchronized;
+global foo9 = { [1] = "qwerty", [2] = "uiop" } &persistent &synchronized;
+global foo10 = open("test") &persistent &synchronized;
+global foo11 = /12345/ &persistent &synchronized;
+global foo12 = { 1,2,3,4,5 } &persistent &synchronized;
+global foo13 = { [1,"ABC"] = 101, [2,"DEF"] = 102, [3,"GHI"] = 103 } &persistent &synchronized;
+global foo14 = { [12345] = foo11, [12346] = foo11 } &persistent &synchronized;
+global foo15 = 42/udp &persistent &synchronized;
+global foo16: vector of count = [1,2,3] &persistent &synchronized;
+
+type type1: record {
+ a: string;
+ b: count &default=42;
+ c: double &optional;
+ };
+
+type type2: record {
+ a: string;
+ b: type1;
+ c: type1;
+ d: double;
+ };
+
+global foo17: type2 = [
+ $a = "yuyuyu",
+ $b = [$a="rec1", $b=100, $c=1.24],
+ $c = [$a="rec2", $b=200, $c=2.24],
+ $d = 7.77
+ ] &persistent &synchronized;
+
+# Print variables.
+
+event bro_done()
+ {
+ local out = open("vars.log");
+ print out, foo1;
+ print out, foo2;
+ print out, foo3;
+ print out, foo4;
+ print out, foo5;
+ print out, foo6;
+ print out, foo7;
+ print out, foo8;
+ print out, foo9;
+ print out, foo10;
+ print out, foo11;
+ print out, foo12;
+ print out, foo13;
+ print out, foo14;
+ print out, foo15;
+ print out, foo16;
+ print out, foo17;
+ }
+
+
+@TEST-START-FILE sender.bro
+
+# Perform modifications on variables.
+
+function modify()
+ {
+ foo1 = 420;
+ ++foo1;
+
+ --foo2;
+
+ foo3 = "Jodel";
+
+ foo4 = 4.3.2.1;
+
+ foo5 = 4.0.0.0/8;
+
+ foo6 = 21;
+
+ foo7 = 192.150.186;
+
+ foo9[3] = "asdfg1";
+ foo9[1] = "asdfg2";
+ delete foo9[2];
+
+ foo10 = open("test2");
+
+ foo11 = /abbcdefgh/;
+
+ add foo12[6];
+ delete foo12[1];
+
+ foo13[4,"JKL"] = 104;
+ delete foo13[1,"ABC"];
+ ++foo13[2,"DEF"];
+
+ foo14[6767] = /QWERTZ/;
+
+ foo15 = 6667/tcp;
+
+ foo16[4] = 4;
+ foo16[2] = 20;
+ ++foo16[1];
+
+ local x: type1;
+ x$a = "pop";
+ ++x$b;
+ x$c = 9.999;
+ foo17$a = "zxzxzx";
+ foo17$b = x;
+ foo17$c$a = "IOIOI";
+ ++foo17$c$b;
+ foo17$c$c = 612.2;
+ foo17$d = 6.6666;
+
+ foo2 = 1234567;
+
+}
+
+@load listen-clear
+
+event remote_connection_handshake_done(p: event_peer)
+ {
+ modify();
+ terminate_communication();
+ }
+
+redef Remote::destinations += {
+ ["foo"] = [$host = 127.0.0.1, $sync=T]
+};
+
+@TEST-END-FILE
+
+#############
+
+@TEST-START-FILE receiver.bro
+
+@load capture-events
+@load remote
+
+
+redef Remote::destinations += {
+ ["foo"] = [$host = 127.0.0.1, $events = /.*/, $connect=T, $sync=T]
+};
+
+
+@TEST-END-FILE