new better structure
use strict and small changes