self recoded

.