Building All New Server Has Begun!

1/22/22, 8:54 PM

We're just about ready to shut down the old ezInvoice server so we can build and test the new one.

While we're working on this the new home page will redirect you to the "" server.

The new server is running the latest Ubuntu OS (v20.04) so it will have a long and secure life ahead of it. I'm sure we will run into a few issues that will require we rewrite some code but that's a good thing because it will be more efficient and secure.

This system software upgrade will also give us access to new features and tools, and upgrades to tools we already use, so this is really a pretty big deal for all of us.

Upgrading and configuring a new production server always requires some learning so we'll be taking our time to get up to speed on the changes and new features we'll be working with.

The switchover to the new server will be seamless this time around so you user's really won't notice that. As to when that will happen, I can't really pin down an estimated date yet. All things considered it should be easier now than ever before to get everything installed and setup, but there are still a lot of details that need to be nailed down, and lot's of testing, so the best I can guess right now is somewhere between 1-3 months.

EzInvoice Pro v8 Coming Soon!

1/21/22, 8:58 PM

Let's review what's new and improved...

We've been working hard on this new version for several months now. Much of the work has been on optimizing the app code. We've learned a lot of lessons over the course of the past few years we've been working on this so while everything will still "Look" pretty much the same the app is much faster and the code is much cleaner and now much easier to continue to add features in the future.

Check out the Beta Now!

Another thing we've been working hard on is the design code, the "CSS" and "Bootstrap" code specifically. You'll really notice the difference on phones and tablets and it's also cleaner on a Desktop PC.

And we've added two new tools! One of them is a new Search Engine. You can already find most anything you're looking for but the new "Search app" will list everything that matches your search terms. This 1st version is really a solid foundation we'll be building on to make it blazing fast and super easy to find whatever you're looking for. For example, it will list all of the documents you've made for a client and their contact file and any products you purchase from them that are in your Products and Services database.

The other new tool is a simple "Todo" app. The Todo app saves your todo list on the device you're using it on so each user has their own Todo list.

And right now we're working on making updates and upgrades easier. We've got that working solid for users now but we want to make it easier fur us too. There are a few more avenues we want to explore before we decide which we want to use. After we get that nailed down we'll be ready to release the upgrade.

And we also need to talk again about the "Local App". This year we moved our development to a completely offline first environment and it's increased our productivity by quite a bit. Mainly because the app is faster and when our local network is busy with lots of users (it almost always is) our work on testing the app is always blazing fast because all of the work done on the internet, saving and getting files, is done in the background when you're using the "Local App" instead of the "Cloud App". And it works even when your internet connection is down. If someone calls or comes over and asks about an invoice you can pull it up and print it if you need to.

The "Local App" technology is really pretty amazing. We know we are at the very leading edge of implementing this, but that's because this is exactly the kind of app that users need to have this option.

Todos and Searches

1/18/22, 4:14 PM

Two new apps.

I've been working on both a new "Todo" app and a more powerful Search engine.

The search engine is being designed to find anything and everything that matches your search terms and list them all.

The "Todo" app provides a handy fast and easy way to create a list of todos. The Todo app is designed to store your list of todos in your web browser's built-in database so each user has their own list of todos.

These new features will be included in the next upgrade, ezInvoice Pro 8.

No Blobs After all

1/14/22, 11:45 AM

It was a fun experiment but didn't work out.

I worked on this for quite awhile and hit a wall when emailing document. Gmail, and probably other big email service providers, apparently don't like image blobs. I may get back to them later to see if there is anything I missed but it looks to me like they're a no go.

You can check out the demo I worked on at

When you "upload" an image it's stored in your web browser's built-in database. When you reload that web page your image will be loaded from the web browser's database.

The Blobs are Coming!

12/15/21, 12:07 AM

They're embedding our documents!

Our "Blobs" are actually a good thing and what we're really talking about is embedding images, like your logo, in the documents you send as opposed to using links to images stored on our webservers.

We'll be storing your logo and background images as blobs in your database instead of having them in an directory in our web server. This makes them easier to for you to manage and use and it keeps your app account much cleaner and easier for us to manage.

One of our goals here is to make it really easy to install the apps on your office computer so you can use it just like a native app. Moving all the images to be stored in your database and embedded in your documents is necessary to make this easy.

