diff --git a/ultrasonic/build.gradle b/ultrasonic/build.gradle
index 6697dd4e..e26e6631 100644
--- a/ultrasonic/build.gradle
+++ b/ultrasonic/build.gradle
@@ -63,6 +63,7 @@ dependencies {
 
     implementation other.kotlinStdlib
     implementation other.koinAndroid
+    implementation other.koinJava
 
     testImplementation other.kotlinReflect
     testImplementation testing.junit
diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SubsonicTabActivity.java b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SubsonicTabActivity.java
index be2783af..9423d117 100644
--- a/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SubsonicTabActivity.java
+++ b/ultrasonic/src/main/java/org/moire/ultrasonic/activity/SubsonicTabActivity.java
@@ -38,15 +38,17 @@ import android.view.View.OnTouchListener;
 import android.widget.*;
 import net.simonvt.menudrawer.MenuDrawer;
 import net.simonvt.menudrawer.Position;
+import org.koin.java.standalone.KoinJavaComponent;
 import org.moire.ultrasonic.R;
-import org.moire.ultrasonic.app.UApp;
 import org.moire.ultrasonic.domain.MusicDirectory;
 import org.moire.ultrasonic.domain.MusicDirectory.Entry;
 import org.moire.ultrasonic.domain.PlayerState;
 import org.moire.ultrasonic.domain.Share;
 import org.moire.ultrasonic.featureflags.Feature;
+import org.moire.ultrasonic.featureflags.FeatureStorage;
 import org.moire.ultrasonic.service.*;
 import org.moire.ultrasonic.subsonic.SubsonicImageLoaderProxy;
+import org.moire.ultrasonic.subsonic.loader.image.SubsonicImageLoader;
 import org.moire.ultrasonic.util.*;
 
 import java.io.File;
@@ -808,12 +810,12 @@ public class SubsonicTabActivity extends ResultActivity implements OnClickListen
                     Util.getImageLoaderConcurrency(this)
             );
 
-            boolean isNewImageLoaderEnabled = ((UApp) getApplication()).getFeaturesStorage()
+            boolean isNewImageLoaderEnabled = KoinJavaComponent.get(FeatureStorage.class)
                     .isFeatureEnabled(Feature.NEW_IMAGE_DOWNLOADER);
             if (isNewImageLoaderEnabled) {
                 IMAGE_LOADER = new SubsonicImageLoaderProxy(
                         legacyImageLoader,
-                        ((UApp) getApplication()).getSubsonicImageLoader()
+                        KoinJavaComponent.get(SubsonicImageLoader.class)
                 );
             } else {
                 IMAGE_LOADER = legacyImageLoader;
diff --git a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java
index 98feabc8..4dc2fe6f 100644
--- a/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java
+++ b/ultrasonic/src/main/java/org/moire/ultrasonic/fragment/SettingsFragment.java
@@ -9,10 +9,10 @@ import android.provider.SearchRecentSuggestions;
 import android.support.annotation.Nullable;
 import android.util.Log;
 import android.view.View;
+import org.koin.java.standalone.KoinJavaComponent;
 import org.moire.ultrasonic.R;
 import org.moire.ultrasonic.activity.ServerSettingsActivity;
 import org.moire.ultrasonic.activity.SubsonicTabActivity;
-import org.moire.ultrasonic.app.UApp;
 import org.moire.ultrasonic.featureflags.Feature;
 import org.moire.ultrasonic.featureflags.FeatureStorage;
 import org.moire.ultrasonic.provider.SearchSuggestionProvider;
@@ -175,7 +175,7 @@ public class SettingsFragment extends PreferenceFragment
         CheckBoxPreference ffImageLoader = (CheckBoxPreference) findPreference(
                 Constants.PREFERENCES_KEY_FF_IMAGE_LOADER);
 
-        final FeatureStorage featureStorage = ((UApp) getActivity().getApplication()).getFeaturesStorage();
+        final FeatureStorage featureStorage = KoinJavaComponent.get(FeatureStorage.class);
         if (ffImageLoader != null) {
             ffImageLoader.setChecked(featureStorage.isFeatureEnabled(Feature.NEW_IMAGE_DOWNLOADER));
             ffImageLoader.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/app/UApp.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/app/UApp.kt
index 89b92ff0..0f2bdc5f 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/app/UApp.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/app/UApp.kt
@@ -1,7 +1,6 @@
 package org.moire.ultrasonic.app
 
 import android.app.Application
-import org.koin.android.ext.android.get
 import org.koin.android.ext.android.startKoin
 import org.moire.ultrasonic.di.DiProperties
 import org.moire.ultrasonic.di.appPermanentStorage
@@ -9,8 +8,6 @@ import org.moire.ultrasonic.di.baseNetworkModule
 import org.moire.ultrasonic.di.directoriesModule
 import org.moire.ultrasonic.di.featureFlagsModule
 import org.moire.ultrasonic.di.musicServiceModule
-import org.moire.ultrasonic.featureflags.FeatureStorage
-import org.moire.ultrasonic.subsonic.loader.image.SubsonicImageLoader
 
 class UApp : Application() {
     override fun onCreate() {
@@ -29,18 +26,4 @@ class UApp : Application() {
             )
         )
     }
-
-    /**
-     * Temporary method to get subsonic image loader from java code.
-     */
-    fun getSubsonicImageLoader(): SubsonicImageLoader {
-        return get()
-    }
-
-    /**
-     * Temporary method to get features storage.
-     */
-    fun getFeaturesStorage(): FeatureStorage {
-        return get()
-    }
 }
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt
index 7a4346fc..fb9c9fb9 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/AppPermanentStorageModule.kt
@@ -7,4 +7,4 @@ const val SP_NAME = "Default_SP"
 
 val appPermanentStorage = module {
     single(name = SP_NAME) { Util.getPreferences(getProperty(DiProperties.APP_CONTEXT)) }
-}
\ No newline at end of file
+}
diff --git a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/DiProperties.kt b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/DiProperties.kt
index 70d5860b..ac4748be 100644
--- a/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/DiProperties.kt
+++ b/ultrasonic/src/main/kotlin/org/moire/ultrasonic/di/DiProperties.kt
@@ -2,4 +2,4 @@ package org.moire.ultrasonic.di
 
 object DiProperties {
     const val APP_CONTEXT = "app_context"
-}
\ No newline at end of file
+}