Hello everyone!
So, after much soul searching, thinking about what I want for the future and whether I could make this a sustainable concern, I've decided TurnOver is now free and open source, under the GPL. Anyone can use it, read the code, check it, change it and build it themselves.
I started out with this on a whim. Safari and Word were unusable for me, so I set about fixing them for myself, and discovering it was possible to fix not only those two apps but improve the logic and layout of others, I realised there might be something here. It was exciting. It was wild! I was doing something many of us had hoped for for so long. Of course, it's a big undertaking. As pointed out by several commenters, maintaining the code base, keeping up with apps as they change and generally keeping the whole thing ticking along takes a significant amount of time, as it has. So, to make it sustainable, I thought, rightly or wrongly, I'd keep it closed and charge a small subscription to cover my time.
From speaking to others, I came to understand that most people won't pay for a screen reader when a free one is built in, so I wouldn't get enough to make it worthwhile. Also, I admit, other ventures on here did make me realise that even a half-baked free screen reader that's open source might be preferable to a fully functional, notarised one with a plan for sustained development. *mutter mutter mutter*
As it stands, I'm happy. I've got a screen reader that rocks. All I really wanted. I just thought others might want it more.
What this all means:
- TurnOver is free for everyone. No tester keys, no waiting list, no price.
- The code is on GitHub: https://github.com/TurnOver-For-Mac/turnover. Yes, it was written with an AI, and tested by hand, with a hundred-odd unit tests. It's all there to judge, and I'm hoping there's something useful in it for people to build out from.
- It's a spare-time project. I'll keep working on it a few hours a week, on what I can. No support or roadmap promises. I'm going to do what I should have done before: get on with finishing my book. It's amazing what procrastination can look like! This is still a project I care deeply about. There are areas of the Mac I still want to reach and fix. I'm a tinkerer and a maker, coding and 3D printing are my jam. It's just not going to be viable as a larger commitment.
- Bug reports and ideas go through GitHub's issue form now, not email.
- Fixes, plugins, guides and testing are all very welcome. Plugins are the easiest way in, no Swift needed.
- The released builds are still signed and notarised by me, and update themselves. Nobody else can ship an update to your copy.
If it's useful to you and you'd like to help with running costs, there's Ko-fi, no account needed: https://ko-fi.com/oliverkennett. It's in TurnOver's menu too, under Support TurnOver. GitHub Sponsors is coming.
Download and guides, as before: https://doll-eye.github.io/turnover-updates/
A massive thank you to the testers, who sent hundreds of careful reports and made TurnOver what it is. You are heroes, rocket men and women willing to climb onboard a wild ride. You rock.
Stay frosty
O
Comments
Mixed Feelings
Oliver, you’ve done a wonderful job with the app, and I truly appreciate all the hard work you’ve put into it. I have to admit, though, that I have mixed feelings about the move to open source. My worry is that it could eventually mean you stepping away from the project altogether.
Still, what matters most to me is that this was your decision. I respect that, and I wish you all the best with whatever comes next. Thank you for everything you’ve done.
thank you for your kind words
Yes, there is a possibility I will step away from it. this was why I was trying to create a sustainable income through it. We'll have to see what donations look like but, my hopes aren't high. If people aren't willing to pay for a subscription, I'm doubtful they'll pay for an optional donation.
It might be that, as it stands, an alternative screen reader, with its bredth of complication and maintance requirements, isn't viable in any form without some significant seed funding and either grants, as NVDA gets, or someone who has the clout and balls to charge. I just don't have the income to support such a slim prospect of a return.
then again, maybe the community, now I've opened it up, will run with it. There is, I hope, some useful stuff in there that might lead to others contributing and keeping the flame alive.
where there's life ...
hey Oliver, thanks. who knows, maybe the community will surprise you. After all, NVDA is robust and open source, and people donate. here's a suggestion: if you can find voices that Turnover can use, why not sell those? it probably won't make you a killing but it would give people incentive to contribute financially, if there are voices that they like and want to purchase. the problem with a subscription model is that not everyone can afford to. not nearly financially, but in the sense that some countries have rather strict laws about that sort of thing. others may be unable to because they lack the requisite card. For example, the only subscriptions I have are supported with Apple gift cards--long story. But yeah,at least from yours truly it's not a desire that everything must be free that prompted my comment.
Time to Contribute
Many in the community asked for Turnover to be made open source so they could review the code and check for anything concerning. Now that it’s open source, there’s an opportunity to turn that interest into meaningful support.
I’d love to help improve Turnover myself, but I don’t have the programming expertise. I’ll also look into whether I can send Oliver a donation as a thank-you for his time and effort. I’m based in the Middle East, so sending money overseas may be a challenge, but I’d still like to try.
Add Ons
Add ons are a good idea. I've been playing with a few ideas like that. I do think it would be nice for TurnOver to have a unique voice, or a unique set of voices. Requires a few hours of recording. Might be an interesting project for those in the community with pleasant tones. Wonder if the double tap guys want to be immortalised as TTS voices.
I will be contributing
Forked a copy and will contribute once I get my head around where the project stands at the moment. I'm hoping others get behind this.
Thanks Ash
You've been really helpful already and made one of the strongest cases for open source.
Thank You for TurnOver — An Offer to Contribute
Hi Oliver,
Thank you for the work you have put into TurnOver and for making its source code available. Building and maintaining a screen reader takes considerable time and effort, and I appreciate both what you have achieved and your openness about the challenges of keeping it going.
I am the developer who recently introduced Armoni here on AppleVis. When I began that work, I was not aware of TurnOver. Our experiment grew independently from our own screen-reader experience and a desire to explore different ways of navigating macOS. Discovering your project and looking through its code has been a welcome surprise.
Having considered what you have already built, we have decided to end Armoni’s current beta programme and explore whether our time and experience could be more useful in supporting TurnOver.
I work in digital accessibility, and I would be happy to discuss contributions such as accessibility testing, application-specific improvements, localization, or development work. Where specialist support would help, I can also discuss involving experienced developer colleagues at our company in reviewing and refining proposed changes. Any development contribution we offer would include human code review and testing.
Of course, we would first need to understand your priorities and agree on a manageable starting point. I would be glad to hear where you think additional help could be useful.
You are welcome to contact me at **ugur.gurbuz@weaccess.ai**.
Thank you again for sharing your work and giving others the opportunity to help it grow.
Best regards,
Uğur Gürbüz
This sounds excellent
If we can, as a community, combine our efforts, I think we could create something very useful.
Though I started this, I must stress that all of it was vibe coded. I did try to be careful in its construction, using ChatGPT to check Claude Code, for example, and running various self checks to make sure there were no privacy issues. As for the code itself, I have an overview of what is happening: the different modules, how they treat the various elements of the interface. But syntax isn't my strength. All I did was work out what was and wasn't possible and build an idea around that. Hopefully I've come up with some unique and useful solutions, but a lot of it was really me asking, can we do it this way?
A team who understand the nuts and bolts, as well as the overarching architecture, could do something quite special and make the Mac a real option for professionals beyond those who do audio work. Really, Apple should be sponsoring us. John, are you listening?
The same goes for everyone else. If you're interested in making this work, combining resources and skill sets, I think it could be fun, and it could unlock the power of the Mac our sighted peers have banged on about for so long.
this is interesting.
what about thoes who all reddy hav tester keys?
Re: this is interesting.
It's open. you don't need the key any more. The app you have currently will update whenever Oliver pushes out a new 'official' build on the linked github repo, or you can run from source if you want to.
Re: Thank You for TurnOver — An Offer to Contribute
Great to see your enthusiasm for this UÄŸur. I did check out your screenreader as I mentioned in the other thread and it's great to see the progress you made, especially since you specified how AI was used in some, but not all of the workflow. I'm keen to contribute to Turnover and will probably send a few pull requests Oliver's way soon, but I'm keen to see how the community thinks this should work? Oliver has been really up front in that Turnover was vibe coded, so do we take the time to go through the codebase first and fix, or firm up, any architectural mistakes or messy code before developping new features? I suppose the only challenge with a community project is figuring out who does what, and making sure we're starting from the best possible base, so we're not duplicating efforts or working from a base that someone else is busy making major architectural changes to. In my view if we make sure the base is right, without changing user-facing functionality from where Turnover is now, we then have the optimal platform to run with further feature development. This is just my view though.
I am reasonably confident in Swift, but it's not my most preficient language. I've written several hundred thousand lines of it in the last year, but I'm still learning. I'd like to see some more experienced Swift devs give their input on this providing they can do so constructively.
Braille issues
Can anybody that also owns a Focus 5 confirm that it only works when CoExist is turned on? If I only keep Turnover on, Braille is broken for me and will only display the message "VoiceOver off", nothing else will be shown on the display no matter what I do. Since I am currently facing some issues with the braille table used by VoiceOver, I would really like to contribute to this because I could perhaps change it to fit my needs. There is a really stupid bug in VO where at the end of each line there is some sort of a sign showing on the display, and for my language (Slovenian), it has not been added to the table, thus a strange character is shown. This happens in all apps where you are reading line by line, and I couldn't manage to get rid of it just yet. I love this so far and have already forked it, when I have something to contribute I will surely do so, but I would like to use this as a standalone screen reader with CoExist off. Why have both draining your battery if one can be adequate, especially for those of us on the Air variant of the Mac?
It's also slightly confusing, why does turning CoExist off or on suddenly increase my speech rate to the point I can barely use my laptop? I guess it inherits settings from VO without my approval but with Eloquence it goes crazy fast. Also even with CoExist on, going into the TurnOver menu no longer keeps my braille display up-to-date, and it still shows the app I was in previously, and not the menu itself.
Should I submit these bugs as a single issue or open multiple?
Regarding Brail/trackpad support/language support etc
The foundation is there but I think the best way to think of this, and please remember this is all only about three weeks old, is a proof of concept. I hate that term as it often leads nowhere, but I got my Vario Ultra working though, saying that, I'm not really much of a computer brail user so wasn't quite sure of what the behaviour should look like, IE, do brail displays give a complete feed of what the screen reader says, or do they work more directly IE, do they display the app they've tabbed into or not.... All things I wasn't quite sure of.
Thinking about organisation, there is obviously the github where we can assemble to some degree. I do feel blowing up threads here is probably not going to impress many people. I'm open to options. I'm also open to shared leadership/stepping back in the face of more experience if that can get things off the ground. interestingly I do have experience in writing grant applications when working for other charities so I'd be happy to take more of a management role rather than showing my ignorance in the coding weeds. As you've probably established, I'm good with ideas of great grandure, less helpful on the details.
Braille support
It does already work to some extent, however until I, or preferably someone else manages to get it working as intended I'll unfortunately have to stick with VO for apps such as Word or Excel. It is even more unfortunate because I do prefer TurnOver in these apps due to its speed.
turnover
grabbed a coppy today and love it, especially in safari. I only use it on websites where vo stops responding, but glad that this is out there now.
Re: Regarding Brail/trackpad support/language support etc
So glad to see this outcome for the TurnOver project. Feel free to host the conversation in this thread if AppleVis is the best place for it (though of course if there is another platform that would work better, that is totally okay too).
Re: Regarding Brail/trackpad support/language support etc
would it be fine, both to you and to the editoreal guys if i make a discord server and other links for chatting outside of here and shareing this if need be? is that all good with everyone
Fine by me
Discord was actually what I was thinking of. I've put some work into making it easier to use on mac too, so seems appropriate.
And thank you Michael. We'll keep people posted on developments. I just realise the front page of AppleVis is prime property for news and questions and it's already getting quite busy. Us hashing out ideas and bumping the thread each time probably isn't super helpful... He says, bumping the thread.
Will check out the code
I don't have much time right now. Tomorrow I'll see if I can recover my Mac Studio and all the other things that I turned in for seizure since it's been over 6 months now that I filed the police report with my security breach. However I intend to check out the code in a few days to see if I can contribute with anything, as well as to learn things from the code, like how VoiceOver's Braille drivers are being consumed.
Re: Fine by me
All right, everyone. I'm currently at school, I'll be home in like two hours or so. When I get home I'll make different channels in different chats for different social media platforms just to get more reach across because I know not everyone here uses an account here, or uses discord. Oliver, if you could tell me what platforms would probably be the best, I'll probably find out more afterward that we can probably use, let me know and I'll get them sorted.
TurnOver hub is now on Discord! More soon
Hello all.
What could be possibly very exciting development, we now have a discord server for the string reader, made by myself, yours truly! It's currently in its very early infancy, and will get better as the server gets better and as I understand more about discord processes. More social media platforms will come eventually, but I feel like discord will be a steppingstone for majority. I'm not the developer of this screen reader but I'm excited to share this link with you. To join, you will need a Discord account, no restrictions at the moment on who or what can join, going to make a rule set in a couple of hours. If Oliver joins, I'll give him the necessary permissions, I can't transfer ownership unless I create a new discord account, but I'm not trying to go into that here. But yeah, if you guys have discord, please join, if not, I can accommodate and create a chat for separate things. I might also try and figure out a way we can get a bottle or something, say if someone is on telegram, and they have a question, the question can be forwarded into the general chat of the discord or other social media platforms, and I also wouldn't mind making a bot to seamlessly share releases with everybody that I sent and made by Oliver and the other people. Anyway, enough rambling, here's the link, it never expires.
https://discord.gg/hCsQUP4xkJ
Re: Regarding Brail/trackpad support/language support etc
you probably won't find me on Discord, I hate that interface pashionately. Chat apps should never be built as web views. if it becomes the default where everyone goes I guess I"ll suck it up, but there are plenty of communities I simply don't partake in because of that app.
Re: Regarding Brail/trackpad support/language support etc
Where do you think, outside of here, would be a good option? Not saying this is a bad place. I'm saying we could probably expand out of here for those who don't have an account or who don't want to use this site
Whatsapp?
I'm guessing its the same sort of issue. Dischord is a pretty grubby interface but, as I mentioned, I've tidied it up a bit using TurnOver.
I mean, the main place to do this is probably over on GitHub where the code lives. I've not looked at the conversational abilities of it though. I'll download and see what may be learned. The dischord is good for testers maybe, but for devs it might be easier if they/we do the nerdy stuff elsewhere.
Github chat
I've started a chat over on github. The app seems very accessible on IOS at least:
https://github.com/TurnOver-For-Mac/turnover/discussions/7
Re: Github chat
No idea if it's available on macOS. I mean the chat part also no idea how accessible it is. Worse comes to worse I could put it on my phone, but GitHub is an absolute pain on android.
Re: Github chat
I'd probably keep it on github or whatsapp or similar. if people prefer Discord that is fine. best to go where the majority are comfortable. I haven't done a collaborateive open source project in years so i'm a bit out of touch in terms of where people hang out.
Re: Github chat
I mean, anywhere is fine to be honest. People do what people do. For the moment I've only created the discord server. If anyone else wants any other thing made, then that would be fine, I can do it if need be. But yeah, whatever people wanna go with. I personally have no major issues with discord on macOS. It's just iOS and android absolutely sucks. git hub's website to be honest seems very overly cluttered, I don't think they really learned from a young age on how to make things clean, maybe their parents didn't tell them to clean their room. I don't know, but whatever is going on there is a it's a bit insane.
Also someone who is not a Geek can contribute
I bombarded Oliver's email with lots of suggestions and bug reports for TurnOver before it became opensource. With all due respect, for someone who is not a geek and feel very confused with GetHub interface, please consider something easier to deal with. I can contribute in my own way, and the GetHub channel can make my contribution much less. I am ready to learn the interface if you are to settle on GetHub for the future of TurnOver, but this is something I would do after an audio walkthrough by some nice geek of you, guys.
Re: Also someone who is not a Geek can contribute
See this is what I mean. GitHub is honestly a mess. I don't know what other alternative we could use, but I'm pretty sure us developers and contributors will find a way.
Few answers and plans
Okay, here goes:
GitHub Discussions on the repository allow you to follow discussions by email and you can reply likewise. It's what I'm going to use. It's next to the code and the issues, and it works without touching the website aside from actually following. Annoyingly it does require you have a github account, but that's easy to set up, then Two clicks for the emails to flow On http://github.com/TurnOver-For-Mac/turnover the Watch button near the top, then All activity. That makes every issue, pull request and discussion comment an email, and a plain reply to one posts it as a comment.
Discord is good for hanging out and ziixies has kindly set one up, but decisions and bug reports live on GitHub so nothing gets lost in a scrolling chat.
For non-geeks: you don't need to learn GitHub to help. A bug report is a form with three boxes, what you did, what happened, what you expected. TurnOver's menu has Send feedback, which saves a report you can attach.
For developers: Ash is right that the base comes before features. This week the shared code was split into one class a file, there are three newcomer documents in the docs folder (how a key becomes speech, how an app's focus becomes an object, and how to read the log), and a decisions file saying what's settled and what's parked. Main takes pull requests only now, me included, with the build check, so nobody can overwrite anyone else. Pick an app or a bug, say so in Discussions so two people don't take the same one, and send a pull request.
Urh, thank you, those are three separate problems and one issue each is right. I've filed them for you so you can add detail. The rate jump when CoExist is toggled is the link between VoiceOver's rate and TurnOver's, which is off in the next build. Braille with CoExist off and braille in the TurnOver menu are open.
UÄŸur, welcome, and thank you. The best starting point is the issues list and the apps you use every day; say what you'd like to take in Discussions and we'll agree it there.
O
Discord Isn't Accessible to Everyone.
I've been following this whole discussion from the sidelines, and I wasn't planning to get involved, but there's something I thought was worth pointing out regarding Discord.
If Uğur Gürbüz, the developer behind Armoni, ends up contributing to TurnOver, Discord might not be a viable option for him, assuming he's based in Turkey.
Discord has been blocked in Turkey since October 2024, following a court order concerning suspected child sexual abuse and obscene content on the platform. As far as I can tell, the restriction is still in place.
I realise Oliver has now clarified that GitHub will be the main place for development discussions and bug reports, with Discord being more of an informal chat platform. That makes sense.
But it's worth remembering that not everyone can access Discord, and not everyone wants to use it either. Personally, I'll use it if I absolutely have to, but I'm certainly not interested in joining another Discord server.
As for me, I'm not a developer. I've used AI to build a few personal projects, and that's probably as far as I'll go. So I'll leave the technical discussions to those who know what they're doing.
I just thought I'd mention the situation in Turkey because it seems to have been overlooked. Before settling on a particular communication platform, it might be worth making sure that the people who want to contribute can actually access it.
Anyway, that's my little contribution to this discussion. I'll go back to watching from the sidelines now.
the discord hate is overrated.
I know, you think it's bad because web yada yada yada, but unless the last time you used discord is like 4 years ago, then there's a feature now that makes navigating discord messages the same as skype/whatsapp/whatever you want, pressing up or down arrow once moves you up and down through messages respectively. Even voiceover has this for years, turnover does because oliver I think did it.
though needs polishing. E.G. The cmd+k dialog kind of fails because the discord integration in turnover assumes every single dialog must be a message so it keeps saying no messages found when you try to interact, but I'm sure that's easy to solve. And that's not web related. In fact, I find it annoying how turnover completely blocks you from using the web interface, literally completely blocks you, because yes I'm one of the weirdos that find the web like interface nice because it makes reading long messages easier and makes accessing multiple links or files much simpler. But again, if you're a web hater then you don't need to worry because turnover hard locks you out of that.
Managed to fix my braille issues
I managed to not only fix most of my issues but am currently working on many small bug fixes for the settings menu of Turnover and also spotlight search not being spoken. Once it's all finished I'll submit a PR, probably later today. Be sure to review everything though and you don't have to accept everything, i just made sure that some NVDA-like braille features were also present here. After just an hour of my (Claude's) work, I can now fully switch to this screen reader in the apps I use every day! Obviously not everything is where it should be, but saying that I'm impressed that I got it working in such a short timeframe would be an understatement. I will continue working on my fork and contributing in any way I possibly can.
Re: Managed to fix my braille issues
i also got codex to hav a look through and it found and fixt a few issues, no idea of what half of the shit means though lmao but wtv, i've sent a pr so if you wonna hav a look through it you can
My current setup
I have Claude writing the code, and whenever it makes a PR to my fork, the code review from Codex jumps in and then they go back and forth. if there is a better way to do this let me know, because for some of my work I had GPT writing the code as well and it did a decent job overall.
Re: My current setup
i priffer gpt over clord tbh
I do too
But I subscribed to Claude just for a month to see how it could benefit my work and alongside GPT, and some things it can handle better. But your point is valid, GPT has gotten much better in the last few months.
Interesting re Chat GPT
I thought Claud was the go to. I might have to look into it. I just feel ChatGPT has a lot of bells and whistles I don't really need or want to be paying for. How does it compare token wise? I'm currently on the £180 a month on claud, hence the ability to turn things out so quickly. Was almost maxing things out.
Thank you for TurnOver
Hi Oliver,
I started using TurnOver today and wanted to tell you how impressed I am with what you've built. It's a wonderful app, and I can already see the care and thought you've put into it. Thank you so much for your work and for sharing it with the community. I really appreciate what you've created and look forward to spending more time with it.
Re: GPT
I currently have a GPT Plus sub and the Claude Pro sub. I use Claude Pro only for coding, but GPT for chat and for reviewing said code. The usage limits on GPT Plus are a mess for me, but I imagine on the pro plan they are probably fine. With Claude Pro, if you use it only for coding, you can also do quite a bit. I wouldn't pay only for Claude though, because the fact that chat is not unlimited is just not okay and is not up to the standard that I require.
Thanks for your responsiveness
I see you are closely following our pull requests and this makes me believe that in the future and with the right support this project could really become something beyond my initial expectations. I'm currently out of usage limits but when I can I'll make sure everything you asked for has been fixed.
Models
Models change and this can change the overall output. I've been happy with Claude's Opus 5.5, it does better Python coding than Opus 5 in my opinion. Likewise ChatGPT's Sol has proven to be a good reviewer, and coder in its own right. If you use Claude's Sonnett models for example, you likely will not be as happy with its output. ChatGPT's Astra model is super powerful as well, and the nice thing about it versus Claude's Fable model (currently)is ChatGPT includes some usage in the plans whereas Fable is pay-per-tokens as you go only.
Another example in accessibility, ChatGPT's Sol and Astra models have proven more adept at solving difficult PDF tagging issues recently.
It is all about the models. And they update frequently and you have to evaluate all over again.
thanks for your thoughts on models
I've got a free month with chat GPT plus so will see how that looks. I think using one to compose and the other to review is probably a good shout. In such a large project I just need to be careful where things are pointed.
And it sounds like we're assembling a good little team. Always looking for more help though.
So I just read a bit of the source
All I have to say is that Claude doesn't know Swift. It's writing Swift as if it was writing C, it doesn't have any notion of Swift's structured concurrency, there's unsafe code all over the place, it's calling private APIs as if it was normal when public alternatives exist, it's not declaring the private APIs that it's calling anywhere, and the code is a bit of a mess. I'm afraid of touching this codebase because, as I've been saying all along, current AI tends to overcomplicate everything and not structure for simplicity and containment.
Also, I noticed that Turnover is buffering accessibility information, but I couldn't find the code where it updates that information when elements are created, destroyed, or just changed. Is there a reason for this particular approach to be chosen?
Editing to state that I just found the code that deals with the accessibility element changes in
./Sources/TurnOverCore/AXHandlerNotifications.swift, but am still puzzled by the choice to buffer everything.Re: So I just read a bit of the source
This is the problem with Claude, and it's why this needs architectural cleanup. GPT is much better at writing swift. However, if the codebase were cleaned up, it will actually follow the code style well so anyone using agents to contribute would produce decent code. There's also agents.md. Experienced devs, especially with your experience, could write simple instructions in agents.md telling the agent what is expected of it, or even pointing to documentation. It will then use that to write better code. It can write decent swift, it just doesn't by default. I'll admit I haven't dug into the architecture myself yet, I've just patched a couple of bugs that were annoying me. But if you would come onboard and help tidy things up, and fill agents.md with useful instructions, it would be better going forward.
Re: So I just read a bit of the source
And this is precisely the reason Skills exist and why people should be using appropriate skills with their agents. SwiftData Pro, Swift Concurrency Pro, SwiftUI Pro, Swift Testing Pro, or Swift Agents.
Is There a Real Plan Here?
So who exactly is going to be the one reviewing all these large, multi-fix/multi-feature PRs for correctness, usability, security, design, efficiency, consistency with other features, etc? And what happens when the contributors all run through their credits?
Buffering
First, I would like to express my gratitude to Oliver, who initiated this, and followed up with the decision to open source it. Having a counterpart screen reader for VoiceOver on the Mac is important. To answer the buffering concern raised by Choom, I guess the reason, if I understand correctly what you are referring to, is speed. If the dev asked the LLM to take inspiration from NVDA's source code—and it has been a while since I tinkered with it—I think they use caching to save on API calls. This may be the reason why the prototype of this project feels smoother and faster. Again, I am guessing and not sure I understand the context well, as I haven't looked at the source code here to verify what I am saying.