This feature will be available in the 8.0 version. We not in a hurry to get this out but we will be making a beta available soon, probably sometime in January 2022.

EzInvoice Pro 8.0

12/8/21, 2:13 PM

Heading towards the finish line...

We're getting closer to wrapping up the feature list and design changes we've been working on for the past couple years. Most of the changes you'll see in the next update to v8.0 are refinements as opposed to new features but there are some big structural changes under the hood that are very important. These changes make loading updates to the app work like they're supposed to work, i.e. they make sure you reload all of the app files when an update is released.

Aside from those structural changes we've also spent a lot of time refining how the app works on mobile devices. Those changes will be very noticeable for those who use mobile devices.

We've also been working on making it easier to install the "Local-First" version of the app. So far this new feature hasn't drawn much interest from users but we're going to keep working on this because it's really an important path forward for users.

In fact, we've moved all of our dev work to the Local-First version in-house now so we don't have to depend on an internet connection to keep working. And it's increased our productivity by a lot. The app is much faster so testing changes we make is easier and more reliable. And with the new structural changes it's much faster and easier for us to push the updates we make out to you, the users.

One of the things that's really cool about the Local-First app is the app code can be modified just for your business. And it's really not that hard to do. Most any web developer can jump in and make changes and add features. The app code is intentionally designed to be easy to modify and add features. Most any local web shop could jump in and start working with it.

So, the "8.0" version is not an "all new app". It's an important milestone that represents the completion of a set of ambitious design goals. From here it will just keep getting better.

Offline-First Apps

11/16/21, 11:21 AM

Installing EzInvoice on a Mac Mini

I spent some time the past few days looking into what it takes to run EzInvoice Pro offline on a Mac desktop computer. The Mac I'm using is old but I did this on a freshly installed MacOS (10.100.6) on a "Late `09 Mac Mini", so that really shouldn't be much different than how this works on a new Mac desktop pc.

The Mac OS has a built-in webserver so I just made a copy of the app running on our webserver and put it in the Mac's webserver and loaded it by going to "http://localhost/app/" and it worked, but you still have to be connected to the internet to use it as configured and what we really want is an "Offline" app that doesn't need an internet connection to run and that stores all your invoices and contacts and other data on your computer, just like a good old fashion "Computer Application" that you "install" on your computer.

EzInvoice Pro has been designed from the ground up to be an "Offline-First" app but there's still really no standard way of doing this. "Offline-First" is just a concept. There are no hard and fast rules for how to make these or standardized tools to make them with and there are some pretty huge restrictions on what web browsers will let developers do on the devices users run them on, and for good reasons. For example, a web app cannot scan your hard drive looking for files to upload to the app's maker.

With an app like EzInvoice Pro users create and store documents, and over time they can easily have 1000s of documents stored, and that's where things start getting problematic. My testing had my web browsers choking to the point of being unusable when I stored more than 3-4 thousand documents in a web browser's built-in "IndexedDB". That's pretty much a dealbreaker on it's own but there are other issues, like getting your data out of that IndexedDB to make a backup of it or share it with other apps.

The best solution we've found is to install the CouchDB Database application on your desktop pc, and it's actually a great solution. You can store a million documents in that and it does all the heavy lifting to make it fast and easy to find one in a million. And it provides features to create backups and snapshops of your data. And it can even sync your data with a remote Cloud based CouchDB for online access and offsite backups of your data.

When you install the EzInvoice Pro app on a Mac computer like this it's no longer a "Web App". It's essentially a "Native App" running entirely offline on your computer and using a very powerful database.

Using CouchDB like this also creates a way to let you, the user, create your own apps that can work with your EzInvoice data and easily run other apps that use CouchDB for offline functionality. You can modify the code yourself, or pay someone to do that for you (or hire us).

Updated Home Page

11/3/21, 5:44 PM

A fresh new look!

Yes, we finally got around to updating our home page on both the "" and "" servers.

But we're still working on other things too. We've already added a few small new features on the Beta app and made some adjustments and improvements again on the invoice templates. We'll probably spend another month looking for ways to improve the app before we release another update. We've got some ideas we want to work on to make getting the updates more reliable that we want to test. The previous update was seamless for users so that's great. Now we need to make it easier for use to get them ready for you.

Testing New Print Document Routine

11/2/21, 2:38 AM

It's a simple change but...

