| Index: libadblockplus-android-settings/src/org/adblockplus/libadblockplus/android/settings/AdblockHelper.java | 
| diff --git a/libadblockplus-android-settings/src/org/adblockplus/libadblockplus/android/settings/AdblockHelper.java b/libadblockplus-android-settings/src/org/adblockplus/libadblockplus/android/settings/AdblockHelper.java | 
| index db3c7e8a8577958f72f4f13246e40c5d2a6ed736..01fda611982a2c601533861ad299113236913228 100644 | 
| --- a/libadblockplus-android-settings/src/org/adblockplus/libadblockplus/android/settings/AdblockHelper.java | 
| +++ b/libadblockplus-android-settings/src/org/adblockplus/libadblockplus/android/settings/AdblockHelper.java | 
| @@ -21,8 +21,9 @@ import android.content.Context; | 
| import android.content.SharedPreferences; | 
| import android.util.Log; | 
|  | 
| +import org.adblockplus.libadblockplus.android.AdblockEngine; | 
| import org.adblockplus.libadblockplus.android.AdblockEngineProvider; | 
| -import org.adblockplus.libadblockplus.android.SingletonEngineProvider; | 
| +import org.adblockplus.libadblockplus.android.SingleInstanceEngineProvider; | 
| import org.adblockplus.libadblockplus.android.Utils; | 
|  | 
| /** | 
| @@ -44,9 +45,10 @@ public class AdblockHelper | 
| public static final String PRELOAD_PREFERENCE_NAME = "ADBLOCK_PRELOAD"; | 
| private static AdblockHelper _instance; | 
|  | 
| -  private SingletonEngineProvider adblockEngineProvider; | 
| +  private SingleInstanceEngineProvider provider; | 
| private AdblockSettingsStorage storage; | 
| -  private Runnable engineCreatedCallback = new Runnable() | 
| + | 
| +  private final Runnable engineCreatedCallback = new Runnable() | 
| { | 
| @Override | 
| public void run() | 
| @@ -55,19 +57,18 @@ public class AdblockHelper | 
| if (settings != null) | 
| { | 
| Log.d(TAG, "Applying saved adblock settings to adblock engine"); | 
| -        // apply last saved settings to adblock engine | 
| - | 
| +        // apply last saved settings to adblock engine. | 
| // all the settings except `enabled` and whitelisted domains list | 
| // are saved by adblock engine itself | 
| -        adblockEngineProvider.getAdblockEngine().setEnabled(settings.isAdblockEnabled()); | 
| -        adblockEngineProvider.getAdblockEngine().setWhitelistedDomains(settings.getWhitelistedDomains()); | 
| +        provider.getEngine().setEnabled(settings.isAdblockEnabled()); | 
| +        provider.getEngine().setWhitelistedDomains(settings.getWhitelistedDomains()); | 
|  | 
| // allowed connection type is saved by filter engine but we need to override it | 
| // as filter engine can be not created when changing | 
| String connectionType = (settings.getAllowedConnectionType() != null | 
| ? settings.getAllowedConnectionType().getValue() | 
| : null); | 
| -        adblockEngineProvider.getAdblockEngine().getFilterEngine().setAllowedConnectionType(connectionType); | 
| +        provider.getEngine().getFilterEngine().setAllowedConnectionType(connectionType); | 
| } | 
| else | 
| { | 
| @@ -76,12 +77,12 @@ public class AdblockHelper | 
| } | 
| }; | 
|  | 
| -  private Runnable engineDisposedCallback = new Runnable() | 
| +  private final Runnable engineDisposedCallback = new Runnable() | 
| { | 
| @Override | 
| public void run() | 
| { | 
| -      Log.d(TAG, "Releasing adblock settings"); | 
| +      Log.d(TAG, "Releasing adblock settings storage"); | 
| storage = null; | 
| } | 
| }; | 
| @@ -106,13 +107,21 @@ public class AdblockHelper | 
| return _instance; | 
| } | 
|  | 
| -  public AdblockEngineProvider getAdblockEngineProvider() | 
| +  public AdblockEngineProvider getProvider() | 
| { | 
| -    return adblockEngineProvider; | 
| +    if (provider == null) | 
| +    { | 
| +      throw new IllegalStateException("Usage exception: call init(...) first"); | 
| +    } | 
| +    return provider; | 
| } | 
|  | 
| public AdblockSettingsStorage getStorage() | 
| { | 
| +    if (storage == null) | 
| +    { | 
| +      throw new IllegalStateException("Usage exception: call init(...) first"); | 
| +    } | 
| return storage; | 
| } | 
|  | 
| @@ -128,19 +137,19 @@ public class AdblockHelper | 
| * @param developmentBuild debug or release? | 
| * @param preferenceName Shared Preferences name to store adblock settings | 
| */ | 
| -  public SingletonEngineProvider init(Context context, String basePath, | 
| -                                      boolean developmentBuild, String preferenceName) | 
| +  public SingleInstanceEngineProvider init(Context context, String basePath, | 
| +                                           boolean developmentBuild, String preferenceName) | 
| { | 
| initProvider(context, basePath, developmentBuild); | 
| initStorage(context, preferenceName); | 
| -    return adblockEngineProvider; | 
| +    return provider; | 
| } | 
|  | 
| private void initProvider(Context context, String basePath, boolean developmentBuild) | 
| { | 
| -    this.adblockEngineProvider = new SingletonEngineProvider(context, basePath, developmentBuild); | 
| -    this.adblockEngineProvider.setEngineCreatedCallback(engineCreatedCallback); | 
| -    this.adblockEngineProvider.setEngineDisposedCallback(engineDisposedCallback); | 
| +    provider = new SingleInstanceEngineProvider(context, basePath, developmentBuild); | 
| +    provider.setEngineCreatedCallback(engineCreatedCallback); | 
| +    provider.setEngineDisposedCallback(engineDisposedCallback); | 
| } | 
|  | 
| private void initStorage(Context context, String settingsPreferenceName) | 
| @@ -150,6 +159,51 @@ public class AdblockHelper | 
| settingsPreferenceName, | 
| Context.MODE_PRIVATE); | 
|  | 
| -    this.storage = new SharedPrefsStorage(settingsPrefs); | 
| +    storage = new SharedPrefsStorage(settingsPrefs); | 
| +  } | 
| + | 
| +  /** | 
| +   * @deprecated The method is deprecated: use .getProvider().retain() instead | 
| +   */ | 
| +  @Deprecated | 
| +  public boolean retain(boolean asynchronous) | 
| +  { | 
| +    return provider.retain(asynchronous); | 
| +  } | 
| + | 
| +  /** | 
| +   * @deprecated The method is deprecated: use .getProvider().waitForReady() instead | 
| +   */ | 
| +  @Deprecated | 
| +  public void waitForReady() | 
| +  { | 
| +    provider.waitForReady(); | 
| +  } | 
| + | 
| +  /** | 
| +   * @deprecated The method is deprecated: use .getProvider().getEngine() instead | 
| +   */ | 
| +  @Deprecated | 
| +  public AdblockEngine getEngine() | 
| +  { | 
| +    return provider.getEngine(); | 
| +  } | 
| + | 
| +  /** | 
| +   * @deprecated The method is deprecated: use .getProvider().release() instead | 
| +   */ | 
| +  @Deprecated | 
| +  public boolean release() | 
| +  { | 
| +    return provider.release(); | 
| +  } | 
| + | 
| +  /** | 
| +   * @deprecated The method is deprecated: use .getProvider().getCounter() instead | 
| +   */ | 
| +  @Deprecated | 
| +  public int getCounter() | 
| +  { | 
| +    return provider.getCounter(); | 
| } | 
| } | 
|  |