Not much of a surprise, I'm developing a hobby OS

But I'm still a newbie, and I'd like to hear opinion of someone more experienced.
I'm trying to keep things simple, and introduce more sophisticated mechanisms only when the code seems stable. Now, I want to upgrade my paging management. So far, I've just identity-mapped all available RAM - but I believe that it's inefficient, especially when I start to provide tasks with their instance of Page Directory (not necessarily identity-mapped). Hence, I need some sort of dynamic page-table/page-entry marking/creating for allocated physical memory...
As I think about it, it seems quite simple except for one thing: say that I allocated a page frame. To mark (map) it, I lookup the Table in Directory, and set appropriate entry. But, when the Table is not present - I need a page for the Table itself

To solve this problem, I wanted to use one of Tables as a container for Tables pointers; then I read about trick with mapping a Page Directory as Table - is this correct (I mean, can a Page Directory pointer be an entry in Page Directory itself? The CPU sets some bits on Table entries, won't it be a problem?). Is this acceptable solution?
Thanks in advance.