Right now the app opens a document you want to print in a new web browser window and from there you have use your browser menu to print it. We came up with a very simple way to send the new web page directly to your printer as soon as in loads in the new window. We still have some testing to do on this but it looks like it should work pretty good.

You can check it out in the Beta app now.

EzInvoice Pro 7.9 Update Completed

11/1/21, 1:29 PM

Took a little longer than we expected

We found a few more things that needed to be fixed and spent some more time fine tuning the app on Saturday and even Sunday morning. It's such a big app there's bound to be a few more things that need attention so if you run into any odd behavior please let us know

But... wow! The app is getting so sweet. It displays so much better on mobile devices and the document templates print so much nicer now. We still have some work we want to do on those but we're getting them refined now and we've learned a lot in the process that will make it easier to create new designs and continue to improve what we have.

I'd like to build a way for users to be able to create and upload their own document designs and we're actually pretty close to being able to do that now. And while we're at it we can also build a way for users to upload their own "Styles" for the app itself.

While working on those feature these past few months I've realized how much of a difference it makes when using the app. For example, being able to upload a "Background Image" for the app that you really love makes using the app a pleasure. And being able to change it whenever you want adds a bit of fun.

I want to spend some more time on those aspects of the app. Technically, under the hood so to speak, it's a very robust and modern app and it's running solid so now we can start working on polishing it up and giving users more choices and tools to make it their own.

EzInvoice Pro 7.9 Coming Soon

10/27/21, 5:23 PM

A Few Fixes and a Few New Features

We spent quite a bit of time refining the app for mobile devices to make it easier to use.

The biggest change is the "Navbars" at the top of the screens. They are no longer "fixed" to the top of the screen. Now they scroll up/down with the page. On a desktop PC with a screen big enough to view the entire page you won't notice a difference but on mobile devices it gives users more space to get at the features they want faster and easier

And now all the Navbars now have "Shortcuts" built-in to the "EzInvoice Pro" tab that make it faster and easier to get to what you want to work on next.

We also added a "Send Payment Reminder Email" button to the "Details" dropdown info box on your Invoice list. This is basically a shortcut to that same feature in the "Reports" app where you have the same button on the list of invoices in "Overdue Payments" report.

And we spent a lot of time finding and fixing bugs and rewriting and refining bits of code to improve performance and clean things up.

We'll keep working on testing and looking for bugs and ways to improve things and if all goes well we'll release these updates this weekend. Probably this Saturday, Oct 30.

Mobile Devices

10/26/21, 1:30 PM

Fine Tuning EzInvoice Pro for mobile devices

I've been spending the past few weeks working on making the app more mobile friendly. It's usable now but there are a some things that needed attention. These are almost all small design refinements in how the app "reacts" with mobile devices.

Basically we have to account for the different screen sizes phones and tablets will display the app in and adjust the layout for those. The best tools available to help with that are pretty darn good, all things considered, but they're not perfect. There are just too many variables to account for in how all those devices differ in how they render the screens you see and use. So you have to try to create something that works well on all of them as opposed to perfect on any single one of them.

We don't track any user data at all but according to PayPal about 20% of our users pay for the app using a mobile device so it's probably fair to say that many also use the app on those too. For them it's been obvious we've not spent a lot of time fine tuning the page layouts for mobile devices so we're going to spend some on it.

In our case we're using the "Bootstrap toolkit" to implement our app interface. Bootstrap is pretty awesome but it requires some deep diving into how they do things and it gets pretty complex when creating an app like EzInvoice Pro because there are a lot "parts" to manage when rendering it.

Our basic approach is to getting it working well on a small mobile phone because those are the toughest to get right. From there Bootstrap does a pretty good job of accounting for bigger screens and we can do some fine tuning for what's called "break points" in screen sizes. Break points are how Bootstrap decides to size and place elements (like buttons and inputs) on the user's screen.

The Bootstrap engineers have been working on this project since 2011 and they're currently at version 5.1.3. We're still using version 4.5 because the latest version just came out a few months ago and it breaks some of our layouts. We'll probably wait until next year to upgrade to Bootstrap 5 if there are enough compelling reasons to do that but for now we'll let them keep working on it to fix bugs and add features, just like we're doing with EzInvoice Pro.

EzInvoice Pro 7.8 Released

10/16/21, 2:49 PM

