Just switched everything over from using ISC DHCP to KEA DHCP. I noticed one annoyance.
Assume IPv4 only and a 1 hour DHCP lease for both ISC and KEA:
In ISC DHCP, If I have a host that I only turn on every few days or so, it will always get the same address from the pool.
In KEA DHCP, If I have a host that I only turn on every few days or so, it will get a different address from the pool.
So for example, if the reservation range is from .100 to .120, one day I may get .101, and another day I might get .100 if I didn't give out any IPs since the last time the machine was on.
I don't want to increase the lease time because I want the client to request a new lease frequently in case something changes.
ISC DHCP was much better about giving previous addresses out. I never exhaust the pool range, so it was pretty much similar to having static entries without needing to make static entries.
With ISC DHCP, I can have the machine off for weeks and still get the same dynamic IP address it gave me a while back.
Is there any way to make KEA remember IP addresses better and behave like ISC in that regard?
It's the client that remembers its old address across reboots and asks if it is available, first. If free, the server is supposed to acknowledge it and hand out a new lease for the same address. I cannot picture Kea no following that part of the RFC.
What I can picture though, is Kea more aggressively reusing addresses for which the lease has expired and handing them out to a different client.
I would make a protocol with tcpdump when you power on such a client after a couple of days to watch if that is what happens.
HTH,
Patrick
Quote from: Patrick M. Hausen on August 18, 2025, 08:07:50 PMWhat I can picture though, is Kea more aggressively reusing addresses for which the lease has expired and handing them out to a different client.
I would make a protocol with tcpdump when you power on such a client after a couple of days to watch if that is what happens.
That's exactly what's going on. Same clients I've been using for years. I ran tcpdump and fed the pcap into wireshark to look at. KEA is just recycling addresses much more aggressively than ISC.
I don't see an option to change this behavior in the opnsense web gui, so I'd probably have to change something in the KEA conf file.
I'm not sure, but I think that the conf file would get overwritten by opnsense on boot/upgrade/config change, so I'd have to manually change the KEA conf file every time, unless there is a better way to do this? Ideally like a "free-form" "advanced options" that can get appended to the KEA Conf file via the opnsense web gui. I've seen opnsense do this for other things like OpenVPN settings.
Basically, the good news is KEA does expose some tunables to make it behave like ISC with regard to lease recycling. The bad news is, opnsense doesn't expose any of that to the user via the web gui.
You could first check with whatever platform the Kea community uses - or maybe just their documentation - if they support changing the allocation strategy at all.
And if yes, then create an issue on Github to include that option in the UI.
Kind regards,
Patrick
kea 2.6.3 supports DHCP lease affinity, but the configuration options haven't yet been exposed in OPNsense GUI
https://forum.opnsense.org/index.php?topic=48462.0
https://github.com/opnsense/core/issues/9094
In current OPNsense 25.7.1_1 release, manually editing the kea config file to add the options, are overwritten / removed when kea service is re-started ( from either OPNsense GUI or cli)...
Quote from: hharry on August 19, 2025, 02:10:49 AMkea 2.6.3 supports DHCP lease affinity, but the configuration options haven't yet been exposed in OPNsense GUI
https://forum.opnsense.org/index.php?topic=48462.0
https://github.com/opnsense/core/issues/9094
In current OPNsense 25.7.1_1 release, manually editing the kea config file to add the options, are overwritten / removed when kea service is re-started ( from either OPNsense GUI or cli)...
Thanks for posting this. https://github.com/opnsense/core/issues/9094 is exactly what we would need to address the issue.
Quote from: os914964619 on August 19, 2025, 03:34:51 AMThanks for posting this. https://github.com/opnsense/core/issues/9094 is exactly what we would need to address the issue.
To help get better visibility on customer demand, perhaps add a comment in https://github.com/opnsense/core/issues/9094 to express your interest in the existing kea DHCP lease affinity capability configuration options, being added to OPNsense GUI...
Quote from: os914964619 on August 19, 2025, 03:34:51 AMQuote from: hharry on August 19, 2025, 02:10:49 AMkea 2.6.3 supports DHCP lease affinity, but the configuration options haven't yet been exposed in OPNsense GUI
https://forum.opnsense.org/index.php?topic=48462.0
https://github.com/opnsense/core/issues/9094
In current OPNsense 25.7.1_1 release, manually editing the kea config file to add the options, are overwritten / removed when kea service is re-started ( from either OPNsense GUI or cli)...
Thanks for posting this. https://github.com/opnsense/core/issues/9094 is exactly what we would need to address the issue.
Not sure about the scale of your issue and the number of machines affected, but why don't you just reserve an IP for this client based on its MAC address (under 'reservations' tab in the KEA service configuration)? Make sure the assigned IP is outside of the range dynamically assigned by KEA but still in the same subnet. Your client will get the exact same IP each time it request one through DHCP.
Quote from: hharry on August 19, 2025, 05:04:18 AMTo help get better visibility on customer demand, perhaps add a comment in https://github.com/opnsense/core/issues/9094 (https://github.com/opnsense/core/issues/9094) to express your interest in the existing kea DHCP lease affinity capability configuration options, being added to OPNsense GUI...
First of all one should file a proper issue. This is marked as incomplete and will probably be ignored and eventually closed automatically.
You must use and fill in the full template when creating an issue.
It very unfortunate that OPNsense developers are not going to implement the already existing and very well documented kea DHCP lease affinity configuration options.
Quote from: hharry on August 19, 2025, 11:29:22 AMIt very unfortunate that OPNsense developers are not going to implement the already existing kea DHCP lease affinity configuration options.
Who said they won't? Nobody created a proper feature request, yet.
Quote from: sstaible on August 19, 2025, 11:04:02 AMQuote from: os914964619 on August 19, 2025, 03:34:51 AMQuote from: hharry on August 19, 2025, 02:10:49 AMkea 2.6.3 supports DHCP lease affinity, but the configuration options haven't yet been exposed in OPNsense GUI
https://forum.opnsense.org/index.php?topic=48462.0
https://github.com/opnsense/core/issues/9094
In current OPNsense 25.7.1_1 release, manually editing the kea config file to add the options, are overwritten / removed when kea service is re-started ( from either OPNsense GUI or cli)...
Thanks for posting this. https://github.com/opnsense/core/issues/9094 is exactly what we would need to address the issue.
Not sure about the scale of your issue and the number of machines affected, but why don't you just reserve an IP for this client based on its MAC address (under 'reservations' tab in the KEA service configuration)? Make sure the assigned IP is outside of the range dynamically assigned by KEA but still in the same subnet. Your client will get the exact same IP each time it request one through DHCP.
This is a great suggestion.
Quote from: hharry on August 19, 2025, 02:10:49 AMkea 2.6.3 supports DHCP lease affinity, but the configuration options haven't yet been exposed in OPNsense GUI
https://forum.opnsense.org/index.php?topic=48462.0
https://github.com/opnsense/core/issues/9094
In current OPNsense 25.7.1_1 release, manually editing the kea config file to add the options, are overwritten / removed when kea service is re-started ( from either OPNsense GUI or cli)...
Even if you press the ~"Custom config" option in GUI advanced?
Quote from: sopex8260 on August 19, 2025, 01:02:58 PM"Custom config" option in GUI advanced
nah mate, not for kea in current version of OPNsense UI....
Quote from: hharry on August 19, 2025, 02:12:21 PMQuote from: sopex8260 on August 19, 2025, 01:02:58 PM"Custom config" option in GUI advanced
nah mate, not for kea in current version of OPNsense UI....
So you choose the advanced config under Kea and it doesn't keep the custom changes?
Quote from: sopex8260 on August 19, 2025, 02:34:11 PMSo you choose the advanced config under Kea and it doesn't keep the custom changes?
there is no advanced config custom options in Services: Kea DHCP: Kea DHCPv4
If you had read the link i provided earlier, you would have noticed below are the kea DHCP server lease affinity config options we are after.
Quote from: hharry on August 19, 2025, 02:56:28 PMQuote from: sopex8260 on August 19, 2025, 02:34:11 PMSo you choose the advanced config under Kea and it doesn't keep the custom changes?
there is no advanced config custom options in Services: Kea DHCP: Kea DHCPv4
Manual = Custom
Quote from: sopex8260 on August 19, 2025, 03:02:03 PMQuote from: hharry on August 19, 2025, 02:56:28 PMQuote from: sopex8260 on August 19, 2025, 02:34:11 PMSo you choose the advanced config under Kea and it doesn't keep the custom changes?
there is no advanced config custom options in Services: Kea DHCP: Kea DHCPv4
Manual = Custom
oh, now i see what you mean, i now have enabled manual config, so i can take control of /usr/local/etc/kea/kea-dhcp4.conf, and i've added the below config which kea appears to have accepted...after restarting, which should give me 7 hours
days of lease affinity...will see if it does what the kea documentation states...
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 25200,
"flush-reclaimed-timer-wait-time": 25
},
Quote from: hharry on August 19, 2025, 03:04:19 PMQuote from: sopex8260 on August 19, 2025, 03:02:03 PMQuote from: hharry on August 19, 2025, 02:56:28 PMQuote from: sopex8260 on August 19, 2025, 02:34:11 PMSo you choose the advanced config under Kea and it doesn't keep the custom changes?
there is no advanced config custom options in Services: Kea DHCP: Kea DHCPv4
Manual = Custom
I'll re-iterate it for you one last time, there is no advanced (manual) config custom options in OPNsesne Services: Kea DHCP: Kea DHCPv4
Okay :)
There is. But then you need to provide the entire configuration manually as a text file.
(https://forum.opnsense.org/index.php?action=dlattach;attach=47034;image)
Quote from: hharry on August 19, 2025, 03:04:19 PMQuote from: sopex8260 on August 19, 2025, 03:02:03 PMQuote from: hharry on August 19, 2025, 02:56:28 PMQuote from: sopex8260 on August 19, 2025, 02:34:11 PMSo you choose the advanced config under Kea and it doesn't keep the custom changes?
there is no advanced config custom options in Services: Kea DHCP: Kea DHCPv4
Manual = Custom
oh, now i see what you mean, i now have enabled manual config, so i can take control of /usr/local/etc/kea/kea-dhcp4.conf, and i've added the below config which kea appears to have accepted...after restarting, which should give me 7 days of lease affinity...will see if it does what the kea documentation states...
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 25200,
"flush-reclaimed-timer-wait-time": 25
},
Exactly! Sorry, I thought you would see it sooner :) I wasn't in a computer to provide a screenshot.
so kea successfully gave 7 hours of lease affinity with below config, it behaved exactly according to kea 2.6.3 documentation
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 25200,
"flush-reclaimed-timer-wait-time": 25
},
Now that testing is done, I've now increased the lease affinity to 30 days (2592000 seconds ), as below....
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 2592000,
"flush-reclaimed-timer-wait-time": 25
},
Quote from: hharry on August 21, 2025, 01:38:32 AMso kea successfully gave 7 hours of lease affinity with below config, it behaved exactly according to kea 2.6.3 documentation
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 25200,
"flush-reclaimed-timer-wait-time": 25
},
Now that testing is done, I've now increased the lease affinity to 30 days (2592000 seconds ), as below....
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 2592000,
"flush-reclaimed-timer-wait-time": 25
},
Great to hear! I will try to add it over the next day or two. I will let you know to try it, if you feel brave :)
Quote from: sopex8260 on August 21, 2025, 08:34:51 AMQuote from: hharry on August 21, 2025, 01:38:32 AMso kea successfully gave 7 hours of lease affinity with below config, it behaved exactly according to kea 2.6.3 documentation
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 25200,
"flush-reclaimed-timer-wait-time": 25
},
Now that testing is done, I've now increased the lease affinity to 30 days (2592000 seconds ), as below....
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 2592000,
"flush-reclaimed-timer-wait-time": 25
},
Great to hear! I will try to add it over the next day or two. I will let you know to try it, if you feel brave :)
I already have it implemented, with 30 days of lease affinity, and have no intention of reverting back to having zero lease affinity...be nice if the OPNsense devs would expose the options to the UI so manual control of /usr/local/etc/kea/kea-dhcp4.conf is no longer needed...
wink wink -> https://github.com/opnsense/core/issues/9094
Quote from: hharry on August 21, 2025, 12:53:48 PMwink wink -> https://github.com/opnsense/core/issues/9094 (https://github.com/opnsense/core/issues/9094)
This issue is marked as incomplete and so will never be worked on.
If you create an issue you MUST fill in the template instead of just deleting it and replacing it with some text.
I noticed this when I moved to Kea as well. but I do not see the issue and do Not want it changed.
the Original Poster needs to create a reservation for that device by Mac address..
Quote from: hharry on August 21, 2025, 12:53:48 PMQuote from: sopex8260 on August 21, 2025, 08:34:51 AMQuote from: hharry on August 21, 2025, 01:38:32 AMso kea successfully gave 7 hours of lease affinity with below config, it behaved exactly according to kea 2.6.3 documentation
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 25200,
"flush-reclaimed-timer-wait-time": 25
},
Now that testing is done, I've now increased the lease affinity to 30 days (2592000 seconds ), as below....
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 2592000,
"flush-reclaimed-timer-wait-time": 25
},
Great to hear! I will try to add it over the next day or two. I will let you know to try it, if you feel brave :)
I already have it implemented, with 30 days of lease affinity, and have no intention of reverting back to having zero lease affinity...be nice if the OPNsense devs would expose the options to the UI so manual control of /usr/local/etc/kea/kea-dhcp4.conf is no longer needed...
wink wink -> https://github.com/opnsense/core/issues/9094
Yeah, I have seen the github issue. I am willing to fix it/ expose it to the UI for everyone.
Anyway, I will ping you when the code is ready but will probably test it myself since I don't see you being brave enough 😅
Quote from: sopex8260 on August 21, 2025, 01:54:22 PMQuote from: hharry on August 21, 2025, 12:53:48 PMQuote from: sopex8260 on August 21, 2025, 08:34:51 AMQuote from: hharry on August 21, 2025, 01:38:32 AMso kea successfully gave 7 hours of lease affinity with below config, it behaved exactly according to kea 2.6.3 documentation
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 25200,
"flush-reclaimed-timer-wait-time": 25
},
Now that testing is done, I've now increased the lease affinity to 30 days (2592000 seconds ), as below....
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 2592000,
"flush-reclaimed-timer-wait-time": 25
},
Great to hear! I will try to add it over the next day or two. I will let you know to try it, if you feel brave :)
I already have it implemented, with 30 days of lease affinity, and have no intention of reverting back to having zero lease affinity...be nice if the OPNsense devs would expose the options to the UI so manual control of /usr/local/etc/kea/kea-dhcp4.conf is no longer needed...
wink wink -> https://github.com/opnsense/core/issues/9094
Yeah, I have seen the github issue. I am willing to fix it/ expose it to the UI for everyone.
Anyway, I will ping you when the code is ready but will probably test it myself since I don't see you being brave enough 😅
Thank your Sir, i'm always to happy to test code etc, already have a sandbox pre-production envionment allways available for use...
Quote from: hharry on August 21, 2025, 01:57:14 PMQuote from: sopex8260 on August 21, 2025, 01:54:22 PMQuote from: hharry on August 21, 2025, 12:53:48 PMQuote from: sopex8260 on August 21, 2025, 08:34:51 AMQuote from: hharry on August 21, 2025, 01:38:32 AMso kea successfully gave 7 hours of lease affinity with below config, it behaved exactly according to kea 2.6.3 documentation
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 25200,
"flush-reclaimed-timer-wait-time": 25
},
Now that testing is done, I've now increased the lease affinity to 30 days (2592000 seconds ), as below....
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 2592000,
"flush-reclaimed-timer-wait-time": 25
},
Great to hear! I will try to add it over the next day or two. I will let you know to try it, if you feel brave :)
I already have it implemented, with 30 days of lease affinity, and have no intention of reverting back to having zero lease affinity...be nice if the OPNsense devs would expose the options to the UI so manual control of /usr/local/etc/kea/kea-dhcp4.conf is no longer needed...
wink wink -> https://github.com/opnsense/core/issues/9094
Yeah, I have seen the github issue. I am willing to fix it/ expose it to the UI for everyone.
Anyway, I will ping you when the code is ready but will probably test it myself since I don't see you being brave enough 😅
Thank your Sir, i'm always to happy to test code etc, already have a sandbox pre-production envionment allways available for use...
Would appreciate your feedback on this:
opnsense-patch -a sopex -c core c6d7453d5809d948df6f29eba32b6aee39b02227
Quote from: sopex8260 on August 21, 2025, 04:40:26 PMQuote from: hharry on August 21, 2025, 01:57:14 PMQuote from: sopex8260 on August 21, 2025, 01:54:22 PMQuote from: hharry on August 21, 2025, 12:53:48 PMQuote from: sopex8260 on August 21, 2025, 08:34:51 AMQuote from: hharry on August 21, 2025, 01:38:32 AMso kea successfully gave 7 hours of lease affinity with below config, it behaved exactly according to kea 2.6.3 documentation
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 25200,
"flush-reclaimed-timer-wait-time": 25
},
Now that testing is done, I've now increased the lease affinity to 30 days (2592000 seconds ), as below....
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 2592000,
"flush-reclaimed-timer-wait-time": 25
},
Great to hear! I will try to add it over the next day or two. I will let you know to try it, if you feel brave :)
I already have it implemented, with 30 days of lease affinity, and have no intention of reverting back to having zero lease affinity...be nice if the OPNsense devs would expose the options to the UI so manual control of /usr/local/etc/kea/kea-dhcp4.conf is no longer needed...
wink wink -> https://github.com/opnsense/core/issues/9094
Yeah, I have seen the github issue. I am willing to fix it/ expose it to the UI for everyone.
Anyway, I will ping you when the code is ready but will probably test it myself since I don't see you being brave enough 😅
Thank your Sir, i'm always to happy to test code etc, already have a sandbox pre-production envionment allways available for use...
Would appreciate your feedback on this:
opnsense-patch -a sopex -c core c6d7453d5809d948df6f29eba32b6aee39b02227
patch worked, without any issue, and i found the UI options you added to be intuitive and effective, and built the correct / expected config in /usr/local/etc/kea/kea-dhcp4.conf
Thank you sir, very well done. Let me know if you'd like some test artifacts, screenshots etc...that may help with pull request / check in etc...
Quote from: hharry on August 21, 2025, 06:14:49 PMQuote from: sopex8260 on August 21, 2025, 04:40:26 PMQuote from: hharry on August 21, 2025, 01:57:14 PMQuote from: sopex8260 on August 21, 2025, 01:54:22 PMQuote from: hharry on August 21, 2025, 12:53:48 PMQuote from: sopex8260 on August 21, 2025, 08:34:51 AMQuote from: hharry on August 21, 2025, 01:38:32 AMso kea successfully gave 7 hours of lease affinity with below config, it behaved exactly according to kea 2.6.3 documentation
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 25200,
"flush-reclaimed-timer-wait-time": 25
},
Now that testing is done, I've now increased the lease affinity to 30 days (2592000 seconds ), as below....
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 2592000,
"flush-reclaimed-timer-wait-time": 25
},
Great to hear! I will try to add it over the next day or two. I will let you know to try it, if you feel brave :)
I already have it implemented, with 30 days of lease affinity, and have no intention of reverting back to having zero lease affinity...be nice if the OPNsense devs would expose the options to the UI so manual control of /usr/local/etc/kea/kea-dhcp4.conf is no longer needed...
wink wink -> https://github.com/opnsense/core/issues/9094
Yeah, I have seen the github issue. I am willing to fix it/ expose it to the UI for everyone.
Anyway, I will ping you when the code is ready but will probably test it myself since I don't see you being brave enough 😅
Thank your Sir, i'm always to happy to test code etc, already have a sandbox pre-production envionment allways available for use...
Would appreciate your feedback on this:
opnsense-patch -a sopex -c core c6d7453d5809d948df6f29eba32b6aee39b02227
patch worked, without any issue, and i found the UI options you added to be intuitive and effective, and built the correct / expected config in /usr/local/etc/kea/kea-dhcp4.conf
Thank you sir, very well done. Let me know if you'd like some test artifacts, screenshots etc...that may help with pull request / check in etc...
Quote from: hharry on August 21, 2025, 06:14:49 PMQuote from: sopex8260 on August 21, 2025, 04:40:26 PMQuote from: hharry on August 21, 2025, 01:57:14 PMQuote from: sopex8260 on August 21, 2025, 01:54:22 PMQuote from: hharry on August 21, 2025, 12:53:48 PMQuote from: sopex8260 on August 21, 2025, 08:34:51 AMQuote from: hharry on August 21, 2025, 01:38:32 AMso kea successfully gave 7 hours of lease affinity with below config, it behaved exactly according to kea 2.6.3 documentation
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 25200,
"flush-reclaimed-timer-wait-time": 25
},
Now that testing is done, I've now increased the lease affinity to 30 days (2592000 seconds ), as below....
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"hold-reclaimed-time": 2592000,
"flush-reclaimed-timer-wait-time": 25
},
Great to hear! I will try to add it over the next day or two. I will let you know to try it, if you feel brave :)
I already have it implemented, with 30 days of lease affinity, and have no intention of reverting back to having zero lease affinity...be nice if the OPNsense devs would expose the options to the UI so manual control of /usr/local/etc/kea/kea-dhcp4.conf is no longer needed...
wink wink -> https://github.com/opnsense/core/issues/9094
Yeah, I have seen the github issue. I am willing to fix it/ expose it to the UI for everyone.
Anyway, I will ping you when the code is ready but will probably test it myself since I don't see you being brave enough 😅
Thank your Sir, i'm always to happy to test code etc, already have a sandbox pre-production envionment allways available for use...
Would appreciate your feedback on this:
opnsense-patch -a sopex -c core c6d7453d5809d948df6f29eba32b6aee39b02227
patch worked, without any issue, and i found the UI options you added to be intuitive and effective, and built the correct / expected config in /usr/local/etc/kea/kea-dhcp4.conf
Thank you sir, very well done. Let me know if you'd like some test artifacts, screenshots etc...that may help with pull request / check in etc...
Thank you for your feedback, I saw that the file generated correctly but wanted a second set of eyes since I don't use Kea.
If the others agree, it will be added at 25.7.3
Likely a later 25.7.x depending on merge time frame and an extra round on -devel package. Usually we bring in fixes more quickly, but this is a feature even if small could have side effects when introduced. (Generally speaking, it differs from case to case, but strangest things have happened over the years.)
Cheers,
Franco
Psssst, use dnsmasq it does this without any specific configuration.
I just turned in a client that was off 2 months and it got what it asked for in its dhcp request without reservation as IPs are not reused aggressively.
Quote from: franco on August 21, 2025, 07:55:22 PMLikely a later 24.7.x depending on merge time frame and an extra round on -devel package. Usually we bring in fixes more quickly, but this is a feature even if small could have side effects when introduced. (Generally speaking, it differs from case to case, but strangest things have happened over the years.)
Cheers,
Franco
Let's not go back in time :)
hehe, sorry about that ;)