Thx for the replay, 
1. the problem with checking the header is that it can be toyed with, if someone changes header to say 1kb and sends 4mbs i will check header and let it pass...

I will check about 2 and 3, thx!

EDIT: checked about 2 - something like size property doesn't exist, the maximum you can do with a request is iterate through all the data inside and get its total *length of characters* which is still far from the request size in mbs

As commented below:

The logic lies in the design of the system i am working on.
Simply put, i would kill a reference to an object only in case i would WANT to aggressively kick any place that tries using this object after i killed it. It is done only on very specific occasion.

So basically it's used as a last resort  because in some places, And although i understand in theory i could add a property and i would turn it off if i want the reference "killed" and just check that property, This is one of the options that came up.

Indirectly i can override the getter. The flow is this:
1. In the datatype i write a Get() method

2. in the class i have a Property prop As %MyDataType

3. i compile and the function Get from the data type gets compiled as propGet() inside my class

As you can see this is a very indirect way to override a Get method of any property with that datatype. (and it works, But i am having problems doing the same for the Set)

And my intention is to create a datatype that is also relevant to RegisteredObjects, That is why LogicalToStorage for example doesn't really suit me. 

If i have a RegisteredObject class then i won't save to storage anyway..

And while i understand i am using the Datatype not as intended this is the only way to make what i need.