Here's what's new...

EzInvoice Pro 7.8

10/4/21, 10:26 PM

Personalize the app and your invoices

I spent a lot of time working on the document templates to improve the layouts and printability of invoices and other documents. I also worked on tightening them up so you can list more products on a single printed sheet of paper and fixed a few mistakes that users pointed out.

Then I finally got to spend some more time on features that let you, the user, have some choices in how the app looks. You're probably familiar with "Dark Mode" apps that have black backgrounds so they use less battery power and are easier on the eyes at night. Now you can choose from 6 different styles that change the menu and background color to make the app more your own.

After a user, Wayne, in Illinois, suggested it I also added a way to let you upload a background image for your invoices, and that's really pretty cool.

The new invoice designs are all updated with a transparency that lets your document background images show through. So, you have play around with designing an image that works good with your invoices but, wow, they really stand out and provide a very professional look for you.

I also spent some time working on making updates more reliable and efficient. This is one of those things that has a "Specification" for how it should work, but the web browser makers still don't quite have it completely implemented but there are ways to "force" the web browser to update the files it needs.

I'll probably release the update to the app this weekend.


Also of note, on September 30 we had an issue with that prevented a few users from logging in. Me included. This issue has to do with "SSL Certificates" that websites use to securely encrypt you data when you login and in our case get and save and deliver your Invoices. It only affected those who have older devices they access the app with. I use an 11 year old Mac Mini and test the app with the Opera web browser and it popped up a message saying "Your connection is not secure".

The solution that worked for me is to use the "Firefox" web browser. Another solution is to get a new computer but my wife has a say in that so for now I'll just use Firefox. Here's an article that discusses this and has lists of devices and web browsers that work and don't work the SSL Certs we use.

It's Getting Personal Now!

9/19/21, 6:11 PM

A process of beautification...

Now I'm finally getting to work on adding some new features. One of those is "Themes". This feature lets you select from a list of different color themes for the menus and backgrounds on the app and, of course, that includes a "Dark Mode" theme which have been popular for some time now.

It also lets you upload a "Background Image" for the app to give it a look that's uniquely yours.

And you cal also add a background image for your Invoices and other documents to do the same. This feature was suggested by one of our longtime users and I think it's a great idea that will let make your invoices and other documents really stand out.

It will be a few more days before I release those updates. And speaking of updates, I've also spent time on making the updating of the app a seamless, fast, and reliable process that "just works". So this next update should just "appear" and you'll be able to use the new features as soon as I've release the update and you won't have to do a thing to make that happen.

Cleaning Things Up

9/15/21, 7:40 PM

A million little things

From May to the end of July I worked on fixing bugs that users reported, and there were a lot of them. That's something to be expected when you have an app with as many features as ezInvoice Pro. When I got all of those bugs fixed I moved on to making changes based on your feedback.

I've spent most of August cleaning up things. In software terms that means going over all your code looking for stuff you need to leave comments on to remind yourself what it does and/or why it's there. And tightening up code where you can do that, and deleting old code you've disabled but left in place so you could refer to it while you rewrote that bit for whatever reason.

Cleaning up also involves refining the design of the app. Mostly just small changes to clean up the "Look and Feel" of the app, and in our case especially on smart phones and tablets. These kinds of changes are important for users and a lot of them are inspired by user's suggestions and complaints. Most of them were needed because I was in a hurry when I put the screens together and was more concerned with function than design.

New email server is looking pretty good!

5/8/21, 3:24 PM

Almost all the major email providers have approved our emails for delivery!

So far the only large email provider that doesn't provide an option to verify our server is They require their email users to "approve" mail from a server with "No Reputation", which is what all new email servers begin with.

So, if you or any of your clients or customers use Charter/Spectrum Internet services for your email you need to follow their instructions on how to approve their email address.

Don't hesitate to contact me if you run into any issues. I need to know if you do.


As always, if you have any questions or comments, or need any help, just call or email us. We work for you and we appreciate that.

Bill Stephenson




The new "" email server is alive!

5/7/21, 11:33 PM

The new email server is up and running and all the apps are now connected to it. That's good news, but it does come with some downsides.

As I mentioned in the previous post here it takes some time for a new email server "earn a reputation" for not sending spam. And as a double whammy since our server sends mostly "Invoices" it's going to get flagged for that too because spammers love to send bogus invoices with the hopes of someone sending them free money. And apparently it works well enough to keep doing it even though it's now a pretty old scam.

