upload behaviour implementation