You're probably going to have to ask your customers to add this email address to their Contacts in their email app:

I'll be switching all the apps to use that "sent by" email address.

I apologize for this being such a hassle. On the plus side this email server should be good for years to come.

The old "ezeamailserver" has died...

5/6/21, 12:59 AM

First off, I apologize yet again for the downtime...

Here's the postmortem. We use a tool called "certbot" to automatically update our "SSL Certificates" that ensure the web site you're looking at is real and the data you send and receive is encrypted. They refused to issue a certificate for that old server. I've mentioned before that server was nearing it's end of life so I have been working on building a new email server but the hard part is getting an email server setup so the emails it sends get accepted.

It's has to do with how "IP Addresses" work. The new email server's IP address won't have any "reputation". This means we're all going to have to ask people to check their "Junk" or "Spam" folders and flag the Invoice emails "Not Junk".

Now, getting this all working is better than it was years ago, but still far from easy. We could pay a 3rd party like Google to handle all our emails, and they charge quite a bit for that, but they also have all your emails running through their system and they track everything that runs through their system and invoices are not something you want others peeking at they pass through their network. And the really tough part about that is they can decide to sell their business or merge with one or just shut down. We've dealt with all of those issues in the past.

The other problem we have is our old software will not run on the new servers. The backend technologies they use are being obsoleted now. This is why I've been working on the new "EzInvoice Pro" apps. I tried getting the old software running on a newer server but it just won't. It has obsoleted dependencies that the new servers do not support.

So, that's the crappy news. But there is good news, and really quite a bit of it. The new email server is state of the art and running like a fine watch. And the new EzInvoice Pro apps were built with the new standards so it was fast and easy to get those working with the new email server.

While working on this it occurred to me that what we really all need is an easy way to send your invoices using your email account, and I think I've come up with one. It will require web browser makers to add a feature and email clients to support it, but I think it may get some support if I point out why and what needs to be done. I did mention it recently in a very casual way and it did get some positive attention even though it was buried in a conversation with many others about other sort of new email technologies that attempt to make it easier for app makers and users but really don't move the bar much at all.

I'll tell you, it's rough figuring out how and when to implement these changes because they force users of software to change with them and I understand why they don't want too. I'll say this though... those old ezInvoice and Foxdesk apps have lasted a lot longer that any others I know of. Most of the code they run on is over 10-15 years old now and some of it's closer to 20 years old.

It's hard to say how things will change in the next 10-20 years but I think it's safe to say the new apps should still be running. They'll evolve as necessary but the tech they rely on has certainly benefitted from the years of work behind it and the tech is beginning to mature.

EzInvoice Pro 7.2 Upgrade Released

4/26/21, 11:21 AM

We completed the v7.2 upgrade to the web app on Saturday, April 24 and you should see it after you login and out a couple times. As always, if you find any bugs please let us know and we'll get right to work on fixing them.

EzInvoice Pro 7.2 Completed

4/19/21, 6:37 PM

We'll be releasing it later this week.

The last big task we had to complete was moving all the page formatting code from the app into the templates. Now we've got four new design templates for Invoices and other documents all working as they should. The new designs are a pretty big improvement over the old one but from here we can spend some time creating all new templates and really focus on design.

Another big goal was getting these new templates to print better. To do that we had to open an invoice for printing in a new web browser window to make sure the page design prints properly. As a bonus, this also improves displaying an invoice on a mobile device because you can view the entire page. It's tiny on a phone, but since the resolution is so high on those you can still see what the document looks like and you can zoom in on it easily too.

The new "Unpaid Invoices Report" is pretty cool too. This makes is super fast and easy to see who owes you money and to send them an email reminding them to pay up. It also makes it easy to find an invoice you want to enter a payment on.

Another handy new little feature is you can now print an invoice from the Invoice List screen.

You can click here to check out the upgrade now. I'll spend a couple more days testing the app and unless I find something that needs work I'll push the upgrade out later this week.

Document Templates

4/11/21, 11:19 AM

The new documents styles you can choose from now for invoices and other documents is really a huge upgrade from previous versions of ezInvoice. Version 7.2 introduces these but there's a lot more we can do now that we have this implemented.

I'm not a great page design artist but I've learned a few new to me tricks while working on this and I'm excited to be able to work on new designs. I think there are some things we can do with invoices that are emailed that can add some value for both you and your customers.

One of the things I'd like to do is let users design their own templates for their invoices. With that in mind I've been working on ways to make that as easy as possible. It's really not difficult right now but it can be made easier and I'm excited to work on that. Basically what I want to do is create a very simple design that can be used by anyone to get started and a simple "How To" video that shows how. From there I need to create a way to let users upload their designs and add them to the list of styles they can select from.

I'd also like to provide a way for professional designers to sell their designs to users. I am always amazed by great design work and I'd love to see what others can create and I think it'd be worth paying for a design that's unique and professional looking.

EzInvoice Pro v7.2 Coming soon

Updated 4/10/21, 11:19 PM

This upgrade adds the features we've described previously and lot's of small refinements that make the app easier to use and more productive.

We'll be releasing this upgrade before the end of April. I encourage you to check out the latest beta app and offer any advice you may have on improving it, and report any bugs or issues you run into.

Click here to check out the Beta app now!

Here's a list of new features:

New Billing Reports Coming Soon!

4/5/21, 10:23 PM

The new "Billing Reports" feature lets you list all your unpaid and partially paid invoices and gives you a link to open the invoice to make it easy to enter payments, open the customer's "Contact" record to give them a call or add a note to their contact record, and send an email to your customer to remind they they still owe you money. This report works hand in hand with the "Payments" screen for each invoice you create.

EzInvoice Getting Started Page

3/28/21, 8:35 AM

Check out the new "Getting Started" guide here.

New Document Templates Coming Soon!

3/28/21, 8:29 AM

We're working on creating new documents styles you can choose from for your invoices and other documents. You'll be able to select your default style in your "Preferences" and select and change the style for each document you create.

This new feature will let us create styles for any kind of business and even let others create and share new styles.

All New Printing Routines Coming Soon!

3/28/21, 7:20 AM

There's a lot more to this new document templates feature than just letting you choose styles. We're also changing the way invoices are printed by opening up your invoice in a new browser widow or tab in your web browser.

After a lot of testing we've found this is, by far, the best way to do this. There's just too much going on in the "app window" to insure the invoice is printed like it should be and this change gives us fine grained control over the layout of the document to be printed.

The new invoice designs will be created with modern HTML and CSS and they'll be created to look good in print and email.

There's certainly room for improvement on both invoice designs and especially pagination for printed invoices but we've got a modern foundation to start building those improvements on now.

Introducing EzInvoice Pro

3/11/21, 1:45 PM

A truly modern web app.

EzInvoice was one of the very first "web apps", and probably the first. When we first made it back in 2001 we knew the biggest downsides were you couldn't use it offline and all your data was stored in a database on our web server. Over the past five years those issues have finally been getting some attention by both web browser makers and web app developers.

Now we can create web apps that run offline and store all your data on your desktop pc. That is huge! EzInvoice Pro is, once again, probably the first web app that can do this. It's taken a huge amount of work, and not just by us. Web brower makers like Google Chrome, Apple's Safari, and Mozilla's Firefox all had to work to implement the features on their side for app developers like us to do this. Right now there are a lot of crappy ways to try and do it. We know this because we tried them, but with Ezivoice Pro we took a different approach by leveraging the power and features of the CouchDB Database application that runs on most any desktop PC.

To use EzInvoice Pro offline and store all your data on your desktop PC you have to install the CouchDB Database application on your PC. When you do that the EzInvoice Pro app can run offline and you can use it just like you do online. The biggest differences are it's really is a lot faster because you never wait on the internet. So the app runs at near native app speeds on your desktop PC.

But there's more to it than that. You can also use it online "in the cloud". EzInvoice was, by definition, also one of the very first "Cloud Apps". It was from the very beginning, before they were called "Web Apps" and "Cloud Apps". This latest version implements "Live Sync" technology that you can turn on and off. When you turn it on all your data is synced up with our Cloud based CouchDB so you can use the app and your data anywhere you have an internet connection and a web browser.

It truly a huge breakthrough for how "Cloud Based" business software is made and used. It's way more powerful and way more secure and puts complete control and ownership of your data back in your hands.

That's pretty cool stuff.