diff --git a/_data/apidefinitions/broadcast_ops.yml b/_data/apidefinitions/broadcast_ops.yml
index f290ac1ab30c5cac729c91e917eaaddf7261b97a..b7301464456651b3427e4825ebb84bf45afc83b9 100644
--- a/_data/apidefinitions/broadcast_ops.yml
+++ b/_data/apidefinitions/broadcast_ops.yml
@@ -633,7 +633,7 @@
       json_examples:
         - '["custom_json",{"required_auths":[],"required_posting_auths":["hiveio"],"id":"follow","json":"[\"follow\",{\"follower\":\"hiveio\",\"following\":\"alice\",\"what\":[\"blog\"]}]"}]'
         - '["custom_json",{"required_auths":[],"required_posting_auths":["alice"],"id":"follow","json":"[\"follow\",{\"follower\":\"alice\",\"following\":\"eve\",\"what\":[\"ignore\"]}]"}]'
-        - '["custom_json",{"required_auths":[],"required_posting_auths":["bob"],"id":"reblog","json":"{\"account\":\"bob\",\"author\":\"alice\",\"permlink\":\"a-post-by-alice\"}"}]'
+        - '["custom_json",{"required_auths":[],"required_posting_auths":["bob"],"id":"reblog","json":"[\"reblog\", {\"account\":\"bob\",\"author\":\"alice\",\"permlink\":\"a-post-by-alice\"}]"}]'
         - '["custom_json",{"required_auths":["alice"],"required_posting_auths":[],"id":"witness","json":"[\"enable_content_editing\", {\"account\": \"alice\", \"relock_time\": \"2100-01-01T12:00:00\"}]"}]'
       client_docs:
         - '[hive-keychain](https://github.com/stoodkev/hive-keychain#requestcustomjson)'
diff --git a/_tutorials-javascript/get_delegations_by_user.md b/_tutorials-javascript/get_delegations_by_user.md
index 7016d7f90b5527a491e3c983bfa6c7106d82bec2..76e7cb7826555b0f94c2ca0450f384b5eef86e77 100644
--- a/_tutorials-javascript/get_delegations_by_user.md
+++ b/_tutorials-javascript/get_delegations_by_user.md
@@ -5,9 +5,7 @@ description: "_View the vesting delegations made by a user as well as the delega
 layout: full
 canonical_url: get_delegations_by_user.html
 ---
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Get Delegations By User](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/javascript/tutorials/29_get_delegations_by_user) can be downloaded as part of: [tutorials/javascript](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/javascript).</span>
-<br>
-Full, runnable src of [Get Delegations By User](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/javascript/29_get_delegations_by_user) can be downloaded as part of: [tutorials/javascript](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/javascript) (or download just this tutorial: [devportal-master-tutorials-javascript-29_get_delegations_by_user.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/javascript/29_get_delegations_by_user)).
+Full, runnable src of [Get Delegations By User](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/29_get_delegations_by_user) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-29_get_delegations_by_user.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/29_get_delegations_by_user)).
 
 This tutorial will take you through the process of calling delegation information from the hive blockchain using the `database API`. The account information provided has been chosen by random and the process is applicable to any user account on both the `production server` and the `testnet`.
 
diff --git a/_tutorials-javascript/get_state_replacement_api.md b/_tutorials-javascript/get_state_replacement_api.md
index 6471b85f94412a0d91e54ac6ea7834b7c11de44d..e9fc45daedbefcbc08ab6f2c6198ca035112c6ac 100644
--- a/_tutorials-javascript/get_state_replacement_api.md
+++ b/_tutorials-javascript/get_state_replacement_api.md
@@ -5,8 +5,6 @@ description: "This is a list of replacement API calls for each of the different
 layout: full
 canonical_url: get_state_replacement_api.html
 ---
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Get State Replacement Api](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/javascript/tutorials/34_get_state_replacement_api) can be downloaded as part of: [tutorials/javascript](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/javascript).</span>
-<br>
 Full, runnable src of [Get State Replacement Api](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/javascript/34_get_state_replacement_api) can be downloaded as part of: [tutorials/javascript](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/javascript) (or download just this tutorial: [devportal-master-tutorials-javascript-34_get_state_replacement_api.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/javascript/34_get_state_replacement_api)).
 
 ## Intro
diff --git a/_tutorials-python/account_recovery.md b/_tutorials-python/account_recovery.md
index 7d610ce21a8da9593597677f93bc1ae0e1d6f9eb..94a9ead77941d5a9fcb555ca7510c1a99b67d584 100644
--- a/_tutorials-python/account_recovery.md
+++ b/_tutorials-python/account_recovery.md
@@ -4,23 +4,20 @@ position: 35
 description: "How to recover an account using Python."
 layout: full
 canonical_url: account_recovery.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Account Recovery](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/35_account_recovery) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Account Recovery](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/35_account_recovery) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-35_account_recovery.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/35_account_recovery)).
 
-In this tutorial we show you how to request account recovery for a user and also recover that account on the **Hive** blockchain using the [beem-python](https://github.com/holgern/beem) library.
+In this tutorial we show you how to request account recovery for a user and also recover that account on the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library.
 
-The recovery system is used to recover hacked accounts. In the event that you lose your password, your account is lost forever. You must know at least one old password that was used on your account within 30 days. This recovery process can only be executed once an hour. Stolen Account Recovery gives the rightful account owner 30 days to recover their account from the moment the thief changed their owner key.
+The recovery system is used to recover hacked accounts.  In the event that you lose your password, your account is lost forever.  You must know at least one old password that was used on your account within 30 days.  This recovery process can only be executed once an hour.  Stolen Account Recovery gives the rightful account owner 30 days to recover their account from the moment the thief changed their owner key.
 
 ## Intro
 
-There are two parties involved in recovering an account. The user that requires their account to be recovered, and the recovery account (or trustee) which is the account that created the username on the blockchain. For anyone creating their account through the main Hive webiste, their recovery account would be Hive. If however your account was created for you by another user, that user is the one that would have to initialize your account recovery. The recovery account can be changed however to whichever user you require.
+There are two parties involved in recovering an account.  The user that requires their account to be recovered, and the recovery account (or trustee) which is the account that created the username on the blockchain.  For example, anyone creating their account through the Peakd webiste, their recovery account would be Peakd.  If however your account was created for you by another user, that user is the one that would have to initialize your account recovery.  The recovery account can be changed however to whichever user you require.
 
-For this tutorial we are using the `beem-python` library which contains the required functions to execute this recovery process. There are two main sections to this process. Firstly, there is the `request_account_recovery` function where the owner is verified and the intent for account recovery is transmitted to the blockchain. The second part is the actual `recover_account` process. Along with this we also create a complete set of new account keys (posting, active, owner and memo) in order for the account to function properly. If these keys are not generated you will receive an error when trying to log in with your new password: `This password is bound to your account's owner key and can not be used to login to this site. However, you can use it to update your password to obtain a more secure set of keys`
+For other recovery options, see: [Hive Account Recovery - Major update and new User Interface](https://peakd.com/@arcange/hive-account-recovery-major-update-and-new-user-interface)
 
-**This tutorial runs on the live network so special care needs to be taken when running it.**
+For this tutorial we are using the `beem-python` library which contains the required functions to execute this recovery process.  There are two main sections to this process.  Firstly, there is the `request_account_recovery` function where the owner is verified and the intent for account recovery is transmitted to the blockchain.  The second part is the actual `recover_account` process.  Along with this we also create a complete set of new account keys (posting, active, owner and memo) in order for the account to function properly.  If these keys are not generated you will receive an error when trying to log in with your new password: `This password is bound to your account's owner key and can not be used to login to this site. However, you can use it to update your password to obtain a more secure set of keys`
 
 The `request_account_recovery` function has the following parameters:
 
@@ -38,14 +35,12 @@ The `recover_account` function has the following parameters:
 
 ## Steps
 
-1.  [**App setup**](#setup) - Library install and import. Input user info and connection to production
-1.  [**Owner key creation**](#owner_key) - Creation of new and old owner keys
-1.  [**Recovery request operation and transmission**](#recovery_request) - creation of data object, operation and transmission of recovery request function
-1.  [**Account recovery and new account keys data objects**](#new_keys) - creation of new account keys and objects for account update and recovery
-1.  [**Account recovery commit**](#recovery_commit) - transmit account recovery to blockchain
-1.  [**Account update commit**](#account_commit) - transmit account key update to blockchain
-
-
+1. [**App setup**](#setup) - Library install and import. Input user info and connection to production
+1. [**Owner key creation**](#owner_key) - Creation of new and old owner keys
+1. [**Recovery request operation and transmission**](#recovery_request) - creation of data object, operation and transmission of recovery request function
+1. [**Account recovery and new account keys data objects**](#new_keys) - creation of new account keys and objects for account update and recovery
+1. [**Account recovery commit**](#recovery_commit) - transmit account recovery to blockchain
+1. [**Account update commit**](#account_commit) - transmit account key update to blockchain
 
 #### 1. App setup and connection <a name="setup"></a>
 
@@ -56,6 +51,7 @@ In this tutorial we use 1 packages:
 We import the libraries for the application.
 
 ```python
+import getpass
 import beembase
 from beem.account import Account
 from beem import Hive
@@ -64,70 +60,72 @@ from beemgraphenebase.account import PasswordKey
 from beembase.objects import Permission
 ```
 
-There are 5 inputs required. The account name to be recovered along with the old and new passwords. We also require the account name and private active key of the recovery account (account owner / trustee). For the first step in the process we initialize the steem class with the private key from the recovery account. The values are supplied via the terminal/console.
+There are 5 inputs required.  The account name to be recovered along with the old and new passwords.  We also require the account name and private active key of the recovery account (account owner / trustee).  For the first step in the process we initialize the beem class with the private key from the recovery account.  The values are supplied via the terminal/console.
 
 ```python
-#capture user information
-username = input('account to be recovered: ')
-old_password = input('recent password for account: ')
-new_password = input('new password for account: ')
+# capture user information
+account = input('account to be recovered: ')
+old_password = getpass.getpass('recent password for account: ')
+new_password = getpass.getpass('new password for account: ')
 
-recovery_account = input('account owner (recovery account): ')
-recovery_account_private_key = input('account owner private ACTIVE key: ')
+recovery_account = input('account owner (recovery account name): ')
+recovery_account_private_key = getpass.getpass('account owner private ACTIVE key: ')
 
-#connect to production server with active key
-s = Hive(node=['https://api.hive.blog'], keys=[recovery_account_private_key])
+client = Hive('http://127.0.0.1:8091', keys=[recovery_account_private_key])
+account = Account(account, blockchain_instance=client)
+recovery_account = Account(recovery_account, blockchain_instance=client)
 ```
 
 The new password for the account to be recovered must be at least 32 characters long.
 
 #### 2. Owner key creation <a name="owner_key"></a>
 
-Both new and old owner keys are generated from the passwords supplied in the first step. For a more in depth look at creating keys please refer to [this](https://developers.hive.io/tutorials-python/password_key_change) tutorial on changing your password and keys.
+Both new and old owner keys are generated from the passwords supplied in the first step.  For a more in depth look at creating keys please refer to [this]({{ '/tutorials-python/password_key_change' | relative_url }}) tutorial on changing your password and keys.
 
 ```python
-#create new account owner keys
-new_account_owner_private_key = PasswordKey(username, new_password, role='owner').get_private_key()
+# create new account owner keys
+new_account_owner_private_key = PasswordKey(account.name, new_password, role='owner').get_private_key()
 new_account_owner_private_key_string = str(new_account_owner_private_key)
 new_account_owner_public_key = str(new_account_owner_private_key.pubkey)
 
-#create old account owner keys
-old_account_owner_private_key = PasswordKey(username, old_password, role='owner').get_private_key()
+# create old account owner keys
+old_account_owner_private_key = PasswordKey(account.name, old_password, role='owner').get_private_key()
 old_account_owner_private_key_string = str(old_account_owner_private_key)
 old_account_owner_public_key = str(old_account_owner_private_key.pubkey)
 ```
 
-The Hive blockchain knows the history of your account, and every owner key that has ever been used for it. When you enter your recent password, it uses that to generate an owner key that can match up to a previous owner public key on the account. Without that password and owner key, the recovery account can't do anything to recover your account.
+The Hive blockchain knows the history of your account, and every owner key that has ever been used for it.  When you enter your recent password, it uses that to generate an owner key that can match up to a previous owner public key on the account.  Without that password and owner key, the recovery account can't do anything to recover your account.
 
 #### 3. Recovery request operation and transmission <a name="recovery_request"></a>
 
-The `new_owner_authority` containing the new public key is formatted in order to be used in the `request_account_recovery` operation. Once the data object has been created, the operation is transmitted to the blockchain to confirm that the account in question is going to be recovered.
+The `new_owner_authority` containing the new public key is formatted in order to be used in the `request_account_recovery` operation.  Once the data object has been created, the operation is transmitted to the blockchain to confirm that the account in question is going to be recovered.
 
 ```python
+# owner key format
 new_owner_authority = {
-    "key_auths": [
-        [new_account_owner_public_key, 1]
-    ],
-    "account_auths": [],
-    "weight_threshold": 1
+  "key_auths": [
+    [new_account_owner_public_key, 1]
+  ],
+  "account_auths": [],
+  "weight_threshold": 1
 }
 
-#recovery request data object creation
+# recovery request data object creation
 request_op_data = {
-    'account_to_recover': username,
-    'recovery_account': recovery_account,
-    'new_owner_authority': new_owner_authority,
-    'extensions': []
+  'account_to_recover': account.name,
+  'recovery_account': recovery_account.name,
+  'new_owner_authority': new_owner_authority,
+  'extensions': []
 }
 
-#recovery request operation creation
+# recovery request operation creation
 request_op = beembase.operations.Request_account_recovery(**request_op_data)
 
 print('request_op_data')
 print(request_op_data)
 
-#recovery request broadcast
-request_result = s.finalizeOp(request_op, recovery_account, "active")
+# recovery request broadcast
+request_result = client.finalizeOp(request_op, recovery_account.name, "active")
 
 print('request_result')
 print(request_result)
@@ -138,59 +136,63 @@ print(request_result)
 The old owner key is formatted and the object for the account recovery function is created with the required parameters.
 
 ```python
+# owner key format
 recent_owner_authority = {
-    "key_auths": [
-        [old_account_owner_public_key, 1]
-    ],
-    "account_auths": [],
-    "weight_threshold": 1
+  "key_auths": [
+    [old_account_owner_public_key, 1]
+  ],
+  "account_auths": [],
+  "weight_threshold": 1
 }
 
+# recover account data object
 op_recover_account_data = {
-    'account_to_recover': username,
-    'new_owner_authority': new_owner_authority,
-    'recent_owner_authority': recent_owner_authority,
-    'extensions': []
+  'account_to_recover': account.name,
+  'new_owner_authority': new_owner_authority,
+  'recent_owner_authority': recent_owner_authority,
+  'extensions': []
 }
 ```
 
 The object for the account key update operation is created with the relevant keys created in the correct format within the object.
 
 ```python
+# account keys update data object
 op_account_update_data = {
-    "account": username,
-    "active": {
-        "key_auths": [
-            [str(PasswordKey(username, new_password, role='active').get_private_key().pubkey), 1]
-        ],
-        "account_auths": [],
-        "weight_threshold": 1
-    },
-    "posting": {
-        "key_auths": [
-            [str(PasswordKey(username, new_password, role='posting').get_private_key().pubkey), 1]
-        ],
-        "account_auths": [],
-        "weight_threshold": 1
-    },
-    "memo_key": str(PasswordKey(username, new_password, role='memo').get_private_key().pubkey),
-    "json_metadata": ""
+  "account": account.name,
+  "active": {
+    "key_auths": [
+      [str(PasswordKey(account.name, new_password, role='active').get_private_key().pubkey), 1]
+    ],
+    "account_auths": [],
+    "weight_threshold": 1
+  },
+  "posting": {
+    "key_auths": [
+      [str(PasswordKey(account.name, new_password, role='posting').get_private_key().pubkey), 1]
+    ],
+    "account_auths": [],
+    "weight_threshold": 1
+  },
+  "memo_key": str(PasswordKey(account.name, new_password, role='memo').get_private_key().pubkey),
+  "json_metadata": ""
 }
 ```
 
 #### 5. Account recovery commit <a name="recovery_commit"></a>
 
-The steem class is initialised once more but with the required WIF for this specific section. This is necessary when different keys are required at various steps. The `recover_account` function is transmitted to the blockchain via the `TransactionBuilder` operation in order to append the new private keys. The operation is then broadcast.
+The beem class is initialized once more but with the required WIF for this specific section.  This is necessary when different keys are required at various steps.  The `recover_account` function is transmitted to the blockchain via the `TransactionBuilder` operation in order to append the new private keys.  The operation is then broadcast.
 
 ```python
-s = Hive(node=['https://api.hive.blog'], keys=[recovery_account_private_key])
+# recover account initialisation and transmission
+client = Hive('http://127.0.0.1:8091', keys=[recovery_account_private_key])
 
 op_recover_account = beembase.operations.Recover_account(**op_recover_account_data)
 
 print('op_recover_account')
 print(op_recover_account)
 
-tb = TransactionBuilder()
+tb = TransactionBuilder(blockchain_instance=client)
 tb.appendOps([op_recover_account])
 tb.appendWif(str(old_account_owner_private_key))
 tb.appendWif(str(new_account_owner_private_key))
@@ -203,17 +205,18 @@ print(result)
 
 #### 6. Account update commit <a name="account_commit"></a>
 
-The same basic process is followed as in the previous step. For this step however we require the new owner private key which is initialised in the steem class. The `TransactionBuilder` operation is used once more for the transmission to the blockchain.
+The same basic process is followed as in the previous step.  For this step however we require the new owner private key which is initialized in the beem class.  The `TransactionBuilder` operation is used once more for the transmission to the blockchain.
 
 ```python
-s = Hive(node=['https://api.hive.blog'], keys=[new_account_owner_private_key])
+# update account keys initialisation and transmission
+client = Hive('http://127.0.0.1:8091', keys=[new_account_owner_private_key])
 
 op_account_update = beembase.operations.Account_update(**op_account_update_data)
 
 print('op_account_update')
 print(op_account_update)
 
-tb = TransactionBuilder()
+tb = TransactionBuilder(blockchain_instance=client)
 tb.appendOps([op_account_update])
 tb.appendWif(str(new_account_owner_private_key))
 tb.sign()
@@ -224,16 +227,19 @@ print('result')
 print(result)
 ```
 
-And that's it!
-
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/35_account_recovery`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
 
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
 
----
+For details on running a local testnet, see: [Setting Up a Testnet]({{ '/tutorials-recipes/setting-up-a-testnet.html' | relative_url }})
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/35_account_recovery`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/account_reputation.md b/_tutorials-python/account_reputation.md
index 962d86defce92a8ff1241fd454089b4acc88a492..17971bbfa6874dba53e2ce44398520b84b501127 100644
--- a/_tutorials-python/account_reputation.md
+++ b/_tutorials-python/account_reputation.md
@@ -4,38 +4,34 @@ position: 20
 description: "Would you like to know how to interpret account reputation to more human readable format, then this tutorial is for you."
 layout: full
 canonical_url: account_reputation.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Account Reputation](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/20_account_reputation) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Account Reputation](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/20_account_reputation) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-20_account_reputation.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/20_account_reputation)).
 
 ## Intro
 
-Account reputation is long integer string which requires special function or formula to convert in more human readable format. We will define that function in this tutorial and show how to fetch and interpret reputation.
+Because blockchains don't natively store floating point, account reputation is stored on the blockchain as a long integer string which requires special function or formula to convert in more human readable format.  We can define a function that will convert this value, but beem already has the ability to interpret reputation automatically.
 
 ## Steps
 
-1.  [**App setup**](#app-setup) - Library install and import
-1.  [**Account list**](#account-list) - List of predefined accouns to select from
-1.  [**Reputation interpret**](#reputation-details) - Reputation converting function
-1.  [**Print output**](#print-output) - Print results in output
+1. [**App setup**](#app-setup) - Library install and import
+1. [**Account list**](#account-list) - List of predefined accouns to select from
+1. [**Print output**](#print-output) - Print results in output
 
 #### 1. App setup <a name="app-setup"></a>
 
-In this tutorial we will use 4 packages, `pick` - helps us to select filter interactively. `steem` - steem-python library, interaction with Blockchain. `pprint` - print results in better format and `math` to perform some math calculations.
+In this tutorial we will use the following packages: `pick` - helps us to select filter interactively. `beem` - hive library, interaction with Blockchain. `pprint` - print results in better format.
 
 First we import all libraries and initialize Hive class
 
 ```python
-    import pprint
-    import math
-    from pick import pick
+import pprint
+from pick import pick
 
-    # initialize Hive class
-    from steem import Hive
+# initialize Hive class
+from beem import Hive
+from beem.account import Account
 
-    s = Hive()
+hive = Hive()
 ```
 
 #### 2. Account list <a name="account-list"></a>
@@ -43,71 +39,72 @@ First we import all libraries and initialize Hive class
 Next we will show predefined account list to select and setup `pick` properly.
 
 ```python
-    title = 'Please choose account: '
-    options = ["steemitblog","esteemapp","busy.org","demo"]
+title = 'Please choose account: '
+options = ["hiveio","ecency","busy.org","demo"]
 
-    # get index and selected filter name
-    option, index = pick(options, title)
+# get index and selected filter name
+option, index = pick(options, title)
 
-    # option is printed as reference
-    pprint.pprint("Selected: "+option)
+# option is printed as reference
+pprint.pprint("Selected: " + option)
 ```
 
-This will show us list of accounts to select in terminal/command prompt. And after selection we will fetch account details from Blockchain with `get_accounts` function.
+This will show us list of accounts to select in terminal/command prompt. And after selection we will fetch account details from Blockchain.
 
 ```python
-    user = s.get_accounts([option])
+user = Account(option, blockchain_instance=hive)
 ```
 
+#### 3. Print output <a name="print-output"></a>
 
-#### 3. Reputation interpret <a name="reputation-details"></a>
-
-Next we will define reputation interpreter:
+After we have fetched account details from Blockchain, all we have to do is to use the defined function to interpret account's `reputation` field into meaningful number.
 
 ```python
-def rep_log10(rep):
-    """Convert raw hived rep into a UI-ready value centered at 25."""
-    def log10(string):
-        leading_digits = int(string[0:4])
-        log = math.log10(leading_digits) + 0.00000001
-        num = len(string) - 1
-        return num + (log - int(log))
-
-    rep = str(rep)
-    if rep == "0":
-        return 25
-
-    sign = -1 if rep[0] == '-' else 1
-    if sign < 0:
-        rep = rep[1:]
-
-    out = log10(rep)
-    out = max(out - 9, 0) * sign  # @ -9, $1 earned is approx magnitude 1
-    out = (out * 9) + 25          # 9 points per magnitude. center at 25
-    return round(out, 2)
+# print specified account's reputation
+pprint.pprint(user.get_reputation())
 ```
 
-Above function will cover all edge cases, for example, if account is new their reputation is `0` hence, default starting reputation will be `25`. If reputation negative that's also considered.
-
-#### 4. Print output <a name="print-output"></a>
+Above function will internally cover all edge cases, for example, if account is new their raw reputation is `0` hence, default starting reputation will be `25`. If reputation negative that's also considered.
 
-After we have fetched account details from Blockchain, all we have to do is to use defined function above to interpret account's `reputation` field into meaningful number.
+For reference, the following function will take a raw blockchain reputation value and convert it to the display value:
 
 ```python
-    # print specified account's reputation
-    pprint.pprint(rep_log10(user[0]['reputation']))
+import math
+
+def rep_log10(rep):
+  """Convert raw hived rep into a UI-ready value centered at 25."""
+  
+  def log10(string):
+    leading_digits = int(string[0:4])
+    log = math.log10(leading_digits) + 0.00000001
+    num = len(string) - 1
+    
+    return num + (log - int(log))
+
+  rep = str(rep)
+  
+  if rep == "0":
+    return 25
+
+sign = -1 if rep[0] == '-' else 1
+
+if sign < 0:
+  rep = rep[1:]
+
+  out = log10(rep)
+  out = max(out - 9, 0) * sign  # @ -9, $1 earned is approx magnitude 1
+  out = (out * 9) + 25          # 9 points per magnitude. center at 25
+  
+  return round(out, 2)
 ```
 
-That's it. We have successfully interpreted reputation.
+You can use this to convert from the raw blockchain value.  This is now done internally by libraries like beem.
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/20_account_reputation`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see output in terminal/command prompt screen.
-
-
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/20_account_reputation`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see output in terminal/command prompt screen.
diff --git a/_tutorials-python/claim_rewards.md b/_tutorials-python/claim_rewards.md
index a0a7c29187d4e137b94ecaafe812e261598b1771..9f2e59f750459241efe5abcbc1c191a07e0b0935 100644
--- a/_tutorials-python/claim_rewards.md
+++ b/_tutorials-python/claim_rewards.md
@@ -4,171 +4,157 @@ position: 23
 description: "How to claim rewards using Python."
 layout: full
 canonical_url: claim_rewards.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Claim Rewards](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/23_claim_rewards) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Claim Rewards](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/23_claim_rewards) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-23_claim_rewards.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/23_claim_rewards)).
 
-In this tutorial we show you how to check the HIVE, HBD and HIVE POWER rewards balances of an account on the **Hive** blockchain, and how to claim either a portion or all of the rewards for an account using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+In this tutorial we show you how to check the HIVE, HBD and HIVE POWER (VESTS) rewards balances of an account on the **Hive** blockchain, and how to claim either a portion or all of the rewards for an account using the functionality found within the [beem](https://github.com/holgern/beem) library.
 
 ## Intro
 
-The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `claim_reward_balance` method found within the `commit` class in the library. Before we transmit a claim, we use the `get_account` function to check the current rewards balance of the account to see what is available to claim. The `claim` method has 4 parameters:
+The beem library has a built-in function to transmit transactions to the blockchain.  We are using the [`claim_reward_balance`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.claim_reward_balance) method found within the account instance.  Before we transmit a claim, we use the [`Account`](https://beem.readthedocs.io/en/latest/beem.account.html) module to check the current rewards balance of the account to see what is available to claim.  The `claim` method has 3 parameters:
 
 1.  _reward hive_ - The amount of HIVE to claim
 1.  _reward hbd_ - The amount of HBD to claim
 1.  _reward vests_ - The amount of VESTS (HIVE POWER) to claim
-1.  _account_ - The source account for the claim
 
 ## Steps
 
 1.  [**App setup**](#setup) - Library install and import. Connection to testnet
-1.  [**User information and steem node**](#userinfo) - Input user information and connection to Hive node
+1.  [**User information and Hive node**](#userinfo) - Input user information and connection to Hive node
 1.  [**Check reward balance**](#balance) - Check current rewards balances of user account
-1.  [**Claim commit**](#commit) - Input amount of rewards to claim and commit to blockchain
+1.  [**Claim**](#broadcast) - Input amount of rewards to claim
 1.  [**Balance update**](#update) - Check new rewards balances after completed claim
 
 #### 1. App setup <a name="setup"></a>
 
 In this tutorial we use 2 packages:
 
-- `steem` - steem-python library and interaction with Blockchain
+- `beem` - hive library and interaction with Blockchain
 - `pick` - helps select the query type interactively
 
 We import the libraries and connect to the `testnet`.
 
 ```python
-import steembase
-import steem
+import pprint
 from pick import pick
-from steem.amount import Amount
-
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
+import getpass
+from beem import Hive
+from beem.account import Account
 ```
 
 Because this tutorial alters the blockchain we connect to a testnet so we don't create spam on the production server.
 
-#### 2. User information and steem node <a name="userinfo"></a>
+#### 2. User information and Hive node <a name="userinfo"></a>
 
-We require the `private active key` of the user in order for the claim to be committed to the blockchain. This is why we are using a testnet. The values are supplied via the terminal/console before we initialise the steem class. There are some demo accounts available but we encourage you to create your own accounts on this testnet and create balances you can claim; it's good practice.
+We require the `private posting key` of the user in order for the claim to be broadcasted to the blockchain.  This is why we are using a testnet.  The values are supplied via the terminal/console before we initialize the beem class.
 
 ```python
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private ACTIVE key: ') #demo account: 5KaNM84WWSqzwKzY82fXPaUW43idbLnPqf5SfjGxLfw6eV2kAP3
+# capture user information
+account = input('Enter username: ')
+wif_posting_key = getpass.getpass('Enter private POSTING key: ')
 
-#connect node
-client = steem.Hive(nodes=['https://testnet.steem.vc'],keys=[wif])
+# connect node
+client = Hive('http://127.0.0.1:8091', keys=[wif_posting_key])
 ```
 
 #### 3. Check reward balance <a name="balance"></a>
 
-We send a query to the blockchain using the `get_account` function to check if the username exists on the blockchain. We also use this function to get a clear picture of the available rewards that can be claimed and display this on the console/terminal.
+We send a query to the blockchain using the [`Account`](https://beem.readthedocs.io/en/latest/beem.account.html) module to check if the username exists on the blockchain.  We also use this to get a clear picture of the available rewards that can be claimed and display this on the console/terminal.
 
 ```python
-#get account reward balances
-userinfo = client.get_account(username)
+# get account reward balances
+account = Account(account, blockchain_instance=client)
 
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
+reward_hive = account['reward_hive_balance']
+reward_hbd = account['reward_hbd_balance']
+reward_vests = account['reward_vesting_balance']
 
-reward_hive = userinfo['reward_hive_balance']
-reward_hbd = userinfo['reward_hbd_balance']
-reward_sp = userinfo['reward_vesting_hive']
-reward_vests = userinfo['reward_vesting_balance']
+print('Reward Balances:' + '\n' +
+  '\t' + str(reward_hive) + '\n' +
+  '\t' + str(reward_hbd) + '\n' +
+  '\t' + str(reward_vests)
+)
 
-print('Reward Balances:' + '\n' + 
-    'HIVE: ' + reward_hive + '\n' + 
-    'HBD: ' + reward_hbd + '\n' + 
-    'HIVE POWER: ' + reward_sp + '\n' +
-    'VESTS: ' + reward_vests
-    )
+if reward_hive.amount + reward_hbd.amount + reward_vests.amount == 0:
+  print('\n' + 'No rewards to claim')
+  exit()
 
 input('\n' + 'Press enter to continue to claim selection')
 ```
 
-#### 4. Claim commit <a name="commit"></a>
+#### 4. Claim<a name="broadcast"></a>
 
-An option is provided to either claim all rewards at once or to specify specific amounts to be claimed for each individual reward balance. If you are using one of Hive's demo accounts, please leave some rewards for others to claim!
+An option is provided to either claim all rewards at once or to specify specific amounts to be claimed for each individual reward balance.
 
 ```python
-#choice of claim
+# choice of claim
 title = 'Please choose claim type: '
 options = ['ALL', 'SELECTED', 'CANCEL']
+# get index and selected claim type
 option, index = pick(options, title)
+
+if option == 'CANCEL':
+  print('\n' + 'Operation cancelled')
+  exit()
 ```
 
-When the option to claim all rewards is selected, the claim parameters are automatically assigned from the `get_accounts` query. We also check that there are in fact outstanding rewards balances before we commit the claim.
+When the option to claim all rewards is selected, the claim parameters are automatically assigned from the `Account` query.  We also check that there are in fact outstanding rewards balances before we broadcast the claim.
 
 ```python
-#commit claim based on selection
+# commit claim based on selection
 if option == 'ALL':
-    if Amount(reward_hive).amount + Amount(reward_hbd).amount + Amount(reward_vests).amount == 0:
-        print('\n' + 'No rewards to claim')
-        exit()
-    else:
-        client.claim_reward_balance(reward_hive, reward_hbd, reward_vests, username)
-        print('\n' + 'All reward balances have been claimed. New reward balances are:' + '\n')
+  account.claim_reward_balance
+  print('\n' + 'All reward balances have been claimed. New reward balances are:' + '\n')
 else:
-    if option == 'CANCEL':
-        print('\n' + 'Operation cancelled')
-        exit()
-    else:
-        claim_hive = input('\n' + 'Please enter the amount of HIVE to claim: ') + ' HIVE'
-        claim_hbd = input('Please enter the amount of HBD to claim: ') + ' HBD'
-        claim_vests = input('Please enter the amount of VESTS to claim: ') + ' VESTS'
-        if Amount(claim_hive).amount + Amount(claim_hbd).amount + Amount(claim_vests).amount == 0:
-            print('\n' + 'Zero values entered, no claim to submit')
-            exit()
-        else:
-            if claim_hive > reward_hive or claim_hbd > reward_hbd or claim_vests > reward_vests:
-                print('\n' + 'Requested claim value higher than available rewards')
-                exit()
-            else:
-                client.claim_reward_balance(claim_hive, claim_hbd, claim_vests, username)
-                print('\n' + 'Claim has been processed. New reward balances are:' + '\n')
+  claim_hive = float(input('\n' + 'Please enter the amount of HIVE to claim: ') or '0')
+  claim_hbd = float(input('Please enter the amount of HBD to claim: ') or '0')
+  claim_vests = float(input('Please enter the amount of VESTS to claim: ') or '0')
 
+  if claim_hive + claim_hbd + claim_vests == 0:
+    print('\n' + 'Zero values entered, no claim to submit')
+    exit()
+
+  if claim_hive > reward_hive or claim_hbd > reward_hbd or claim_vests > reward_vests:
+    print('\n' + 'Requested claim value higher than available rewards')
+    exit()
+
+  account.claim_reward_balance(reward_hive=claim_hive, reward_hbd=claim_hbd, reward_vests=claim_vests)
+  print('\n' + 'Claim has been processed. New reward balances are:' + '\n')
 ```
 
-When doing only a selected claim of available rewards, the values are captured in the console/terminal. The inputs cannot be negative, must be less than or equal to the available reward and at least ONE of the inputs needs to be greater than zero for the claim to be able to transmit. The result of the selected option is printed on the UI.
+When doing only a selected claim of available rewards, the values are captured in the console/terminal.  The inputs cannot be negative, must be less than or equal to the available reward and at least ONE of the inputs needs to be greater than zero for the claim to be able to transmit.  The result of the selected option is printed on the UI.
 
 #### 5. Balance update <a name="update"></a>
 
 As a final check we run the account query again to get updated values for the available rewards balances.
 
 ```python
-#get updated account reward balances
+# get updated account reward balances
 input("Press enter for new account balances")
 
-userinfo = client.get_account(username)
+account.refresh()
 
-reward_hive = userinfo['reward_hive_balance']
-reward_hbd = userinfo['reward_hbd_balance']
-reward_sp = userinfo['reward_vesting_hive']
-reward_vests = userinfo['reward_vesting_balance']
+reward_hive = account['reward_hive_balance']
+reward_hbd = account['reward_hbd_balance']
+reward_vests = account['reward_vesting_balance']
 
-print('HIVE: ' + reward_hive + '\n' + 
-    'HBD: ' + reward_hbd + '\n' + 
-    'HIVE POWER: ' + reward_sp + '\n' +
-    'VESTS: ' + reward_vests
-    )
+print('\t' + str(reward_hive) + '\n' +
+  '\t' + str(reward_hbd) + '\n' +
+  '\t' + str(reward_vests)
+)
 ```
 
-We encourage users to play around with different values and data types to fully understand how this process works. You can also check the balances and transaction history on the [testnet portal](http://condenser.steem.vc/).
-
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/23_claim_rewards`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
 
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
 
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/23_claim_rewards`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/convert_hbd_to_hive.md b/_tutorials-python/convert_hbd_to_hive.md
new file mode 100644
index 0000000000000000000000000000000000000000..850d3df7135158aafd569e8f933d1725437cbd69
--- /dev/null
+++ b/_tutorials-python/convert_hbd_to_hive.md
@@ -0,0 +1,131 @@
+---
+title: 'PY: Convert HBD To HIVE'
+position: 32
+description: "How to convert your HBD to HIVE using Python."
+layout: full
+canonical_url: convert_hbd_to_hive.html
+---
+Full, runnable src of [Convert HBD To HIVE](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/32_convert_hbd_to_hive) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-32_convert_hbd_to_hive.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/32_convert_hbd_to_hive)).
+
+In this tutorial we will explain and show you how to convert some or all of your available HBD balance into HIVE on the **Hive** blockchain using the `commit` class found within the [beem](https://github.com/holgern/beem) library.
+
+It should be noted that, using this process, the converted HIVE will not be available instantly as it takes 3.5 days for the transaction to be processed.  It is also not possible to stop a conversion once initialized.  During the 3.5 days for it to be converted, if the conversion price fluctuates above the target, you will likely receive much less HIVE than expected.  Because of this, the method in this tutorial is **NOT** the preferred and **often NOT** the most efficient way of converting HBD to HIVE.  This tutorial just illustrates that it can be done in this manner.
+
+Note: **This is not a market process and will often result in unfavorable outcomes, if used bindly.**
+
+<blockquote class="warning">
+  There is an internal market on Hive that allows you to sell your HBD.  You should use the internal market for routine trades between HBD and HIVE.  With the market process you can get your HIVE (sometimes immediately) and at the exact price that you expect.  The market place is almost always the better way to exchange your HBD.  <a href="https://hive.blog/hive-148441/@rehan12/quick-guide-to-use-hive-internal-market">This article</a> provides more information on using the market to exchange your HBD for HIVE.
+</blockquote>
+
+The purpose of this process is for experts to help maintain the target price of HBD, **not** to provide convenience to the end-user.
+
+## Intro
+
+The Hive python library has built-in functionality to transmit transactions to the blockchain.  We are using the [`convert`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.convert) method found within the [`Account`](https://beem.readthedocs.io/en/latest/beem.account.html) instance.  Before we do the conversion, we check the current balance of the account to check how much HBD is available.  This is not strictly necessary as the process will automatically abort with the corresponding error, but it does give some insight into the process as a whole.  We use the `Account` module to check for this.  The `convert` method has 2 parameters:
+
+1. _amount_ - The amount of HBD that will be converted
+1. _request-id_ - An identifier for tracking the conversion. This parameter is optional
+
+## Steps
+
+1. [**App setup**](#setup) - Library install and import. Connection to testnet
+1. [**User information and Hive node**](#userinfo) - Input user information and connection to Hive node
+1. [**Check balance**](#balance) - Check current HIVE and HBD balance of user account
+1. [**Conversion amount and commit**](#convert) - Input of HBD amount to convert and commit to blockchain
+
+#### 1. App setup <a name="setup"></a>
+
+In this tutorial we only use 1 package:
+
+- `beem` - hive library and interaction with Blockchain
+
+```python
+from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
+```
+
+Because this tutorial alters the blockchain we connect to the testnet so we don't create spam on the production server.
+
+#### 2. User information and Hive node <a name="userinfo"></a>
+
+We require the `private active key` of the user in order for the conversion to be committed to the blockchain.  This is why we have to specify this alongside the `testnet` node.  The values are supplied via the terminal/console before we initialize the beem class.
+
+```python
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
+
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
+```
+
+#### 3. Check balance <a name="balance"></a>
+
+In order to give the user enough information to make the conversion we check the current balance of the account using the `Account` module.
+
+```python
+# get account balance for HIVE and HBD
+account = Account(account, blockchain_instance=client)
+total_hive = account['balance']
+total_hbd = account['hbd_balance']
+
+print('CURRENT ACCOUNT BALANCE:' + '\n' + str(total_hive) + '\n' + str(total_hbd) + '\n')
+```
+
+The result of the query is displayed in the console/terminal.
+
+#### 4. Conversion amount and commit <a name="convert"></a>
+
+The final step before we can commit the transaction to the blockchain is to assign the `amount` parameter.  We do this via a simple input from the terminal/console.
+
+```python
+# get recipient name
+convert_amount = float(input('Enter the amount of HBD to convert to HIVE: ') or '0')
+
+if (convert_amount <= 0):
+  print("Must be greater than zero.")
+  exit()
+```
+
+This value must be greater than zero in order for the transaction to execute without any errors.  Now that we have all the parameters we can do the actual transmission of the transaction to the blockchain.
+
+```python
+# parameters: amount, request_id
+account.convert(convert_amount)
+
+print('\n' + format(convert_amount, '.3f') + ' HBD has been converted to HIVE')
+```
+
+If no errors are encountered a simple confirmation is printed on the UI.
+
+As an added confirmation we check the balance of the user again and display it on the UI.  This is not required at all but it serves as a more definitive confirmation that the conversion has been started correctly.
+
+```python
+# get remaining account balance for HIVE and HBD
+account.refresh()
+total_hive = account['balance']
+total_hbd = account['hbd_balance']
+
+print('\n' + 'REMAINING ACCOUNT BALANCE:' + '\n' + str(total_hive) + '\n' + str(total_hbd))
+```
+
+The HIVE balance will not yet have been updated as it takes 3.5 days to settle.  The HBD will however show the new balance.
+
+### To Run the tutorial
+
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
+
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
+
+For details on running a local testnet, see: [Setting Up a Testnet]({{ '/tutorials-recipes/setting-up-a-testnet.html' | relative_url }})
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/32_convert_hbd_to_hive`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/convert_sbd_to_steem.md b/_tutorials-python/convert_sbd_to_steem.md
deleted file mode 100644
index 13035f5e09532c2309ae15fcab4209da343094ea..0000000000000000000000000000000000000000
--- a/_tutorials-python/convert_sbd_to_steem.md
+++ /dev/null
@@ -1,132 +0,0 @@
----
-title: 'PY: Convert Hbd To Hive'
-position: 32
-description: "How to convert your HBD to HIVE using Python."
-layout: full
-canonical_url: convert_hbd_to_hive.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Convert Hbd To Hive](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/32_convert_hbd_to_hive) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
-
-In this tutorial we will explain and show you how to convert some or all of your available HBD balance into HIVE on the **Hive** blockchain using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
-
-It should be noted that the converted HIVE will not be available instantly as it takes 3.5 days for the transaction to be processed. It is also not possible to stop a conversion once initialised. During the 3.5 days for it to be converted and as the conversion price fluctuates you could actually be receiving less HIVE than what you should. Because of this, the method in this tutorial is NOT the preferred or most efficient way of converting HBD to HIVE. This tutorial just illustrates that it can be done in this manner.
-
-There is a marketplace on Hive that allows you to "sell" your HBD instantly. With this process you can get your HIVE immediately and at the exact price that you expect. The market place is the better way to convert your HBD. [This article](https://hive.blog/steem/@epico/convert-hbd-to-steem-and-steem-power-guide-2017625t103821622z) provides more information on using the market to exchange your HBD to HIVE
-
-Hiveconnect offers an alternative to converting HBD with a "simple link" solution. Instead of running through a list of operations on your account, you can simply use a link similar to the one below substituting the three parameters for your own details. You will be prompted to enter your username and password before the transaction will be executed.
-https://steemconnect.com/sign/convert?owner=username&requestid=1234567&amount=0.000%20HBD
-This is similar to the steemconnect links that have been covered in previous tutorials. For a list of signing operations that work in this manner you can go to https://v2.steemconnect.com/sign
-[This article](https://hive.blog/hbd/@timcliff/how-to-convert-hbd-into-steem-using-steemconnect) has more information on using steemconnect
-
-## Intro
-
-The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `convert` method found within the `commit` class in the library. Before we do the conversion, we check the current balance of the account to check how much HBD is available. This is not strictly necessary as the process will automatically abort with the corresponding error, but it does give some insight into the process as a whole. We use the `get_account` function to check for this. The `convert` method has 3 parameters:
-
-1.  _amount_ - The amount of HBD that will be converted
-1.  _account_ - The specified user account for the conversion
-1.  _request-id_ - An identifier for tracking the conversion. This parameter is optional
-
-## Steps
-
-1.  [**App setup**](#setup) - Library install and import. Connection to testnet
-1.  [**User information and steem node**](#userinfo) - Input user information and connection to Hive node
-1.  [**Check balance**](#balance) - Check current HIVE and HBD balance of user account
-1.  [**Conversion amount and commit**](#convert) - Input of HBD amount to convert and commit to blockchain
-
-#### 1. App setup <a name="setup"></a>
-
-In this tutorial we only use 1 package:
-
-- `steem` - steem-python library and interaction with Blockchain
-
-We import the libraries and connect to the `testnet`.
-
-```python
-import steembase
-import steem
-
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
-```
-
-Because this tutorial alters the blockchain we connect to the testnet so we don't create spam on the production server.
-
-#### 2. User information and steem node <a name="userinfo"></a>
-
-We require the `private active key` of the user in order for the conversion to be committed to the blockchain. This is why we have to specify this alongside the `testnet` node. The values are supplied via the terminal/console before we initialise the steem class. There is a demo account available to use with this tutorial but any account that is set up on the testnet can be used.
-
-```python
-#capture user information
-username = input('Enter username: ') #demo account: demo01
-wif = input('Enter private ACTIVE key: ') #demo account: 5HxTntgeoLm4trnTz94YBsY6MpAap1qRVXEKsU5n1v2du1gAgVH
-
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
-```
-
-#### 3. Check balance <a name="balance"></a>
-
-In order to give the user enough information to make the conversion we check the current balance of the account using the `get_account` function.
-
-```python
-#get account balance for HIVE and HBD
-userinfo = client.get_account(username)
-total_hive = userinfo['balance']
-total_hbd = userinfo['hbd_balance']
-
-print('CURRENT ACCOUNT BALANCE:' + '\n' + total_hive + '\n' + total_hbd + '\n')
-```
-
-The result of the query is displayed in the console/terminal.
-
-#### 4. Conversion amount and commit <a name="convert"></a>
-
-The final step before we can commit the transaction to the blockchain is to assign the `amount` parameter. We do this via a simple input from the terminal/console.
-
-```python
-#get recipient name
-convert_amount = input('Enter the amount of HBD to convert to HIVE: ')
-```
-
-This value must be greater than zero in order for the transaction to execute without any errors. Now that we have all the parameters we can do the actual transmission of the transaction to the blockchain.
-
-```python
-#parameters: amount, account, request_id
-client.convert(float(convert_amount), username)
-
-print('\n' + convert_amount + ' HBD has been converted to HIVE')
-```
-
-If no errors are encountered a simple confirmation is printed on the UI.
-
-As an added confirmation we check the balance of the user again and display it on the UI. This is not required at all but it serves as a more definitive confirmation that the conversion has been completed correctly.
-
-```python
-#get remaining account balance for HIVE and HBD
-userinfo = client.get_account(username)
-total_hive = userinfo['balance']
-total_hbd = userinfo['hbd_balance']
-
-print('\n' + 'REMAINING ACCOUNT BALANCE:' + '\n' + total_hive + '\n' + total_hbd)
-```
-
-The HIVE balance will not yet have been updated as it takes 3.5 days to settle. The HBD will however show the new balance.
-
-We encourage users to play around with different values and data types to fully understand how this process works. You can also check the balances and transaction history on the [testnet portal](http://condenser.steem.vc/).
-
-### To Run the tutorial
-
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/32_convert_hbd_to_hive`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
-
-
----
diff --git a/_tutorials-python/delegate_power.md b/_tutorials-python/delegate_power.md
index 537d59e7f5f42e13c5bb3ae9e77f60ebc8a0854a..e1baf2acabcffba18ab7ed861112479e4ad985e1 100644
--- a/_tutorials-python/delegate_power.md
+++ b/_tutorials-python/delegate_power.md
@@ -4,90 +4,105 @@ position: 27
 description: "How to delegate or remove delegation of HIVE POWER to another user using Python."
 layout: full
 canonical_url: delegate_power.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Delegate Power](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/27_delegate_power) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Delegate Power](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/27_delegate_power) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-27_delegate_power.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/27_delegate_power)).
 
-In this tutorial we show you how to delegate a portion of an accounts available VESTS (HIVE POWER) to another user on the **Hive** blockchain using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+In this tutorial we show you how to delegate a portion of an accounts available [HIVE Power <i class="fas fa-search fa-xs" />]({{ '/search?q=HIVE+Power' | relative_url }}) on the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library.
 
 ## Intro
 
-The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `delegate_vesting_shares` method found within the `commit` class in the library. When you delegate power you make a portion of your VESTS available to another user. This can empower an application, author, or curator to make higher votes. Before we do the delegation, we use the `get_account` function to check the current VESTS balance of the account to see what is available. This is not strictly necessary but adds to the useability of the process. It should be noted that when a delegation is cancelled the VESTS will only be available again after 7 days. The `delegate_vesting_shares` method has 3 parameters:
-
-1.  _to_account_ - The account we are delegating shares to (delegatee)
-1.  _vesting_shares_ - The amount of VESTS to delegate. This is required to be a string value
-1.  _account_ - The source user account for the delegation (delegator)
+The beem library has a built-in function to transmit transactions to the blockchain. We are using the [`delegate_vesting_shares`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.delegate_vesting_shares) method found within the account instance.  When you delegate power you make a portion of your HIVE Power available to another user.  This can empower an application, author, or curator to make higher votes.  Before we do the delegation, we use the [`Account`](https://beem.readthedocs.io/en/latest/beem.account.html) module to check the current HIVE Power balance of the account to see what is available.  This is not strictly necessary but adds to the usability of the process.  It should be noted that when a delegation is cancelled the HIVE Power will only be available again after 7 days.
 
 ## Steps
 
-1.  [**App setup**](#setup) - Library install and import. Connection to testnet
-1.  [**User information and steem node**](#userinfo) - Input user information and connection to Hive node
-1.  [**Check balance**](#balance) - Check current VESTS balance of user account
-1.  [**Delegation amount and commit**](#delegate) - Input delegation amount and commit to blockchain
+1. [**App setup**](#setup) - Library install and import. Connection to testnet
+1. [**User information and Hive node**](#userinfo) - Input user information and connection to Hive node
+1. [**Check balance**](#balance) - Check current VESTS balance of user account
+1. [**Delegation amount and commit**](#delegate) - Input delegation amount and commit to blockchain
 
 #### 1. App setup <a name="setup"></a>
 
-In this tutorial we use 3 packages:
+In this tutorial we use the following packages:
 
-- `steem` - steem-python library and interaction with Blockchain
+- `beem` - hive library and interaction with Blockchain
 - `pick` - helps select the query type interactively
-- `pprint` - print results in better format
 
 We import the libraries and connect to the `testnet`.
 
 ```python
-import steembase
-import steem
 from pick import pick
-import pprint
-from steem.amount import Amount
-
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
+import getpass
+from beem import Hive
+from beem.account import Account
+from beem.amount import Amount
 ```
 
 Because this tutorial alters the blockchain we connect to a testnet so we don't create spam on the production server.
 
-#### 2. User information and steem node <a name="userinfo"></a>
+#### 2. User information and Hive node <a name="userinfo"></a>
 
-We require the `private active key` of the user in order for the transaction to be committed to the blockchain. This is why we are using a testnet. The values are supplied via the terminal/console before we initialise the steem class. We also check if the user name provided is active on the chain. There are some demo accounts available but we encourage you to create your own accounts on this testnet and create balances you can delegate.
+We require the `private active key` of the user in order for the transaction to be committed to the blockchain.  This is why we are using a testnet.  The values are supplied via the terminal/console before we initialize the beem class.  We also check if the user name provided is active on the chain.
 
 ```python
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private ACTIVE key: ') #demo account: 5KaNM84WWSqzwKzY82fXPaUW43idbLnPqf5SfjGxLfw6eV2kAP3
-
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
-
-#check valid user
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
+
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
+
+# check valid user
+account = Account(account, blockchain_instance=client)
 ```
 
 #### 3. Check balance <a name="balance"></a>
 
-In order to give the user enough information to make the delegation we check the current VESTS balance of the account using the `get_account` function. We also display a list of currently active delegations should the user choose to remove a delegation. You can refer to tutorial `29_get_delegations_by_user` to see how this is done.
+In order to give the user enough information to make the delegation we check the current HIVE Power balance of the account using the `Account` module. We also display a list of currently active delegations should the user choose to remove a delegation.  You can refer to tutorial [Get Delegations by User]({{ '/tutorials-python/get_delegations_by_user.html' | relative_url }}) to see how this is done.
+
+```python
+balance = account['balance']
+symbol = balance.symbol
+
+# we need high precision because VESTS
+denom = 1e6
+delegated_vests = account['delegated_vesting_shares']
+vesting_shares = account['vesting_shares']
+vesting_symbol = vesting_shares.symbol
+to_withdraw_vests = float(account['to_withdraw']) / denom
+withdrawn_vests = float(account['withdrawn']) / denom
+```
+
+Here, we are gathering the current account details.
+
+```python
+dgpo = client.get_dynamic_global_properties()
+total_vesting_fund_hive = Amount(dgpo['total_vesting_fund_hive']).amount
+total_vesting_shares_mvest = Amount(dgpo['total_vesting_shares']).amount / denom
+base_per_mvest = total_vesting_fund_hive / total_vesting_shares_mvest
+```
+
+This block will help us convert VESTS to HIVE Power for display purposes.  Best practice is to always allow the end-user to work with HIVE Power, not raw VESTS.
 
 ```python
-#display active delegations (refer to tutorial #29_get_delegations_by_user)
-delegations = client.get_vesting_delegations(username, '', 100)
+available_vests = (vesting_shares.amount - delegated_vests.amount - ((to_withdraw_vests - withdrawn_vests)))
+available_base = (available_vests / denom) * base_per_mvest
+```
+
+The available vesting shares to delegate is not directly available from the user information and needs to be calculated.  In order to find the total VESTS available to delegate we need to know how much is currently in power down, how much has been delegated and then the total amount of vesting shares.  The values are assigned from the query directly as `float` type to make the calculations a little simpler.  
+
+```python
+# display active delegations (refer to tutorial #29_get_delegations_by_user)
+delegations = account.get_vesting_delegations()
 if len(delegations) == 0:
-	print('No active delegations')
+  print('No active delegations')
 else:
-	pprint.pprint(delegations)
+  print('Current delegations:')
+  for delegation in delegations:
+    delegated_vests = float(delegation['vesting_shares']['amount']) / denom
+    delegated_base = (delegated_vests / denom) * base_per_mvest
+    print('\t' + delegation['delegatee'] + ': ' + format(delegated_base, '.3f') + ' ' + symbol)
 
-#available VESTS
-avail_vests = (Amount(userinfo['vesting_shares']).amount - 
-    ((userinfo['to_withdraw']-userinfo['withdrawn'])/1000000)-
-    Amount(userinfo['delegated_vesting_shares']).amount)
-print('\n' + 'Available VESTS : ' + str(avail_vests))
+print('\n' + 'Available ' + symbol + ' Power: ' + format(available_base, '.3f') + ' ' + symbol)
 
 input('Press enter to continue' + '\n')
 ```
@@ -96,52 +111,54 @@ The result of the query is displayed in the console/terminal.
 
 #### 4. Delegation amount and commit <a name="delegate"></a>
 
-Both the `vesting_shares` and the `to_account` parameters are assigned via input from the terminal/console. The user is given the option to delegate power to or remove a currently active delegation from another user. We also check the `to_account` to make sure it's a valid account name.
+Both the `amount` and the `delegatee` parameters are assigned via input from the terminal/console.  The user is given the option to delegate power to or remove a currently active delegation from another user. We also check the `delegatee` to make sure it's a valid account name.
 
 ```python
-#choice of action
+# choice of action
 title = ('Please choose action')
 options = ['DELEGATE POWER', 'UN-DELEGATE POWER', 'CANCEL']
+# get index and selected permission choice
 option, index = pick(options, title)
 
-if (option == 'CANCEL') :
-    print('operation cancelled')
-    exit()
+if (option == 'CANCEL'):
+  print('operation cancelled')
+  exit()
 
-#get account to authorise and check if valid
+# get account to authorise and check if valid
 delegatee = input('Please enter the account name to ADD / REMOVE delegation: ')
-delegatee_userinfo = client.get_account(delegatee)
-if(delegatee_userinfo is None) :
-    print('Oops. Looks like user ' + delegatee + ' doesn\'t exist on this chain!')
-    exit()
+delegatee = Account(delegatee, blockchain_instance=client)
 ```
 
-Any amount of VESTS delegated to a user will overwrite the amount of VESTS currently delegated to that user. This means that to cancel a delegation we transmit to the blockchain a `vesting_shares` value of zero. The inputs and function execution is based on the users choice. If you are using one of Hive's demo accounts, please leave some VESTS for others to delegate!
+Any amount of HIVE Power delegated to a user will overwrite the amount of HIVE Power currently delegated to that user.  This means that to cancel a delegation we transmit to the blockchain a value of zero.  The inputs and function execution is based on the users choice.
 
 ```python
-if (option == 'DELEGATE POWER') :
-    vesting_value = input('Please enter the amount of VESTS to delegate: ')
-    vesting_shares = (str(vesting_value) + ' VESTS')
-    client.delegate_vesting_shares(to_account=delegatee, vesting_shares=vesting_shares, account=username)
-    print('\n' + str(vesting_shares) + ' have been successfully been delegated to ' + delegatee)
-else :
-    vesting_shares = '0 VESTS'
-    client.delegate_vesting_shares(to_account=delegatee, vesting_shares=vesting_shares, account=username)
-    print('Delegated VESTS have been successfully removed from ' + delegatee)
+if (option == 'DELEGATE POWER'):
+  amount = float(input('Please enter the amount of ' + symbol + ' you would like to delegate: ') or '0')
+  amount_vests = (amount * denom) / base_per_mvest
+
+  print(format(amount, '.3f') + ' ' + symbol + ' (' + format(amount_vests, '.6f') + ' ' + vesting_symbol + ') will be delegated to ' + delegatee.name)
+else:
+  amount_vests = 0
+  print('Removing delegated VESTS from ' + delegatee.name)
+
+account.delegate_vesting_shares(delegatee.name, amount_vests)
+
+print('Success.')
 ```
 
-A confirmation of the transaction is displayed on the UI.
+Note that if the user decides to delegate a specific amount, we capture the amount they intend to delegate as HIVE Power, then convert that amount to VESTS behind the scenes, in keeping with the principle of only interacting with the end user in terms of HIVE Power, which is the recommended best practice.
 
-We encourage users to play around with different values and data types to fully understand how this process works. You can also check the balances and transaction history on the [testnet portal](http://condenser.steem.vc/).
+A confirmation of the transaction is displayed on the UI.
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/27_delegate_power`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
+The result is displayed on the console/terminal.
 
+We encourage users to play around with different values and data types to fully understand how this process works. You can also check the balances and transaction history on the [testnet portal](http://testnet-condenser.hive.blog/).
 
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/27_delegate_power`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/edit_content_patching.md b/_tutorials-python/edit_content_patching.md
index 1d85ddb774ee6e0e501a56d0ce9386fb7a5d9fbe..ac95f0eb50c0649793c900e9effb6cbfbc4267d7 100644
--- a/_tutorials-python/edit_content_patching.md
+++ b/_tutorials-python/edit_content_patching.md
@@ -4,13 +4,10 @@ position: 12
 description: "How to edit post content with diff_match_patch using Python."
 layout: full
 canonical_url: edit_content_patching.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Edit Content Patching](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/12_edit_content_patching) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Edit Content Patching](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/12_edit_content_patching) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-12_edit_content_patching.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/12_edit_content_patching)).
 
-In this tutorial we show you how to patch and update posts/comments on the **Hive** blockchain using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+In this tutorial we show you how to patch and update posts/comments on the **Hive** blockchain using the `commit` class found within the [beem](https://github.com/holgern/beem) library.
 
 ## Intro
 
@@ -24,74 +21,73 @@ Being able to patch a post is critical to save resources on Hive. The Hive pytho
 
 ## Steps
 
-1.  [**App setup**](#setup) - Library install and import. Connection to testnet
-1.  [**User information and steem node**](#userinfo) - Input user information and connection to Hive node
-1.  [**Post to update**](#post) - Input and retrieve post information
-1.  [**Patching**](#patch) - Create the patch to update the post
-1.  [**New post commit**](#commit) - Commit the post to the blockchain
+1. [**App setup**](#setup) - Library install and import. Connection to testnet
+1. [**Post to update**](#post) - Input and retrieve post information
+1. [**Patching**](#patch) - Create the patch to update the post
+1. [**New post commit**](#commit) - Commit the post to the blockchain
 
 #### 1. App setup <a name="setup"></a>
 
 In this tutorial we use 2 packages:
 
-- `steem` - steem-python library and interaction with Blockchain
+- `beem` - hive library and interaction with Blockchain
 - `diff_match_patch` - used to compute the difference between two text fields to create a patch
 
-We import the libraries and connect to the `testnet`.
+We import the libraries.
 
 ```python
-import steembase
-import steem
+import beem
+import getpass
+from beem import Hive
+from beem.account import Account
+from beem.comment import Comment
+from beem.transactionbuilder import TransactionBuilder
+from beembase import operations
 from diff_match_patch import diff_match_patch
-
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
 ```
 
 Because this tutorial alters the blockchain we connect to a testnet so we don't create spam on the production server.
 
-#### 2. User information and steem node <a name="userinfo"></a>
-
 We require the `private posting key` of the user in order for the transfer to be committed to the blockchain. This is why we are using a testnet. The values are supplied via the terminal/console before we initialise the steem class. There are some demo accounts available but we encourage you to create your own accounts on this testnet and create balances you can claim; it's good practice.
 
-```python
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private POSTING key: ') #demo account: 5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz
-
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
-```
-
-#### 3. Post to update <a name="post"></a>
+#### 2. Post to update <a name="post"></a>
 
-The user inputs the author and permlink of the post that they wish to edit. It should be noted that a post cannot be patched once it has been archived. We suggest referring to the `submit post` tutorial to create a new post before trying the patch process.
+The user inputs the author and permlink of the post that they wish to edit.  See the [`submit post`]({{ '/tutorials-python/submit_post.html' | relative_url }}) tutorial to create a new post before trying the patch process.
 
 ```python
 #check valid username
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
-
+#capture user information
 post_author = input('Please enter the AUTHOR of the post you want to edit: ')
+
+#connect node
+client = Hive('http://127.0.0.1:8091')
+
+#check valid post_author
+try:
+  userinfo = Account(post_author, blockchain_instance=client)
+except:
+  print('Oops. Looks like user ' + post_author + ' doesn\'t exist on this chain!')
+  exit()
+
 post_permlink = input('Please enter the PERMLINK of the post you want to edit: ')
 
 #get details of selected post
-details = client.get_content(post_author, post_permlink)
-
-print('\n' + 'Title: ' + details['title'])
-o_body = details['body']
+try:
+  details = beem.comment.Comment(post_author + '/' + post_permlink)
+except:
+  print('Oops. Looks like ' + post_author + '/' + post_permlink + ' doesn\'t exist on this chain!')
+  exit()
+
+print('\n' + 'Title: ' + details.title)
+o_body = details.body
 print('Body:' + '\n' + o_body + '\n')
 
 n_body = input('Please enter new post content:' + '\n')
 ```
 
-The user also inputs the updated text in the console/terminal. This will then give us the two text fields to compare.
+The user also inputs the updated text in the console/terminal.  This will then give us the two text fields to compare.
 
-#### 4. Patching <a name="patch"></a>
+#### 3. Patching <a name="patch"></a>
 
 The module is initiated and the new post text is checked for validity.
 
@@ -101,13 +97,13 @@ dmp = diff_match_patch()
 
 #Check for null input
 if (n_body == '') :
-    print('\n' + 'No new post body supplied. Operation aborted')
-    exit()
+  print('\n' + 'No new post body supplied. Operation aborted')
+  exit()
 else :
-    # Check for equality
-    if (o_body == n_body) :
-        print('\n' + 'No changes made to post body. Operation aborted')
-        exit()
+  # Check for equality
+  if (o_body == n_body) :
+    print('\n' + 'No changes made to post body. Operation aborted')
+    exit()
 ```
 
 The `diff` is calculated and a test is done to check the `diff` length against the total length of the new text to determine if it will be better to patch or just replace the text field. The value to be sent to the blockchain is then assigned to the `new_body` parameter.
@@ -117,41 +113,50 @@ The `diff` is calculated and a test is done to check the `diff` length against t
 diff = dmp.diff_main(o_body, n_body)
 #Reduce the number of edits by eliminating semantically trivial equalities.
 dmp.diff_cleanupSemantic(diff)
+#create patch
+patch = dmp.patch_make(o_body, diff)
+#create new text based on patch
+patch_body = dmp.patch_toText(patch)
 #check patch length
-if (dmp.diff_levenshtein(diff) < len(o_body)) :
-    #create patch
-    patch = dmp.patch_make(o_body, diff)
-    #create new text based on patch
-    patch_body = dmp.patch_apply(patch, o_body)
-    new_body = patch_body[0]
+if (len(patch_body) < len(o_body)) :
+  new_body = patch_body
 else :
-    new_body = n_body
+  new_body = n_body
 ```
 
-#### 5. New post commit <a name="commit"></a>
+#### 4. New post commit <a name="commit"></a>
 
 The only new parameter is the changed body text. All the other parameters to do a commit is assigned directly from the original post entered by the user.
 
 ```python
-#commit post to blockchain with all old values and new body text
-client.commit.post(title=details['title'], body=new_body, author=details['author'], permlink=details['permlink'],
-    json_metadata=details['json_metadata'], reply_identifier=(details['parent_author'] + '/' + details['parent_permlink']))
-
-print('\n' + 'Content of the post has been successfully updated')
+tx = TransactionBuilder(blockchain_instance=client)
+tx.appendOps(operations.Comment(**{
+  "parent_author": details.parent_author,
+  "parent_permlink": details.parent_permlink,
+  "author": details.author,
+  "permlink": details.permlink,
+  "title": details.title,
+  "body": new_body,
+  "json_metadata": details.json_metadata
+}))
+
+wif_posting_key = getpass.getpass('Posting Key: ')
+tx.appendWif(wif_posting_key)
+signed_tx = tx.sign()
+broadcast_tx = tx.broadcast(trx_id=True)
+
+print('\n' + 'Content of the post has been successfully updated: ' + str(broadcast_tx))
 ```
 
 A simple confirmation is displayed on the screen for a successful commit.
 
-We encourage users to play around with different values and data types to fully understand how this process works. You can also check the balances and transaction history on the [testnet portal](http://condenser.steem.vc/).
+We encourage users to play around with different values and data types to fully understand how this process works. You can also check the balances and transaction history on the [testnet portal](http://testnet-condenser.hive.blog/).
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/12_edit_content_patching`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
-
-
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/12_edit_content_patching`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/follow_a_user.md b/_tutorials-python/follow_a_user.md
index cfb847716a937b9c3a2b41be8c73b317198d6b3a..d6073d27a99b9bd9c928416137403f3da49f2388 100644
--- a/_tutorials-python/follow_a_user.md
+++ b/_tutorials-python/follow_a_user.md
@@ -4,135 +4,166 @@ position: 18
 description: "How to follow or unfollow an author using Python."
 layout: full
 canonical_url: follow_a_user.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Follow A User](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/18_follow_a_user) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Follow A User](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/18_follow_a_user) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-18_follow_a_user.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/18_follow_a_user)).
 
-In this tutorial we will explain and show you how to follow or unfollow any author on the **Hive** blockchain using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+In this tutorial we will explain and show you how to follow or unfollow any author on the **Hive** blockchain using the tools found within the [beem](https://github.com/holgern/beem) library.
 
 ## Intro
 
-The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `follow` and `unfollow` methods found within the `commit` class in the the library. Before we can follow/unfollow we first have to check what the current 'follow status' is of the author. We use another function for this which is explained in the tutorial entitled `get_following_and_follower_list`. There are 3 parameters within the `follow/unfollow` methods:
+The beem library has a built-in function to transmit transactions to the blockchain.  We are going to use the "follow" and "unfollow" custom json operations.  Before we can follow/unfollow we first have to check what the current 'follow status' is of the author, using [`get_following`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.get_following) on an account.  There are three pieces of information within the `follow/unfollow` operation:
 
-1.  _follow/unfollow_ - The name of the author that will be followed/unfollowed
-1.  _what_ - The list of states to be followed. Currently this defaults to `blog` as it's the only option available on the block chain at this stage
-1.  _account_ - The name of the account that is executing the follow/unfollow
+1. _follow/unfollow_ - The name of the author that will be followed/unfollowed
+1. _what_ - The list of states to be followed.  Valid states are `["blog"]`, `["ignore"]`, and `[]` (empty to clear a previous state)
+1. _account_ - The name of the account that is executing the follow/unfollow
 
 ## Steps
 
 1.  [**App setup**](#setup) - Library install and import. Connection to testnet
-1.  [**User information and steem node**](#userinfo) - Input user information and connection to Hive node
+1.  [**User information**](#userinfo) - Input user information and connection to Hive node
 1.  [**Check author status**](#authorstat) - Validity check on requested autor to follow
 1.  [**Follow status**](#followstat) - Check whether specified author is already followed
-1.  [**Follow/Unfollow commit**](#commit) - Follow/unfollow commit to the blockchain
+1.  [**Follow/Unfollow Broadcast**](#broadcast) - Broadcast the follow/unfollow operation
 
 #### 1. App setup <a name="setup"></a>
 
-In this tutorial we use 3 packages:
+In this tutorial we use the follow packages:
 
-- `steem` - steem-python library and interaction with Blockchain
+- `beem` - hive library and interaction with Blockchain
 - `pick` - helps select the query type interactively
 
 We import the libraries and connect to the `testnet`.
 
 ```python
-import steembase
-import steem
+import getpass
+import json
 from pick import pick
-
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
+import beem
+from beem.account import Account
+from beem.transactionbuilder import TransactionBuilder
+from beembase.operations import Custom_json
 ```
 
 Because this tutorial alters the blockchain we connect to the testnet so we don't create spam on the production server.
 
-#### 2. User information and steem node<a name="userinfo"></a>
+#### 2. User information<a name="userinfo"></a>
 
-We also require the `private posting key` of the user that wishes to follow a selected author in order to commit the action to the blockchain. This is why we have to specify this along with the `testnet` node. The values are supplied via the terminal/console before we initialise the steem class. We have supplied a test account, `cdemo` to use with this tutorial but any demo account set up on the testnet can be used.
+We also require the `private posting key` of the user that wishes to follow a selected author in order to commit the action to the blockchain. This is why we have to specify this along with the `testnet` node. The values are supplied via the terminal/console before we initialise the beem class. We have supplied a test account, `cdemo` to use with this tutorial but any demo account set up on the testnet can be used.
 
 ```python
-#capture user information
-username = input('Please enter your username: ')
-postingkey = input('Please enter your private posting key: ')
+# capture user information
+account = input('Please enter your username: ')
+
+# capture variables
+author = input('Author to follow: ')
+
+if author == account:
+  print("Do you follow yourself?")
+  exit()
 
-#connect node and private posting key, demo account being used: cdemo, posting key: 5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz
-s = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[postingkey])
+# connect node and private posting key, demo account being used: cdemo, posting key: 5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz
+hive = beem.Hive('http://127.0.0.1:8091')
 ```
 
 #### 3. Check author status<a name="authorstat"></a>
 
-To insure the validity of the `follow` process, we first check to see if the `author` provided by the user is in fact an active username. This is done with a simple call to the blockchain which returns an array of all the user information. If the author does not exist, the return value is `null`.
+To insure the validity of the `follow` process, we first check to see if the `author` provided by the user is in fact an active username. This is done with a simple call to the blockchain which returns an array of all the user information. If the author does not exist, we raise and exception.
 
 ```python
-#capture variables
-author = input('Author to follow: ')
-
-#check author status
-result = s.get_account(author)
+author = Account(author, blockchain_instance=hive)
+account = Account(account, blockchain_instance=hive)
+already_following = False
 ```
 
 Once the author name is confirmed to be valid we can move on to check the follow status of that author.
 
 #### 4. Follow status<a name="followstat"></a>
 
-If the author check comes back with a value we use a simple `if` statement to initialise the database query for the follow status. A comprehensive tutorial is available to retrieve a list of followers and users that are being followed in the tutorial specified in the `intro`. As we are only interested in a very specific author we can narrow the query results down to a single result. That result then determines what the available actions are.
+If the author check comes back with a value we use a simple `if` statement to initialize the database query for the follow status.  A comprehensive tutorial is available to retrieve a list of followers and users that are being followed in the tutorial specified in the `intro`.  As we are only interested in a very specific author we can narrow the query results down to a single result.  That result then determines what the available actions are.
 
 ```python
-#result from previous step
-if result :
-	#check for author name in the current following list
-	follow = s.get_following(username, author, 'blog', 1)
-	if len(follow) > 0 and follow[0]['following'] == author :
-		title = "Author is already being followed, please choose action"
-	else:
-		title = "Author has not yet been followed, please choose action"
+if author:
+  # check current follow status of specified author
+  following = account.get_following()
+
+  if len(following) > 0 and author.name in following:
+    title = "Author is already being followed, please choose action"
+    already_following = True
+  else:
+    title = "Author has not yet been followed, please choose action"
 else:
-	print('Author does not exist')
-	exit()
+  print('Author does not exist')
+  exit()
 ```
 
 The result from the `follow` query is printed on the UI and the user is asked to select the next action to take based on that information. If the author does not exit the program exits automatically.
 
 ```python
-#get index and selected action
+# get index and selected action
 options = ['Follow', 'Unfollow', 'Exit']
 option, index = pick(options, title)
+tx = TransactionBuilder(blockchain_instance=hive)
 ```
 
-Once we know what the user wants to do, we can move on to the actual `commit` to the blockchain.
+Once we know what the user wants to do, we can move on to the actual broadcast.
 
-#### 5. Follow/Unfollow commit<a name="commit"></a>
+#### 5. Follow/Unfollow Broadcast<a name="broadcast"></a>
 
-Once the user has selected which action to take we user another `if` statement to execute that selection.
+Once the user has selected which action to take we user another set of `if` statements to execute that selection.
 
 ```python
 if option == 'Follow' :
-	s.commit.follow(author, ['blog'], username)
-	print(author + ' is now being followed')
-else:
-	if option == 'Unfollow' :
-		s.commit.unfollow(author, ['blog'], username)
-		print(author + ' has now been unfollowed')
-	else:
-		print('Action Cancelled')
+  if not already_following:
+    tx.appendOps(Custom_json(**{
+      'required_auths': [],
+      'required_posting_auths': [account.name],
+      'id': 'follow',
+      'json': json.dumps(['follow', {
+        'follower': account.name,
+        'following': author.name,
+        'what': ['blog'] # set what to follow
+      }])
+    }))
+elif option == 'Unfollow' :
+  if already_following:
+    tx.appendOps(Custom_json(**{
+      'required_auths': [],
+      'required_posting_auths': [account.name],
+      'id': 'follow',
+      'json': json.dumps(['follow', {
+        'follower': account.name,
+        'following': author.name,
+        'what': [] # clear previous follow
+      }])
+    }))
+
+if len(tx.ops) == 0:
+  print('Action Cancelled')
+  exit()
+
+wif_posting_key = getpass.getpass('Posting Key: ')
+tx.appendWif(wif_posting_key)
+signed_tx = tx.sign()
+broadcast_tx = tx.broadcast(trx_id=True)
+
+print(option + ' ' + author.name + ": " + str(broadcast_tx))
 ```
 
 A simple confirmation of the chosen action is printed on the screen.
 
-You can also check on the [testportal](http://condenser.steem.vc/blog/@cdemo) for a list of the authors being followed by the demo account.
-
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/18_follow_a_user`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
 
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
 
----
+For details on running a local testnet, see: [Setting Up a Testnet]({{ '/tutorials-recipes/setting-up-a-testnet.html' | relative_url }})
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/18_follow_a_user`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/get_account_comments.md b/_tutorials-python/get_account_comments.md
index 3e399321e2b6e8f6cfe069e0e72f3173a22ab1ab..0174a32658a011624ac2193ca0daa7fb6aabe79d 100644
--- a/_tutorials-python/get_account_comments.md
+++ b/_tutorials-python/get_account_comments.md
@@ -4,17 +4,21 @@ position: 9
 description: "Fetch list of comments made by account on posts or comments."
 layout: full
 canonical_url: get_account_comments.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Get Account Comments](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/09_get_account_comments) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Get Account Comments](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/09_get_account_comments) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-09_get_account_comments.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/09_get_account_comments)).
 
-In this tutorial will explain and show you how to access the **Hive** blockchain using the [steem-python](https://github.com/steemit/steem-python) library to fetch list of posts to randomize account list and get replies of selected account.
+In this tutorial will explain and show you how to access the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library to fetch list of posts to randomize account list and get replies of selected account.
 
 ## Intro
 
-Hive python library has built-in function to get comments list made by specific account. Since we don't have predefined account list, we will fetch newly created posts and show their authors for selection and give option to choose one account to get its comments. `get_discussions_by_comments` function fetches list of comments made by account. Note that `get_discussions_by_created` filter is used for fetching 5 posts and after selection of its author tutorial uses `author` of the post to fetch that account's comments. 
+The beem library has built-in function to get comments list made by specific account. Since we don't have predefined account list, we will fetch newly created posts and show their authors for selection and give option to choose one account to get its comments. The [`get_discussions_by_comments`](https://beem.readthedocs.io/en/latest/beem.discussions.html#beem.discussions.Discussions_by_comments) function fetches list of comments made by account. Note that [`get_discussions_by_created`](https://beem.readthedocs.io/en/latest/beem.discussions.html#beem.discussions.Discussions_by_created) filter is used for fetching 5 posts and after selection of its author tutorial uses [`author`](https://beem.readthedocs.io/en/latest/beem.comment.html#beem.comment.Comment.author) of the post to fetch that account's comments. 
+
+Also see:
+* [get discussions]({{ '/search/?q=get discussions' | relative_url }})
+* [tags_api.get_discussions_by_comments]({{ '/apidefinitions/#tags_api.get_discussions_by_comments' | relative_url }})
+* [condenser_api.get_discussions_by_comments]({{ '/apidefinitions/#condenser_api.get_discussions_by_comments' | relative_url }})
+* [tags_api.get_discussions_by_created]({{ '/apidefinitions/#tags_api.get_discussions_by_created' | relative_url }})
+* [condenser_api.get_discussions_by_created]({{ '/apidefinitions/#condenser_api.get_discussions_by_created' | relative_url }})
 
 ## Steps
 
@@ -25,40 +29,39 @@ Hive python library has built-in function to get comments list made by specific
 
 #### 1. App setup <a name="app-setup"></a>
 
-In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `steem` - steem-python library, interaction with Blockchain. `pprint` - print results in better format.
+In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `beem` - hive library, interaction with Blockchain. `pprint` - print results in better format.
 
 First we import all three library and initialize Hive class
 
 ```python
-    import pprint
-    from pick import pick
-    # initialize Hive class
-    from steem import Hive
+import pprint
+from pick import pick
+# initialize Hive class
+from beem import Hive
+from beem.discussions import Query, Discussions
 
-    s = Hive()
+h = Hive()
 ```
 
 #### 2. Post list <a name="post-list"></a>
 
-
 Next we will fetch and make list of accounts and setup `pick` properly.
 
 ```python
-    query = {
-      "limit":5, #number of posts
-      "tag":"" #tag of posts
-    }
-    #author list from created post list to randomize account list
-    posts = s.get_discussions_by_created(query)
-
-    title = 'Please choose account: '
-    options = []
-    #accounts list
-    for post in posts:
-      options.append(post["author"])
-
-    # get index and selected account name
-    option, index = pick(options, title)
+q = Query(limit=2, tag="")
+d = Discussions()
+
+#author list from created post list to randomize account list
+posts = d.get_discussions('created', q, limit=2)
+
+title = 'Please choose account: '
+options = []
+#accounts list
+for post in posts:
+  options.append(post["author"])
+
+# get index and selected account name
+option, index = pick(options, title)
 ```
 
 This will show us list of accounts to select in terminal/command prompt. And after selection we will get account name as a `option` variable.
@@ -68,147 +71,46 @@ This will show us list of accounts to select in terminal/command prompt. And aft
 Next we will form another query to get comments list of account
 
 ```python
-  query2 = {
-    "limit":5, #number of comments
-    "start_author":option #selected user
-  }
+# 5 comments from selected author
+q = Query(limit=5, start_author=option)
 
-  # get comments of selected account
-  comments = s.get_discussions_by_comments(query2)
+# get comments of selected account
+comments = d.get_discussions('comments', q, limit=5)
 ```
 
-Note that `start_author` variable in query should be account name so that `get_discussions_by_comments` can provide us corrent information.
+Note that `start_author` variable in query should be account name so that `get_discussions_by_comments` can provide us current information.
 
 #### 4. Print output <a name="print-output"></a>
 
 Next, we will print result, comments of selected account and details of each comment.
 
 ```python
-  # print comment details for selected account
-  pprint.pprint(comments)
-  pprint.pprint("Selected: "+option)
+# print comment details for selected account
+for comment in comments:
+  pprint.pprint(comment)
+pprint.pprint("Selected: " + option)
 ```
 
 The example of result returned from the service is a `JSON` object with the following properties:
 
-```json
-[{'abs_rshares': 0,
-  'active': '2018-06-21T06:48:57',
-  'active_votes': [],
-  'allow_curation_rewards': True,
-  'allow_replies': True,
-  'allow_votes': True,
-  'author': 'rakibmaruf24',
-  'author_reputation': '115387353393',
-  'author_rewards': 0,
-  'beneficiaries': [],
-  'body': "That extra push will take you Back- That's my opinion .",
-  'body_length': 55,
-  'cashout_time': '2018-06-28T06:48:57',
-  'category': 'life',
-  'children': 0,
-  'children_abs_rshares': 0,
-  'created': '2018-06-21T06:48:57',
-  'curator_payout_value': '0.000 HBD',
-  'depth': 1,
-  'id': 53788647,
-  'json_metadata': '{"tags":["life"],"app":"steemit/0.1"}',
-  'last_payout': '1970-01-01T00:00:00',
-  'last_update': '2018-06-21T06:48:57',
-  'max_accepted_payout': '1000000.000 HBD',
-  'max_cashout_time': '1969-12-31T23:59:59',
-  'net_rshares': 0,
-  'net_votes': 0,
-  'parent_author': 'blazing',
-  'parent_permlink': 'that-extra-push-will-take-you-forward',
-  'pending_payout_value': '0.000 HBD',
-  'percent_hbd': 10000,
-  'permlink': 're-blazing-that-extra-push-will-take-you-forward-20180621t064855012z',
-  'promoted': '0.000 HBD',
-  'reblogged_by': [],
-  'replies': [],
-  'reward_weight': 10000,
-  'root_author': 'blazing',
-  'root_permlink': 'that-extra-push-will-take-you-forward',
-  'root_title': 'That extra push will take you forward ',
-  'title': '',
-  'total_payout_value': '0.000 HBD',
-  'total_pending_payout_value': '0.000 HIVE',
-  'total_vote_weight': 0,
-  'url': '/life/@blazing/that-extra-push-will-take-you-forward#@rakibmaruf24/re-blazing-that-extra-push-will-take-you-forward-20180621t064855012z',
-  'vote_rshares': 0},
- {'abs_rshares': 0,
-  'active': '2018-06-01T18:36:06',
-  'active_votes': [{'percent': 200,
-                    'reputation': '26818436016691',
-                    'rshares': '16086534528',
-                    'time': '2018-06-01T21:42:09',
-                    'voter': 'gamer00',
-                    'weight': 65289},
-                   {'percent': 800,
-                    'reputation': '7605717819625',
-                    'rshares': '7561308944',
-                    'time': '2018-06-01T18:44:51',
-                    'voter': 'markkujantunen',
-                    'weight': 90456}],
-  'allow_curation_rewards': True,
-  'allow_replies': True,
-  'allow_votes': True,
-  'author': 'rakibmaruf24',
-  'author_reputation': '115387353393',
-  'author_rewards': 29,
-  'beneficiaries': [],
-  'body': "How did it worked ? I don't understand about this brother.",
-  'body_length': 58,
-  'cashout_time': '1969-12-31T23:59:59',
-  'category': 'finland',
-  'children': 1,
-  'children_abs_rshares': 0,
-  'created': '2018-06-01T17:56:15',
-  'curator_payout_value': '0.018 HBD',
-  'depth': 1,
-  'id': 51280699,
-  'json_metadata': '{"tags":["finland"],"app":"steemit/0.1"}',
-  'last_payout': '2018-06-08T17:56:15',
-  'last_update': '2018-06-01T17:56:15',
-  'max_accepted_payout': '1000000.000 HBD',
-  'max_cashout_time': '1969-12-31T23:59:59',
-  'net_rshares': 0,
-  'net_votes': 2,
-  'parent_author': 'markkujantunen',
-  'parent_permlink': 'mein-kampf-gegen-den-loewenzahn-my-struggle-against-dandelions',
-  'pending_payout_value': '0.000 HBD',
-  'percent_hbd': 10000,
-  'permlink': 're-markkujantunen-mein-kampf-gegen-den-loewenzahn-my-struggle-against-dandelions-20180601t175605072z',
-  'promoted': '0.000 HBD',
-  'reblogged_by': [],
-  'replies': [],
-  'reward_weight': 10000,
-  'root_author': 'markkujantunen',
-  'root_permlink': 'mein-kampf-gegen-den-loewenzahn-my-struggle-against-dandelions',
-  'root_title': 'Mein Kampf Gegen Den Löwenzahn/My Struggle Against The '
-                'Dandelion',
-  'title': '',
-  'total_payout_value': '0.067 HBD',
-  'total_pending_payout_value': '0.000 HIVE',
-  'total_vote_weight': 0,
-  'url': '/finland/@markkujantunen/mein-kampf-gegen-den-loewenzahn-my-struggle-against-dandelions#@rakibmaruf24/re-markkujantunen-mein-kampf-gegen-den-loewenzahn-my-struggle-against-dandelions-20180601t175605072z',
-  'vote_rshares': 0}
-]
+```
+<Comment @happyme/qp4kl6>
+<Comment @happyme/qp4fiv>
+<Comment @happyme/qp4f2s>
+<Comment @happyme/qp461s>
+<Comment @happyme/qp40tt>
+'Selected: happyme'
 ```
 
-From this result you have access to everything associated to the comments of account including content of comment, timestamp, active_votes, etc., so that you can use in further development of your application with Python.
+From this result you have access to everything associated to the [comments](https://beem.readthedocs.io/en/latest/beem.comment.html#beem.comment.Comment) of account including content of comment, timestamp, active_votes, etc., so that you can use in further development of your applications with Python.
 
 That's it!
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/09_get_account_comments`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see output in terminal/command prompt screen.
-
-
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/09_get_account_comments`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see output in terminal/command prompt screen.
diff --git a/_tutorials-python/get_account_replies.md b/_tutorials-python/get_account_replies.md
index b660f9ae85cc9d45572baeca26ab1319ae9e8bd1..b5347cde6407a66cfbca9be0a8bd5a50d536dee0 100644
--- a/_tutorials-python/get_account_replies.md
+++ b/_tutorials-python/get_account_replies.md
@@ -4,17 +4,19 @@ position: 8
 description: "List of replies received by account to its content, post, comment."
 layout: full
 canonical_url: get_account_replies.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Get Account Replies](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/08_get_account_replies) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Get Account Replies](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/08_get_account_replies) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-08_get_account_replies.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/08_get_account_replies)).
 
-Tutorial will explain and show you how to access the **Hive** blockchain using the [steem-python](https://github.com/steemit/steem-python) library to fetch a list of comments made on a specific accounts content.
+Tutorial will explain and show you how to access the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library to fetch a list of comments made on a specific accounts content.
 
 ## Intro
 
-In Hive there are built-in functions in the official library `steem-python` that we are going to use throughout all Python tutorials. For this one we are using the `get_replies` function.
+In Hive there are built-in functions in the library `beem` that we are going to use throughout all Python tutorials. For this one we are using the [`reply_history`]({{ '/apidefinitions/#tags_api.get_content_replies' | relative_url }}) function.
+
+Also see:
+* [get discussions]({{ '/search/?q=get discussions' | relative_url }})
+* [tags_api.get_content_replies]({{ '/apidefinitions/#tags_api.get_content_replies' | relative_url }})
+* [condenser_api.get_content_replies]({{ '/apidefinitions/#condenser_api.get_content_replies' | relative_url }})
 
 ## Steps
 
@@ -25,17 +27,19 @@ In Hive there are built-in functions in the official library `steem-python` that
 
 #### 1. App setup <a name="app-setup"></a>
 
-In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `steem` - steem-python library, interaction with Blockchain. `pprint` - print results in better format.
+In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `beem` - hive library, interaction with Blockchain. `pprint` - print results in better format.
 
 First we import all three library and initialize Hive class
 
 ```python
-    import pprint
-    from pick import pick
-    # initialize Hive class
-    from steem import Hive
-
-    s = Hive()
+import pprint
+from pick import pick
+# initialize Hive class
+from beem import Hive
+from beem.discussions import Query, Discussions
+from beem.account import Account
+
+h = Hive()
 ```
 
 #### 2. Post list <a name="post-list"></a>
@@ -43,60 +47,61 @@ First we import all three library and initialize Hive class
 Next we will fetch and make a list of posts and setup `pick` properly.
 
 ```python
-    query = {
-        "limit":5, #number of posts
-        "tag":"" #tag of posts
-    }
-    #post list for selected query
-    #we are merely using this to display the most recent posters
-    #the 'author' can easily be changed to any value within the 'get_replies' function
-
-    posts = s.get_discussions_by_created(query)
-
-    title = 'Please choose author: '
-    options = []
-    #posts list
-    for post in posts:
-        options.append(post["author"]+'/'+post["permlink"])
-    # get index and selected filter name
-    option, index = pick(options, title)
-    # option is printed as reference
-    pprint.pprint("Selected: "+option)
+q = Query(limit=2, tag="")
+d = Discussions()
+
+#post list for selected query
+#we are merely using this to display the most recent posters
+#the 'author' can easily be changed to any value within the 'reply_history' function
+
+posts = d.get_discussions('created', q, limit=2)
+
+title = 'Please choose author: '
+options = []
+#posts list
+for post in posts:
+  options.append(post["author"])
+
+# get index and selected filter name
+option, index = pick(options, title)
+
+# option is printed as reference
+pprint.pprint("Selected: " + option)
 ```
 
 This will show us list of posts to select in terminal/command prompt. And after selection we will get index and post name to `index` and `option` variables. We will also print the selection on screen for easy reference.
 
 #### 3. Comment details <a name="comment-details"></a>
 
-Next we will allocate variables to make the function easier to use as well as provide a limit for the number of replies that we want to print. To retreive the replies we only need the `author` variable. This is then used in the `get_replies` function present in the steem library.
+Next we will allocate variables to make the function easier to use as well as provide a limit for the number of replies that we want to print. To retreive the replies we only need the `author` object. This is then used in the `reply_history` function present in the beem library.
 
 ```python
-    # allocate variables
-    _author = posts[index]["author"]
-    _limit = 1
+# in this tutorial we are showing usage of reply_history of post where the author is known
+
+# allocate variables
+_author = Account(option)
+_limit = 1
 
-    # get replies for specific author
-    details = s.get_replies(_author)
+# get replies for specific author
+replies = _author.reply_history(limit=_limit)
 ```
 
 #### 4. Print output <a name="print-output"></a>
 
-Next, we will print the details obtained from the function. Because we only want to print a limited number, we input the values in the form of an array.
+Next, we will print the details obtained from the function by iterating the array.
 
 ```python
-    # print specified number of comments
+# print specified number of comments
 
-    pprint.pprint(details[:_limit])
+for reply in replies:
+  pprint.pprint(reply.body)
 ```
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/08_get_account_replies`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see output in terminal/command prompt screen.
-
-
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/08_get_account_replies`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see output in terminal/command prompt screen.
diff --git a/_tutorials-python/get_delegations_by_user.md b/_tutorials-python/get_delegations_by_user.md
index beb99c4a11b9f7ac341d95181154e7658ced4afc..b60f176881392ce6e955c6e2cc9cdf5398bff040 100644
--- a/_tutorials-python/get_delegations_by_user.md
+++ b/_tutorials-python/get_delegations_by_user.md
@@ -4,66 +4,66 @@ position: 29
 description: "How to get a list of active or expiring vesting delegations using Python."
 layout: full
 canonical_url: get_delegations_by_user.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Get Delegations By User](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/29_get_delegations_by_user) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Get Delegations By User](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/29_get_delegations_by_user) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-29_get_delegations_by_user.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/29_get_delegations_by_user)).
 
-In this tutorial we will explain and show you how to pull a list of both active and expiring vesting delegations from the **Hive** blockchain using the `steem` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+In this tutorial we will explain and show you how to pull a list of both active and expiring vesting delegations from the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library.
 
 ## Intro
 
-The Hive python library has a built-in function to pull information from the blockchain. We are using the `get_vesting_delegations` and `get_expiring_vesting_delegations` methods found within the `steem` class in the library. Each of these functions are executed separately. It should be noted that when a delegation is cancelled the VESTS will only be available again after 7 days. The value of the delegation can also be changed at any time, either decreased or increased. To get active delegations we need the following parameters:
-
-1.  _account_ - The user account that the delegation list is being queried for
-1.  _from-account_ - The account name from where to start the search. This parameter can be left empty to pull a list from the first delegatee
-1.  _limit_ - The maximum amount of delegations that will be returned by the query
+The Hive python library has a built-in function to pull information from the blockchain. We are using the [`get_vesting_delegations`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.get_vesting_delegations) and [`get_expiring_vesting_delegations`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.get_expiring_vesting_delegations) methods.  Each of these functions are executed separately.  It should be noted that when a delegation is cancelled the VESTS will only be available again after 7 days.  The value of the delegation can also be changed at any time, either decreased or increased.
 
-The function to query the expiring delegations use the the same parameters except that the `start_account` is replaced by a `start_date`. If this value is greater than 7 days from present, it will always include all delegations that are pending expiration.
+The function to query the expiring delegations use the the same parameters except that the `start_account` is replaced by a `start_date`.  If this value is greater than 7 days from present, it will always include all delegations that are pending expiration.
 
 ## Steps
 
-1.  [**App setup**](#setup) - Library install and import. Connection to production
-1.  [**User input**](#input) - Input user and limit parameters
-1.  [**Delegation lists**](#query) - Selection of the type of list and blockchain query
+1. [**App setup**](#setup) - Library install and import. Connection to production
+1. [**User input**](#input) - Input user and limit parameters
+1. [**Delegation lists**](#query) - Selection of the type of list and blockchain query
 
 #### 1. App setup <a name="setup"></a>
 
 In this tutorial we use 2 package:
 
-- `steem` - steem-python library and interaction with Blockchain
+- `beem` - hive library and interaction with Blockchain
 - `pick` - helps select the query type interactively
 
-We import the libraries and connect to the `production` server.
+We import the libraries and connect to the mainnet, for this tutorial.
 
 ```python
 from pick import pick
-from steem import Hive
-
-import pprint
+from beem import Hive
+from beem.account import Account
+from beem.amount import Amount
 
 client = Hive()
 ```
 
-`pprint` is used to print the query results in an easier to read format
-
 #### 2. User input <a name="input"></a>
 
-The `account` and `limit` parameters are assigned via input from the console/terminal. We also check if the username provided does in fact exist on the blockchain using the `get_account` method also found within the `steem` class. This will return an null value if the name does not exist.
+The `account` and `limit` parameters are assigned via input from the console/terminal. We also check if the username provided does in fact exist on the blockchain using the `Account` module. This will return an null value if the name does not exist.
 
 ```python
-#capture username
-username = input('Username: ')
+# capture username
+account = input('Username: ')
+account = Account(account)
+
+balance = account['balance']
+symbol = balance.symbol
+
+# we need high precision because VESTS
+denom = 1e6
+dgpo = client.get_dynamic_global_properties()
+total_vesting_fund_hive = Amount(dgpo['total_vesting_fund_hive']).amount
+total_vesting_shares_mvest = Amount(dgpo['total_vesting_shares']).amount / denom
+base_per_mvest = total_vesting_fund_hive / total_vesting_shares_mvest
+```
 
-#check username
-result = client.get_account(username)
-if not result:
-	print('Invalid username')
-	exit()
+This block will help us convert VESTS to HIVE Power for display purposes.  Best practice is to always allow the end-user to work with HIVE Power, not raw VESTS.
 
-#capture list limit
-limit = input('Max number of vesting delegations to display: ')
+```python
+# capture list limit
+limit = input('Max number of vesting delegations to display: ') or '10'
 ```
 
 #### 3. Delegation lists <a name="query"></a>
@@ -71,11 +71,11 @@ limit = input('Max number of vesting delegations to display: ')
 We use two different functions to query active and expiring delegations, so the user is given a choice on which of these lists he wants to view.
 
 ```python
-#list type
+# list type
 title = 'Please choose the type of list: '
 options = ['Active Vesting Delegations', 'Expiring Vesting Delegations']
 
-#get index and selected list name
+# get index and selected list name
 option, index = pick(options, title)
 print('\n' + 'List of ' + option + ': ' + '\n')
 ```
@@ -84,33 +84,29 @@ Based on the result of the choice, the relevant blockchain query is executed and
 
 ```python
 if option=='Active Vesting Delegations' :
-    #active delegations
-	delegations = client.get_vesting_delegations(username, '', limit)
-	if len(delegations) == 0:
-		print('No ' + option)
-	else:
-		pprint.pprint(delegations)
+  delegations = account.get_vesting_delegations(limit=limit)
 else:
-    #expiring delegations
-	delegations = client.get_expiring_vesting_delegations(username, "2018-01-01T00:00:00", limit)
-	if len(delegations) == 0:
-		print('No ' + option)
-	else:
-		pprint.pprint(delegations)
+  delegations = account.get_expiring_vesting_delegations("2018-01-01T00:00:00", limit=limit)
+
+if len(delegations) == 0:
+  print('No ' + option)
+  exit
+
+for delegation in delegations:
+  delegated_vests = float(delegation['vesting_shares']['amount']) / denom
+  delegated_base = (delegated_vests / denom) * base_per_mvest
+  print('\t' + delegation['delegatee'] + ': ' + format(delegated_base, '.3f') + ' ' + symbol)
 ```
 
 For both the queries the starting points were defined in such a way as to include all available data but this can be changed depending on the user requirements.
 
-That's it!
+Note that we output the delegated amounts as HIVE Power, in keeping with the principle of only interacting with the end user in terms of HIVE Power, which is the recommended best practice.
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/29_get_delegations_by_user`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
-
-
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/29_get_delegations_by_user`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/get_follower_and_following_list.md b/_tutorials-python/get_follower_and_following_list.md
index 4fb13712bd14cb6b72be26b783df37127dad3159..c057a5bb234006abf24146b06980eafda812323e 100644
--- a/_tutorials-python/get_follower_and_following_list.md
+++ b/_tutorials-python/get_follower_and_following_list.md
@@ -4,41 +4,40 @@ position: 19
 description: "Tutorial pulls a list of the followers or authors being followed from the blockchain then displays the result."
 layout: full
 canonical_url: get_follower_and_following_list.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Get Follower And Following List](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/19_get_follower_and_following_list) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Get Follower And Following List](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/19_get_follower_and_following_list) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-19_get_follower_and_following_list.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/19_get_follower_and_following_list)).
 
-This tutorial will explain and show you how to access the **Hive** blockchain using the [steem-python](https://github.com/steemit/steem-python) library to fetch list of authors being followed or authors that a specified user is following.
+This tutorial will explain and show you how to access the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library to fetch list of authors being followed or authors that a specified user is following.
 
 ## Intro
 
-We are using the `get_followers` and `get_following` functions that are built into the official library `steem-python`. These functions allow us to query the Hive blockchain in order to retrieve either a list of authors that are being followed or a list of authors that are currently following a specified user. There are 4 parameters required to execute these functions:
+We are using the [`get_followers`]({{ '/apidefinitions/#follow_api.get_followers' | relative_url }}) and [`get_following`]({{ '/apidefinitions/#follow_api.get_following' | relative_url }}) functions that are built into the beem library. These functions allow us to query the Hive blockchain in order to retrieve either a list of authors that are being followed or a list of authors that are currently following a specified user. There are 4 parameters required to execute these functions:
 
-1.  _account_ - The specific user for which the follower(ing) list will be retrieved
-1.  _start follower(ing)_ - The starting letter(s) or name for the search query. This value can be set as an empty string in order to include all authors starting from "a"
-1.  _follow type_ - This value is set to `blog` and includes all users following or being followed by the `user`. This is currently the only valid parameter value for this function to execute correctly.
-1.  _limit_ - The maximum number of lines that can be returned by the query
+1. _account_ - The specific user for which the follower(ing) list will be retrieved
+1. _start follower(ing)_ - The starting letter(s) or name for the search query. This value can be set as an empty string in order to include all authors starting from "a"
+1. _follow type_ - This value is set to `blog` and includes all users following or being followed by the `user`. This is currently the only valid parameter value for this function to execute correctly.
+1. _limit_ - The maximum number of lines that can be returned by the query
 
 ## Steps
 
-1.  [**App setup**](#setup) - Library install and import
-1.  [**Input variables**](#input) - Collecting the required inputs via the UI
-1.  [**Get followers/following**](#query) Get the followers or users being followed
-1.  [**Print output**](#output) - Print results in output
+1. [**App setup**](#setup) - Library install and import
+1. [**Input variables**](#input) - Collecting the required inputs via the UI
+1. [**Get followers/following**](#query) Get the followers or users being followed
+1. [**Print output**](#output) - Print results in output
 
 #### 1. App setup <a name="setup"></a>
 
-In this tutorial we use 2 packages, `pick` - helps us to select the query type interactively. `steem` - steem-python library, interaction with Blockchain.
+In this tutorial we use 2 packages, `pick` - helps us to select the query type interactively. `beem` - hive library, interaction with Blockchain.
 
 First we import both libraries and initialize Hive class
 
 ```python
 from pick import pick
-from steem import Hive
+# initialize Hive class
+from beem import Hive
+from beem.account import Account
 
-s = Hive()
+hive = Hive()
 ```
 
 #### 2. Input variables <a name="input"></a>
@@ -46,21 +45,23 @@ s = Hive()
 We assign two of the variables via a simple input from the UI.
 
 ```python
-#capture username
-username = input("Username: ")
+# capture username
+account = input("Username: ")
+account = Account(account, blockchain_instance=hive)
 
-#capture list limit
+# capture list limit
 limit = input("Max number of followers(ing) to display: ")
+limit = int(limit)
 ```
 
 Next we make a list of the two list options available to the user, `following` or `followers` and setup `pick`.
 
 ```python
-#list type
+# list type
 title = 'Please choose the type of list: '
 options = ['Follower', 'Following']
 
-#get index and selected list name
+# get index and selected list name
 option, index = pick(options, title)
 print("List of " + option)
 ```
@@ -72,57 +73,39 @@ This will show the two options as a list to select in terminal/command prompt. F
 Now that we know which function we will be using, we can form the query to send to the blockchain. The selection is done with a simple `if` statement.
 
 ```python
+# create empty list
+follows = []
+
+# parameters for get_followers function:
+# start_follower, follow_type, limit
 if option=="Follower" :
-    follow = s.get_followers(username, '', 'blog', limit)
-    # for follower in follow:
-    #     lists.append(follower["follower"])
-    # print(*lists, sep='\n')
+  follows = account.get_followers()[:limit]
 else:
-    follow = s.get_following(username, '', 'blog', limit)
-    # for following in follow:
-    #     lists.append(following["following"])
-    # print(*lists, sep='\n')
+  follows = account.get_following()[:limit]
 ```
 
-The output is displayed using the same `if` statement and will be discussed in the next step.
+The output is captured.
 
 #### 4. Print output <a name="output"></a>
 
 Next, we will print the result.
 
 ```python
-if option=="Follower" :
-    # follow = s.get_followers(username, '', 'blog', limit)
-    for follower in follow:
-        lists.append(follower["follower"])
-    print(*lists, sep='\n')
-else:
-    # follow = s.get_following(username, '', 'blog', limit)
-    for following in follow:
-        lists.append(following["following"])
-    print(*lists, sep='\n')
-```
+# check if follower(ing) list is empty
+if len(follows) == 0:
+  print("No " + option + " information available")
+  exit()
 
-The query returns an array of objects. We use the `for` loop to build a list of only the followers(ing) from that array and then display the list on the UI with line separators. This creates an easy to read list of authors.
-
-We also do a check for when the list is empty to display the proper message.
-
-```python
-#check if follower(ing) list is empty
-if len(lists) == 0:
-    print("No "+option+" information available")
+print(*follows, sep='\n')
 ```
 
 This is a fairly simple example of how to use these functions but we encourage you to play around with the parameters to gain further understanding of possible results.
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/19_get_follower_and_following_list`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see output in terminal/command prompt screen.
-
-
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/19_get_follower_and_following_list`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see output in terminal/command prompt screen.
diff --git a/_tutorials-python/get_post_comments.md b/_tutorials-python/get_post_comments.md
index 0a7fdc5a6ff35c080b10a55f667b46607925ea08..6a144fcdd17bd79932e61d82c06633f4bfec8295 100644
--- a/_tutorials-python/get_post_comments.md
+++ b/_tutorials-python/get_post_comments.md
@@ -4,17 +4,21 @@ position: 7
 description: "Fetch comments made on each content or post using Python."
 layout: full
 canonical_url: get_post_comments.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Get Post Comments](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/07_get_post_comments) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Get Post Comments](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/07_get_post_comments) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-07_get_post_comments.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/07_get_post_comments)).
 
-This tutorial will explain and show you how to access the **Hive** blockchain using the [steem-python](https://github.com/steemit/steem-python) library to fetch list of posts and get replies info on selected post.
+This tutorial will explain and show you how to access the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library to fetch list of posts and get replies info on selected post.
 
 ## Intro
 
-Hive python library has built-in function to get active voters information if post with author and permlink as an argument. Since we don't have predefined post or author/permlink. We will fetch post list from previous tutorial and give option to choose one post to get its active voters. `get_content_replies` function fetches list of replies on content. Note that `get_discussions_by_hot` filter is used for fetching 5 posts and after selection of post tutorial uses `author` and `permlink` of the post to fetch replies. 
+Hive python library has built-in function to get active voters information if post with author and permlink as an argument. Since we don't have predefined post or author/permlink. We will fetch post list from previous tutorial and give option to choose one post to get its active voters. [`get_content_replies`]({{ '/apidefinitions/#tags_api.get_content_replies' | relative_url }}) function fetches list of replies on content. Note that [`get_discussions_by_hot`]({{ '/apidefinitions/#tags_api.get_discussions_by_hot' | relative_url }}) filter is used for fetching 5 posts and after selection of post tutorial uses `author` and `permlink` of the post to fetch replies. 
+
+Also see:
+* [get discussions]({{ '/search/?q=get discussions' | relative_url }})
+* [database_api.find_comments]({{ '/apidefinitions/#database_api.find_comments' | relative_url }})
+* [condenser_api.get_content]({{ '/apidefinitions/#condenser_api.get_content' | relative_url }})
+* [tags_api.get_content_replies]({{ '/apidefinitions/#tags_api.get_content_replies' | relative_url }})
+* [condenser_api.get_content_replies]({{ '/apidefinitions/#condenser_api.get_content_replies' | relative_url }})
 
 ## Steps
 
@@ -25,39 +29,41 @@ Hive python library has built-in function to get active voters information if po
 
 #### 1. App setup <a name="app-setup"></a>
 
-In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `steem` - steem-python library, interaction with Blockchain. `pprint` - print results in better format.
+In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `beem` - hive library, interaction with Blockchain. `pprint` - print results in better format.
 
 First we import all three library and initialize Hive class
 
 ```python
-    import pprint
-    from pick import pick
-    # initialize Hive class
-    from steem import Hive
-
-    s = Hive()
+import pprint
+from pick import pick
+# initialize Hive class
+from beem import Hive
+from beem.discussions import Query, Discussions
+from beem.comment import Comment
+
+h = Hive()
 ```
 
 #### 2. Post list <a name="post-list"></a>
 
-
 Next we will fetch and make list of posts and setup `pick` properly.
 
 ```python
-    query = {
-        "limit":5, #number of posts
-        "tag":"" #tag of posts
-        }
-    #post list for selected query
-    posts = s.get_discussions_by_hot(query)
-
-    title = 'Please choose post: '
-    options = []
-    #posts list options
-    for post in posts:
-        options.append(post["author"]+'/'+post["permlink"])
-    # get index and selected filter name
-    option, index = pick(options, title)
+q = Query(limit=2, tag="")
+d = Discussions()
+
+#post list for selected query
+posts = d.get_discussions('hot', q, limit=2)
+
+title = 'Please choose post: '
+options = []
+
+#posts list
+for post in posts:
+	options.append(post["author"]+'/'+post["permlink"])
+
+# get index and selected filter name
+option, index = pick(options, title)
 ```
 
 This will show us list of posts to select in terminal/command prompt. And after selection we will get index and post name to `index` and `option` variables.
@@ -67,132 +73,50 @@ This will show us list of posts to select in terminal/command prompt. And after
 Next we will replies on selected post with `get_content_replies`. 
 
 ```python
-  # get replies for given post
-  replies = s.get_content_replies(posts[index]["author"],posts[index]["permlink"])
-```
+details = Comment(option)
 
+# get replies for given post
+replies = details.get_all_replies()
+```
 
 #### 4. Print output <a name="print-output"></a>
 
 Next, we will print result, replies on selected post, selected post details and number of replies.
 
 ```python
-  # print post details for selected post
-  pprint.pprint(replies)
-  pprint.pprint("Selected: "+option)
-  pprint.pprint("Number of replies: "+str(len(replies)))
+# print post details for selected post
+pprint.pprint(replies)
+pprint.pprint("Selected: " + option)
+pprint.pprint("Number of replies: " + str(len(replies)))
 ```
 
-The example of result returned from the service is a `JSON` object with the following properties:
-
-```json
-[{'abs_rshares': 0,
-  'active': '2018-06-15T10:43:36',
-  'active_votes': [],
-  'allow_curation_rewards': True,
-  'allow_replies': True,
-  'allow_votes': True,
-  'author': 'sarcasms',
-  'author_reputation': 1086863019,
-  'author_rewards': 0,
-  'beneficiaries': [],
-  'body': 'follow us for news, media, memes, sports updates and lots '
-          'more...',
-  'body_length': 0,
-  'cashout_time': '2018-06-22T10:43:36',
-  'category': 'fiction',
-  'children': 0,
-  'children_abs_rshares': 0,
-  'created': '2018-06-15T10:43:36',
-  'curator_payout_value': '0.000 HBD',
-  'depth': 1,
-  'id': 53110589,
-  'json_metadata': '{"tags":["fiction"],"users":["sarcasms"],"app":"steemit/0.1"}',
-  'last_payout': '1970-01-01T00:00:00',
-  'last_update': '2018-06-15T10:43:36',
-  'max_accepted_payout': '1000000.000 HBD',
-  'max_cashout_time': '1969-12-31T23:59:59',
-  'net_rshares': 0,
-  'net_votes': 0,
-  'parent_author': 'muratkbesiroglu',
-  'parent_permlink': 'short-sci-fi-story-the-android-that-sell-meaning',
-  'pending_payout_value': '0.000 HBD',
-  'percent_hbd': 10000,
-  'permlink': 're-muratkbesiroglu-short-sci-fi-story-the-android-that-sell-meaning-20180615t104323737z',
-  'promoted': '0.000 HBD',
-  'reblogged_by': [],
-  'replies': [],
-  'reward_weight': 10000,
-  'root_author': 'muratkbesiroglu',
-  'root_permlink': 'short-sci-fi-story-the-android-that-sell-meaning',
-  'root_title': 'Short Sci-Fi Story: The Android That Sell Meaning',
-  'title': '',
-  'total_payout_value': '0.000 HBD',
-  'total_pending_payout_value': '0.000 HIVE',
-  'total_vote_weight': 0,
-  'url': '/fiction/@muratkbesiroglu/short-sci-fi-story-the-android-that-sell-meaning#@sarcasms/re-muratkbesiroglu-short-sci-fi-story-the-android-that-sell-meaning-20180615t104323737z',
-  'vote_rshares': 0},
- {'abs_rshares': 0,
-  'active': '2018-06-15T11:26:15',
-  'active_votes': [],
-  'allow_curation_rewards': True,
-  'allow_replies': True,
-  'allow_votes': True,
-  'author': 'vicky3585',
-  'author_reputation': 40338001,
-  'author_rewards': 0,
-  'beneficiaries': [],
-  'body': 'lovely story keep it up...',
-  'body_length': 0,
-  'cashout_time': '2018-06-22T11:26:15',
-  'category': 'fiction',
-  'children': 0,
-  'children_abs_rshares': 0,
-  'created': '2018-06-15T11:26:15',
-  'curator_payout_value': '0.000 HBD',
-  'depth': 1,
-  'id': 53114015,
-  'json_metadata': '{"tags":["fiction"],"app":"steemit/0.1"}',
-  'last_payout': '1970-01-01T00:00:00',
-  'last_update': '2018-06-15T11:26:15',
-  'max_accepted_payout': '1000000.000 HBD',
-  'max_cashout_time': '1969-12-31T23:59:59',
-  'net_rshares': 0,
-  'net_votes': 0,
-  'parent_author': 'muratkbesiroglu',
-  'parent_permlink': 'short-sci-fi-story-the-android-that-sell-meaning',
-  'pending_payout_value': '0.000 HBD',
-  'percent_hbd': 10000,
-  'permlink': 're-muratkbesiroglu-short-sci-fi-story-the-android-that-sell-meaning-20180615t112615204z',
-  'promoted': '0.000 HBD',
-  'reblogged_by': [],
-  'replies': [],
-  'reward_weight': 10000,
-  'root_author': 'muratkbesiroglu',
-  'root_permlink': 'short-sci-fi-story-the-android-that-sell-meaning',
-  'root_title': 'Short Sci-Fi Story: The Android That Sell Meaning',
-  'title': '',
-  'total_payout_value': '0.000 HBD',
-  'total_pending_payout_value': '0.000 HIVE',
-  'total_vote_weight': 0,
-  'url': '/fiction/@muratkbesiroglu/short-sci-fi-story-the-android-that-sell-meaning#@vicky3585/re-muratkbesiroglu-short-sci-fi-story-the-android-that-sell-meaning-20180615t112615204z',
-  'vote_rshares': 0}]
-'Selected: muratkbesiroglu/short-sci-fi-story-the-android-that-sell-meaning'
-'Number of replies: 18'
+The example of results returned from the service:
+
+```
+[<Comment @abh12345/re-meesterboom-qp3p8c>,
+ <Comment @monica-ene/re-meesterboom-qp3qnk>,
+ <Comment @tarazkp/qp3qse>,
+ <Comment @slobberchops/re-meesterboom-qp3s1w>,
+ <Comment @meesterboom/qp3pal>,
+ <Comment @abh12345/re-meesterboom-qp3pj9>,
+ <Comment @meesterboom/qp3pp5>,
+ <Comment @abh12345/re-meesterboom-qp3qku>,
+ <Comment @meesterboom/qp3rhn>,
+ <Comment @meesterboom/qp3rkz>,
+ <Comment @meesterboom/qp3rax>]
+'Selected: meesterboom/to-try-again'
+'Number of replies: 11'
 ```
 
-From this result you have access to everything associated to the replies including content of reply, author, timestamp, etc., so that you can be use in further development of application with Python.
+From this result you have access to everything associated to the replies including content of reply, author, timestamp, etc., so that you can be use in further development of applications with Python.
 
 That's it!
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/07_get_post_comments`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see output in terminal/command prompt screen.
-
-
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/07_get_post_comments`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see output in terminal/command prompt screen.
diff --git a/_tutorials-python/get_post_details.md b/_tutorials-python/get_post_details.md
index 1143dc3d7409f19f6606ef3db037dd64c8c26f96..fd0b28141fafa9536bc1eb7fd81a3602d4f67191 100644
--- a/_tutorials-python/get_post_details.md
+++ b/_tutorials-python/get_post_details.md
@@ -4,60 +4,64 @@ position: 5
 description: "Get post details from list of posts from the blockchain with `created` filter and tag then display selected post details."
 layout: full
 canonical_url: get_post_details.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Get Post Details](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/05_get_post_details) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Get Post Details](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/05_get_post_details) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-05_get_post_details.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/05_get_post_details)).
 
-We will explain and show you how to access the **Hive** blockchain using the [steem-python](https://github.com/steemit/steem-python) library to fetch list of posts filtered by a _filter_ and _tag_
+We will explain and show you how to access the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library to fetch list of posts filtered by a _filter_ and _tag_.
 
 ## Intro
 
 Hive python library has built-in function to get details of post with author and permlink as an argument. Since we don't have predefined post or author/permlink. We will fetch post list from previous tutorial and give option to choose one option/post to get its details. `get_content` function fetches latest state of the post and delivers its details. Note that `get_discussions_by_created` filter is used for fetching 5 posts which by default contains details of each post, but for purpose of this tutorial we will showcase `get_content` function to fetch details.
 
+Also see:
+* [get discussions]({{ '/search/?q=get discussions' | relative_url }})
+* [database_api.find_comments]({{ '/apidefinitions/#database_api.find_comments' | relative_url }})
+* [condenser_api.get_content]({{ '/apidefinitions/#condenser_api.get_content' | relative_url }})
+
 ## Steps
 
-1.  [**App setup**](#app-setup) - Library install and import
-1.  [**Post list**](#post-list) - List of posts to select from created filter 
-1.  [**Post details**](#post-details) - Get post details for selected post
-1.  [**Print output**](#print-output) - Print results in output
+1. [**App setup**](#app-setup) - Library install and import
+1. [**Post list**](#post-list) - List of posts to select from created filter 
+1. [**Post details**](#post-details) - Get post details for selected post
+1. [**Print output**](#print-output) - Print results in output
 
 #### 1. App setup <a name="app-setup"></a>
 
-In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `steem` - steem-python library, interaction with Blockchain. `pprint` - print results in better format.
+In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `beem` - hive library, interaction with Blockchain. `pprint` - print results in better format.
 
 First we import all three library and initialize Hive class
 
 ```python
-    import pprint
-    from pick import pick
-    # initialize Hive class
-    from steem import Hive
-
-    s = Hive()
+import pprint
+from pick import pick
+# initialize Hive class
+from beem import Hive
+from beem.discussions import Query, Discussions
+from beem.comment import Comment
+
+h = Hive()
 ```
 
 #### 2. Post list <a name="post-list"></a>
 
-
 Next we will fetch and make list of posts and setup `pick` properly.
 
 ```python
-    query = {
-        "limit":5, #number of posts
-        "tag":"" #tag of posts
-        }
-    #post list for selected query
-    posts = s.get_discussions_by_created(query)
-
-    title = 'Please choose post: '
-    options = []
-    #posts list options
-    for post in posts:
-        options.append(post["author"]+'/'+post["permlink"])
-    # get index and selected filter name
-    option, index = pick(options, title)
+q = Query(limit=2, tag="")
+d = Discussions()
+
+#post list for selected query
+posts = d.get_discussions('created', q, limit=2)
+
+title = 'Please choose post: '
+options = []
+
+#posts list
+for post in posts:
+  options.append(post["author"] + '/' + post["permlink"])
+
+# get index and selected filter name
+option, index = pick(options, title)
 ```
 
 This will show us list of posts to select in terminal/command prompt. And after selection we will get index and post name to `index` and `option` variables.
@@ -67,104 +71,44 @@ This will show us list of posts to select in terminal/command prompt. And after
 Next we will fetch post details with `get_content`. By default `get_discussions_by_created` function already contains post details, but for this tutorial purpose we will ignore all other fields but only use `author` and `permlink` fields to fetch fresh post details.
 
 ```python
-
-details = s.get_content(posts[index]["author"],posts[index]["permlink"])
+details = Comment(option)
 ```
 
-
 #### 4. Print output <a name="print-output"></a>
 
 Next, we will print result, details of selected post.
 
 ```python
-    # print post details for selected post
-    pprint.pprint(details)
-    pprint.pprint("Selected: "+option)
+# print post body for selected post
+pprint.pprint('Depth: ' + str(details.depth))
+pprint.pprint('Author: ' + details.author)
+pprint.pprint('Category: ' + details.category)
+pprint.pprint('Body: ' + details.body)
 ```
 
-The example of result returned from the service is a `JSON` object with the following properties:
-
-```json
-{
-    "id": 37338948,
-    "author": "steemitblog",
-    "permlink": "join-team-steemit-at-tokenfest",
-    "category": "steemit",
-    "parent_author": "",
-    "parent_permlink": "steemit",
-    "title": "Join Team Hive at TokenFest!",
-    "body":
-        "<a href=\"https://tokenfest.adria.digital\"><img src=\"https://i.imgur.com/fOScDIW.png\"/></a>\n\nHello Hiveians! If you’d like to meet Team Hive live-in-person, or are just interested in attending what promises to be a great blockchain conference, join us at <a href=\"https://tokenfest.adria.digital/\">TokenFest</a> in San Francisco from March 15th to 16th. \n\nHive CEO, Ned Scott, will be participating in a fireside chat alongside Hive’s CTO, Harry Schmidt, as well as the creator of Utopian.io, Diego Pucci. Hive will also be hosting the opening party on Thursday night and we’d certainly love to meet as many of you as possible IRL, so head on over to https://tokenfest.adria.digital/ and get your tickets while you can. \n\n*Team Hive*",
-    "json_metadata":
-        "{\"tags\":[\"steemit\",\"tokenfest\",\"conference\"],\"image\":[\"https://i.imgur.com/fOScDIW.png\"],\"links\":[\"https://tokenfest.adria.digital\",\"https://tokenfest.adria.digital/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
-    "last_update": "2018-03-07T23:22:54",
-    "created": "2018-03-07T20:56:36",
-    "active": "2018-03-13T01:40:21",
-    "last_payout": "1970-01-01T00:00:00",
-    "depth": 0,
-    "children": 29,
-    "net_rshares": "11453442114933",
-    "abs_rshares": "11454054795840",
-    "vote_rshares": "11454054795840",
-    "children_abs_rshares": "13568695606090",
-    "cashout_time": "2018-03-14T20:56:36",
-    "max_cashout_time": "1969-12-31T23:59:59",
-    "total_vote_weight": 3462435,
-    "reward_weight": 10000,
-    "total_payout_value": "0.000 HBD",
-    "curator_payout_value": "0.000 HBD",
-    "author_rewards": 0,
-    "net_votes": 77,
-    "root_comment": 37338948,
-    "max_accepted_payout": "0.000 HBD",
-    "percent_hbd": 10000,
-    "allow_replies": true,
-    "allow_votes": true,
-    "allow_curation_rewards": true,
-    "beneficiaries": [],
-    "url": "/steemit/@steemitblog/join-team-steemit-at-tokenfest",
-    "root_title": "Join Team Hive at TokenFest!",
-    "pending_payout_value": "46.436 HBD",
-    "total_pending_payout_value": "0.000 HIVE",
-    "active_votes": [
-        {
-            "voter": "steemitblog",
-            "weight": 0,
-            "rshares": "1870813909383",
-            "percent": 10000,
-            "reputation": "128210130644387",
-            "time": "2018-03-07T20:56:36"
-        },
-        {
-            "voter": "kevinwong",
-            "weight": 526653,
-            "rshares": "2208942520687",
-            "percent": 5000,
-            "reputation": "374133832002581",
-            "time": "2018-03-08T04:27:00"
-        }
-    ],
-    "replies": [],
-    "author_reputation": "128210130644387",
-    "promoted": "0.000 HBD",
-    "body_length": 754,
-    "reblogged_by": []
-}
-'Selected: steemitblog/join-team-steemit-at-tokenfest'
-```
+Also see: [beem.comment.Comment](https://beem.readthedocs.io/en/latest/beem.comment.html?highlight=comment#beem.comment.Comment)
 
-From this result you have access to everything associated to the post including additional metadata which is a `JSON` string (that must be decoded to use), `active_votes` info, post title, body, etc. details that can be used in further development of application with Python.
+The example of result returned from the service:
 
-That's it!
-
-### To Run the tutorial
+```
+'Depth: 0'
+'Author: hiveio'
+'Category: hive'
+('Body: '
+ '\n'
+ '\n'
+.
+.
+.
+```
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/05_get_post_details`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see output in terminal/command prompt screen.
+From this result you have access to everything associated to the post including additional metadata which is a `JSON` string (e.g.; `json()["created"]`), `active_votes` (see: [beem.comment.Comment.get_vote_with_curation](https://beem.readthedocs.io/en/latest/beem.comment.html?highlight=comment#beem.comment.Comment.get_vote_with_curation)) info, post title, body, etc. details that can be used in further development of applications with Python.
 
+### To Run the tutorial
 
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/05_get_post_details`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see output in terminal/command prompt screen.
diff --git a/_tutorials-python/get_posts.md b/_tutorials-python/get_posts.md
index 3abb4e78da4ebd47f4a78d6e73eb9f980c4e8bdb..e9ec1dc777d071ed410a9e5547e13ef8b1cc3056 100644
--- a/_tutorials-python/get_posts.md
+++ b/_tutorials-python/get_posts.md
@@ -4,39 +4,38 @@ position: 4
 description: "Tutorial pulls a list of the posts from the blockchain with selected filter and tag then displays output."
 layout: full
 canonical_url: get_posts.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Get Posts](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/04_get_posts) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Get Posts](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/04_get_posts) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-04_get_posts.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/04_get_posts)).
 
-This tutorial will explain and show you how to access the **Hive** blockchain using the [steem-python](https://github.com/steemit/steem-python) library to fetch list of posts filtered by a _filter_ and _tag_
+This tutorial will explain and show you how to access the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library to fetch list of posts filtered by a _filter_ and _tag_.
 
 ## Intro
 
-In Hive there are built-in filters `trending`, `hot`, `created`, `active`, `promoted` etc. which helps us to get list of posts. `get_discussions_by_trending(query)`, `get_discussions_by_hot(query)`, `get_discussions_by_created(query)`, etc. functions are built-in in official library `steem-python` that we are going to use throughout all Python tutorials. 
+In Hive there are built-in filters `trending`, `hot`, `created`, `active`, `promoted` etc. which helps us to get list of posts. `get_discussions_by_trending(query)`, `get_discussions_by_hot(query)`, `get_discussions_by_created(query)`, etc. functions are built-in into `beem` that we are going to use throughout all Python tutorials. 
 
+Also see:
+* [get discussions]({{ '/search/?q=get discussions' | relative_url }})
 
 ## Steps
 
-1.  [**App setup**](#app-setup) - Library install and import
-1.  [**Filters list**](#filters-list) - List of filters to select from
-1.  [**Query details**](#query-details) - Form a query
-1.  [**Print output**](#print-output) - Print results in output
+1. [**App setup**](#app-setup) - Library install and import
+1. [**Filters list**](#filters-list) - List of filters to select from
+1. [**Query details**](#query-details) - Form a query
+1. [**Print output**](#print-output) - Print results in output
 
 #### 1. App setup <a name="app-setup"></a>
 
-In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `steem` - steem-python library, interaction with Blockchain. `pprint` - print results in better format.
+In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `beem` - hive library, interaction with Blockchain. `pprint` - print results in better format.
 
 First we import all three library and initialize Hive class
 
 ```python
-    import pprint
-    from pick import pick
-    # initialize Hive class
-    from steem import Hive
+import pprint
+from pick import pick
+# initialize Hive class
+from beem import Hive
 
-    s = Hive()
+h = Hive()
 ```
 
 #### 2. Filters list <a name="filters-list"></a>
@@ -44,11 +43,11 @@ First we import all three library and initialize Hive class
 Next we will make list of filters and setup `pick` properly.
 
 ```python
-    title = 'Please choose filter: '
-    #filters list
-    options = ['trending', 'hot', 'active', 'created', 'promoted']
-    # get index and selected filter name
-    option, index = pick(options, title)
+title = 'Please choose filter: '
+#filters list
+options = ['trending', 'hot', 'active', 'created', 'promoted']
+# get index and selected filter name
+option, index = pick(options, title)
 ```
 
 This will show us list of filters to select in terminal/command prompt. And after selection we will get index and filter name to `index` and `option` variables.
@@ -61,16 +60,16 @@ Next we will form a query. In Hive,
 *   You can also limit the amount of results you would like to receive from the query
 
 ```python
-query = {
-    "limit":2, #number of posts
-    "tag":"" #tag of posts
-    }
-#post list for selected query
-posts = {0: s.get_discussions_by_trending(query),
-         1: s.get_discussions_by_hot(query),
-         2: s.get_discussions_by_active(query),
-         3: s.get_discussions_by_created(query),
-         4: s.get_discussions_by_promoted(query)
+q = Query(limit=2, tag="")
+.
+.
+.
+posts = {
+  0: d.get_discussions('trending', q, limit=2),
+  1: d.get_discussions('hot', q, limit=2),
+  2: d.get_discussions('active', q, limit=2),
+  3: d.get_discussions('created', q, limit=2),
+  4: d.get_discussions('promoted', q, limit=2)
 }
 ```
 
@@ -81,84 +80,16 @@ Above code shows example of query and simple list of function that will fetch po
 Next, we will print result, post list and selected filter name.
 
 ```python
-    # print post list for selected filter
-    pprint.pprint(posts[index])
-    pprint.pprint("Selected: "+option)
+  # print post list for selected filter
+  pprint.pprint(posts[index])
+  pprint.pprint("Selected: "+option)
 ```
 
-The example of result returned from the service is a `JSON` object with the following properties:
-
-```json
-[
-    {
-        "id": 37338948,
-        "author": "steemitblog",
-        "permlink": "join-team-steemit-at-tokenfest",
-        "category": "steemit",
-        "parent_author": "",
-        "parent_permlink": "steemit",
-        "title": "Join Team Hive at TokenFest!",
-        "body":
-            "<a href=\"https://tokenfest.adria.digital\"><img src=\"https://i.imgur.com/fOScDIW.png\"/></a>\n\nHello Hiveians! If you’d like to meet Team Hive live-in-person, or are just interested in attending what promises to be a great blockchain conference, join us at <a href=\"https://tokenfest.adria.digital/\">TokenFest</a> in San Francisco from March 15th to 16th. \n\nHive CEO, Ned Scott, will be participating in a fireside chat alongside Hive’s CTO, Harry Schmidt, as well as the creator of Utopian.io, Diego Pucci. Hive will also be hosting the opening party on Thursday night and we’d certainly love to meet as many of you as possible IRL, so head on over to https://tokenfest.adria.digital/ and get your tickets while you can. \n\n*Team Hive*",
-        "json_metadata":
-            "{\"tags\":[\"steemit\",\"tokenfest\",\"conference\"],\"image\":[\"https://i.imgur.com/fOScDIW.png\"],\"links\":[\"https://tokenfest.adria.digital\",\"https://tokenfest.adria.digital/\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
-        "last_update": "2018-03-07T23:22:54",
-        "created": "2018-03-07T20:56:36",
-        "active": "2018-03-13T01:40:21",
-        "last_payout": "1970-01-01T00:00:00",
-        "depth": 0,
-        "children": 29,
-        "net_rshares": "11453442114933",
-        "abs_rshares": "11454054795840",
-        "vote_rshares": "11454054795840",
-        "children_abs_rshares": "13568695606090",
-        "cashout_time": "2018-03-14T20:56:36",
-        "max_cashout_time": "1969-12-31T23:59:59",
-        "total_vote_weight": 3462435,
-        "reward_weight": 10000,
-        "total_payout_value": "0.000 HBD",
-        "curator_payout_value": "0.000 HBD",
-        "author_rewards": 0,
-        "net_votes": 77,
-        "root_comment": 37338948,
-        "max_accepted_payout": "0.000 HBD",
-        "percent_hbd": 10000,
-        "allow_replies": true,
-        "allow_votes": true,
-        "allow_curation_rewards": true,
-        "beneficiaries": [],
-        "url": "/steemit/@steemitblog/join-team-steemit-at-tokenfest",
-        "root_title": "Join Team Hive at TokenFest!",
-        "pending_payout_value": "46.436 HBD",
-        "total_pending_payout_value": "0.000 HIVE",
-        "active_votes": [
-            {
-                "voter": "steemitblog",
-                "weight": 0,
-                "rshares": "1870813909383",
-                "percent": 10000,
-                "reputation": "128210130644387",
-                "time": "2018-03-07T20:56:36"
-            },
-            {
-                "voter": "kevinwong",
-                "weight": 526653,
-                "rshares": "2208942520687",
-                "percent": 5000,
-                "reputation": "374133832002581",
-                "time": "2018-03-08T04:27:00"
-            }
-        ],
-        "replies": [],
-        "author_reputation": "128210130644387",
-        "promoted": "0.000 HBD",
-        "body_length": 754,
-        "reblogged_by": []
-    },
-    {
-
-    }
-]
+The example of result returned from the service as objects:
+
+```
+1. <Comment @lukewearechange/unbelievable-how-are-they-getting-away-with-this>
+2. <Comment @jennyzer/iniciativa-juegos-de-mi-infancia-or-or-games-of-my-childhood-initiative>
 'Selected: hot'
 ```
 
@@ -168,12 +99,9 @@ That's it!
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/04_get_posts`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see output in terminal/command prompt screen.
-
-
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/04_get_posts`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see output in terminal/command prompt screen.
diff --git a/_tutorials-python/get_voters_list_on_post.md b/_tutorials-python/get_voters_list_on_post.md
index 03fdcda349b5a797a7ec38e661ecd6e63d2c04d3..6ee6313dead35b05e0e4f3322eb8ae7fa67e2c64 100644
--- a/_tutorials-python/get_voters_list_on_post.md
+++ b/_tutorials-python/get_voters_list_on_post.md
@@ -4,17 +4,19 @@ position: 6
 description: "Voters list and detail of each vote on selected content."
 layout: full
 canonical_url: get_voters_list_on_post.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Get Voters List On Post](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/06_get_voters_list_on_post) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Get Voters List On Post](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/06_get_voters_list_on_post) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-06_get_voters_list_on_post.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/06_get_voters_list_on_post)).
 
-Tutorial will explain and show you how to access the **Hive** blockchain using the [steem-python](https://github.com/steemit/steem-python) library to fetch list of posts and get voters info on selected post.
+Tutorial will explain and show you how to access the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library to fetch list of posts and get voters info on selected post.
 
 ## Intro
 
-Hive python library has built-in function to get active voters information if post with author and permlink as an argument. Since we don't have predefined post or author/permlink. We will fetch post list from previous tutorial and give option to choose one post to get its active voters. `get_active_votes` function fetches list of active voters on content. Note that `get_discussions_by_active` filter is used for fetching 5 posts which by default contains `active_votes` of each post, but for purpose of this tutorial we will use `get_active_votes` function to fetch voters info.
+The beem library has built-in functionality to get active voters information if post with author and permlink as an argument. Since we don't have predefined post or author/permlink, we will fetch post list from previous tutorial and give option to choose one post to get its active voters. The [`get_active_votes`](https://beem.readthedocs.io/en/latest/apidefinitions.html#get-active-votes) method fetches list of active voters on content. Note that [`get_discussions_by_hot`](https://beem.readthedocs.io/en/latest/apidefinitions.html#get-discussions-by-hot) filter is used for fetching 5 posts which by default contains `active_votes` of each post, but for purpose of this tutorial we will use `get_active_votes` method to fetch voters info.
+
+Also see:
+* [get discussions]({{ '/search/?q=get discussions' | relative_url }})
+* [tags_api.get_active_votes]({{ '/apidefinitions/#tags_api.get_active_votes' | relative_url }})
+* [condenser_api.get_active_votes]({{ '/apidefinitions/#condenser_api.get_active_votes' | relative_url }})
 
 ## Steps
 
@@ -25,100 +27,85 @@ Hive python library has built-in function to get active voters information if po
 
 #### 1. App setup <a name="app-setup"></a>
 
-In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `steem` - steem-python library, interaction with Blockchain. `pprint` - print results in better format.
+In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `beem` - hive library, interaction with Blockchain. `pprint` - print results in better format.
 
 First we import all three library and initialize Hive class
 
 ```python
-    import pprint
-    from pick import pick
-    # initialize Hive class
-    from steem import Hive
-
-    s = Hive()
+import pprint
+from pick import pick
+# initialize Hive class
+from beem import Hive
+from beem.discussions import Query, Discussions
+from beem.vote import ActiveVotes
+
+h = Hive()
 ```
 
 #### 2. Post list <a name="post-list"></a>
 
-
 Next we will fetch and make list of posts and setup `pick` properly.
 
 ```python
-    query = {
-        "limit":5, #number of posts
-        "tag":"" #tag of posts
-        }
-    #post list for selected query
-    posts = s.get_discussions_by_active(query)
-
-    title = 'Please choose post: '
-    options = []
-    #posts list options
-    for post in posts:
-        options.append(post["author"]+'/'+post["permlink"])
-    # get index and selected filter name
-    option, index = pick(options, title)
+q = {"limit": 5, "tag": "", "before_date": None}
+d = Discussions()
+
+#post list for selected query
+posts = d.get_discussions('hot', q, limit=5)
+
+title = 'Please choose post: '
+options = []
+
+#posts list
+for post in posts:
+	options.append(post["author"] + '/' + post["permlink"])
+
+# get index and selected filter name
+option, index = pick(options, title)
 ```
 
 This will show us list of posts to select in terminal/command prompt. And after selection we will get index and post name to `index` and `option` variables.
 
 #### 3. Voters list <a name="voters-list"></a>
 
-Next we will fetch active votes on selected post with `get_active_votes`. By default `get_discussions_by_active` function already contains `active_votes` list, but for this tutorial purpose we will ignore all other fields but only use `author` and `permlink` fields to fetch voters list.
+Next we will fetch active votes on selected post with `get_active_votes`. By default `get_discussions_by_hot` method already contains `active_votes` list, but for this tutorial purpose we will ignore all other fields but only use `author` and `permlink` fields to fetch voters list.
 
 ```python
-
-voters = s.get_active_votes(posts[index]["author"],posts[index]["permlink"])
+voters = ActiveVotes(option)
 ```
 
-
 #### 4. Print output <a name="print-output"></a>
 
 Next, we will print result, details of selected post.
 
 ```python
-    # print voters list for selected post
-    pprint.pprint(voters)
-    pprint.pprint("Selected: "+option)
+# print voters list for selected post
+voters.printAsTable()
+pprint.pprint("Selected: " + option)
 ```
 
-The example of result returned from the service is a `JSON` object with the following properties:
-
-```json
-[{'percent': 100,
-  'reputation': '4675452335798',
-  'rshares': 174045922,
-  'time': '2018-06-13T05:27:06',
-  'voter': 'ubg',
-  'weight': 663},
- {'percent': 3000,
-  'reputation': 0,
-  'rshares': '52213408920',
-  'time': '2018-06-13T12:53:30',
-  'voter': 'warofcraft',
-  'weight': 99589},
- {'percent': 10000,
-  'reputation': '16976056264304',
-  'rshares': '41495494555',
-  'time': '2018-06-13T08:56:00',
-  'voter': 'jiahn',
-  'weight': 80257}
-]
-'Selected: steemitblog/join-team-steemit-at-tokenfest'
-```
+The example of result returned from the service is a table with the following output:
 
-From this result you have access to everything associated to the voter including reputation of voter, timestamp, voter's account name, percent and weight of vote, rshares reward shares values that you can be use in further development of application with Python.
+```
++------------------+------------+---------+-------------+----------------+---------+---------+
+| Voter            | Votee      | SBD/HBD | Time        | Rshares        | Percent | Weight  |
++------------------+------------+---------+-------------+----------------+---------+---------+
+| themonkeyzuelans | fermionico | 0.01 $  | 0 days 0:46 | 28018792638    | 10000   | 6694    |
+| heidimarie       | fermionico | 0.03 $  | 0 days 0:45 | 61161496034    | 1500    | 16568   |
+| netaterra        | fermionico | 0.06 $  | 0 days 0:45 | 146151648404   | 600     | 39343   |
+| therealyme       | fermionico | 0.08 $  | 0 days 0:45 | 199995975315   | 600     | 50451   |
+| ctime            | fermionico | 0.11 $  | 0 days 0:45 | 266462356454   | 400     | 70849   |
++------------------+------------+---------+-------------+----------------+---------+---------+
+'Selected: fermionico/ztqkjnuv'
+```
 
-That's it!
+From this result you have access to everything associated to the voter including reputation of voter, timestamp, voter's account name, percent and weight of vote, rshares reward shares values that you can be use in further development of applications with Python.
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/06_get_voters_list`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see output in terminal/command prompt screen.
-
-
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/06_get_voters_list`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see output in terminal/command prompt screen.
diff --git a/_tutorials-python/getting_started.md b/_tutorials-python/getting_started.md
index 8c65f5cc5b0c64e6b94acc46ce5c43d78ec62eaf..e43468bb8d743c299821064c078222cc96f2dbcb 100644
--- a/_tutorials-python/getting_started.md
+++ b/_tutorials-python/getting_started.md
@@ -1,20 +1,17 @@
 ---
 title: 'PY: Getting Started'
 position: 0
-description: "The official Hive library for Python is `steem-python`. It comes with a BIP38 encrypted wallet and a practical CLI utility called `steempy`."
+description: "One excellent Hive library for Python is `beem`.  It comes with a BIP38 encrypted wallet and a practical CLI utility called `beempy`."
 layout: full
 canonical_url: getting_started.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of these tutorials can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [all python tutorials](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python)).
 
 The library was designed to allow Python developers to easily access the network as well as build utilities and applications.
 
-Currently steem-python documentation is generated in the standard [pydoc format](https://steem.readthedocs.io/en/latest/).
+Currently beem documentation is generated in the standard [pydoc format](https://beem.readthedocs.io/en/latest/).
 
-Documentation is available at: [Official steem-python Docs](https://github.com/steemit/steem-python).
+Repository: [https://github.com/holgern/beem](https://github.com/holgern/beem).
 
 ---
 
@@ -22,7 +19,6 @@ Documentation is available at: [Official steem-python Docs](https://github.com/s
 
 In our Python tutorials we recommend developers to be familiar with following requirements/libraries.
 
-
 * Python developer should be familiar with Python 3.x and above
 
 * Medium knowledge of package manager `pip/pip3` and/or `pipenv` is required, since our tutorials will be using package manager to get started quickly.
@@ -37,6 +33,3 @@ In our Python tutorials we recommend developers to be familiar with following re
 To get started with Python, you can also check official [Python installation](https://wiki.python.org/moin/BeginnersGuide/Download) and [Python tutorial](https://docs.python.org/3/tutorial/).
 
 To get started with our Python tutorials, checkout our [first tutorial here](get_posts.html).
-
-
----
diff --git a/_tutorials-python/grant_active_permission.md b/_tutorials-python/grant_active_permission.md
index 1aca3ff779569997ed65d885fee15e4dcade71de..78007ccfe03cabb0a2b3a71e2faaa4e70ac2ceca 100644
--- a/_tutorials-python/grant_active_permission.md
+++ b/_tutorials-python/grant_active_permission.md
@@ -4,141 +4,133 @@ position: 31
 description: "How to give another user active permission on your account using Python."
 layout: full
 canonical_url: grant_active_permission.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Grant Active Permission](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/31_grant_active_permission) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Grant Active Permission](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/31_grant_active_permission) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-31_grant_active_permission.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/31_grant_active_permission)).
 
-In this tutorial we show you how to check if someone has got active permission for an account on the **Hive** blockchain and how to grant or revoke that permission using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+In this tutorial we show you how to check if someone has got active permission for an account on the **Hive** blockchain and how to grant or revoke that permission using the [beem](https://github.com/holgern/beem) library.
 
-Providing another user active permission for your account enables them to do fund transfers from your account. This can be useful in setting up a secondary account(s) to manage funds for a main account or having a backup should you lose passwords for the main account.
+Providing another user active permission for your account enables them to do fund transfers from your account.  This can be useful in setting up a secondary account(s) to manage funds for a main account or having a backup should you lose passwords for the main account.
 
-One of the common practice nowadays is to lend/delegate SP to another account, above same technique can be used to create market around it with minimum 3rd party trust. All your funds stay in your account. You can use/create automated system where you can lease for certain period of time and system can take care of payments and release of delegations (notify clients). Even better, you can use multi-signature feature to establish 100% trust where clients will have to confirm, approve transactions.
+One of the common practice nowadays is to lend/delegate SP to another account, above same technique can be used to create market around it with minimum 3rd party trust.  All your funds stay in your account.  You can use/create automated system where you can lease for certain period of time and system can take care of payments and release of delegations (notify clients).  Even better, you can use [multi-signature <i class="fas fa-search fa-xs" />]({{ '/search?q=multisig' | relative_url }})  feature to establish 100% trust where clients will have to confirm, approve transactions.
 
-Active permissions and authority should be used with utmost care, you don't want to lose your funds. It is really not easy to hack Hive accounts, let alone take control over it. But without careful use (revealing private keys) losing liquid funds are not that difficult and it takes only couple seconds to do that, keeping most value powered up always helps.
+Active permissions and authority should be used with utmost care, you don't want to lose your funds.  It is really not easy to hack Hive accounts, let alone take control over it.  But without careful use (revealing private keys) losing liquid funds are not that difficult and it takes only couple seconds to do that, keeping most value powered up always helps.
 
-[this article](https://hive.blog/steem/@good-karma/steem-multi-authority-permissions-and-how-active-authority-works-part-2-f158813ec0ec1) has more detail around active authorities
+See [this article](https://hive.blog/@good-karma/steem-multi-authority-permissions-and-how-active-authority-works-part-2-f158813ec0ec1) for more detail around active authorities.
 
 ## Intro
 
-The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `allow` and `disallow` methods found within the `commit` class in the library. Before we grant or revoke permission, we use the `get_account` function to check whether the requested user already has that permission or not. This is not strictly necessary but adds to the useability of the process. The `allow` method has 5 parameters:
-
-1.  _foreign_ - The foreign account that will obtain access
-1.  _weight_ - This is an optional parameter defining the weight to use. If not defined, the threshold value will be used. If the weight is smaller than the threshold, additional signatures will be required.
-1.  _permission_ - The actual permission to modify. This value must be either "posting", "active" or "owner"
-1.  _account_ - The account to allow access to
-1.  _threshold_ - The threshold that needs to be reached by signatures to be able to interact
+The beem library has a built-in function to transmit transactions to the blockchain.  We are using the [`allow`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.allow) and [`disallow`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.disallow) methods found within the `Account` instance.  Before we grant or revoke permission, we use the [`Account`](https://beem.readthedocs.io/en/latest/beem.account.html) module to check whether the requested user already has that permission or not.  This is not strictly necessary but adds to the usability of the process.
 
 The `disallow` method uses the same parameters except for `weight` which is not required.
 
 There is currently a bug with the `disallow` method when using it on the testnet that we normally connect to. Due to that bug, we are using the production server for this tutorial. Special care should be taken when creating transactions as everything we do will affect `real` accounts.
 
+There is a permission limit defined by [`HIVE_MAX_AUTHORITY_MEMBERSHIP`]({{ '/tutorials-recipes/understanding-configuration-values.html#HIVE_MAX_AUTHORITY_MEMBERSHIP' | relative_url }}) that limits the number of authority membership to 40 (max).
+
 ## Steps
 
-1.  [**App setup**](#setup) - Library install and import. Input user info and connection to production
-1.  [**Username validation**](#username) - Check validity of user and foreign account
-1.  [**Check permission status**](#status) - Check current permission status of foreign account
-1.  [**Commit to blockchain**](#commit) - Commit transaction to blockchain
+1. [**App setup**](#setup) - Library install and import. Input user info and connection to production
+1. [**Username validation**](#username) - Check validity of user and foreign account
+1. [**Check permission status**](#status) - Check current permission status of foreign account
+1. [**Commit to blockchain**](#commit) - Commit transaction to blockchain
 
 #### 1. App setup and connection <a name="setup"></a>
 
 In this tutorial we use 2 packages:
 
-- `steem` - steem-python library and interaction with Blockchain
+- `beem` - hive library and interaction with Blockchain
 - `pick` - helps select the query type interactively
 
 We import the libraries for the application.
 
 ```python
-import steembase
-import steem
 from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
 ```
 
-We require the `private active key` of the user in order for the `allow` or `disallow` to be committed to the blockchain. The values are supplied via the terminal/console before we initialise the steem class with the supplied private key included.
+We require the `private active key` of the user in order for the `allow` or `disallow` to be committed to the blockchain.  The values are supplied via the terminal/console before we initialize the beem class with the supplied private key included.
 
 ```python
-#capture user information
-username = input('Enter username: ')
-wif = input('Enter private ACTIVE key: ')
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
 
-#connect to production server with active key
-client = steem.Hive(keys=[wif])
+# connect to production server with active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
 ```
 
 #### 2. Username validation <a name="username"></a>
 
-Both the main account granting the permission and the account that permission is being granted to are first checked to make certain that they do in fact exist. We do this with the `get_account` function.
+Both the main account granting the permission and the account that permission is being granted to are first checked to make certain that they do in fact exist.  We do this with the `Account` module.
 
 ```python
-#check valid user
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
-
-#get account to authorise and check if valid
-foreign_acc = input('Please enter the account name for ACTIVE authorisation: ')
-if (foreign_acc == username) :
-    print('Cannot allow or disallow active permission to your own account')
-    exit()
-foreign_userinfo = client.get_account(foreign_acc)
-if(foreign_userinfo is None) :
-    print('Oops. Looks like user ' + foreign_acc + ' doesn\'t exist on this chain!')
-    exit()
+# check valid user
+account = Account(account, blockchain_instance=client)
+
+print('Current active authorizations: ' + str(account['active']['account_auths']))
+
+# get account to authorise and check if valid
+foreign = input('Please enter the account name for ACTIVE authorization: ')
+if (foreign == account.name):
+  print('Cannot allow or disallow active permission to your own account')
+  exit()
+
+foreign = Account(foreign, blockchain_instance=client)
 ```
 
 #### 3. Check permission status <a name="status"></a>
 
-In order to determine which function to execute (`allow` or `disallow`) we first need to check whether the requested user already has permission or not. We do this with the same variable created in the previous step. The `get_account` function has a value - `active` - that contains an array of the all the usernames that has been granted active permission for the account being queried. We use this check to limit the options of the user as you cannot grant permission to a user that already has permission or revoke permission of a user that does not yet have permission. The information is displayed on the options list.
+In order to determine which function to execute (`allow` or `disallow`) we first need to check whether the requested user already has permission or not.  We do this with the same variable created in the previous step.  The `Account` module has a value - `active` - that contains an array of all the usernames that has been granted posting permission for the account being queried.  We use this check to limit the options of the user as you cannot grant permission to a user that already has permission or revoke permission of a user that does not yet have permission.  The information is displayed on the options list.
 
 ```python
-#check if foreign_account already has active auth
-_data = []
+# check if foreign account already has active auth
 title = ''
-for i in range(len(userinfo['active']['account_auths'])) :
-    _data.append(userinfo['active']['account_auths'][i])
-    if (_data[i][0] == foreign_acc) :
-        title = (foreign_acc + ' already has active permission. Please choose option from below list')
-        options = ['DISALLOW', 'CANCEL']
-
-if (title == '') :
-    title = (foreign_acc + ' does not yet active permission. Please choose option from below list')
-    options = ['ALLOW', 'CANCEL']
+
+for auth in account['active']['account_auths']:
+  if (auth[0] == foreign.name):
+    title = (foreign.name + ' already has active permission. Please choose option from below list')
+    options = ['DISALLOW', 'CANCEL']
+    break
+
+if (title == ''):
+  title = (foreign.name + ' does not yet active permission. Please choose option from below list')
+  options = ['ALLOW', 'CANCEL']
 ```
 
 #### 4. Commit to blockchain <a name="commit"></a>
 
-Based on the check in the previous step, the user is given the option to `allow`, `disallow` or `cancel` the operation completely. All the required parameters have already been assigned via console/terminal input and based on the choice of the user the relevant function can be executed. A confirmation of the succesfully executed action is displayed on the UI.
+Based on the check in the previous step, the user is given the option to `allow`, `disallow` or `cancel` the operation completely.  All the required parameters have already been assigned via console/terminal input and based on the choice of the user the relevant function can be executed.  A confirmation of the successfully executed action is displayed on the UI.
 
 ```python
 option, index = pick(options, title)
 
-if (option == 'CANCEL') :
-    print('operation cancelled')
-    exit()
-
-if (option == 'ALLOW') :
-    #allow(foreign, weight=None, permission='posting', account=None, threshold=None)
-    client.allow(foreign=foreign_acc, weight=1, permission='active', account=username, threshold=1)
-    print(foreign_acc + ' has been granted active permission')
-else :
-    #disallow(foreign, permission='posting', account=None, threshold=None)
-    client.disallow(foreign=foreign_acc, permission='active', account=username, threshold=1)
-    print('active permission for ' + foreign_acc + ' has been removed')
-```
+if (option == 'CANCEL'):
+  print('operation cancelled')
+  exit()
 
-And that's it!
+if (option == 'ALLOW'):
+  account.allow(foreign=foreign.name, weight=1, permission='active', threshold=1)
+  print(foreign.name + ' has been granted active permission')
+else:
+  account.disallow(foreign=foreign.name, permission='active', threshold=1)
+  print('active permission for ' + foreign.name + ' has been removed')
+```
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/31_grant_active_permission`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
 
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
 
----
+For details on running a local testnet, see: [Setting Up a Testnet]({{ '/tutorials-recipes/setting-up-a-testnet.html' | relative_url }})
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/31_grant_active_permission`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/grant_posting_permission.md b/_tutorials-python/grant_posting_permission.md
index f663fa012a4849c1dbd5c15f0057979bfe782722..02174a797d74d906569e2da51af3406d2f7d2746 100644
--- a/_tutorials-python/grant_posting_permission.md
+++ b/_tutorials-python/grant_posting_permission.md
@@ -4,135 +4,125 @@ position: 30
 description: "How to give another user posting permission on your account using Python."
 layout: full
 canonical_url: grant_posting_permission.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Grant Posting Permission](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/30_grant_posting_permission) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Grant Posting Permission](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/30_grant_posting_permission) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-30_grant_posting_permission.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/30_grant_posting_permission)).
 
-In this tutorial we show you how to check if someone has posting permission for an account on the **Hive** blockchain and how to grant or revoke that permission using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+In this tutorial we show you how to check if someone has posting permission for an account on the **Hive** blockchain and how to grant or revoke that permission using the [beem](https://github.com/holgern/beem) library.
 
-Providing another user posting permission for your account can be used to allow multiple users to submit posts on a single steemit community. @Utopian-Io is an example of such a community. There are also applications that allows you to schedule posts by automatically publishing on your behalf.
+Providing another user posting permission for your account can be used to allow multiple users to submit posts on a single hive community.  [Peakd](https://peakd.com) is an example of such a community, as well as others, that allow you to schedule posts by automatically publishing on your behalf.
 
 ## Intro
 
-The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `allow` and `disallow` methods found within the `commit` class in the library. Before we grant or revoke permission, we use the `get_account` function to check whether the requested user already has that permission or not. This is not strictly necessary but adds to the useability of the process. The `allow` method has 5 parameters:
-
-1.  _foreign_ - The foreign account that will obtain access
-1.  _weight_ - This is an optional parameter defining the weight to use. If not defined, the threshold value will be used. If the weight is smaller than the threshold, additional signatures will be required.
-1.  _permission_ - The actual permission to modify. This value must be either "posting", "active" or "owner"
-1.  _account_ - The account to allow access to
-1.  _threshold_ - The threshold that needs to be reached by signatures to be able to interact
+The beem library has a built-in function to transmit transactions to the blockchain.  We are using the [`allow`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.allow) and [`disallow`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.disallow) methods found within the `Account` instance.  Before we grant or revoke permission, we use the [`Account`](https://beem.readthedocs.io/en/latest/beem.account.html) module to check whether the requested user already has that permission or not.  This is not strictly necessary but adds to the usability of the process.
 
-The `disallow` method uses the same parameters except for `weight` which is not required.
+The `disallow` method uses the same process except for `weight` which is not required.
 
-There is currently a bug with the `disallow` method when using it on the testnet that we normally connect to. Due to that bug, we are using the production server for this tutorial. Special care should be taken when creating transactions as everything we do will affect `real` accounts.
+There is a permission limit defined by [`HIVE_MAX_AUTHORITY_MEMBERSHIP`]({{ '/tutorials-recipes/understanding-configuration-values.html#HIVE_MAX_AUTHORITY_MEMBERSHIP' | relative_url }}) that limits the number of authority membership to 40 (max).
 
 ## Steps
 
-1.  [**App setup**](#setup) - Library install and import. Input user info and connection to production
-1.  [**Username validation**](#username) - Check validity of user and foreign account
-1.  [**Check permission status**](#status) - Check current permission status of foreign account
-1.  [**Commit to blockchain**](#commit) - Commit transaction to blockchain
+1. [**App setup**](#setup) - Library install and import. Input user info and connection to production
+1. [**Username validation**](#username) - Check validity of user and foreign account
+1. [**Check permission status**](#status) - Check current permission status of foreign account
+1. [**Commit to blockchain**](#commit) - Commit transaction to blockchain
 
 #### 1. App setup and connection <a name="setup"></a>
 
 In this tutorial we use 2 packages:
 
-- `steem` - steem-python library and interaction with Blockchain
+- `beem` - hive library and interaction with Blockchain
 - `pick` - helps select the query type interactively
 
 We import the libraries for the application.
 
 ```python
-import steembase
-import steem
 from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
 ```
 
-We require the `private active key` of the user in order for the `allow` or `disallow` to be committed to the blockchain. The values are supplied via the terminal/console before we initialise the steem class with the supplied private key included.
+We require the `private active key` of the user in order for the `allow` or `disallow` to be committed to the blockchain.  The values are supplied via the terminal/console before we initialize the beem class with the supplied private key included.
 
 ```python
-#capture user information
-username = input('Enter username: ')
-wif = input('Enter private ACTIVE key: ')
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
 
-#connect to production server with active key
-client = steem.Hive(keys=[wif])
+# connect to production server with active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
 ```
 
 #### 2. Username validation <a name="username"></a>
 
-Both the main account granting the permission and the account that permission is being granted to are first checked to make certain that they do in fact exist. We do this with the `get_account` function.
+Both the main account granting the permission and the account that permission is being granted to are first checked to make certain that they do in fact exist.  We do this with the `Account` module.
 
 ```python
-#check valid user
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
-
-#get account to authorise and check if valid
-foreign_acc = input('Please enter the account name for POSTING authorisation: ')
-if (foreign_acc == username) :
-    print('Cannot allow or disallow posting permission to your own account')
-    exit()
-foreign_userinfo = client.get_account(foreign_acc)
-if(foreign_userinfo is None) :
-    print('Oops. Looks like user ' + foreign_acc + ' doesn\'t exist on this chain!')
-    exit()
+# check valid user
+account = Account(account, blockchain_instance=client)
+
+print('Current posting authorizations: ' + str(account['posting']['account_auths']))
+
+# get account to authorise and check if valid
+foreign = input('Please enter the account name for POSTING authorization: ')
+if (foreign == account.name):
+  print('Cannot allow or disallow posting permission to your own account')
+  exit()
+
+foreign = Account(foreign, blockchain_instance=client)
 ```
 
 #### 3. Check permission status <a name="status"></a>
 
-In order to determine which function to execute (`allow` or `disallow`) we first need to check whether the requested user already has permission or not. We do this with the same variable created in the previous step. The `get_account` function has a value - `posting` - that contains an array of all the usernames that has been granted posting permission for the account being queried. We use this check to limit the options of the user as you cannot grant permission to a user that already has permission or revoke permission of a user that does not yet have permission. The information is displayed on the options list.
+In order to determine which function to execute (`allow` or `disallow`) we first need to check whether the requested user already has permission or not.  We do this with the same variable created in the previous step.  The `Account` module has a value - `posting` - that contains an array of all the usernames that has been granted posting permission for the account being queried.  We use this check to limit the options of the user as you cannot grant permission to a user that already has permission or revoke permission of a user that does not yet have permission.  The information is displayed on the options list.
 
 ```python
-#check if foreign_account already has posting auth
-_data = []
+# check if foreign account already has posting auth
 title = ''
-for i in range(len(userinfo['posting']['account_auths'])) :
-    _data.append(userinfo['posting']['account_auths'][i])
-    if (_data[i][0] == foreign_acc) :
-        title = (foreign_acc + ' already has posting permission. Please choose option from below list')
-        options = ['DISALLOW', 'CANCEL']
-
-if (title == '') :
-    title = (foreign_acc + ' does not yet posting permission. Please choose option from below list')
-    options = ['ALLOW', 'CANCEL']
+
+for auth in account['posting']['account_auths']:
+  if (auth[0] == foreign.name):
+    title = (foreign.name + ' already has posting permission. Please choose option from below list')
+    options = ['DISALLOW', 'CANCEL']
+    break
+
+if (title == ''):
+  title = (foreign.name + ' does not yet posting permission. Please choose option from below list')
+  options = ['ALLOW', 'CANCEL']
 ```
 
 #### 4. Commit to blockchain <a name="commit"></a>
 
-Based on the check in the previous step, the user is given the option to `allow`, `disallow` or `cancel` the operation completely. All the required parameters have already been assigned via console/terminal input and based on the choice of the user the relevant function can be executed. A confirmation of the succesfully executed action is displayed on the UI.
+Based on the check in the previous step, the user is given the option to `allow`, `disallow` or `cancel` the operation completely.  All the required parameters have already been assigned via console/terminal input and based on the choice of the user the relevant function can be executed.  A confirmation of the successfully executed action is displayed on the UI.
 
 ```python
 option, index = pick(options, title)
 
-if (option == 'CANCEL') :
-    print('operation cancelled')
-    exit()
-
-if (option == 'ALLOW') :
-    #allow(foreign, weight=None, permission='posting', account=None, threshold=None)
-    client.allow(foreign=foreign_acc, weight=1, permission='posting', account=username, threshold=1)
-    print(foreign_acc + ' has been granted posting permission')
-else :
-    #disallow(foreign, permission='posting', account=None, threshold=None)
-    client.disallow(foreign=foreign_acc, permission='posting', account=username, threshold=1)
-    print('posting permission for ' + foreign_acc + ' has been removed')
-```
+if (option == 'CANCEL'):
+  print('operation cancelled')
+  exit()
 
-And that's it!
+if (option == 'ALLOW'):
+  account.allow(foreign=foreign.name, weight=1, permission='posting', threshold=1)
+  print(foreign.name + ' has been granted posting permission')
+else:
+  account.disallow(foreign=foreign.name, permission='posting', threshold=1)
+  print('posting permission for ' + foreign.name + ' has been removed')
+```
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/30_grant_posting_permission`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
 
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
 
----
+For details on running a local testnet, see: [Setting Up a Testnet]({{ '/tutorials-recipes/setting-up-a-testnet.html' | relative_url }})
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/30_grant_posting_permission`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/password_key_change.md b/_tutorials-python/password_key_change.md
index 24d81a6d366d4edf51f043049fe2095e9a074e0c..905a0b655c2845b6f28d2f81f4f6ebe940ce05b4 100644
--- a/_tutorials-python/password_key_change.md
+++ b/_tutorials-python/password_key_change.md
@@ -1,61 +1,57 @@
 ---
 title: 'PY: Password Key Change'
-position: 33
+position: 34
 description: "How to change your accounts password and keys"
 layout: full
 canonical_url: password_key_change.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Password Key Change](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/33_password_key_change) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Password Key Change](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/34_password_key_change) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-34_password_key_change.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/34_password_key_change)).
 
-In this tutorial we will explain and show you how to change your account password and keys on the **Hive** blockchain using the `steem` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+In this tutorial we will explain and show you how to change your account password and keys on the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library.
 
 ## Intro
 
-The Hive python library has a built-in function to update your account details on the blockchain. We are using the `AccountUpdate` and `commit.finalizeOp` to make these changes. The `AccountUpdate` function creates the operation that we will be committing to the blockchain using the `commit.finalizeOp` function. We first get the existing keys from your account then recreate these from your new password. Once these have been created using your new password we commit them to the blockchain. The initial parameters we need to complete this operation are:
-
-1.  _account_ - The user account that we will be changing
-1.  _old_password_ - Your existing password for the account we are changing
-1.  _new_password_ - The new password we will be updating your account with
-
-**Caution:**
-This functionality does not work on the TestNet so we will be modifying the **live** blockchain.
+The beem library has a built-in function to update your account details on the blockchain.  We are using the [`Account_update`](https://beem.readthedocs.io/en/latest/beembase.operationids.html?highlight=Account_update#beembase-operationids) operation and [`TransactionBuilder`](https://beem.readthedocs.io/en/latest/beem.transactionbuilder.html#beem.transactionbuilder.TransactionBuilder) to make these changes.  We first get the existing keys from your account then recreate these from your new password. Once these have been created using your new password we commit them to the blockchain.
 
 ## Steps
 
-1.  [**App setup**](#setup) - Library install and import. Connection to production
-1.  [**User input**](#input) - Input user and limit parameters
-1.  [**Connect to the blockchain**](#connection) - Connect to the blockchain using the parameters collected from the user
-1.  [**Configure new keys**](#configure) - Setup the new json object that will have the new keys derived from your new password
-1.  [**Commit changes to blockchain**](#commit) - Commit the account update to the blockchain
+1. [**App setup**](#setup) - Library install and import. Connection to production
+1. [**User input**](#input) - Input user and limit parameters
+1. [**Connect to the blockchain**](#connection) - Connect to the blockchain using the parameters collected from the user
+1. [**Configure new keys**](#configure) - Setup the new json object that will have the new keys derived from your new password
+1. [**Commit changes to blockchain**](#commit) - Commit the account update to the blockchain
 
 #### 1. App setup <a name="setup"></a>
 
-In this tutorial we use 2 package:
+In this tutorial we use the following packages:
 
-- `steem` - steem-python library and interaction with Blockchain
-- `steembase` - library containing functions to manipulate private keys and passwords as well as commit the operation to the blockchain
+- `beem` - hive library and interaction with Blockchain
+- `json` - to dump an object as a string
 
 We import the libraries and get parameters from the user.
 
 ```python
-import steem
-import steembase
-from steembase.account import PasswordKey
-from steembase.account import PrivateKey
-from steembase import operations
+import getpass
+import json
+from beem import Hive
+from beem.account import Account
+from beemgraphenebase.account import PasswordKey, PrivateKey
+from beem.transactionbuilder import TransactionBuilder
+from beembase.operations import Account_update
 ```
 
 ### 2. User input<a name="input"></a>
 
-You will first be asked for the account that we will be modifying the password for. You will then be prompted to enter your existing password as well as your new password that we will update your account with.
+You will first be asked for the account that we will be modifying the password for.  You will then be prompted to enter your existing password as well as your new password that we will update your account with.
 
 ```python
 account = input('Account: ')
-old_password = input('Current password: ')
-new_password = input('New password: ')
+old_password = getpass.getpass('Current password: ')
+new_password = getpass.getpass('New password: ')
+
+if getpass.getpass('Confirm New password: ') != new_password:
+  print('New password did not confirm.')
+  exit()
 ```
 
 ### 3. Connect to the blockchain<a name="connection"></a>
@@ -63,49 +59,51 @@ new_password = input('New password: ')
 From the parameters that have been collected we will generate the private key for the account and connect to the **Hive** blockchain. 
 
 ```python
-old_owner_key = str(
-    PasswordKey(account, old_password, "owner").get_private_key()
+wif_old_owner_key = str(
+  PasswordKey(account, old_password, "owner").get_private_key()
 )
 
-client = steem.Hive(keys=[old_owner_key])
+client = Hive('http://127.0.0.1:8091', keys=[wif_old_owner_key])
+
+account = Account(account, blockchain_instance=client)
 ```
 
 ### 4. Configure new keys<a name="configure"></a>
 
-We will now generate new keys for each role using the new password as well as create the json that will be committed to the **Hive** blockchain. We generate new keys using the new password for each of these roles.
+We will now generate new keys for each role using the new password as well as re-create the json that will be committed to the **Hive** blockchain.  We generate new keys using the new password for each of these roles.
 
 ```python
 new_public_keys = {}
 
 for role in ["owner", "active", "posting", "memo"]:
-    private_key = PasswordKey(account, new_password, role).get_private_key()
-    new_public_keys[role] = str(private_key.pubkey)
+  private_key = PasswordKey(account.name, new_password, role).get_private_key()
+  new_public_keys[role] = str(private_key.pubkey)
 
 new_data = {
-    "account": account,
-    "json_metadata": {},
-    "owner": {
-        "key_auths": [
-            [new_public_keys["owner"], 1]
-        ],
-        "account_auths": [],
-        "weight_threshold": 1
-    },
-    "active": {
-        "key_auths": [
-            [new_public_keys["active"], 1]
-        ],
-        "account_auths": [],
-        "weight_threshold": 1
-    },
-    "posting": {
-        "key_auths": [
-            [new_public_keys["posting"], 1]
-        ],
-        "account_auths": [],
-        "weight_threshold": 1
-    },
-    "memo_key": new_public_keys["memo"]
+  "account": account.name,
+  "json_metadata": json.dumps(account.json_metadata),
+  "owner": {
+    "key_auths": [
+      [new_public_keys["owner"], 1]
+    ],
+    "account_auths": account['owner']['account_auths'],
+    "weight_threshold": 1
+  },
+  "active": {
+    "key_auths": [
+      [new_public_keys["active"], 1]
+    ],
+    "account_auths": account['active']['account_auths'],
+    "weight_threshold": 1
+  },
+  "posting": {
+    "key_auths": [
+      [new_public_keys["posting"], 1]
+    ],
+    "account_auths": account['posting']['account_auths'],
+    "weight_threshold": 1
+  },
+  "memo_key": new_public_keys["memo"]
 }
 
 print("New data:")
@@ -114,16 +112,17 @@ print(new_data)
 
 #### 5. Commit changes to blockchain <a name="commit"></a>
 
-The `operations.AccountUpdate(**new_data)` creates the operation that will be committed to the blockchain using the new json object we have created.
-
-Once we commit the changes to the blockchain using `client.commit.finalizeOp` the changes are committed and the password is updated.
+The `tx.appendOps(Account_update(**new_data))` call creates the operation that will be committed to the blockchain using the new json object we have created.
 
 ```python
-op = operations.AccountUpdate(**new_data)
+tx = TransactionBuilder(blockchain_instance=client)
+tx.appendOps(Account_update(**new_data))
+
+tx.appendWif(wif_old_owner_key)
+signed_tx = tx.sign()
+broadcast_tx = tx.broadcast(trx_id=True)
 
-result = client.commit.finalizeOp(op, account, "owner")
-print("Result:")
-print(result)
+print("Account updated successfully: " + str(broadcast_tx))
 ```
 
 If you update your password and attempt to update it again to quickly you will receive the following error.
@@ -134,16 +133,19 @@ Assert Exception:_db.head_block_time() - account_auth.last_owner_update > HIVE_O
 
 You will need to wait at least an hour before attempting this again.
 
-That's it!
-
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/33_password_key_change`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
 
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
 
----
+For details on running a local testnet, see: [Setting Up a Testnet]({{ '/tutorials-recipes/setting-up-a-testnet.html' | relative_url }})
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/34_password_key_change`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/power_down.md b/_tutorials-python/power_down.md
index b4826bd8767f12a9af20a43628cb42a265f87706..8be634ae733b750573fcb6e6b949297c3f725775 100644
--- a/_tutorials-python/power_down.md
+++ b/_tutorials-python/power_down.md
@@ -4,137 +4,155 @@ position: 25
 description: "How to power down (withdraw) your vesting shares using Python."
 layout: full
 canonical_url: power_down.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Power Down](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/25_power_down) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Power Down](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/25_power_down) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-25_power_down.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/25_power_down)).
 
-In this tutorial we will explain and show you how to power down some or all of your available vesting shares (HIVE POWER) on the **Hive** blockchain using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+In this tutorial we will explain and show you how to power down some or all of your available [HIVE Power <i class="fas fa-search fa-xs" />]({{ '/search?q=HIVE+Power' | relative_url }}) on the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library.
 
 ## Intro
 
-The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `withdraw_vesting` method found within the `commit` class in the library. When you power down, the converted VESTS (HIVE POWER) will not be available as HIVE immediately. It is converted in 13 equal parts and transferred into your HIVE wallet weekly, the first portion only being available a week after the power down was initiated. Before we do the conversion, we check the current balance of the account to check how much HIVE POWER is available. This is not strictly necessary as the process will automatically abort with the corresponding error, but it does give some insight into the process as a whole. We use the `get_account` function to check for this. The `withdraw_vesting` method has 2 parameters:
-
-1.  _amount_ - The amount of VESTS that will be withdrawn. This must be of the `float` data type
-1.  _account_ - The specified user account for the transfer
+The beem library has a built-in function to transmit transactions to the blockchain.  We are using the [`withdraw_vesting`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.withdraw_vesting) method found within the account instance.  When you power down, the converted VESTS (HIVE Power) will not be available as HIVE immediately.  It is converted in 13 equal parts and transferred into your HIVE wallet weekly, the first portion only being available a week after the power down was initiated.  Before we do the conversion, we check the current balance of the account to check how much HIVE Power is available.  This is not strictly necessary as the process will automatically abort with the corresponding error, but it does give some insight into the process as a whole. We use the [`Account`](https://beem.readthedocs.io/en/latest/beem.account.html) module to check for this.
 
 ## Steps
 
-1.  [**App setup**](#setup) - Library install and import. Connection to testnet
-1.  [**User information and steem node**](#userinfo) - Input user information and connection to Hive node
-1.  [**Check balance**](#balance) - Check current vesting balance of user account
-1.  [**Conversion amount and commit**](#convert) - Input of VESTS amount to convert and commit to blockchain
+1. [**App setup**](#setup) - Library install and import. Connection to testnet
+1. [**User information and Hive node**](#userinfo) - Input user information and connection to Hive node
+1. [**Check balance**](#balance) - Check current vesting balance of user account
+1. [**Conversion amount and commit**](#convert) - Input of VESTS amount to convert and commit to blockchain
 
 #### 1. App setup <a name="setup"></a>
 
 In this tutorial we use 2 packages:
 
-- `steem` - steem-python library and interaction with Blockchain
+- `beem` - hive library and interaction with Blockchain
 - `pick` - helps select the query type interactively
 
 We import the libraries and connect to the `testnet`.
 
 ```python
-import steembase
-import steem
+import pprint
 from pick import pick
-from steem.amount import Amount
-
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
+import getpass
+from beem import Hive
+from beem.account import Account
+from beem.amount import Amount
 ```
 
 Because this tutorial alters the blockchain we connect to the testnet so we don't create spam on the production server.
 
-#### 2. User information and steem node <a name="userinfo"></a>
+#### 2. User information and Hive node <a name="userinfo"></a>
 
-We require the `private active key` of the user in order for the conversion to be committed to the blockchain. This is why we have to specify this alongside the `testnet` node. The values are supplied via the terminal/console before we initialise the steem class. There is a demo account available to use with this tutorial but any account that is set up on the testnet can be used.
+We require the `private active key` of the user in order for the conversion to be committed to the blockchain.  This is why we have to specify this alongside the `testnet` node.  The values are supplied via the terminal/console before we initialize the beem class.
 
 ```python
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private ACTIVE key: ') #demo account: 5KaNM84WWSqzwKzY82fXPaUW43idbLnPqf5SfjGxLfw6eV2kAP3
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
 
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
 ```
 
 #### 3. Check balance <a name="balance"></a>
 
-In order to give the user enough information to make the conversion we check the current balance of the account using the `get_account` function.
+In order to give the user enough information to make the conversion we check the current balance of the account using the `Account` module.
 
 ```python
-#get account balance for vesting shares
-userinfo = client.get_account(username)
-delegated_vests = userinfo['delegated_vesting_shares']
-vesting_shares = userinfo['vesting_shares']
-to_withdraw = float(userinfo['to_withdraw'])
-withdrawn = float(userinfo['withdrawn'])
+# get account balance for vesting shares
+account = Account(account, blockchain_instance=client)
+balance = account['balance']
+symbol = balance.symbol
+
+# we need high precision because VESTS
+denom = 1e6
+delegated_vests = account['delegated_vesting_shares']
+vesting_shares = account['vesting_shares']
+vesting_symbol = vesting_shares.symbol
+to_withdraw_vests = float(account['to_withdraw']) / denom
+withdrawn_vests = float(account['withdrawn']) / denom
+```
 
-available_vests = (Amount(vesting_shares).amount - Amount(delegated_vests).amount - 
-     ((to_withdraw - withdrawn)/1000000))
+Here, we are gathering the current account details.
 
-print('VESTS currently powering down: ' + str(to_withdraw/1000000) + ' VESTS' +
-    '\n' + 'Available VESTS: ' + str(available_vests) + ' VESTS')
+```python
+dgpo = client.get_dynamic_global_properties()
+total_vesting_fund_hive = Amount(dgpo['total_vesting_fund_hive']).amount
+total_vesting_shares_mvest = Amount(dgpo['total_vesting_shares']).amount / denom
+base_per_mvest = total_vesting_fund_hive / total_vesting_shares_mvest
+```
+
+This block will help us convert VESTS to HIVE Power for display purposes.  Best practice is to always allow the end-user to work with HIVE Power, not raw VESTS.
+
+```python
+available_vests = (vesting_shares.amount - delegated_vests.amount - ((to_withdraw_vests - withdrawn_vests)))
+available_base = (available_vests / denom) * base_per_mvest
+powering_down = ((to_withdraw_vests - withdrawn_vests) / denom) * base_per_mvest
+```
+
+The available vesting shares to withdraw is not directly available from the user information and needs to be calculated.  In order to find the total VESTS available to power down we need to know how much is currently in power down, how much has been delegated and then the total amount of vesting shares.  The values are assigned from the query directly as `float` type to make the calculations a little simpler.  
+
+```python
+print(symbol + ' Power currently powering down: ' + format(powering_down, '.3f') + ' ' + symbol +
+  '\n' + 'Available ' + symbol + ' Power: ' + format(available_base, '.3f') + ' ' + symbol)
 
 input('\n' + 'Press enter to continue' + '\n')
 ```
 
-The available vesting shares to withdraw is not directly available from the user information and needs to be calculated. In order to find the total VESTS available to power down we need to know how much is currently in power down, how much has been delegated and then the total amount of vesting shares. The values are assigned from the query directly as `float` type to make the calculations a little simpler. The results of the query and calculation are converted to `string` type and displayed in the console/terminal.
+The results of the query and calculation are converted to `string` type and displayed in the console/terminal.
 
 #### 4. Conversion amount and commit <a name="convert"></a>
 
 The user is given the option to withdraw all available vesting shares, a portion of the shares or to cancel the transaction completely.
 
 ```python
-#choice of transfer
+# choice of transfer
 title = 'Please choose an option: '
 options = ['Power down ALL', 'Power down PORTION', 'Cancel Transaction']
+# get index and selected transfer type
 option, index = pick(options, title)
 ```
 
-Based on the input from the user the `amount` variable can be assigned and the transaction committed to the blockchain. The amount must be between zero and the total amount of vesting shares (both pending conversion and available VESTS combined). **The amount you set to be withdrawn will override the current amount of vesting shares pending withdrawal.** If for example the user enters a new amount of '0' shares to be withdrawn, it will cancel the current withdrawal completely.
+Based on the input from the user the `amount` variable can be assigned and the transaction is broadcasted to the blockchain.  The amount must be between zero and the total amount of vesting shares (both pending conversion and available VESTS combined).  **The amount you set to be withdrawn will override the current amount of vesting shares pending withdrawal.**  If for example the user enters a new amount of `'0'` shares to be withdrawn, it will cancel the current withdrawal completely.
+
+Note that if the user decides to power down only a portion, we capture the amount they intend to power down as HIVE Power, then convert that amount to VESTS behind the scenes, in keeping with the principle of only interacting with the end user in terms of HIVE Power, which is the recommended best practice.
 
 ```python
-#parameters: amount, account
-if (option == 'Cancel Transaction') :
-    print('transaction cancelled')
+# parameters: amount, account
+if (option == 'Cancel Transaction'):
+  print('transaction cancelled')
+  exit()
+
+if (option == 'Power down ALL'):
+  if (available_vests == 0):
+    print('No change to withdraw amount')
     exit()
-else :
-    if (option == 'Power down ALL') :
-        if (available_vests == 0) :
-            print('No change to withdraw amount')
-        else :
-            amount = to_withdraw/1000000 + available_vests
-            client.withdraw_vesting(amount, username)
-            print(str(amount) + ' VESTS now powering down')
-    else :
-        amount = float(input('Please enter the amount of VESTS you would like to power down: '))
-        if (amount < (to_withdraw/1000000 + available_vests)) :
-            client.withdraw_vesting(amount, username)
-            print(str(amount) + ' VESTS now powering down')
-        else :
-            if (amount == to_withdraw/1000000) :
-                print('No change to withdraw amount')
-            else :
-                print('insufficient funds available')
+  amount_vests = to_withdraw_vests + available_vests
+  amount = (amount_vests / denom) * base_per_mvest
+else:
+  amount = float(input('Please enter the amount of ' + symbol + ' you would like to power down: ') or '0')
+  amount_vests = (amount * denom) / base_per_mvest
+
+if (amount_vests <= (to_withdraw_vests + available_vests)):
+  account.withdraw_vesting(amount_vests)
+  print(format(amount, '.3f') + ' ' + symbol + ' (' + format(amount_vests, '.6f') + ' ' + vesting_symbol + ') now powering down')
+  exit()
+
+if (amount_vests == to_withdraw_vests):
+  print('No change to withdraw amount')
+  exit()
+
+print('Insufficient funds available')
 ```
 
 The result is displayed on the console/terminal.
 
-We encourage users to play around with different values and data types to fully understand how this process works. You can also check the balances and transaction history on the [testnet portal](http://condenser.steem.vc/).
+We encourage users to play around with different values and data types to fully understand how this process works. You can also check the balances and transaction history on the [testnet portal](http://testnet-condenser.hive.blog/).
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/25_power_down`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
-
-
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/25_power_down`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/power_up_hive.md b/_tutorials-python/power_up_hive.md
new file mode 100644
index 0000000000000000000000000000000000000000..8595135065bce97569a462ab57460d3067051db3
--- /dev/null
+++ b/_tutorials-python/power_up_hive.md
@@ -0,0 +1,141 @@
+---
+title: 'PY: Power Up Hive'
+position: 24
+description: "How to power up your HIVE to HIVE Power using Python."
+layout: full
+canonical_url: power_up_hive.html
+---
+Full, runnable src of [Power Up Hive](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/24_power_up_hive) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-24_power_up_hive.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/24_power_up_hive)).
+
+In this tutorial we show you how to check the HIVE balance of an account on the **Hive** blockchain and how to power up your HIVE into [HIVE Power <i class="fas fa-search fa-xs" />]({{ '/search?q=HIVE+Power' | relative_url }}) using the `commit` class found within the [beem](https://github.com/holgern/beem) library.
+
+## Intro
+
+The beem library has a built-in function to transmit transactions to the blockchain.  We are using the [`transfer_to_vesting`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.transfer_to_vesting) method found within the account instance.  When you power up you convert your HIVE into HIVE Power to increase your influence on Hive.  Before we do the conversion, we use the [`Account`](https://beem.readthedocs.io/en/latest/beem.account.html) function to check the current HIVE balance of the account to see what is available to power up. This is not strictly necessary but adds to the usability of the process. The `transfer_to_vesting` method has 2 parameters:
+
+1. _amount_ - The amount of HIVE to power up. This must be of the `float` data type
+1. _to_ - The account to where the HIVE will be powered up
+
+## Steps
+
+1. [**App setup**](#setup) - Library install and import. Connection to testnet
+1. [**User information and Hive node**](#userinfo) - Input user information and connection to Hive node
+1. [**Check balance**](#balance) - Check current vesting balance of user account
+1. [**Conversion amount**](#convert) - Input power up amount and check valid transfer
+1. [**Commit to blockchain**](#commit) - Commit transaction to blockchain
+
+#### 1. App setup <a name="setup"></a>
+
+In this tutorial we use 2 packages:
+
+- `beem` - hive library and interaction with Blockchain
+- `pick` - helps select the query type interactively
+
+We import the libraries and connect to the `testnet`.
+
+```python
+import pprint
+from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
+```
+
+Because this tutorial alters the blockchain we connect to a testnet so we don't create spam on the production server.
+
+#### 2. User information and Hive node <a name="userinfo"></a>
+
+We require the `private active key` of the user in order for the conversion to be committed to the blockchain.  This is why we are using a testnet.  The values are supplied via the terminal/console before we initialize the beem class.
+
+```python
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
+
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
+```
+
+#### 3. Check balance <a name="balance"></a>
+
+In order to give the user enough information to make the conversion we check the current balance of the account using the `Account` instance.
+
+```python
+# check valid user and get account balance
+account = Account(account, blockchain_instance=client)
+balance = account['balance']
+symbol = balance.symbol
+
+print('Available balance: ' + str(balance) + '\n')
+
+input('Press any key to continue')
+```
+
+The results of the query are displayed in the console/terminal.
+
+#### 4. Conversion amount <a name="convert"></a>
+
+Both the `amount` and the `to` parameters are assigned via input from the terminal/console.  The user is given the option to power up the HIVE to their own account or to another user's account.  The amount has to be greater than zero and no more than the total available HIVE of the user.
+
+```python
+# choice of account
+title = 'Please choose an option for an account to power up: '
+options = ['SELF', 'OTHER']
+# get index and selected transfer type
+option, index = pick(options, title)
+
+if (option == 'OTHER') :
+  # account to power up to
+  to_account = input('Please enter the ACCOUNT to where the ' + symbol + ' will be powered up: ')
+  to_account = Account(to_account, blockchain_instance=client)
+else :
+  print('\n' + 'Power up ' + symbol + ' to own account' + '\n')
+  to_account = account
+
+# amount to power up
+amount = float(input('Please enter the amount of ' + symbol + ' to power up: ') or '0')
+```
+
+#### 5. Commit to blockchain <a name="commit"></a>
+
+Now that all the parameters have been assigned we can continue with the actual transmission to the blockchain.  The output and commit is based on the validity of the amount that has been input.
+
+```python
+# parameters: amount, to, account
+if (amount == 0) :
+  print('\n' + 'No ' + symbol + ' entered for powering up')
+  exit()
+
+if (amount > balance) :
+  print('\n' + 'Insufficient funds available')
+  exit()
+
+account.transfer_to_vesting(amount, to_account.name)
+print('\n' + str(amount) + ' ' + symbol + ' has been powered up successfully to ' + to_account.name)
+```
+
+The result of the power up transfer is displayed on the console/terminal.
+
+As an added check we also display the new HIVE balance of the user on the terminal/console.
+
+```python
+# get new account balance
+account.refresh()
+balance = account['balance']
+print('New balance: ' + str(balance))
+```
+
+### To Run the tutorial
+
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
+
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/24_power_up_hive`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/power_up_steem.md b/_tutorials-python/power_up_steem.md
deleted file mode 100644
index 7e1e355e7b8c2afa633ef557a6691fa7ca94542a..0000000000000000000000000000000000000000
--- a/_tutorials-python/power_up_steem.md
+++ /dev/null
@@ -1,153 +0,0 @@
----
-title: 'PY: Power Up Hive'
-position: 24
-description: "How to power up your HIVE to HIVE POWER using Python."
-layout: full
-canonical_url: power_up_hive.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Power Up Hive](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/24_power_up_hive) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
-
-In this tutorial we show you how to check the HIVE balance of an account on the **Hive** blockchain and how to power up your HIVE into HIVE POWER using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
-
-## Intro
-
-The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `transfer_to_vesting` method found within the `commit` class in the library. When you power up you convert your HIVE into HIVE POWER to increase your influence on Hive. Before we do the conversion, we use the `get_account` function to check the current HIVE balance of the account to see what is available to power up. This is not strictly necessary but adds to the useability of the process. The `transfer_to_vesting` method has 3 parameters:
-
-1.  _amount_ - The amount of HIVE to power up. This must be of the `float` data type
-1.  _to_ - The account to where the HIVE will be powered up
-1.  _account_ - The source user account for the transfer
-
-## Steps
-
-1.  [**App setup**](#setup) - Library install and import. Connection to testnet
-1.  [**User information and steem node**](#userinfo) - Input user information and connection to Hive node
-1.  [**Check balance**](#balance) - Check current vesting balance of user account
-1.  [**Conversion amount**](#convert) - Input power up amount and check valid transfer
-1.  [**Commit to blockchain**](#commit) - Commit transaction to blockchain
-
-#### 1. App setup <a name="setup"></a>
-
-In this tutorial we use 2 packages:
-
-- `steem` - steem-python library and interaction with Blockchain
-- `pick` - helps select the query type interactively
-
-We import the libraries and connect to the `testnet`.
-
-```python
-import steembase
-import steem
-from steem.amount import Amount
-from pick import pick
-
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
-```
-
-Because this tutorial alters the blockchain we connect to a testnet so we don't create spam on the production server.
-
-#### 2. User information and steem node <a name="userinfo"></a>
-
-We require the `private active key` of the user in order for the conversion to be committed to the blockchain. This is why we are using a testnet. The values are supplied via the terminal/console before we initialise the steem class. There are some demo accounts available but we encourage you to create your own accounts on this testnet and create balances you can claim; it's good practice.
-
-```python
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private ACTIVE key: ') #demo account: 5KaNM84WWSqzwKzY82fXPaUW43idbLnPqf5SfjGxLfw6eV2kAP3
-
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
-```
-
-#### 3. Check balance <a name="balance"></a>
-
-In order to give the user enough information to make the conversion we check the current balance of the account using the `get_account` function.
-
-```python
-#check valid user and get account balance
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
-balance = userinfo['balance']
-
-print('Available HIVE balance: ' + balance + '\n')
-
-input('Press any key to continue')
-```
-
-The results of the query are displayed in the console/terminal.
-
-#### 4. Conversion amount <a name="convert"></a>
-
-Both the `amount` and the `to` parameters are assigned via input from the terminal/console. The user is given the option to power up the HIVE to their own account or to another user's account. The amount has to be greater than zero and no more than the total available HIVE of the user. If you are using one of Hive's demo accounts, please leave some HIVE for others to power up! We also check the `to account` to make sure it's a valid account name.
-
-```python
-#choice of account
-title = 'Please choose an option for an account to transfer to: '
-options = ['SELF', 'OTHER']
-option, index = pick(options, title)
-
-if (option == 'OTHER') :
-    #account to power up to
-    to_account = input('Please enter the ACCOUNT to where the HIVE will be transferred: ')
-    #check valid username
-    result = client.get_account(to_account)
-    if (not result) :
-        print(to_account + ' doesn\'t exist on this chain!')
-        exit()
-else :
-    print('\n' + 'Power up HIVE to own account' + '\n')
-    to_account = username
-
-#amount to power up
-amount = float(input('Please enter the amount of HIVE to power up: '))
-```
-
-#### 5. Commit to blockchain <a name="commit"></a>
-
-Now that all the parameters have been assigned we can continue with the actual transmission to the blockchain. The output and commit is based on the validity of the amount that has been input.
-
-```python
-#parameters: amount, to, account
-if (amount == 0) :
-    print('\n' + 'No HIVE entered for powering up')
-    exit()
-else :
-    if (amount > Amount(balance).amount) :
-        print('\n' + 'Insufficient funds available')
-        exit()
-    else :
-        client.transfer_to_vesting(amount, to_account, username)
-        print('\n' + str(amount) + ' HIVE has been powered up successfully')
-```
-
-The result of the power up transfer is displayed on the console/terminal.
-
-As an added check we also display the new HIVE balance of the user on the terminal/console
-
-```python
-#get new account balance
-userinfo = client.get_account(username)
-balance = userinfo['balance']
-print('New HIVE balance: ' + balance)
-```
-
-We encourage users to play around with different values and data types to fully understand how this process works. You can also check the balances and transaction history on the [testnet portal](http://condenser.steem.vc/).
-
-### To Run the tutorial
-
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/24_power_up_hive`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
-
-
----
diff --git a/_tutorials-python/reblogging_post.md b/_tutorials-python/reblogging_post.md
index 3dbad0b897d8ba299b290da2f379912473b5fb9a..6b20836da2ed1e4583d2026eb7e1eb0df6e2b16e 100644
--- a/_tutorials-python/reblogging_post.md
+++ b/_tutorials-python/reblogging_post.md
@@ -1,61 +1,61 @@
 ---
 title: 'PY: Reblogging Post'
 position: 14
-description: "We will show how to reblog or resteem post using Python, with username and posting private key."
+description: "We will show how to reblog or reblog post using Python, with username and posting private key."
 layout: full
 canonical_url: reblogging_post.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Reblogging Post](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/14_reblogging_post) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Reblogging Post](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/14_reblogging_post) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-14_reblogging_post.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/14_reblogging_post)).
 
-Tutorial will also explain and show you how to sign/broadcast transaction on **Hive** blockchain using the [steem-python](https://github.com/steemit/steem-python) library.
+Tutorial will also explain and show you how to sign/broadcast transaction on **Hive** blockchain using the [beem](https://github.com/holgern/beem) library.
 
 ## Intro
 
-Hive python library has built-in function to commit transaction and broadcast it to the network. 
+Beem has built-in functionality to commit transaction and broadcast it to the network. 
 
 ## Steps
 
-1.  [**App setup**](#app-setup) - Library install and import
-1.  [**Post list**](#post-list) - List of posts to select from trending filter 
-1.  [**Enter user credentials**](#credentials-list) - Enter user credentails to sign transaction
+1. [**App setup**](#app-setup) - Library install and import
+1. [**Post list**](#post-list) - List of posts to select from trending filter 
+1. [**Enter user credentials**](#credentials-list) - Enter user credentails to sign transaction
 
 #### 1. App setup <a name="app-setup"></a>
 
-In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `steem` - steem-python library, interaction with Blockchain. `pprint` - print results in better format.
+In this tutorial we use 3 packages, `pick` - helps us to select filter interactively. `beem` - hive library, interaction with Blockchain. `pprint` - print results in better format.
 
-First we import all three library and initialize Hive class
+First we import all three library and initialize Hive class:
 
 ```python
-    import pprint
-    from pick import pick
-    # initialize Hive class
-    from steem import Hive
-
-    s = Hive()
+import pprint
+from pick import pick
+import getpass
+import json
+# initialize Hive class
+from beem import Hive
+from beem.discussions import Query, Discussions
+from beem.comment import Comment
+from beem.transactionbuilder import TransactionBuilder
+from beembase.operations import Custom_json
+
+hive = Hive(['http://127.0.0.1:8091'])
 ```
 
 #### 2. Post list <a name="post-list"></a>
 
-
 Next we will fetch and make list of accounts and setup `pick` properly.
 
 ```python
-    query = {
-      "limit":5, #number of posts
-      "tag":"" #tag of posts
-    }
-    # post list from trending post list
-    posts = s.get_discussions_by_trending(query)
-
-    title = 'Please choose post to reblog: '
-    options = []
-    # post list
-    for post in posts:
-      options.append('@'+post["author"]+'/'+post["permlink"])
+q = Query(limit=5, tag="")
+d = Discussions()
+
+#author list from hot post list
+posts = d.get_discussions('hot', q, limit=5)
 
+title = 'Please choose post to reblog: '
+options = []
+# post list
+for post in posts:
+  options.append('@' + post["author"] + '/' + post["permlink"])
 ```
 
 This will show us list of posts to select in terminal/command prompt. And after selection we will get formatted post as an `option` variable.
@@ -65,32 +65,49 @@ This will show us list of posts to select in terminal/command prompt. And after
 Next in order to sign transaction, application asks for username and posting private key to sign transaction and broadcast it.
 
 ```python
-  # get index and selected post
-  option, index = pick(options, title)
-  pprint.pprint("You selected: "+option)
-
-  account = input("Enter your username? ")
-  wif = input("Enter your Posting private key? ")
-
-  # commit or build transaction
-  c = Commit(steem=Hive(keys=[wif]))
-
-  # broadcast transaction
-  c.resteem(option, account=account)
-
+# get index and selected post
+option, index = pick(options, title)
+pprint.pprint("You selected: " + option)
+
+comment = Comment(option, blockchain_instance=hive)
+
+account = input("Enter your username? ")
+
+tx = TransactionBuilder(blockchain_instance=hive)
+tx.appendOps(Custom_json(**{
+  'required_auths': [],
+  'required_posting_auths': [account],
+  'id': 'reblog',
+  'json': json.dumps(['reblog', {
+    'account': account,
+    'author': comment.author,
+    'permlink': comment.permlink
+  }])
+}))
+
+wif_posting_key = getpass.getpass('Posting Key: ')
+tx.appendWif(wif_posting_key)
+signed_tx = tx.sign()
+broadcast_tx = tx.broadcast(trx_id=True)
+
+print("Reblogged successfully: " + str(broadcast_tx))
 ```
 
-
-That's it, if transaction is successful you shouldn't see any error messages, otherwise you will be notified.
+If transaction is successful you shouldn't see any error messages, otherwise you will be notified.
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/14_reblogging_post`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see output in terminal/command prompt screen.
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
 
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
 
----
+For details on running a local testnet, see: [Setting Up a Testnet]({{ '/tutorials-recipes/setting-up-a-testnet.html' | relative_url }})
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/14_reblogging_post`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see output in terminal/command prompt screen.
diff --git a/_tutorials-python/search_accounts.md b/_tutorials-python/search_accounts.md
index eac5ebb815922aa2fc8c9a9219fbfb5b7fe643bb..a9064ffb93e7066ab221672adf24a78fdaf696b1 100644
--- a/_tutorials-python/search_accounts.md
+++ b/_tutorials-python/search_accounts.md
@@ -4,40 +4,40 @@ position: 15
 description: "How to pull a list of the active user accounts or trending tags from the blockchain using Python."
 layout: full
 canonical_url: search_accounts.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Search Accounts](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/15_search_accounts) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Search Accounts](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/15_search_accounts) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-15_search_accounts.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/15_search_accounts)).
 
-This tutorial will explain and show you how to access the **Hive** blockchain using the [steem-python](https://github.com/steemit/steem-python) library to fetch a list of active authors or trending tags, starting the search from a specified value, and displaying the results on the console.
+This tutorial will explain and show you how to access the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library to fetch a list of active authors or trending tags, starting the search from a specified value, and displaying the results on the console.
 
 ## Intro
 
-We are using the `lookup_accounts` and `get_trending_tags` functions that are built-in in the official library `steem-python`. These functions allow us to query the Hive blockchain in order to retrieve either a list of active authors or a list of trending tags. The option is available to either get a complete list starting from the first value on the blockchain or starting the list from any other closest match string value as provided by the user. Both of these functions have only two parameters:
+We are using the `get_all_accounts` and `Trending_tags` functions that are built-in in the beem library.  These functions allow us to query the Hive blockchain in order to retrieve either a list of active authors or a list of trending tags.  The option is available to either get a complete list starting from the first value on the blockchain or starting the list from any other closest match string value as provided by the user.  Both of these functions have only two parameters:
 
 1.  _account/aftertag_ - The string value from where to start the search. If this value is left empty the search will start from the first value available
 1.  _limit_ - The maximum number of names/tags that the query retrieves
 
 ## Steps
 
-1.  [**App setup**](#setup) - Library import and Hive class initialisation
-1.  [**List selection**](#list) - Selection of the type of list
-1.  [**Get and display account names**](#accounts) - Get a list of account names from the blockchain
-1.  [**Get and display trending tags**](#tags) - Get a list of trending tags from the blockchain
+1. [**App setup**](#setup) - Library import and Hive class initialization
+1. [**List selection**](#list) - Selection of the type of list
+1. [**Get and display account names**](#accounts) - Get a list of account names from the blockchain
+1. [**Get and display trending tags**](#tags) - Get a list of trending tags from the blockchain
 
 #### 1. App setup<a name="setup"></a>
 
-In this tutorial we use 2 packages, `pick` - helps us to select the query type interactively. `steem` - steem-python library for interaction with the Blockchain.
+In this tutorial we use 2 packages, `pick` - helps us to select the query type interactively. `beem` - hive library for interaction with the Blockchain.
 
-First we import both libraries and initialize Hive class
+First we import both libraries and initialize Hive class:
 
 ```python
-from steem import Hive
+from beem import Hive
 from pick import pick
+from beem.blockchain import Blockchain
+from beem.discussions import Query, Trending_tags
 
+# initialize Hive class
 
-s = Hive()
+h = Hive()
 ```
 
 #### 2. List selection<a name="list"></a>
@@ -45,11 +45,11 @@ s = Hive()
 The user is given the option of which list to create, `active accounts` or `trending tags`. We create this option list and setup `pick`.
 
 ```python
-#choose list type
+# choose list type
 title = 'Please select type of list:'
 options = ['Active Account names', 'Trending tags']
 
-#get index and selected list name
+# get index and selected list name
 option, index = pick(options, title)
 ```
 
@@ -57,17 +57,19 @@ This will show the two options as a list to select in terminal/command prompt. F
 
 #### 3. Get and display account names<a name="accounts"></a>
 
-Once the user selects the required list, a simple `if` statement is used to execute the relevant function. Based on the selection we then run the query. The parameters for the `lookup_accounts` function is captured in the `if` statement via the terminal/console.
+Once the user selects the required list, a simple `if` statement is used to execute the relevant function. Based on the selection we then run the query. The parameters for the `get_all_accounts` function is captured in the `if` statement via the terminal/console.
 
 ```python
-if option=='Active Account names' :
-	#capture starting account
-	account = input("Enter account name to start search from: ")
-	#input list limit
-	limit = input("Enter max number of accounts to display: ")
-	lists = s.lookup_accounts(account, limit)
-	print('\n' + "List of " + option + '\n')
-	print(*lists, sep='\n')
+if option == 'Active Account names':
+  context = Blockchain(blockchain_instance=h)
+  # capture starting account
+  account = input("Enter account name to start search from: ")
+  # input list limit
+  limit = input("Enter max number of accounts to display: ")
+  print('\n' + "List of " + option + '\n')
+  accounts = []
+  for a in context.get_all_accounts(start=account, limit=int(limit)):
+    print(a)
 ```
 
 Once the list is generated it is displayed on the UI with line separators along with a heading of what list it is.
@@ -77,15 +79,15 @@ Once the list is generated it is displayed on the UI with line separators along
 The query for a list of trending tags is executed in the second part of the `if` statement. Again, the parameters for the query is captured via the terminal/console.
 
 ```python
-else :
-	#capture starting tag
-	aftertag = input("Enter tag name to start search from: ")
-	#capture list limit
-	limit = input("Enter max number of tags to display: ")
-	lists = s.get_trending_tags(aftertag, limit)
-	print('\n' + "List of " + option + '\n')
-	for names in lists :
-		print(names["name"])
+else:
+  # capture starting tag
+  aftertag = input("Enter tag name to start search from: ")
+  # capture list limit
+  limit = input("Enter max number of tags to display: ")
+  print('\n' + "List of " + option + '\n')
+  q = Query(limit=int(limit), start_tag=aftertag)
+  for t in Trending_tags(q):
+    print(t['name'])
 ```
 
 The query returns an array of objects. We use the `for` loop to build a list of only the tag `names` from that array and then display the list on the UI with line separators. This creates an easy to read list of tags.
@@ -94,12 +96,9 @@ That's it!.
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/15_search_accounts`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see output in terminal/command prompt screen.
-
-
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/15_search_accounts`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see output in terminal/command prompt screen.
diff --git a/_tutorials-python/search_tags.md b/_tutorials-python/search_tags.md
index 42c65172156d12eb84975503e2b5f9b55a9eca96..a3d75e0631ec8a648349386da51012eae49f4cb7 100644
--- a/_tutorials-python/search_tags.md
+++ b/_tutorials-python/search_tags.md
@@ -4,11 +4,8 @@ position: 16
 description: "How to pull a list of the trending tags from the blockchain using Python."
 layout: full
 canonical_url: search_tags.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Search Tags](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/16_search_tags) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Search Tags](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/16_search_tags) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-16_search_tags.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/16_search_tags)).
 
 Please refer to [15_search_accounts](search_accounts.html) which includes a tutorial for `trending tags` as well.
 
diff --git a/_tutorials-python/stream_blockchain_transactions.md b/_tutorials-python/stream_blockchain_transactions.md
index af07aa0e8521d59dfb7134091b2d09bd0b9d27df..882f3d6c85a9a2f9a17119cda79198ec23663a48 100644
--- a/_tutorials-python/stream_blockchain_transactions.md
+++ b/_tutorials-python/stream_blockchain_transactions.md
@@ -4,36 +4,35 @@ position: 13
 description: "How to stream transactions on the live **Hive** blockchain"
 layout: full
 canonical_url: stream_blockchain_transactions.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Stream Blockchain Transactions](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/13_stream_blockchain_transactions) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Stream Blockchain Transactions](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/13_stream_blockchain_transactions) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-13_stream_blockchain_transactions.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/13_stream_blockchain_transactions)).
 
-In this tutorial we show you how to stream transactions on the **Hive** blockchain using the `blockchain` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+In this tutorial we show you how to stream transactions on the **Hive** blockchain using the `blockchain` class found within the [beem](https://github.com/holgern/beem) library.
 
 ## Intro
 
-Tutorial is demonstrating the typical process of streaming blocks on Hive. We will show some information from each block that is being streamed to give you an idea. Each block contains transactions objects as well but we will not show each of this data in user interface.
+Tutorial is demonstrating the typical process of streaming operations on Hive.  We will show some information from certain ops, based on certain conditions.
 
-We are using the `blockchain.stream()` function provided by `steem-python` which returns each block after it has been accepted by witnesses. By default it follows irreversible blocks which was accepted by all witnesses.
+We are using the `blockchain.stream()` function provided by beem which returns each operation after it has been accepted by witnesses.  By default it follows irreversible blocks which was accepted by all witnesses.
 
 ## Steps
 
-1.  [**App setup**](#app-setup) Configure imports and initialization of libraries
-1.  [**Stream blocks**](#stream-blocks) Stream blocks
-1.  [**Sample result**](#sample-result) Stream blocks
+1. [**App setup**](#app-setup) Configure imports and initialization of libraries
+1. [**Stream blocks**](#stream-blocks) Stream blocks
+1. [**Sample result**](#sample-result) Sample results
 
 #### 1. App setup<a name="app-setup"></a>
 
 In this tutorial we use 1 package:
 
-steem - steem-python library and interaction with Blockchain
+beem library and interaction with Blockchain
 
 ```python
-from steem.blockain import Blockchain
+from beem.blockchain import Blockchain
+from beem import Hive
 
-blockchain = Blockchain()
+h = Hive()
+blockchain = Blockchain(blockchain_instance=h)
 ```
 
 Above we create an instance of Blockchain which will give us the ability to stream the live transactions from the blockchain.
@@ -45,37 +44,36 @@ Next we create an instance of `stream` and then loop through the steam as transa
 ```python
 stream = blockchain.stream()
 
-for post in stream:
-	print(post)
+for op in stream:
+  if op["type"] == 'comment':
+    if len(op["parent_author"]) == 0:
+      print(op["author"] + " authored a post: " + op["title"])
+    else:
+      print(op["author"] + " replied to " + op["parent_author"])
 ```
 
-#### 3. Sample result<a name="sample-result"></a>
+For this tutorial, we are only interested in the `comment` operation.  Then, we check if the author wrote a top-level post or a reply.
 
-```json
-{
-  "curator": "idx",
-  "reward": "4.042446 VESTS",
-  "comment_author": "blackbunny",
-  "comment_permlink": "6tfv5e",
-  "_id": "5801d1c99ca7ecd1d4387ebd89d4edab08612b35",
-  "type": "curation_reward",
-  "timestamp": "2018-09-21T21:11:02.005Z",
-  "block_num": 26136919,
-  "trx_id": "0000000000000000000000000000000000000000"
-}
-```
+Also see: [Broadcast Ops]({{ '/apidefinitions/#apidefinitions-broadcast-ops' | relative_url }})
 
+#### 3. Sample result<a name="sample-result"></a>
 
-That's it!
+```
+shortsegments replied to edje
+riverflows replied to breezin
+ejmh.vibes replied to kiritoccs
+carlosadolfochac authored a post: NATURA.
+hiveupme replied to prydefoltz
+shortsegments replied to filotasriza3
+walterprofe authored a post: Límites 01 Introducción
+poshbot replied to prydefoltz
+```
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/13_stream_blockchain_transactions`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
-
-
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/13_stream_blockchain_transactions`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/submit_comment_reply.md b/_tutorials-python/submit_comment_reply.md
index 65f384e5ed0e07ababcb9310490b2f88d8b01126..ffc5efec5cbe1497308e6828b6ced387043b9d5e 100644
--- a/_tutorials-python/submit_comment_reply.md
+++ b/_tutorials-python/submit_comment_reply.md
@@ -4,93 +4,82 @@ position: 11
 description: "How to submit a comment on a post to the Hive blockchain."
 layout: full
 canonical_url: submit_comment_reply.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Submit Comment Reply](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/11_submit_comment_reply) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Submit Comment Reply](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/11_submit_comment_reply) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-11_submit_comment_reply.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/11_submit_comment_reply)).
 
-This tutorial will explain and show you how to submit a new comment to the `Hive` blockchain using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+This tutorial will explain and show you how to submit a new comment to the `Hive` blockchain using the `commit` class found within the [beem](https://github.com/holgern/beem) library.
 
 ## Intro
 
-The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `post` method found within the `commit` class in the the library. It should be noted that comments and post are both treated as a `commit.post` operation with the only difference being that a comment/reply has an additional parameter containing the `parent post/comment`. There are 11 parameters within the `post` method:
+The beem library has a built-in function to transmit transactions to the blockchain.  We are using the [`transactionbuilder`](https://beem.readthedocs.io/en/latest/beem.transactionbuilder.html) in the the library.  It should be noted that comments and new post are both treated as the `comment` operation with the only difference being that a comment/reply has an additional parameter containing the `parent_author`/`parent_permlink` that corresponds to the original post/comment.
 
-1. _title_ - The title of the post. This is a required parameter but comments don't have a title so the parameter is assigned an empty string value
-1. _body_ - The body of the post
-1. _author_ - The account that you are posting from
-1. _permlink_ - A unique adentifier for the
-1. _tags_ - Between 1 and 5 key words that defines the post
-1. _reply_idendifier_ - Identifier of the parent post(used for comments)
-1. _json_metadata_ - JSON meta objec that can be attached to the post
-1. _comment_options_ - JSON options object that can be attached to the post to specify additional options like 'max_payouts', 'allow_votes', etc.
-1. _community_ - Name of the community you are posting into
-1. _beneficiaries_ - A list of beneficiaries for posting reward distribution.
-1. _self_vote_ - Upvote the post as author right after posting
+* _author_ - The account that you are posting from
+* _title_ - The title of the reply (usually empty for replies)
+* _body_ - The body of the reply
+* _permlink_ - A unique identifier, scoped to author
+* _parent_author_ - Author being replied to (for replies) or empty string (for posts)
+* _parent_permlink_ - Permlink being replied to (for replies) or category (for posts)
 
-We will only be using the parameters titel, body, author, permlink and reply_identifier as they are all that is required for a basic comment operation. If you want to explore the other parameters further you can find more information [HERE](http://steem.readthedocs.io/en/latest/core.html).
+We will only be using the above parameters as these are the only ones required to create a basic post.  If you want to explore the other parameters further you can find more information [HERE](https://beem.readthedocs.io/en/latest/beem.comment.html#beem.comment.Comment).
 
-A comment made on a post is defined as a `root comment`. You can also comment on someone elses (or your own) comment, in which case the `parent` parameters would be that of the comment, and not the original post.
+A comment made on a post is defined as a `root comment`. You can also comment on someone else's (or your own) comment, in which case the `parent` parameters would be that of the comment, and not the original post.
+
+Also see:
+* [comment_operation]({{ '/apidefinitions/#broadcast_ops_comment' | relative_url }})
 
 ## Steps
 
-1.  [**App setup**](#setup) - Library install and import. Connection to Hive node
-1.  [**Variable input and format**](#input) - Input and creation of varialbes
-1.	[**Initialize steem class**](#steem) - Initialize the steem class with the relevant node and private key
-1.  [**Post submission and result**](#submit) - Committing of transaction to the blockchain
+1. [**App setup**](#setup) - Library install and import. Connection to Hive node
+1. [**Variable input and format**](#input) - Input and creation of varialbes
+1. [**Initialize class**](#initialize) - Initialize the beem class with the relevant node and private key
+1. [**Post submission and result**](#submit) - Committing of transaction to the blockchain
 
 #### 1. App setup <a name="setup"></a>
 
-In this tutorial we use 4 packages:
+In this tutorial we use the following packages:
 
 - `random` and `string` - used to create a random string used for the `permlink`
-- `steem` - steem-python library and interaction with Blockchain
-- `steembase` - used to connect to the testnet
+- `getpass` - capture wif without showing it on the screen
+- `beem` - hive library and interaction with Blockchain
 
 We import the libraries and connect to the `testnet`.
 
 ```python
 import random
 import string
-import steembase
-import steem
-
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
+import getpass
+from beem import Hive
+from beem.transactionbuilder import TransactionBuilder
+from beembase.operations import Comment
 ```
 
-Because this tutorial alters the blockchain we have to connect to the testnet. There is a demo account available for use, `cdemo` with private posting key `5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz`. You can also create your own demo account by following the instructions on the [TESTNET](https://testnet.steem.vc/) site.
+Because this tutorial alters the blockchain we have to connect to the testnet.  We also require the `private posting key` of the contributing author in order to commit the post which is why we're using a `testnet` node.
 
 #### 2. Variable input and format<a name="input"></a>
 
-The variables are captured via a simple string input and allocated as seen below. The `wif` variable is the private posting key of the user making the comment. This key is required to commit the post to the blockchain.
+The first three variables are captured via a simple string input.
 
 ```python
 #capture variables
-parentAuthor = input('Parent author: ')
-parentPermlink = input('Parent permlink: ')
+parent_author = input('Parent author: ')
+parent_permlink = input('Parent permlink: ')
 author = input('Username: ')
-wif = input('Private posting key: ')
-body = input('Comment Body: ')
+title = input('Post Title: ')
+body = input('Post Body: ')
 ```
 
-We join the two `parent` values and assign it to the `reply_identifier` parameter. We also use a random generator to create a new `permlink` for the post being created
+We also use a random generator to create a new `permlink` for the post being created.
 
 ```python
-#combining parent values to create reply identifier
-reply_identifier = '/'.join([parentAuthor,parentPermlink])
-
 #random generator to create post permlink
 permlink = ''.join(random.choices(string.digits, k=10))
 ```
 
-The random generator is limited to 10 characters in this case but the permlink can be up to 256 bytes. If the permlink value is left empty then it auto creates a permlink based on the title of the post. The permlink is unique to the author only which means that multiple authors can have the same title for thier post.
+The random generator is limited to 10 characters in this case but the permlink can be [up to 256 bytes]({{ '/tutorials-recipes/understanding-configuration-values.html#HIVE_MAX_PERMLINK_LENGTH' | relative_url }}).  The permlink is unique to the author only which means that multiple authors can have the same permlink for the their reply.
 
-#### 3. Initialize steem class<a name="steem"></a>
+#### 3. Initialize class<a name="initialize"></a>
 
-We initialize the steem class by connecting to the specific `testnet` node. We also require the `private posting key` of the contributing author in order to commit the post which is also specified during this operation.
+We initialize the beem class by connecting to the specific `testnet` node. We also require the `private posting key` of the contributing author in order to commit the post which is also specified during this operation.
 
 ```python
 #connect node and private posting key
@@ -99,28 +88,46 @@ client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
 
 #### 4. Post submission and result<a name="submit"></a>
 
-The last step is to transmit the post through to the blockchain. This is done with the `post` method within the `commit` class. All the defined parameters are submitted with the function. As stated earlier in the tutorial, there are quite a few parameters for this function but for a basic comment these 5 are all that's required.
+The last step is to transmit the post through to the blockchain.  All the defined parameters are signed and broadcasted.  We also securely prompt for the posting key right before signing.
 
 ```python
-#commit post to blockchain
-client.commit.post(title='', body=body, author=author, permlink=permlink, reply_identifier=reply_identifier)
-
-print("Comment created successfully")
-print(permlink)
+client = Hive('http://127.0.0.1:8091')
+tx = TransactionBuilder(blockchain_instance=client)
+tx.appendOps(Comment(**{
+  "parent_author": '',
+  "parent_permlink": taglist[0], # we use the first tag as the category
+  "author": author,
+  "permlink": permlink,
+  "title": title,
+  "body": body,
+  "json_metadata": json.dumps({"tags": taglist})
+}))
+
+wif_posting_key = getpass.getpass('Posting Key: ')
+tx.appendWif(wif_posting_key)
+signed_tx = tx.sign()
+broadcast_tx = tx.broadcast(trx_id=True)
+
+print("Post created successfully: " + str(broadcast_tx))
 ```
 
-A simple confirmation is printed on the screen if the comment is committed successfully. We also print the `permlink` for the comment on screen. This is purely for convenience to make it easier to retrieve the permlink if a new author or the same author would like to another comment on the one just made.
+A simple confirmation is printed on the screen if the post is committed successfully.
 
-You can also check on the [testportal](http://condenser.steem.vc/blog/@cdemo) for the comment or for a post to comment on. Alternatively you can create your own post to comment on following the `10_submit_post` tutorial.
+You can also check on your local testnet using [database_api.find_comments]({{ '/apidefinitions/#database_api.find_comments' | relative_url }}) for the post.
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/11_submit_comment_reply`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
 
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
 
----
+For details on running a local testnet, see: [Setting Up a Testnet]({{ '/tutorials-recipes/setting-up-a-testnet.html' | relative_url }})
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/11_submit_comment_reply`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/submit_post.md b/_tutorials-python/submit_post.md
index 2f03056a4206b6f6d190382913cd88e9bbb88dc7..10cab20ee1f725deda8e268191c93b7ca3b663a3 100644
--- a/_tutorials-python/submit_post.md
+++ b/_tutorials-python/submit_post.md
@@ -4,64 +4,57 @@ position: 10
 description: "How to submit post on Hive blockchain using Python."
 layout: full
 canonical_url: submit_post.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Submit Post](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/10_submit_post) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Submit Post](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/10_submit_post) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-10_submit_post.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/10_submit_post)).
 
-In this tutorial will explain and show you how to submit a new post to the `Hive` blockchain using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+In this tutorial will explain and show you how to submit a new post to the `Hive` blockchain using the `commit` class found within the [beem](https://github.com/holgern/beem) library.
 
 ## Intro
 
-The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `post` method found within the `commit` class in the the library. It should be noted that comments and new post are both treated as `commit.post` operation with the only difference being that a comment/reply has got an additional parameter containing the `parent post/comment`. There are 11 parameters within the `post` method:
+The beem library has a built-in function to transmit transactions to the blockchain.  We are using the [`transactionbuilder`](https://beem.readthedocs.io/en/latest/beem.transactionbuilder.html) in the the library.  It should be noted that comments and new post are both treated as the `comment` operation with the only difference being that a comment/reply has an additional parameter containing the `parent_author`/`parent_permlink` that corresponds to the original post/comment.
 
-1. _title_ - The title of the post
-2. _body_ - The body of the post
-3. _author_ - The account that you are posting from
-4. _permlink_ - A unique adentifier for the
-5. _tags_ - Between 1 and 5 key words that defines the post
-6. _reply_idendifier_ - Identifier of the parent post(used for comments)
-7. _json_metadata_ - JSON meta objec that can be attached to the post
-8. _comment_options_ - JSON options object that can be attached to the post to specify additional options like 'max_payouts', 'allow_votes', etc.
-9. _community_ - Name of the community you are posting into
-10. _beneficiaries_ - A list of beneficiaries for posting reward distribution.
-11. _self_vote_ - Upvote the post as author right after posting
+* _author_ - The account that you are posting from
+* _title_ - The title of the post
+* _body_ - The body of the post
+* _permlink_ - A unique identifier, scoped to author
+* _parent_author_ - Empty string (for posts) or author being replied to (for replies)
+* _parent_permlink_ - Category (for posts) or permlink being replied to (for replies)
+* _json_metadata_ - JSON meta object that can be attached to the post
+  * _tags_ - Between 1 and 5 key words that defines the post
 
-We will only be using the first 5 parameters as these are the only ones required to create a basic post. If you want to explore the other parameters further you can find more information [HERE](http://steem.readthedocs.io/en/latest/core.html).
+We will only be using the above parameters as these are the only ones required to create a basic post.  If you want to explore the other parameters further you can find more information [HERE](https://beem.readthedocs.io/en/latest/beem.comment.html#beem.comment.Comment).
+
+Also see:
+* [comment_operation]({{ '/apidefinitions/#broadcast_ops_comment' | relative_url }})
 
 ## Steps
 
-1.  [**App setup**](#setup) - Library install and import. Connection to Hive node
-2.  [**Variable input and format**](#input) - Input and creation of varialbes
-3.  [**Post submission and result**](#submit) - Committing of transaction to the blockchain
+1. [**App setup**](#setup) - Library install and import. Connection to Hive node
+2. [**Variable input and format**](#input) - Input and creation of varialbes
+3. [**Post submission and result**](#submit) - Committing of transaction to the blockchain
 
 #### 1. App setup <a name="setup"></a>
 
-In this tutorial we use 4 packages:
+In this tutorial we use the following packages:
 
 - `random` and `string` - used to create a random string used for the `permlink`
-- `steem` - steem-python library and interaction with Blockchain
-- `steembase` - used to connect to the testnet
+- `getpass` - capture wif without showing it on the screen
+- `json` - generate `json_metadata`
+- `beem` - hive library and interaction with Blockchain
 
-We import the libraries, connect to the `testnet` and initialize the Hive class.
+We import the libraries, connect to your local `testnet`, and initialize the Hive class.
 
 ```python
 import random
 import string
-import steembase
-import steem
-
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
-
-#connect node and private posting key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=['5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz'])
+import getpass
+import json
+from beem import Hive
+from beem.transactionbuilder import TransactionBuilder
+from beembase.operations import Comment
 ```
 
-Because this tutorial alters the blockchain we have to connect to the testnet. We also require the `private posting key` of the contributing author in order to commit the post which is why it is specified along with the `testnet` node. We have supplied a test account, `cdemo` to use with this tutorial.
+Because this tutorial alters the blockchain we have to connect to the testnet.  We also require the `private posting key` of the contributing author in order to commit the post which is why we're using a `testnet` node.
 
 #### 2. Variable input and format<a name="input"></a>
 
@@ -77,44 +70,62 @@ body = input('Post Body: ')
 taglimit = 2 #number of tags 1 - 5
 taglist = []
 for i in range(1, taglimit+1):
-	print(i)
-	tag = input(' Tag : ')
-	taglist.append(tag)
+  print(i)
+  tag = input(' Tag : ')
+  taglist.append(tag)
 ```
 
-The `tags` parameter needs to be in the form of a single string with the words split by an empty space, so we add a line to prepare that variable. We also use a random generator to create a new `permlink` for the post being created
+The `tags` parameter needs to be formatted within the `json_metadata` field as JSON.  We also use a random generator to create a new `permlink` for the post being created.
 
 ```python
-" ".join(taglist) #create string joined with empty spaces
-
 #random generator to create post permlink
 permlink = ''.join(random.choices(string.digits, k=10))
 ```
 
-The random generator is limited to 10 characters in this case but the permlink can be up to 256 bytes. If the permlink value is left empty then it auto creates a permlink based on the title of the post. The permlink is unique to the author only which means that multiple authors can have the same title for the thier post.
+The random generator is limited to 10 characters in this case but the permlink can be [up to 256 bytes]({{ '/tutorials-recipes/understanding-configuration-values.html#HIVE_MAX_PERMLINK_LENGTH' | relative_url }}).  The permlink is unique to the author only which means that multiple authors can have the same permlink for the their post.
 
 #### 3. Post submission and result<a name="submit"></a>
 
-The last step is to transmit the post through to the blockchain. This is done `post` method within the `commit` class. All the defined parameters are submitted with the function. As stated earlier in the tutorial, there are quite a few parameters for this function but for a basic post these 5 are the most important.
+The last step is to transmit the post through to the blockchain.  All the defined parameters are signed and broadcasted.  We also securely prompt for the posting key right before signing.
 
 ```python
-client.commit.post(title=title, body=body, author=author, tags=taglist, permlink=permlink)
-
-print("Post created successfully")
+client = Hive('http://127.0.0.1:8091')
+tx = TransactionBuilder(blockchain_instance=client)
+tx.appendOps(Comment(**{
+  "parent_author": '',
+  "parent_permlink": taglist[0], # we use the first tag as the category
+  "author": author,
+  "permlink": permlink,
+  "title": title,
+  "body": body,
+  "json_metadata": json.dumps({"tags": taglist})
+}))
+
+wif_posting_key = getpass.getpass('Posting Key: ')
+tx.appendWif(wif_posting_key)
+signed_tx = tx.sign()
+broadcast_tx = tx.broadcast(trx_id=True)
+
+print("Post created successfully: " + str(broadcast_tx))
 ```
 
 A simple confirmation is printed on the screen if the post is committed successfully.
 
-You can also check on the [testportal](http://condenser.steem.vc/blog/@cdemo) for the post.
+You can also check on your local testnet using [database_api.find_comments]({{ '/apidefinitions/#database_api.find_comments' | relative_url }}) for the post.
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-2.  `cd devportal/tutorials/python/10_submit_post`
-3.  `pip install -r requirements.txt`
-4.  `python index.py`
-5.  After a few moments, you should see a prompt for input in terminal screen.
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
 
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
 
----
+For details on running a local testnet, see: [Setting Up a Testnet]({{ '/tutorials-recipes/setting-up-a-testnet.html' | relative_url }})
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+2. `cd devportal/tutorials/python/10_submit_post`
+3. `pip install -r requirements.txt`
+4. `python index.py`
+5. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/transfer_STEEM_and_SBD.md b/_tutorials-python/transfer_STEEM_and_SBD.md
deleted file mode 100644
index 81e1e44379ea75380392df29b29eaa687de77a6c..0000000000000000000000000000000000000000
--- a/_tutorials-python/transfer_STEEM_and_SBD.md
+++ /dev/null
@@ -1,165 +0,0 @@
----
-title: 'PY: Transfer Hive And Hbd'
-position: 21
-description: "How to transfer HIVE and HBD to another account using Python."
-layout: full
-canonical_url: transfer_hive_and_hbd.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Transfer Hive And Hbd](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/21_transfer_hive_and_hbd) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
-
-In this tutorial we will explain and show you how to to check the HIVE and HBD balance of an account and also how to transfer a portion of that to another user on the **Hive** blockchain using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
-
-## Intro
-
-The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `transfer` method found within the `commit` class in the library. Before we do the transfer, we check the current balance of the account to ensure that there are sufficient funds available. We also check if the intended recipient of the transfer is a valid user account. This is not strictly necessary as the process will automatically abort with the corresponding error, but it does give some insight into the process as a whole. We use the `get_account` function to check for this. The `transfer` method has 5 parameters:
-
-1.  _to_ - The intended recipient of the funds transfer
-1.  _amount_ - The amount of HIVE or HBD that the user wants to transfer. This parameter has to be of the `float` data type and is rounded up to 3 decimal spaces
-1.  _asset_ - A string value specifying whether `HIVE` or `HBD` is being transferred
-1.  _memo_ - An optional text field containing comments on the transfer. This value may begin with '#' for encrypted messaging
-1.  _account_ - The account that the funds are being transferred from
-
-## Steps
-
-1.  [**App setup**](#setup) - Library install and import. Connection to testnet
-1.  [**User information and steem node**](#userinfo) - Input user information and connection to Hive node
-1.  [**Check balance**](#balance) - Check current HIVE and HBD balance of user account
-1.  [**Recipient input**](#recipient) - Check for valid recipient account name
-1.  [**Transfer type and amount**](#amount) - Input of transfer type and the amount to transfer
-1.  [**Transfer commit**](#commit) - Commit of transfer to blockchain
-
-#### 1. App setup <a name="setup"></a>
-
-In this tutorial we use 2 packages:
-
-- `steem` - steem-python library and interaction with Blockchain
-- `pick` - helps select the query type interactively
-
-We import the libraries and connect to the `testnet`.
-
-```python
-import steembase
-import steem
-from pick import pick
-
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
-```
-
-Because this tutorial alters the blockchain we connect to the testnet so we don't create spam on the production server.
-
-#### 2. User information and steem node <a name="userinfo"></a>
-
-We require the `private active key` of the user in order for the transfer to be committed to the blockchain. This is why we have to specify this alongside the `testnet` node. The values are supplied via the terminal/console before we initialise the steem class. There is a demo account available to use with this tutorial but any account that is set up on the testnet can be used.
-
-```python
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private ACTIVE key: ') #demo account: 5KaNM84WWSqzwKzY82fXPaUW43idbLnPqf5SfjGxLfw6eV2kAP3
-
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
-```
-
-#### 3. Check balance <a name="balance"></a>
-
-In order to give the user enough information to make the transfer we check the current balance of the account using the `get_account` function.
-
-```python
-#get account balance for HIVE and HBD
-userinfo = client.get_account(username)
-total_hive = userinfo['balance']
-total_hbd = userinfo['hbd_balance']
-
-print('CURRENT ACCOUNT BALANCE:' + '\n' + total_hive + '\n' + total_hbd + '\n')
-```
-
-The result of the query is displayed in the console/terminal.
-
-#### 4. Recipient input <a name="recipient"></a>
-
-The recipient account is input via the console/terminal and then a check is done whether that username does in fact exist.
-
-```python
-#get recipient name
-recipient = input('Enter the user you wish to transfer funds to: ')
-
-#check for valid recipient name
-result = client.get_account(recipient)
-```
-
-The query will return a null value if the account does not match to anything on the blockchain. This result is then used to determine the next step.
-
-#### 5. Transfer type and amount <a name="amount"></a>
-
-If the query in the previous step returns a valid result the user is then given a choice of transfer types or to cancel the operation completely. If the username is not found the process aborts.
-
-```python
-if result:
-    #choice of transfer
-    title = 'Please choose transfer type: '
-    options = ['HIVE', 'HBD', 'Cancel Transfer']
-    # get index and selected transfer type
-    option, index = pick(options, title)
-else:
-    print('Invalid recipient for funds transfer')
-    exit()
-```
-
-Once the user chooses the type of transfer we proceed to assign the amount as well as the `asset` parameter.
-
-```python
-if option == 'Cancel Transfer':
-    print('Transaction cancelled')
-    exit()
-else:
-    if option == 'HIVE':
-        #get HIVE transfer amount
-        amount = input('Enter amount of HIVE to transfer to ' + recipient + ': ')
-        asset = 'HIVE'
-    else:
-        #get HBD transfer amount
-        amount = input('Enter amount of HBD to transfer to ' + recipient + ': ')
-        asset = 'HBD'
-```
-
-#### 6. Transfer commit <a name="commit"></a>
-
-Once all the parameters have been assigned we can proceed with the actual commit to the blockchain.
-
-```python
-#parameters: to, amount, asset, memo='', account
-client.transfer(recipient, float(amount), asset, '', username)
-print('\n' + amount + ' ' + asset + ' has been transferred to ' + recipient)
-```
-
-The `memo` parameter can be left empty as in the above example. A simple confirmation is printed on the UI.
-As an added confirmation we check the balance of the user again and display it on the UI. This is not required at all but it serves as a more definitive confirmation that the transfer has been completed correctly.
-
-```python
-#get remaining account balance for HIVE and HBD
-userinfo = client.get_account(username)
-total_hive = userinfo['balance']
-total_hbd = userinfo['hbd_balance']
-
-print('\n' + 'REMAINING ACCOUNT BALANCE:' + '\n' + total_hive + '\n' + total_hbd + '\n')
-```
-
-We encourage users to play around with different values and data types to fully understand how this process works. You can also check the balances and transaction history on the [testnet portal](http://condenser.steem.vc/).
-
-### To Run the tutorial
-
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/21_transfer_hive_and_hbd`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
-
-
----
diff --git a/_tutorials-python/transfer_hive_and_hbd.md b/_tutorials-python/transfer_hive_and_hbd.md
new file mode 100644
index 0000000000000000000000000000000000000000..ae54e66b36f6a8aef9e772545326aa8980def64a
--- /dev/null
+++ b/_tutorials-python/transfer_hive_and_hbd.md
@@ -0,0 +1,165 @@
+---
+title: 'PY: Transfer HIVE And HBD'
+position: 21
+description: "How to transfer HIVE and HBD to another account using Python."
+layout: full
+canonical_url: transfer_hive_and_hbd.html
+---
+Full, runnable src of [Transfer HIVE And HBD](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/21_transfer_hive_and_hbd) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-21_transfer_hive_and_hbd.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/21_transfer_hive_and_hbd)).
+
+In this tutorial we will explain and show you how to to check the HIVE and HBD balance of an account and also how to transfer a portion of that to another user on the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library.
+
+## Intro
+
+The beem library has a built-in function to transmit transactions to the blockchain.  We are using the `transfer` method found within the account instance. Before we do the transfer, we check the current balance of the account to ensure that there are sufficient funds available.  We also check if the intended recipient of the transfer is a valid user account.  This is not strictly necessary as the process will automatically abort with the corresponding error, but it does give some insight into the process as a whole.  We use the account lookup function to check for this.  We are using the following [`transfer`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.transfer) parameters:
+
+1. _to_ - The intended recipient of the funds transfer
+1. _amount_ - The amount of HIVE or HBD that the user wants to transfer. This parameter has to be of the `float` data type and is rounded up to 3 decimal spaces
+1. _asset_ - A string value specifying whether `HIVE` or `HBD` is being transferred
+1. _memo_ - An optional text field containing comments on the transfer. This value may begin with '#' for encrypted messaging
+
+## Steps
+
+1. [**App setup**](#setup) - Library install and import. Connection to testnet
+1. [**User information and hive node**](#userinfo) - Input user information and connection to Hive node
+1. [**Check balance**](#balance) - Check current HIVE and HBD balance of user account
+1. [**Recipient input**](#recipient) - Check for valid recipient account name
+1. [**Transfer type and amount**](#amount) - Input of transfer type and the amount to transfer
+1. [**Transfer**](#transfer) - Broadcast the transfer to blockchain
+
+#### 1. App setup <a name="setup"></a>
+
+In this tutorial we use 2 packages:
+
+- `beem` - hive library and interaction with Blockchain
+- `pick` - helps select the query type interactively
+
+We import the libraries and connect to the `testnet`.
+
+```python
+from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
+```
+
+Because this tutorial alters the blockchain we connect to the testnet so we don't create spam on the production server.
+
+#### 2. User information and hive node <a name="userinfo"></a>
+
+We require the `private active key` of the user in order for the transfer to be broadcasted to the blockchain.  This is why we have to specify this alongside the `testnet` node.  The values are supplied via the terminal/console before we initialize the beem class.
+
+```python
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Active Key: ')
+
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
+```
+
+#### 3. Check balance <a name="balance"></a>
+
+In order to give the user enough information to make the transfer we check the current balance of the account using [account lookup](https://beem.readthedocs.io/en/latest/beem.account.html#module-beem.account).
+
+```python
+# get account balance for HIVE and HBD
+account = Account(account, blockchain_instance=client)
+total_base = account['balance']
+total_debt = account['hbd_balance']
+base_symbol = total_base.symbol
+debt_symbol = total_debt.symbol
+
+print('CURRENT ACCOUNT BALANCE:' + '\n' + str(total_base) + '\n' + str(total_debt) + '\n')
+```
+
+The result of the query is displayed in the console/terminal.
+
+#### 4. Recipient input <a name="recipient"></a>
+
+The recipient account is input via the console/terminal and then a check is done whether that username does in fact exist.
+
+```python
+# get recipient name
+recipient = input('Enter the user you wish to transfer funds to: ')
+
+# check for valid recipient name
+recipient = Account(recipient, blockchain_instance=client)
+```
+
+The query will return a null value if the account does not match to anything on the blockchain. This result is then used to determine the next step.
+
+#### 5. Transfer type and amount <a name="amount"></a>
+
+If the query in the previous step returns a valid result the user is then given a choice of transfer types or to cancel the operation completely. If the username is not found the process aborts.
+
+```python
+if recipient:
+    # choice of transfer
+    title = 'Please choose transfer type: '
+    options = [base_symbol, debt_symbol, 'Cancel Transfer']
+    # get index and selected transfer type
+    option, index = pick(options, title)
+else:
+    print('Invalid recipient for funds transfer')
+    exit()
+```
+
+Once the user chooses the type of transfer we proceed to assign the amount as well as the `asset` parameter.
+
+```python
+if option == 'Cancel Transfer':
+    print('Transaction cancelled')
+    exit()
+
+if option == base_symbol:
+  # get HIVE transfer amount
+  amount = input('Enter amount of ' + base_symbol + ' to transfer to ' + recipient.name + ': ')
+  amount = float(amount)
+  symbol = base_symbol
+else:
+  # get HBD transfer amount
+  amount = input('Enter amount of ' + debt_symbol + ' to transfer to ' + recipient.name + ': ')
+  amount = float(amount)
+  symbol = debt_symbol
+```
+
+#### 6. Transfer <a name="transfer"></a>
+
+Once all the parameters have been assigned we can proceed with the actual broadcast to the blockchain.
+
+```python
+account.transfer(recipient.name, amount, symbol)
+
+print('\n' + str(amount) + ' ' + symbol + ' has been transferred to ' + recipient.name)
+```
+
+The `memo` parameter can be left empty as in the above example.  A simple confirmation is printed on the UI.
+
+As an added confirmation we check the balance of the user again and display it on the UI.  This is not required at all but it serves as a more definitive confirmation that the transfer has been completed correctly.
+
+```python
+# get remaining account balance for HIVE and HBD
+account = Account(account.name, blockchain_instance=client)
+total_base = account['balance']
+total_debt = account['hbd_balance']
+
+print('\n' + 'REMAINING ACCOUNT BALANCE:' + '\n' + str(total_base) + '\n' + str(total_debt) + '\n')
+```
+
+### To Run the tutorial
+
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
+
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
+
+For details on running a local testnet, see: [Setting Up a Testnet]({{ '/tutorials-recipes/setting-up-a-testnet.html' | relative_url }})
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/21_transfer_hive_and_hbd`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/transfer_hive_and_hbd_to_savings_balance.md b/_tutorials-python/transfer_hive_and_hbd_to_savings_balance.md
new file mode 100644
index 0000000000000000000000000000000000000000..7f88b28a34e2f79294992065de84e7a16d0e8a4b
--- /dev/null
+++ b/_tutorials-python/transfer_hive_and_hbd_to_savings_balance.md
@@ -0,0 +1,159 @@
+---
+title: 'PY: Transfer HIVE And HBD To Savings Balance'
+position: 33
+description: "How to transfer HIVE and HBD to savings using Python."
+layout: full
+canonical_url: transfer_hive_and_hbd_to_savings_balance.html
+---
+Full, runnable src of [Transfer HIVE And HBD To Savings Balance](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/33_transfer_hive_and_hbd_to_savings_balance) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-33_transfer_hive_and_hbd_to_savings_balance.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/33_transfer_hive_and_hbd_to_savings_balance)).
+
+In this tutorial we show you how to check the HIVE and HBD balance of an account on the **Hive** blockchain and also how to transfer a portion or all of that to a "savings" account using the [beem](https://github.com/holgern/beem) library.
+
+It should be noted that when funds are being withdrawn from the savings account it takes 3 days for those funds to reflect in the available HIVE/HBD balance.  The withdrawal can be cancelled at any point during this waiting period.  This measure was put in place to reduce the risk of funds being stolen when accounts are hacked as it gives sufficient time to recover your account before your funds are transferred out.  Storing your funds in your savings account is thus more secure than having them as available balances.
+
+## Intro
+
+The beem library has a built-in function to transmit transactions to the blockchain.  We are using the [`transfer_to_savings`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.transfer_to_savings) and [`transfer_from_savings`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.transfer_from_savings) methods found within the [`Account`](https://beem.readthedocs.io/en/latest/beem.account.html) instance.  Before we do the transfer, we use the `Account` module to check the current HIVE and HBD balance of the account to see what funds are available to transfer or withdraw.  This is not strictly necessary but adds to the usability of the process.  The `transfer_to_savings` method has the following parameters:
+
+1.  _amount_ - The amount of HIVE or HBD that the user wants to transfer. This parameter has to be of the `float` data type and is rounded up to 3 decimal spaces
+1.  _asset_ - A string value specifying whether `HIVE` or `HBD` is being transferred
+1.  _memo_ - An optional text field containing comments on the transfer
+
+and `transfer_from_savings` has the following parameters:
+
+1.  _amount_ - The amount of HIVE or HBD that the user wants to withdraw. This parameter has to be of the `float` data type and is rounded up to 3 decimal spaces
+1.  _asset_ - A string value specifying whether `HIVE` or `HBD` is being withdrawn
+1.  _memo_ - An optional text field containing comments on the withdrawal
+1.  _request id_ - Integer identifier for tracking the withdrawal. This needs to be a unique number for a specified user
+
+## Steps
+
+1. [**App setup**](#setup) - Library install and import. Connection to testnet
+1. [**User information and Hive node**](#userinfo) - Input user information and connection to Hive node
+1. [**Check balance**](#balance) - Check current HIVE and HBD balance of user account
+1. [**Transfer type and amount**](#amount) - Input of transfer type and the amount to transfer
+1. [**Transfer commit**](#commit) - Commit of transfer to blockchain
+
+#### 1. App setup <a name="setup"></a>
+
+In this tutorial we use 3 packages:
+
+- `beem` - hive library and interaction with Blockchain
+- `pick` - helps select the query type interactively
+- `random` - use to create random numbers
+
+We import the libraries and connect to the `testnet`.
+
+```python
+from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
+import random
+```
+
+Because this tutorial alters the blockchain we connect to a testnet so we don't create spam on the production server.
+
+#### 2. User information and Hive node <a name="userinfo"></a>
+
+We require the `private active key` of the user in order for the transfer to be committed to the blockchain.  This is why we are using a testnet.  The values are supplied via the terminal/console before we initialise the beem class.
+
+```python
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
+
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
+```
+
+#### 3. Check balance <a name="balance"></a>
+
+In order to give the user enough information to make the transfer we check the current balance of both the available and savings funds of the account using the `Account` module.
+
+```python
+# check for valid account and get account balance for HIVE and HBD
+account = Account(account, blockchain_instance=client)
+
+total_base = account['balance']
+total_debt = account['hbd_balance']
+savings_base = account['savings_balance']
+savings_debt = account['savings_hbd_balance']
+
+symbol_base = total_base.symbol
+symbol_debt = total_debt.symbol
+
+print('CURRENT ACCOUNT BALANCE:' + '\n' + str(total_base) + '\n' + str(total_debt) + '\n')
+print('CURRENT SAVINGS BALANCE:' + '\n' + str(savings_base) + '\n' + str(savings_debt) + '\n')
+
+input('Press enter to continue with the transfer' + '\n')
+```
+
+The result of the query is displayed in the console/terminal.
+
+#### 4. Transfer type and amount <a name="amount"></a>
+
+The user is given a choice on the type of transfer (transfer/withdraw) as well as the currency.  The user can also elect to cancel the process entirely.  Once the user makes their choice we proceed to assign the `amount` as well as the `asset` parameter.
+
+```python
+# choice of currency
+title2 = 'Please choose currency: '
+options2 = [symbol_base, symbol_debt]
+# get index and selected currency
+asset, index = pick(options2, title2)
+
+if asset == symbol_base:
+  # get HIVE transfer amount
+  amount = float(input('Enter amount of ' + symbol_base + ' to transfer: ') or '0')
+else:
+  # get HBD transfer amount
+  amount = float(input('Enter amount of ' + symbol_debt + ' to transfer: ') or '0')
+```
+
+#### 5. Transfer commit <a name="commit"></a>
+
+Once all the parameters have been assigned we can proceed with the actual broadcast to the blockchain.  The relevant function is executed based on the selected choice the user made in the previous step.
+
+```python
+if transfer_type == 'Transfer':
+  account.transfer_to_savings(amount, asset, '')
+  print('\n' + 'Transfer to savings balance successful')
+else:
+  # create request ID random integer
+  request_id = random.randint(1,1000000)
+  account.transfer_from_savings(amount, asset, '', request_id=request_id)
+  print('\n' + 'Withdrawal from savings successful, transaction ID: ' + str(request_id))
+```
+
+With a withdrawal, the method requires a unique identifier for the transaction to be completed.  For this we create a random integer and also display it on the UI along with the result of the transaction.  The `memo` parameter is optional and can be left empty as in the above example.  A simple confirmation of the transfer is printed on the UI.
+
+As an added confirmation we check the balance of the user again and display it on the UI.  This is not required at all but it serves as a more definitive confirmation that the transfer has been completed correctly.
+
+```python
+# get remaining account balance for HIVE and HBD
+account.refresh()
+total_base = account['balance']
+total_debt = account['hbd_balance']
+savings_base = account['savings_balance']
+savings_debt = account['savings_hbd_balance']
+
+print('\n' + 'REMAINING ACCOUNT BALANCE:' + '\n' + str(total_base) + '\n' + str(total_debt) + '\n')
+print('CURRENT SAVINGS BALANCE:' + '\n' + str(savings_base) + '\n' + str(savings_debt) + '\n')
+```
+
+### To Run the tutorial
+
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
+
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
+
+For details on running a local testnet, see: [Setting Up a Testnet]({{ '/tutorials-recipes/setting-up-a-testnet.html' | relative_url }})
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/33_transfer_hive_and_hbd_to_savings_balance`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/transfer_steem_and_sbd_to_savings_balance.md b/_tutorials-python/transfer_steem_and_sbd_to_savings_balance.md
deleted file mode 100644
index 471e406b4fb0d1ca2990cfb3bebe1598bf84111e..0000000000000000000000000000000000000000
--- a/_tutorials-python/transfer_steem_and_sbd_to_savings_balance.md
+++ /dev/null
@@ -1,184 +0,0 @@
----
-title: 'PY: Transfer Hive And Hbd To Savings Balance'
-position: 33
-description: "How to transfer HIVE and HBD to savings using Python."
-layout: full
-canonical_url: transfer_hive_and_hbd_to_savings_balance.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Transfer Hive And Hbd To Savings Balance](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/33_transfer_hive_and_hbd_to_savings_balance) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
-
-In this tutorial we show you how to check the HIVE and HBD balance of an account on the **Hive** blockchain and also how to transfer a portion or all of that to a "savings" account using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
-
-It should be noted that when funds are being withdrawn from the savings account it takes 3 days for those funds to reflect in the available HIVE/HBD balance. The withdrawal can be cancelled at any point during this waiting period. This measure was put in place to reduce the risk of funds being stolen when accounts are hacked as it gives sufficient time to recover your account before your funds are transferred out. Storing your funds in your savings account is thus more secure than having them as available balances.
-
-Hiveconnect offers an alternative to transferring HIVE and HBD with a "simple link" solution. Instead of running through a list of operations on your account, you can simply use a link similar to the one below substituting the four parameters with your own details. You will be prompted to enter your username and password before the transaction will be executed.
-https://steemconnect.com/sign/transfer-to-savings?from=username&to=username&amount=0.000%20HIVE&memo=text
-This is similar to the steemconnect links that have been covered in previous tutorials. For a list of signing operations that work in this manner you can go to https://v2.steemconnect.com/sign. There is also a steemconnect link for withdrawing funds.
-
-## Intro
-
-The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `transfer_to_savings` and `transfer_from_savings` methods found within the `commit` class in the library. Before we do the transfer, we use the `get_account` function to check the current HIVE and HBD balance of the account to see what funds are available to transfer or withdraw. This is not strictly necessary but adds to the useability of the process. The `transfer_to_savings` method has 5 parameters:
-
-1.  _amount_ - The amount of HIVE or HBD that the user wants to transfer. This parameter has to be of the `float` data type and is rounded up to 3 decimal spaces
-1.  _asset_ - A string value specifying whether `HIVE` or `HBD` is being transferred
-1.  _memo_ - An optional text field containing comments on the transfer
-1.  _to_ - The recipient savings account name. Funds can be transferred to any other users' savings balance
-1.  _account_ - The source account for the transfer
-
-and `transfer_from_savings` has 6 parameters:
-
-1.  _amount_ - The amount of HIVE or HBD that the user wants to withdraw. This parameter has to be of the `float` data type and is rounded up to 3 decimal spaces
-1.  _asset_ - A string value specifying whether `HIVE` or `HBD` is being withdrawn
-1.  _memo_ - An optional text field containing comments on the withdrawal
-1.  _request id_ - Integer identifier for tracking the withdrawal. This needs to be a unique number for a specified user
-1.  _to_ - The recipient account name. Funds can be withdrawn to any other users' available balance
-1.  _account_ - The source account for the transfer
-
-## Steps
-
-1.  [**App setup**](#setup) - Library install and import. Connection to testnet
-1.  [**User information and steem node**](#userinfo) - Input user information and connection to Hive node
-1.  [**Check balance**](#balance) - Check current HIVE and HBD balance of user account
-1.  [**Transfer type and amount**](#amount) - Input of transfer type and the amount to transfer
-1.  [**Transfer commit**](#commit) - Commit of transfer to blockchain
-
-#### 1. App setup <a name="setup"></a>
-
-In this tutorial we use 3 packages:
-
-- `steem` - steem-python library and interaction with Blockchain
-- `pick` - helps select the query type interactively
-- `random` - use to create random numbers
-
-We import the libraries and connect to the `testnet`.
-
-```python
-import steembase
-import steem
-from pick import pick
-import random
-
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
-```
-
-Because this tutorial alters the blockchain we connect to a testnet so we don't create spam on the production server.
-
-#### 2. User information and steem node <a name="userinfo"></a>
-
-We require the `private active key` of the user in order for the transfer to be committed to the blockchain. This is why we are using a testnet. The values are supplied via the terminal/console before we initialise the steem class. There are some demo accounts available but we encourage you to create your own accounts on a testnet and create balances you can transfer; it's good practice.
-
-```python
-#capture user information
-username = input('Enter username: ') #demo account: demo01
-wif = input('Enter private ACTIVE key: ') #demo account: 5HxTntgeoLm4trnTz94YBsY6MpAap1qRVXEKsU5n1v2du1gAgVH
-
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
-```
-
-#### 3. Check balance <a name="balance"></a>
-
-In order to give the user enough information to make the transfer we check the current balance of both the available and savings funds of the account using the `get_account` function.
-
-```python
-#check for valid account and get account balance for HIVE and HBD
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
-
-total_hive = userinfo['balance']
-total_hbd = userinfo['hbd_balance']
-savings_hive = userinfo['savings_balance']
-savings_hbd = userinfo['savings_hbd_balance']
-
-print('CURRENT ACCOUNT BALANCE:' + '\n' + total_hive + '\n' + total_hbd + '\n')
-print('CURRENT SAVINGS BALANCE:' + '\n' + savings_hive + '\n' + savings_hbd + '\n')
-
-input('Press enter to continue with the transfer' + '\n')
-```
-
-The result of the query is displayed in the console/terminal.
-
-#### 4. Transfer type and amount <a name="amount"></a>
-
-The user is given a choice on the type of transfer (transfer/withdraw) as well as the currency. The user can also elect to cancel the process entirely. If you are using one of Hive's demo accounts, please leave some funds for others to transfer! Once the user makes their choice we proceed to assign the `amount` as well as the `asset` parameter.
-
-```python
-#choice of transfer/withdrawal
-title1 = 'Please choose transfer type: '
-options1 = ['Transfer', 'Withdrawal', 'Cancel']
-#get index and selected transfer type
-transfer_type, index = pick(options1, title1)
-
-if transfer_type == 'Cancel':
-    print('Transaction cancelled')
-    exit()
-
-#choice of currency
-title2 = 'Please choose currency: '
-options2 = ['HIVE', 'HBD']
-option, index = pick(options2, title2)
-
-if option == 'HIVE':
-    #get HIVE transfer amount
-    amount = input('Enter amount of HIVE to transfer: ')
-    asset = 'HIVE'
-else:
-    #get HBD transfer amount
-    amount = input('Enter amount of HBD to transfer: ')
-    asset = 'HBD'
-```
-
-#### 5. Transfer commit <a name="commit"></a>
-
-Once all the parameters have been assigned we can proceed with the actual commit to the blockchain. The relevant function is executed based on the selected choice the user made in the previous step.
-
-```python
-if transfer_type == 'Transfer':
-    #parameters: amount, asset, memo, to, account
-    client.transfer_to_savings(float(amount), asset, '', username, username)
-    print('\n' + 'Transfer to savings balance successful')
-else:
-    #create request ID random integer
-    requestID = random.randint(1,1000000)
-    #parameters: amount, asset, memo, request_id=None, to=None, account=None
-    client.transfer_from_savings(float(amount), asset, '', requestID, username, username)
-    print('\n' + 'Withdrawal from savings successful, transaction ID: ' + str(requestID))
-```
-
-With a withdrawal, the method requires a unique identifier for the transaction to be completed. For this we create a random integer and also display it on the UI along with the result of the transaction. The `memo` parameter is optional and can be left empty as in the above example. We also use the source account for the `to` parameter. This can be replace by any other valid user account. A simple confirmation of the transfer is printed on the UI.
-
-As an added confirmation we check the balance of the user again and display it on the UI. This is not required at all but it serves as a more definitive confirmation that the transfer has been completed correctly.
-
-```python
-#get remaining account balance for HIVE and HBD
-userinfo = client.get_account(username)
-total_hive = userinfo['balance']
-total_hbd = userinfo['hbd_balance']
-savings_hive = userinfo['savings_balance']
-savings_hbd = userinfo['savings_hbd_balance']
-
-print('\n' + 'REMAINING ACCOUNT BALANCE:' + '\n' + total_hive + '\n' + total_hbd + '\n')
-print('CURRENT SAVINGS BALANCE:' + '\n' + savings_hive + '\n' + savings_hbd + '\n')
-```
-
-We encourage users to play around with different values and data types to fully understand how this process works. You can also check the balances and transaction history on the [testnet portal](http://condenser.steem.vc/).
-
-### To Run the tutorial
-
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/33_transfer_hive_and_hbd_to_savings_balance`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
-
-
----
diff --git a/_tutorials-python/using_keys_securely.md b/_tutorials-python/using_keys_securely.md
index d1e96bedd8243f51a7e6ee214bf42126390f4542..10d57dd46c7476bc7e318699bb17276e444e7543 100644
--- a/_tutorials-python/using_keys_securely.md
+++ b/_tutorials-python/using_keys_securely.md
@@ -1,34 +1,34 @@
 ---
 title: 'PY: Using Keys Securely'
 position: 1
-description: "Learn how Hive-Python library handles transaction signing with user's key and how to securely manage your private keys."
+description: "Learn how the Beem python library handles transaction signing with Hive user's key and how to securely manage your private keys."
 layout: full
 canonical_url: using_keys_securely.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Using Keys Securely](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/001_using_keys_securely) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Using Keys Securely](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/01_using_keys_securely) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-01_using_keys_securely.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/01_using_keys_securely)).
 
 ## Intro
 
-Hive python library has 2 ways to handle your keys. One is from source code, another one is through command line interface called `steempy`. `steempy` cli is installed by default when you install steem-python library on your machine.
+The Beem library has two ways to handle your keys.  One is from source code, another one is through command line interface called `beem`.  `beempy` cli is installed by default when you install beem library on your machine.
+
+*Note, the `hive-python` library is out of date, but can be used in a pinch.  For these tutorials, `beem` is recommended.*
 
 ## Steps
 
-1.  [**App setup**](#app-setup) - Library install and import
-1.  [**Key usage example**](#example-list) - Example showing how to import keys
+1. [**App setup**](#app-setup) - Library install and import
+1. [**Key usage example**](#example-list) - Example showing how to import keys
 
 #### 1. App setup <a name="app-setup"></a>
 
-In this tutorial we are only using `steem` package - steem-python library.
+In this tutorial we are only using `beem` package - beem library.
 
 ```python
   # initialize Hive class
-  from steem import Hive
+  from beem import Hive
 
   # defining private keys inside source code is not secure way but possible
-  s = Hive(keys=['<private_posting_key>', '<private_active_key>'])
+  h = Hive(keys=['<private_posting_key>', '<private_active_key>'])
+  a = Account('demo', blockchain_instance=h)
 ```
 
 Last line from above snippet shows how to define private keys for account that's going to transact using script.
@@ -41,46 +41,46 @@ After defining private keys inside Hive class, we can quickly sign any transacti
   # above will allow accessing Commit methods such as
   # demo account sending 0.001 HIVE to demo1 account
 
-  s.commit.transfer('demo','0.001','HIVE','memo text','demo1')
+  a.transfer('demo1', '0.001', 'HIVE', memo='memo text')
 ```
 
-Above method works but it is not secure way of handling your keys because you have entered your keys within source code that you might leak accidentally. To avoid that, we can use CLI - command line interface `steempy`.
+Above method works but it is not secure way of handling your keys because you have entered your keys within source code that you might leak accidentally. To avoid that, we can use CLI - command line interface `beempy`.
 
-You can type following to learn more about `steempy` commands: 
+You can type following to learn more about `beempy` commands: 
 
 ```python
-  steempy -h
+  beempy -h
 ```
 
-`steempy` lets you leverage your [BIP38](https://bitcoinpaperwallet.com/bip38-password-encrypted-wallets/) encrypted wallet to perform various actions on your accounts.
+`beempy` lets you leverage your [BIP38](https://bitcoinpaperwallet.com/bip38-password-encrypted-wallets/) encrypted wallet to perform various actions on your accounts.
 
-The first time you use steempy, you will be prompted to enter a password. This password will be used to encrypt the steempy wallet, which contains your private keys.
+The first time you use beem, you will be prompted to enter a password. This password will be used to encrypt the beem wallet, which contains your private keys.
 
 You can import your Hive username with following command:
 
-`steempy importaccount username`
+`beempy importaccount username`
 
 Next you can import individual private keys:
 
-`steempy addkey <private_key>`
+`beempy addkey`
 
 That's it, now that your keys are securely stored on your local machine, you can easily sign transaction from any of your Python scripts by using defined keys.
 
 ```python
   # if private keys are not defined
   # accessing Wallet methods are also possible and secure way
-  s.wallet.get_active_key_for_account('demo')
+  h.wallet.getActiveKeyForAccount('demo')
 ```
 
 Above line fetches private key for user `demo` from local machine and signs transaction.
 
-`steempy` also allows you to sign and broadcast transactions from terminal. For example:
+`beempy` also allows you to sign and broadcast transactions from terminal. For example:
 
-`steempy transfer --account <account_name> <recipient_name> 1 HIVE memo`
+`beempy transfer --account <account_name> <recipient_name> 1 HIVE memo`
 
 would sign and broadcast transfer operation,
 
-`steempy upvote --account <account_name> link`
+`beempy upvote --account <account_name> link`
 
 would sing and broadcast vote operation, etc.
 
@@ -88,12 +88,9 @@ That's it!
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/01_using_keys_securely`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see output in terminal/command prompt screen.
-
-
----
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/01_using_keys_securely`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see output in terminal/command prompt screen.
diff --git a/_tutorials-python/vote_on_content.md b/_tutorials-python/vote_on_content.md
index ee2b5b8123eecd7d61d4d04b8b8f9b18e184be71..156653e1cff4a25726584cd9bd0c65d310219f3a 100644
--- a/_tutorials-python/vote_on_content.md
+++ b/_tutorials-python/vote_on_content.md
@@ -1,74 +1,69 @@
 ---
 title: 'PY: Vote On Content'
 position: 17
-description: "How to  vote on a post/comment using Python."
+description: "How to vote on a post/comment using Python."
 layout: full
 canonical_url: vote_on_content.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Vote On Content](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/17_vote_on_content) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Vote On Content](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/17_vote_on_content) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-17_vote_on_content.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/17_vote_on_content)).
 
-In this tutorial we will explain and show you how to to check if a user has voted on specified content and also how to submit a vote on the **Hive** blockchain using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+In this tutorial we will explain and show you how to to check if a user has voted on specified content and also how to submit a vote on the **Hive** blockchain using the [beem](https://github.com/holgern/beem) library.
 
 ## Intro
 
-Voting is a way of promoting good content via an `upvote` or reporting misuse, spam or other unfit content by `downvoting`. The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `vote` method found within the `commit` class in the the library. Before we vote on content we first check whether the user has already voted. This is not strictly necessary as a voting operation overrides the previous vote value. We use the `get_active_votes` function to check for this. This function only requires two parameters, the `author` and the `permlink` for the comment/post that the query is for. This returns a list of the current voters for that comment. The `vote` function has 3 parameters:
+Voting is a way of promoting good content via an `upvote` or reporting misuse, spam or other unfit content by `downvoting`. The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `vote` method found within the `commit` class in the the library. Before we vote on content we first check whether the user has already voted. This is not strictly necessary as a voting operation overrides the previous vote value. We use the [`get_active_votes`](https://beem.readthedocs.io/en/latest/beem.vote.html#beem.vote.ActiveVotes) function to check for this. This function only requires two parameters, the `author` and the `permlink` for the comment/post that the query is for. This returns a list of the current voters for that comment. The `vote` function has 3 parameters:
 
-1.  _identifier_ - This is a combination of the author and permink of the post/comment that the vote will be on
-1.  _weight_ - This value determines whether the vote is an upvote (+100.0) or a downvote (-100.0) but this value cannot be 0
-1.  _username_ - The name of the account that is executing the vote
+1. _identifier_ - This is a combination of the author and permink of the post/comment that the vote will be on
+1. _weight_ - This value determines whether the vote is an upvote (+100.0), a downvote (-100.0), or zero (0) to remove previous vote.
+1. _username_ - The name of the account that is executing the vote
 
 ## Steps
 
-1.  [**App setup**](#setup) - Library install and import. Connection to testnet
-1.  [**User information and steem node**](#userinfo) - Input user information and connection to Hive node
-1.  [**Check vote status**](#votestat) - Vote status of post/comment
-1.  [**Commit vote**](#commit) - Commit vote to the blockchain
+1. [**App setup**](#setup) - Library install and import. Connection to testnet
+1. [**User information**](#userinfo) - Input user information and connection to Hive node
+1. [**Check vote status**](#votestat) - Vote status of post/comment
+1. [**Commit vote**](#commit) - Commit vote to the blockchain
 
 #### 1. App setup <a name="setup"></a>
 
 In this tutorial we use 3 packages:
 
-- `steem` - steem-python library and interaction with Blockchain
+- `beem` - hive library and interaction with Blockchain
 - `pick` - helps select the query type interactively
 
 We import the libraries and connect to the `testnet`.
 
 ```python
-import steembase
-import steem
 from pick import pick
-
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
+import getpass
+from beem import Hive
+from beem.account import Account
+from beem.vote import ActiveVotes
+from beem.transactionbuilder import TransactionBuilder
+from beembase.operations import Vote
 ```
 
 Because this tutorial alters the blockchain we connect to the testnet so we don't create spam on the production server.
 
-#### 2. User information and steem node<a name="userinfo"></a>
+#### 2. User information<a name="userinfo"></a>
 
-We also require the `private posting key` of the user that wishes to vote on the selected content so the action can be committed to the blockchain. This is why we have to specify this along with the `testnet` node. The values are supplied via the terminal/console before we initialise the steem class. We have supplied a test account, `cdemo` to use with this tutorial but any account set up on the testnet can be used.
+We also require the `private posting key` of the user that wishes to vote on the selected content so the action can be committed to the blockchain. This is why we have to specify this along with the `testnet` node. The values are supplied via the terminal/console before we initialise the beem class. We have supplied a test account, `cdemo` to use with this tutorial but any account set up on the testnet can be used.
 
 ```python
-#capture user information
-username = input('Please enter your username: ')
-postingkey = input('Please enter your private posting key: ')
+# capture user information
+voter = input('Please enter your username (voter): ')
 
-#connect node and private posting key, demo account name: cdemo, posting key: 5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz
-s = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[postingkey])
+# connect node
+# If using mainnet, try with demo account: cdemo, posting key: 5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz
+client = Hive('http://127.0.0.1:8091')
 ```
 
 #### 3. Check vote status<a name="votestat"></a>
 
 In order to give the user an educated choice we first check whether they have already voted on the given post/comment. The author and permlink for the post is supplied via the console/terminal.
-If you need to find something to vote on, you can try (https://condenser.steem.vc/) YMMV.
 
 ```python
-#capture variables
+# capture variables
 author = input('Author of post/comment that you wish to vote for: ')
 permlink = input('Permlink of the post/comment you wish to vote for: ')
 ```
@@ -76,22 +71,27 @@ permlink = input('Permlink of the post/comment you wish to vote for: ')
 The vote status check is done with a simple query to the blockchain.
 
 ```python
-#check vote status
-result = s.get_active_votes(author, permlink)
+# check vote status
+# noinspection PyInterpreter
+print('checking vote status - getting current post votes')
+identifier = ('@' + author + '/' + permlink)
+author_account = Account(author)
+result = ActiveVotes(identifier)
+print(len(result), ' votes retrieved')
 ```
 
 This query returns a list of the current voters on the specified post/comment. The result is checked against the username to determine what the current status is.
 
 ```python
 if result:
-	for vote in result :
-		if vote['voter'] == username:
-			title = "This post/comment has already been voted for"
-			break
-		else:
-			title = "No vote for this post/comment has been submitted"
+  for vote in result :
+    if vote['voter'] == voter:
+      title = "This post/comment has already been voted for"
+      break
+    else:
+      title = "No vote for this post/comment has been submitted"
 else:
-	title = "No vote for this post/comment has been submitted"
+  title = "No vote for this post/comment has been submitted"
 ```
 
 #### 4. Commit vote<a name="commit"></a>
@@ -99,28 +99,36 @@ else:
 The result from the previous step is used to give the user a choice in what the next step in the operation should be.
 
 ```python
-#option to continue
-options = ['Add/Change vote', 'Cancel voting process']
+# option to continue
+options = ['Add/Change vote', 'Cancel without voting']
 option, index = pick(options, title)
 ```
 
 The user is given a choice to either continue with the vote or cancel the operation. If the user elects to continue, the `vote` function is executed. The weight of the vote is input from the UI and the identifier parameter is created by combining the author and permlink values.
 
-*It's important to note that the http client in steem-python will retry **IF** it sends an appbase query and detects a older, non-appbase error*
 ```python
-#voting commit
 if option == 'Add/Change vote':
-	weight = input('\n'+'Please advise weight of vote between -100.0 and 100 (not zero): ')
-	identifier = ('@'+author+'/'+permlink)
-	try:
-		print('Sending vote. ...')
-		s.commit.vote(identifier, float(weight), username)
-		print('\n'+'Vote sent.')
-	except (RPCErrorRecoverable, RPCError) as err: 
-		print('\n'+'Exception encountered. Unable to vote')
+  weight = input('\n' + 'Please advise weight of vote between -100.0 and 100 (zero removes previous vote): ')
+  try:
+    tx = TransactionBuilder(blockchain_instance=client)
+    tx.appendOps(Vote(**{
+      "voter": voter,
+      "author": author,
+      "permlink": permlink,
+      "weight": int(float(weight) * 100)
+    }))
+
+    wif_posting_key = getpass.getpass('Posting Key: ')
+    tx.appendWif(wif_posting_key)
+    signed_tx = tx.sign()
+    broadcast_tx = tx.broadcast(trx_id=True)
+
+    print("Vote cast successfully: " + str(broadcast_tx))
+  except Exception as e:
+    print('\n' + str(e) + '\nException encountered.  Unable to vote')
 
 else:
-	print('Voting has been cancelled')
+  print('Voting has been cancelled')
 ```
 
 When the function is executed the selected vote weight overrides any value previously recorded on the blockchain.
@@ -129,12 +137,17 @@ A simple confirmation of the chosen action is printed on the screen.
 
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/17_vote_on_content`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
 
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
 
----
+For details on running a local testnet, see: [Setting Up a Testnet]({{ '/tutorials-recipes/setting-up-a-testnet.html' | relative_url }})
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/17_vote_on_content`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-python/witness_listing_and_voting.md b/_tutorials-python/witness_listing_and_voting.md
index 80f157c0afecd7e65af980d059b2b113aadba4b0..b39ebdb25fefd193ceb0ce462af4900f1c72040c 100644
--- a/_tutorials-python/witness_listing_and_voting.md
+++ b/_tutorials-python/witness_listing_and_voting.md
@@ -4,152 +4,120 @@ position: 22
 description: "How to vote for or remove a vote for a witness user using Python."
 layout: full
 canonical_url: witness_listing_and_voting.html
----              
-<span class="fa-pull-left top-of-tutorial-repo-link"><span class="first-word">Full</span>, runnable src of [Witness Listing And Voting](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/tutorials/22_witness_listing_and_voting) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python).</span>
-<br>
-
-
+---
+Full, runnable src of [Witness Listing And Voting](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python/22_witness_listing_and_voting) can be downloaded as part of: [tutorials/python](https://gitlab.syncad.com/hive/devportal/-/tree/master/tutorials/python) (or download just this tutorial: [devportal-master-tutorials-python-22_witness_listing_and_voting.zip](https://gitlab.syncad.com/hive/devportal/-/archive/master/devportal-master.zip?path=tutorials/python/22_witness_listing_and_voting)).
 
-In this tutorial we show you how to create a list of active witnesses from the **Hive** blockchain and then vote or unvote for a witness using the `commit` class found within the [steem-python](https://github.com/steemit/steem-python) library.
+In this tutorial we show you how to create a list of current witness votes from the **Hive** blockchain and then vote or unvote for a witness using the methods found within the [beem](https://github.com/holgern/beem) library.
 
 ## Intro
 
-The Hive python library has a built-in function to transmit transactions to the blockchain. We are using the `approve_witness` and `disapprove_witness` method found within the `commit` class in the library. We also use the `get_active_witnesses` function to query the blockchain for a list of available witnesses. Before we vote, we use the `get_account` function to check for all the witnesses that the user has currently voted for. This is not strictly necessary but adds to the useability of the process. The `approve_witness` method has 3 parameters:
-
-1.  _witness_ - The witness to approve
-1.  _account_ - The source user account for the voting
-1.  _approve_ - This value is set to `True` when approving a witness
-
-The `disapprove_witness` has the same parameters except for `_approve_` which is not required.
+The beem library has a built-in function to transmit transactions to the blockchain.  We are using the [`approvewitness`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.approvewitness) and [`disapprovewitness`](https://beem.readthedocs.io/en/latest/beem.account.html#beem.account.Account.disapprovewitness) method found within the account instance.  We also use the [`WitnessesVotedByAccount`](https://beem.readthedocs.io/en/latest/beem.witness.html#beem.witness.WitnessesVotedByAccount) module to query the blockchain for a list of voted witnesses.
 
 ## Steps
 
-1.  [**App setup**](#setup) - Library install and import. Connection to testnet
-1.  [**User information and steem node**](#userinfo) - Input user information and connection to Hive node
-1.  [**Active witness list**](#list) - Create a list of active as well as already voted for witnesses
-1.  [**Vote / Unvote**](#commit) - Input witness name and commite vote/unvote to blockchain
+1. [**App setup**](#setup) - Library install and import. Connection to testnet
+1. [**User information**](#userinfo) - Input user information
+1. [**Voted witness list**](#list) - Create a list of witnesse already voted for
+1. [**Vote / Unvote**](#commit) - Input witness name and commite vote/unvote to blockchain
 
 #### 1. App setup <a name="setup"></a>
 
 In this tutorial we use 3 packages:
 
-- `steem` - steem-python library and interaction with Blockchain
+- `beem` - hive library and interaction with Blockchain
 - `pick` - helps select the query type interactively
 - `pprint` - print results in better format
 
-We import the libraries and connect to the `testnet`.
-
 ```python
-import steembase
-import steem
-from pick import pick
 import pprint
-
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
+from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
+from beem.witness import Witness, WitnessesVotedByAccount
 ```
 
 Because this tutorial alters the blockchain we connect to a testnet so we don't create spam on the production server.
 
-#### 2. User information and steem node <a name="userinfo"></a>
+#### 2. User information<a name="userinfo"></a>
 
-We require the `private active key` of the user in order for the transaction to be committed to the blockchain. This is why we are using a testnet. The values are supplied via the terminal/console before we initialise the steem class. We also check if the user name provided is active on the chain. There are some demo accounts available but we encourage you to create your own accounts on this testnet.
+We require the `private active key` of the user in order for the transaction to be committed to the blockchain.  This is why we are using a testnet.  We also check if the user name provided is active on the chain.  There are some demo accounts available but we encourage you to create your own accounts on this testnet.
 
 ```python
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private ACTIVE key: ') #demo account: 5KaNM84WWSqzwKzY82fXPaUW43idbLnPqf5SfjGxLfw6eV2kAP3
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Active Key: ')
 
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
 
-#check valid user
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
+# check valid user
+account = Account(account, blockchain_instance=client)
 ```
 
-#### 3. Active witness list <a name="list"></a>
-
-We create a list of active witnesses so the user knows which witnesses are available to vote for. We do this by sending a query to the blockchain using the `get_active_witnesses` function. The result of this query is displayed on the UI.
-
-```python
-#print list of active witnesses
-print('ACTIVE WITNESSES')
-witness_list = client.get_active_witnesses()
-pprint.pprint(witness_list)
-```
+#### 3. Voted witness list <a name="list"></a>
 
-We also provide the user with a list of witnesses that has already been voted for by their account. From this the user will know which witnesses can be removed, and which can be added to their set of approved witnesses. We generate this list using the `get_account` function and display it on the UI.
+We provide the user with a list of witnesses that have already been voted for by their account.  From this the user will know which witnesses can be removed, and which can be added to their set of approved witnesses.  We generate this list using the `Account` module and display it on the UI.
 
 ```python
-#print list of currently voted for witnesses
+# print list of currently voted for witnesses
 print('\n' + 'WITNESSES CURRENTLY VOTED FOR')
-vote_list = userinfo['witness_votes']
-pprint.pprint(vote_list)
+vote_list = WitnessesVotedByAccount(account.name, blockchain_instance=client)
+for witness in vote_list:
+  pprint.pprint(witness.account.name)
 
 input('Press enter to continue')
 ```
 
 #### 4. Vote / Unvote <a name="commit"></a>
 
-The user is given the option to `VOTE`, `UNVOTE` or `CANCEL` the process. Depending on the choice the relevant function is executed. Both the `VOTE` and `UNVOTE` methods use the same input - the witness being added or removed. The different method executions are shown below.
+The user is given the option to `VOTE`, `UNVOTE` or `CANCEL` the process.  Depending on the choice the relevant function is executed.  Both the `VOTE` and `UNVOTE` methods use the same input - the witness being added or removed.  The different method executions are shown below.
 
 ```python
-#choice of action
+# choice of action
 title = ('Please choose action')
 options = ['VOTE', 'UNVOTE', 'CANCEL']
+# get index and selected permission choice
 option, index = pick(options, title)
 
 if (option == 'CANCEL') :
     print('\n' + 'operation cancelled')
     exit()
-```
 
-VOTE :
-
-```python
 if (option == 'VOTE') :
     # vote process
     witness_vote = input('Please enter the witness name you wish to vote for: ')
-    if witness_vote not in witness_list :
-        print('\n' + witness_vote + ' does not appear on the available witness list')
-        exit()
+    witness = Witness(witness_vote, blockchain_instance=client)
     if witness_vote in vote_list :
         print('\n' + witness_vote + ' cannot be voted for more than once')
         exit()
-    client.approve_witness(witness=witness_vote, account=username, approve=True)
+    account.approvewitness(witness_vote)
     print('\n' + witness_vote + ' has been successfully voted for')
-```
-
-UNVOTE :
-
-```python
 else :
     # unvote process
     witness_unvote = input('Please enter the witness name you wish to remove the vote from: ')
     if witness_unvote not in vote_list :
         print('\n' + witness_unvote + ' is not in your voted for list')
         exit()
-    client.disapprove_witness(witness=witness_unvote, account=username)
+    account.disapprovewitness(witness_unvote)
     print('\n' + witness_unvote + ' has been removed from your voted for list')
 ```
 
 A confirmation of the transaction to the blockchain is displayed on the UI.
 
-We encourage users to play around with different values and data types to fully understand how this process works. You can also check the balances and transaction history on the [testnet portal](http://condenser.steem.vc/).
-
 ### To Run the tutorial
 
-1.  [review dev requirements](getting_started.html)
-1.  `git clone https://gitlab.syncad.com/hive/devportal.git`
-1.  `cd devportal/tutorials/python/22_witness_listing_and_voting`
-1.  `pip install -r requirements.txt`
-1.  `python index.py`
-1.  After a few moments, you should see a prompt for input in terminal screen.
+Before running this tutorial, launch your local testnet, with port 8091 mapped locally to the docker container:
 
+```bash
+docker run -d -p 8091:8091 inertia/tintoy:latest
+```
 
----
+For details on running a local testnet, see: [Setting Up a Testnet]({{ '/tutorials-recipes/setting-up-a-testnet.html' | relative_url }})
+
+1. [review dev requirements](getting_started.html)
+1. `git clone https://gitlab.syncad.com/hive/devportal.git`
+1. `cd devportal/tutorials/python/22_witness_listing_and_voting`
+1. `pip install -r requirements.txt`
+1. `python index.py`
+1. After a few moments, you should see a prompt for input in terminal screen.
diff --git a/_tutorials-recipes/calculate_rc_recipe.md b/_tutorials-recipes/calculate_rc_recipe.md
index 901bd8162b21c3c84af92e79efaceef3dc3a908f..ff4875faf8f62898525dbbf287477e4c55a3c12c 100644
--- a/_tutorials-recipes/calculate_rc_recipe.md
+++ b/_tutorials-recipes/calculate_rc_recipe.md
@@ -48,7 +48,7 @@ console.log(currentManaPerc);
 
 ## Calculating transaction cost
 
-A community created library, [beem-python](https://github.com/holgern/beem) offers a solution to calculate the RC costs for a different transaction types. The three main transaction types are: posts/comments, transfers, and vote(on posts). The beem's functions can be executed with no parameters (as seen below) to provide a rough estimate of an average operation.
+A community created library, [beem](https://github.com/holgern/beem) offers a solution to calculate the RC costs for a different transaction types. The three main transaction types are: posts/comments, transfers, and vote(on posts). The beem's functions can be executed with no parameters (as seen below) to provide a rough estimate of an average operation.
 
 ```python
 import beem
diff --git a/tutorials/python/01_using_keys_securely/index.py b/tutorials/python/01_using_keys_securely/index.py
index 3c018002278113da095b72743a1e7fba82cf932d..b8db55ebd2025909dcaaa103e3b216b44466329b 100755
--- a/tutorials/python/01_using_keys_securely/index.py
+++ b/tutorials/python/01_using_keys_securely/index.py
@@ -1,15 +1,16 @@
 # initialize Hive class
-from steem import Hive
+from beem import Hive
+from beem.account import Account
 
 # defining private keys inside source code is not secure way but possible
-s = Hive(keys=['<private_posting_key>', '<private_active_key>'])
+h = Hive(keys=['<private_posting_key>', '<private_active_key>'])
+a = Account('demo', blockchain_instance=h)
 
 # above will allow accessing Commit methods such as
 # demo account sending 0.001 HIVE to demo1 account
 
-s.commit.transfer('demo','0.001','HIVE','memo text','demo1')
+a.transfer('demo1', '0.001', 'HIVE', memo='memo text')
 
 # if private keys are not defined
 # accessing Wallet methods are also possible and secure way
-s.wallet.get_active_key_for_account('demo')
-
+h.wallet.getActiveKeyForAccount('demo')
diff --git a/tutorials/python/01_using_keys_securely/requirements.txt b/tutorials/python/01_using_keys_securely/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/01_using_keys_securely/requirements.txt
+++ b/tutorials/python/01_using_keys_securely/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/04_get_posts/index.py b/tutorials/python/04_get_posts/index.py
index 8362beded834afc3c261be3a69bff6ccaa3969af..65cf1e81702891d0f80d2c921c27ede61d7a5277 100755
--- a/tutorials/python/04_get_posts/index.py
+++ b/tutorials/python/04_get_posts/index.py
@@ -1,9 +1,10 @@
 import pprint
 from pick import pick
 # initialize Hive class
-from steem import Hive
+from beem import Hive
+from beem.discussions import Query, Discussions
 
-s = Hive()
+h = Hive()
 
 title = 'Please choose filter: '
 #filters list
@@ -11,19 +12,22 @@ options = ['trending', 'hot', 'active', 'created', 'promoted']
 # get index and selected filter name
 option, index = pick(options, title)
 
-query = {
-	"limit":2, #number of posts
-	"tag":"" #tag of posts
-	}
+q = Query(limit=2, tag="")
+d = Discussions()
+count = 0
+
 #post list for selected query
-posts = {0: s.get_discussions_by_trending(query),
-		 1: s.get_discussions_by_hot(query),
-		 2: s.get_discussions_by_active(query),
-		 3: s.get_discussions_by_created(query),
-		 4: s.get_discussions_by_promoted(query)
+posts = {
+  0: d.get_discussions('trending', q, limit=2),
+  1: d.get_discussions('hot', q, limit=2),
+  2: d.get_discussions('active', q, limit=2),
+  3: d.get_discussions('created', q, limit=2),
+  4: d.get_discussions('promoted', q, limit=2)
 }
 
 # print post list for selected filter
-pprint.pprint(posts[index])
+for p in posts[index]:
+  print(("%d. " % (count + 1)) + str(p))
+  count += 1
 
-pprint.pprint("Selected: "+option)
\ No newline at end of file
+pprint.pprint("Selected: " + option)
diff --git a/tutorials/python/04_get_posts/requirements.txt b/tutorials/python/04_get_posts/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/04_get_posts/requirements.txt
+++ b/tutorials/python/04_get_posts/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/05_get_post_details/index.py b/tutorials/python/05_get_post_details/index.py
index dc11c43d1e28d22d6f139a0c8410bffad771bb95..a4d2320139bb3069bd81173204d9fc016475b714 100755
--- a/tutorials/python/05_get_post_details/index.py
+++ b/tutorials/python/05_get_post_details/index.py
@@ -1,30 +1,33 @@
 import pprint
 from pick import pick
 # initialize Hive class
-from steem import Hive
+from beem import Hive
+from beem.discussions import Query, Discussions
+from beem.comment import Comment
 
-s = Hive()
+h = Hive()
+
+q = Query(limit=2, tag="")
+d = Discussions()
 
-query = {
-	"limit":5, #number of posts
-	"tag":"" #tag of posts
-	}
 #post list for selected query
-posts = s.get_discussions_by_created(query)
+posts = d.get_discussions('created', q, limit=2)
 
 title = 'Please choose post: '
 options = []
+
 #posts list
 for post in posts:
-	options.append(post["author"]+'/'+post["permlink"])
+  options.append(post["author"] + '/' + post["permlink"])
+
 # get index and selected filter name
 option, index = pick(options, title)
 
-# posts[index] would also show post details
-# but in this tutorial we are showing usage of get_content of post where author and permlink is known
-
-details = s.get_content(posts[index]["author"],posts[index]["permlink"])
+details = Comment(option)
 
-# print post details for selected post
-pprint.pprint(details)
-pprint.pprint("Selected: "+option)
\ No newline at end of file
+# print post body for selected post
+# Also see: https://beem.readthedocs.io/en/latest/beem.comment.html#beem.comment.Comment
+pprint.pprint('Depth: ' + str(details.depth))
+pprint.pprint('Author: ' + details.author)
+pprint.pprint('Category: ' + details.category)
+pprint.pprint('Body: ' + details.body)
diff --git a/tutorials/python/05_get_post_details/requirements.txt b/tutorials/python/05_get_post_details/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/05_get_post_details/requirements.txt
+++ b/tutorials/python/05_get_post_details/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/06_get_voters_list_on_post/index.py b/tutorials/python/06_get_voters_list_on_post/index.py
index a895e7aff40e9c8d0635c0b8c9d478264d3a21f2..64de1e24645976bac3e738635de3c4c0370f1d8f 100755
--- a/tutorials/python/06_get_voters_list_on_post/index.py
+++ b/tutorials/python/06_get_voters_list_on_post/index.py
@@ -1,30 +1,30 @@
 import pprint
 from pick import pick
 # initialize Hive class
-from steem import Hive
+from beem import Hive
+from beem.discussions import Query, Discussions
+from beem.vote import ActiveVotes
 
-s = Hive()
+h = Hive()
+q = {"limit": 5, "tag": "", "before_date": None}
+d = Discussions()
 
-query = {
-	"limit":5, #number of posts
-	"tag":"" #tag of posts
-	}
 #post list for selected query
-posts = s.get_discussions_by_active(query)
+posts = d.get_discussions('hot', q, limit=5)
 
 title = 'Please choose post: '
 options = []
+
 #posts list
 for post in posts:
-	options.append(post["author"]+'/'+post["permlink"])
+	options.append(post["author"] + '/' + post["permlink"])
+
 # get index and selected filter name
 option, index = pick(options, title)
 
-# posts[index] would also have active voters info
-# but in this tutorial we are showing usage of get_active_votes of post where author and permlink is known/selected
+voters = ActiveVotes(option)
 
-voters = s.get_active_votes(posts[index]["author"],posts[index]["permlink"])
+# print voters list for selected post
+voters.printAsTable()
+pprint.pprint("Selected: " + option)
 
-# print post details for selected post
-pprint.pprint(voters)
-pprint.pprint("Selected: "+option)
\ No newline at end of file
diff --git a/tutorials/python/06_get_voters_list_on_post/requirements.txt b/tutorials/python/06_get_voters_list_on_post/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/06_get_voters_list_on_post/requirements.txt
+++ b/tutorials/python/06_get_voters_list_on_post/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/07_get_post_comments/index.py b/tutorials/python/07_get_post_comments/index.py
index a93bda7ca42dd2ebcb25030455d79563c26526a4..49572b882d803ddd4eba193255b66838a752808c 100755
--- a/tutorials/python/07_get_post_comments/index.py
+++ b/tutorials/python/07_get_post_comments/index.py
@@ -1,29 +1,34 @@
 import pprint
 from pick import pick
 # initialize Hive class
-from steem import Hive
+from beem import Hive
+from beem.discussions import Query, Discussions
+from beem.comment import Comment
 
-s = Hive()
+h = Hive()
+q = Query(limit=2, tag="")
+d = Discussions()
 
-query = {
-	"limit":5, #number of posts
-	"tag":"" #tag of posts
-	}
 #post list for selected query
-posts = s.get_discussions_by_hot(query)
+posts = d.get_discussions('hot', q, limit=2)
 
 title = 'Please choose post: '
 options = []
+
 #posts list
 for post in posts:
 	options.append(post["author"]+'/'+post["permlink"])
+
 # get index and selected filter name
 option, index = pick(options, title)
 
+details = Comment(option)
+
 # get replies for given post
-replies = s.get_content_replies(posts[index]["author"],posts[index]["permlink"])
+replies = details.get_all_replies()
 
 # print post details for selected post
 pprint.pprint(replies)
-pprint.pprint("Selected: "+option)
-pprint.pprint("Number of replies: "+str(len(replies)))
\ No newline at end of file
+pprint.pprint("Selected: " + option)
+pprint.pprint("Number of replies: " + str(len(replies)))
+
diff --git a/tutorials/python/07_get_post_comments/requirements.txt b/tutorials/python/07_get_post_comments/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/07_get_post_comments/requirements.txt
+++ b/tutorials/python/07_get_post_comments/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/08_get_account_replies/index.py b/tutorials/python/08_get_account_replies/index.py
index a3a8e6098757c3b8c98999f0a21f04889ce28a0f..a14cea13c4b5a98cdf41e3356374e204740899ee 100755
--- a/tutorials/python/08_get_account_replies/index.py
+++ b/tutorials/python/08_get_account_replies/index.py
@@ -1,39 +1,43 @@
 import pprint
 from pick import pick
 # initialize Hive class
-from steem import Hive
+from beem import Hive
+from beem.discussions import Query, Discussions
+from beem.account import Account
 
-s = Hive()
+h = Hive()
+q = Query(limit=2, tag="")
+d = Discussions()
 
-query = {
-	"limit":5, #number of posts
-	"tag":"" #tag of posts
-	}
 #post list for selected query
 #we are merely using this to display the most recent posters
-#the 'author' can easily be changed to any value within the 'get_replies' function
+#the 'author' can easily be changed to any value within the 'reply_history' function
 
-posts = s.get_discussions_by_created(query)
+posts = d.get_discussions('created', q, limit=2)
 
 title = 'Please choose author: '
 options = []
 #posts list
 for post in posts:
-	options.append(post["author"]+'/'+post["permlink"])
+  options.append(post["author"])
+
 # get index and selected filter name
 option, index = pick(options, title)
+
 # option is printed as reference
-pprint.pprint("Selected: "+option)
+pprint.pprint("Selected: " + option)
 
-# in this tutorial we are showing usage of get_replies of post where the author is known
+# in this tutorial we are showing usage of reply_history of post where the author is known
 
 # allocate variables
-_author = posts[index]["author"]
+_author = Account(option)
 _limit = 1
 
 # get replies for specific author
-details = s.get_replies(_author)
+replies = _author.reply_history(limit=_limit)
 
 # print specified number of comments
 
-pprint.pprint(details[:_limit])
\ No newline at end of file
+for reply in replies:
+  pprint.pprint(reply.body)
+
diff --git a/tutorials/python/08_get_account_replies/requirements.txt b/tutorials/python/08_get_account_replies/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/08_get_account_replies/requirements.txt
+++ b/tutorials/python/08_get_account_replies/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/09_get_account_comments/index.py b/tutorials/python/09_get_account_comments/index.py
index 569c60168b318b3e3f7b164310f4077c9aa9c49d..b83a5413db5336f8f9177e1329ea8e926c9dcbf9 100755
--- a/tutorials/python/09_get_account_comments/index.py
+++ b/tutorials/python/09_get_account_comments/index.py
@@ -1,34 +1,33 @@
 import pprint
 from pick import pick
 # initialize Hive class
-from steem import Hive
+from beem import Hive
+from beem.discussions import Query, Discussions
 
-s = Hive()
+h = Hive()
+q = Query(limit=2, tag="")
+d = Discussions()
 
-query = {
-	"limit":5, #number of posts
-	"tag":"" #tag of posts
-}
 #author list from created post list to randomize account list
-posts = s.get_discussions_by_created(query)
+posts = d.get_discussions('created', q, limit=2)
 
 title = 'Please choose account: '
 options = []
 #accounts list
 for post in posts:
-	options.append(post["author"])
+  options.append(post["author"])
 
 # get index and selected account name
 option, index = pick(options, title)
 
-query2 = {
-	"limit":5, #number of comments
-	"start_author":option #selected user
-}
+# 5 comments from selected author
+q = Query(limit=5, start_author=option) 
 
 # get comments of selected account
-comments = s.get_discussions_by_comments(query2)
+comments = d.get_discussions('comments', q, limit=5)
 
 # print comment details for selected account
-pprint.pprint(comments)
-pprint.pprint("Selected: "+option)
\ No newline at end of file
+for comment in comments:
+  pprint.pprint(comment)
+pprint.pprint("Selected: " + option)
+
diff --git a/tutorials/python/09_get_account_comments/requirements.txt b/tutorials/python/09_get_account_comments/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/09_get_account_comments/requirements.txt
+++ b/tutorials/python/09_get_account_comments/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/10_submit_post/index.py b/tutorials/python/10_submit_post/index.py
index cb3a311f189137df65f869f5c7c3ce048a7315d2..76c1e8d1697cfb7817ce68f52bd26de97834c400 100755
--- a/tutorials/python/10_submit_post/index.py
+++ b/tutorials/python/10_submit_post/index.py
@@ -1,16 +1,10 @@
 import random
 import string
-import steembase
-import steem
-
-# connect to testnet
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
-
-#connect node and private posting key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=['5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz'])
+import getpass
+import json
+from beem import Hive
+from beem.transactionbuilder import TransactionBuilder
+from beembase.operations import Comment
 
 #capture variables
 author = input('Username: ')
@@ -21,14 +15,29 @@ body = input('Post Body: ')
 taglimit = 2 #number of tags 1 - 5
 taglist = []
 for i in range(1, taglimit+1):
-	print(i)
-	tag = input(' Tag : ')
-	taglist.append(tag)
-" ".join(taglist) #create string joined with empty spaces
+  print(i)
+  tag = input(' Tag : ')
+  taglist.append(tag)
 
 #random generator to create post permlink
 permlink = ''.join(random.choices(string.digits, k=10))
 
-client.commit.post(title=title, body=body, author=author, tags=taglist, permlink=permlink)
+client = Hive('http://127.0.0.1:8091')
+tx = TransactionBuilder(blockchain_instance=client)
+tx.appendOps(Comment(**{
+  "parent_author": '',
+  "parent_permlink": taglist[0], # we use the first tag as the category
+  "author": author,
+  "permlink": permlink,
+  "title": title,
+  "body": body,
+  "json_metadata": json.dumps({"tags": taglist})
+}))
+
+wif_posting_key = getpass.getpass('Posting Key: ')
+tx.appendWif(wif_posting_key)
+signed_tx = tx.sign()
+broadcast_tx = tx.broadcast(trx_id=True)
+
+print("Post created successfully: " + str(broadcast_tx))
 
-print("Post created successfully")
\ No newline at end of file
diff --git a/tutorials/python/10_submit_post/requirements.txt b/tutorials/python/10_submit_post/requirements.txt
index bd67f71d56252aaaaf16c61227f4fca3e2e1a2c0..c33c518c1d3222b6b457eb58dca3f8a5f3b37daf 100755
--- a/tutorials/python/10_submit_post/requirements.txt
+++ b/tutorials/python/10_submit_post/requirements.txt
@@ -1,4 +1,3 @@
-steem
-steembase
+beem
 random
-string
\ No newline at end of file
+string
diff --git a/tutorials/python/11_submit_comment_reply/index.py b/tutorials/python/11_submit_comment_reply/index.py
index 63713ebd2abb0f344030d0b51e807154a8a9da8a..ad228c92c37a27ac339e0b8d51def2d073efae00 100755
--- a/tutorials/python/11_submit_comment_reply/index.py
+++ b/tutorials/python/11_submit_comment_reply/index.py
@@ -1,32 +1,35 @@
 import random
 import string
-import steembase
-import steem
-
-# connect to testnet
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
+import getpass
+from beem import Hive
+from beem.transactionbuilder import TransactionBuilder
+from beembase.operations import Comment
 
 #capture variables
-parentAuthor = input('Parent author: ')
-parentPermlink = input('Parent permlink: ')
+parent_author = input('Parent author: ')
+parent_permlink = input('Parent permlink: ')
 author = input('Username: ')
-wif = input('Private posting key: ')
-body = input('Comment Body: ')
-
-#combining parent values to create reply identifier
-reply_identifier = '/'.join([parentAuthor,parentPermlink])
+title = input('Post Title: ')
+body = input('Post Body: ')
 
 #random generator to create post permlink
 permlink = ''.join(random.choices(string.digits, k=10))
 
-#connect node and private posting key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
+client = Hive('http://127.0.0.1:8091')
+tx = TransactionBuilder(blockchain_instance=client)
+tx.appendOps(Comment(**{
+  "parent_author": parent_author,
+  "parent_permlink": parent_permlink,
+  "author": author,
+  "permlink": permlink,
+  "title": title,
+  "body": body
+}))
+
+wif_posting_key = getpass.getpass('Posting Key: ')
+tx.appendWif(wif_posting_key)
+signed_tx = tx.sign()
+broadcast_tx = tx.broadcast(trx_id=True)
 
-#commit post to blockchain
-client.commit.post(title='', body=body, author=author, permlink=permlink, reply_identifier=reply_identifier)
+print("Comment created successfully: " + str(broadcast_tx))
 
-print("Comment created successfully")
-print(permlink)
\ No newline at end of file
diff --git a/tutorials/python/11_submit_comment_reply/requirements.txt b/tutorials/python/11_submit_comment_reply/requirements.txt
index bd67f71d56252aaaaf16c61227f4fca3e2e1a2c0..e514a9c54face2d01b4e2fa4888298e4b4df51a9 100755
--- a/tutorials/python/11_submit_comment_reply/requirements.txt
+++ b/tutorials/python/11_submit_comment_reply/requirements.txt
@@ -1,4 +1 @@
-steem
-steembase
-random
-string
\ No newline at end of file
+beem
diff --git a/tutorials/python/12_edit_content_patching/index.py b/tutorials/python/12_edit_content_patching/index.py
index d93bd69dd7b9473d5b933013617f08518376655a..1ee9ef6bb29355c0fbd58f8746451a1dddf01ac0 100755
--- a/tutorials/python/12_edit_content_patching/index.py
+++ b/tutorials/python/12_edit_content_patching/index.py
@@ -1,51 +1,52 @@
-import steembase
-import steem
+import beem
+import getpass
+from beem import Hive
+from beem.account import Account
+from beem.comment import Comment
+from beem.transactionbuilder import TransactionBuilder
+from beembase import operations
 from diff_match_patch import diff_match_patch
 
-# connect to testnet
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
-
 #capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private POSTING key: ') #demo account: 5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz
+post_author = input('Please enter the AUTHOR of the post you want to edit: ')
 
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
+#connect node
+client = Hive('http://127.0.0.1:8091')
 
-#check valid username
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
+#check valid post_author
+try:
+  userinfo = Account(post_author, blockchain_instance=client)
+except:
+  print('Oops. Looks like user ' + post_author + ' doesn\'t exist on this chain!')
+  exit()
 
-post_author = input('Please enter the AUTHOR of the post you want to edit: ')
 post_permlink = input('Please enter the PERMLINK of the post you want to edit: ')
 
 #get details of selected post
-details = client.get_content(post_author, post_permlink)
+try:
+  details = beem.comment.Comment(post_author + '/' + post_permlink)
+except:
+  print('Oops. Looks like ' + post_author + '/' + post_permlink + ' doesn\'t exist on this chain!')
+  exit()
 
-print('\n' + 'Title: ' + details['title'])
-o_body = details['body']
+print('\n' + 'Title: ' + details.title)
+o_body = details.body
 print('Body:' + '\n' + o_body + '\n')
 
 n_body = input('Please enter new post content:' + '\n')
 
 #initialise the diff match patch module
-# dmp = dmp_module.diff_match_patch()
 dmp = diff_match_patch()
 
 #Check for null input
 if (n_body == '') :
-    print('\n' + 'No new post body supplied. Operation aborted')
-    exit()
+  print('\n' + 'No new post body supplied. Operation aborted')
+  exit()
 else :
-    # Check for equality
-    if (o_body == n_body) :
-        print('\n' + 'No changes made to post body. Operation aborted')
-        exit()
+  # Check for equality
+  if (o_body == n_body) :
+    print('\n' + 'No changes made to post body. Operation aborted')
+    exit()
 
 #check for differences in the text field
 diff = dmp.diff_main(o_body, n_body)
@@ -57,12 +58,25 @@ patch = dmp.patch_make(o_body, diff)
 patch_body = dmp.patch_toText(patch)
 #check patch length
 if (len(patch_body) < len(o_body)) :
-    new_body = patch_body
+  new_body = patch_body
 else :
-    new_body = n_body
-    
-#commit post to blockchain with all old values and new body text
-client.commit.post(title=details['title'], body=new_body, author=details['author'], permlink=details['permlink'],
-    json_metadata=details['json_metadata'], reply_identifier=(details['parent_author'] + '/' + details['parent_permlink']))
+  new_body = n_body
+
+tx = TransactionBuilder(blockchain_instance=client)
+tx.appendOps(operations.Comment(**{
+  "parent_author": details.parent_author,
+  "parent_permlink": details.parent_permlink,
+  "author": details.author,
+  "permlink": details.permlink,
+  "title": details.title,
+  "body": new_body,
+  "json_metadata": details.json_metadata
+}))
+
+wif_posting_key = getpass.getpass('Posting Key: ')
+tx.appendWif(wif_posting_key)
+signed_tx = tx.sign()
+broadcast_tx = tx.broadcast(trx_id=True)
+
+print('\n' + 'Content of the post has been successfully updated: ' + str(broadcast_tx))
 
-print('\n' + 'Content of the post has been successfully updated')
\ No newline at end of file
diff --git a/tutorials/python/12_edit_content_patching/requirements.txt b/tutorials/python/12_edit_content_patching/requirements.txt
index ff34132ed1d72b8eda8944433a7d2d2bd2122c40..9c129bbded7e8034f732577ebc09170c8da623dd 100755
--- a/tutorials/python/12_edit_content_patching/requirements.txt
+++ b/tutorials/python/12_edit_content_patching/requirements.txt
@@ -1,2 +1,2 @@
-steem
-diff_match_patch
\ No newline at end of file
+beem
+diff_match_patch
diff --git a/tutorials/python/13_stream_blockchain_transactions/index.py b/tutorials/python/13_stream_blockchain_transactions/index.py
index 5789a94aa5ea70ac5c5d66fab57d83c59e089b83..fd70e2d19836738f0405cd6df2ebf1cddf9d8c1f 100755
--- a/tutorials/python/13_stream_blockchain_transactions/index.py
+++ b/tutorials/python/13_stream_blockchain_transactions/index.py
@@ -1,8 +1,14 @@
-from steem.blockchain import Blockchain
+from beem.blockchain import Blockchain
+from beem import Hive
 
-blockchain = Blockchain()
+h = Hive()
+blockchain = Blockchain(blockchain_instance=h)
 stream = blockchain.stream()
 
-for post in stream:
-	print(post)
+for op in stream:
+  if op["type"] == 'comment':
+    if len(op["parent_author"]) == 0:
+      print(op["author"] + " authored a post: " + op["title"])
+    else:
+      print(op["author"] + " replied to " + op["parent_author"])
     
diff --git a/tutorials/python/13_stream_blockchain_transactions/requirements.txt b/tutorials/python/13_stream_blockchain_transactions/requirements.txt
index 2b32de3588befe86f88e0abe9cf06343c571cea3..f4ccc8f1ae8a834219c2d0a274f9abadca1f1f54 100755
--- a/tutorials/python/13_stream_blockchain_transactions/requirements.txt
+++ b/tutorials/python/13_stream_blockchain_transactions/requirements.txt
@@ -1,4 +1,3 @@
-steem
-steembase
+beem
 json
-datetime
\ No newline at end of file
+datetime
diff --git a/tutorials/python/14_reblogging_post/index.py b/tutorials/python/14_reblogging_post/index.py
index 558b7f8c807db0e75fa83becf82ceb7faa10bc73..8e93521ca6ef942b7719f8847489394da234ce2b 100755
--- a/tutorials/python/14_reblogging_post/index.py
+++ b/tutorials/python/14_reblogging_post/index.py
@@ -1,33 +1,51 @@
 import pprint
 from pick import pick
+import getpass
+import json
 # initialize Hive class
-from steem import Hive
-from steem.commit import Commit
+from beem import Hive
+from beem.discussions import Query, Discussions
+from beem.comment import Comment
+from beem.transactionbuilder import TransactionBuilder
+from beembase.operations import Custom_json
 
-s = Hive()
+hive = Hive(['http://127.0.0.1:8091'])
+q = Query(limit=5, tag="")
+d = Discussions()
 
-query = {
-	"limit":5, #number of posts
-	"tag":"" #tag of posts
-}
-# post list from trending post list
-posts = s.get_discussions_by_trending(query)
+#author list from hot post list
+posts = d.get_discussions('hot', q, limit=5)
 
 title = 'Please choose post to reblog: '
 options = []
 # post list
 for post in posts:
-	options.append('@'+post["author"]+'/'+post["permlink"])
+  options.append('@' + post["author"] + '/' + post["permlink"])
 
 # get index and selected post
 option, index = pick(options, title)
-pprint.pprint("You selected: "+option)
+pprint.pprint("You selected: " + option)
+
+comment = Comment(option, blockchain_instance=hive)
 
 account = input("Enter your username? ")
-wif = input("Enter your Posting private key? ")
 
-# commit or build transaction
-c = Commit(steem=Hive(keys=[wif]))
+tx = TransactionBuilder(blockchain_instance=hive)
+tx.appendOps(Custom_json(**{
+  'required_auths': [],
+  'required_posting_auths': [account],
+  'id': 'reblog',
+  'json': json.dumps(['reblog', {
+    'account': account,
+    'author': comment.author,
+    'permlink': comment.permlink
+  }])
+}))
+
+wif_posting_key = getpass.getpass('Posting Key: ')
+tx.appendWif(wif_posting_key)
+signed_tx = tx.sign()
+broadcast_tx = tx.broadcast(trx_id=True)
+
+print("Reblogged successfully: " + str(broadcast_tx))
 
-# broadcast transaction
-c.resteem(option, account=account)
diff --git a/tutorials/python/14_reblogging_post/requirements.txt b/tutorials/python/14_reblogging_post/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/14_reblogging_post/requirements.txt
+++ b/tutorials/python/14_reblogging_post/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/15_search_accounts/index.py b/tutorials/python/15_search_accounts/index.py
index ea7ade38c6ad602c47518b3a065a8f44e66d9ac9..6d5b1e3d45d4adf9db708f4ce74042ad59784d16 100755
--- a/tutorials/python/15_search_accounts/index.py
+++ b/tutorials/python/15_search_accounts/index.py
@@ -1,31 +1,36 @@
-from steem import Hive
+from beem import Hive
 from pick import pick
+from beem.blockchain import Blockchain
+from beem.discussions import Query, Trending_tags
 
 # initialize Hive class
 
-s = Hive()
+h = Hive()
 
-#choose list type
+# choose list type
 title = 'Please select type of list:'
 options = ['Active Account names', 'Trending tags']
 
-#get index and selected list name
+# get index and selected list name
 option, index = pick(options, title)
 
-if option=='Active Account names' :
-	#capture starting account
-	account = input("Enter account name to start search from: ")
-	#input list limit
-	limit = input("Enter max number of accounts to display: ")
-	lists = s.lookup_accounts(account, limit)
-	print('\n' + "List of " + option + '\n')
-	print(*lists, sep='\n')
-else :
-	#capture starting tag
-	aftertag = input("Enter tag name to start search from: ")
-	#capture list limit
-	limit = input("Enter max number of tags to display: ")
-	lists = s.get_trending_tags(aftertag, limit)
-	print('\n' + "List of " + option + '\n')
-	for names in lists :
-		print(names["name"])
\ No newline at end of file
+if option == 'Active Account names':
+  context = Blockchain(blockchain_instance=h)
+  # capture starting account
+  account = input("Enter account name to start search from: ")
+  # input list limit
+  limit = input("Enter max number of accounts to display: ")
+  print('\n' + "List of " + option + '\n')
+  accounts = []
+  for a in context.get_all_accounts(start=account, limit=int(limit)):
+    print(a)
+else:
+  # capture starting tag
+  aftertag = input("Enter tag name to start search from: ")
+  # capture list limit
+  limit = input("Enter max number of tags to display: ")
+  print('\n' + "List of " + option + '\n')
+  q = Query(limit=int(limit), start_tag=aftertag)
+  for t in Trending_tags(q):
+    print(t['name'])
+
diff --git a/tutorials/python/15_search_accounts/requirements.txt b/tutorials/python/15_search_accounts/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/15_search_accounts/requirements.txt
+++ b/tutorials/python/15_search_accounts/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/17_vote_on_content/index.py b/tutorials/python/17_vote_on_content/index.py
index bfc891ad3d9ddb5d0099893f9ca2f84109efa303..97d2516961aa857c2e027efe3df3d20419368f92 100755
--- a/tutorials/python/17_vote_on_content/index.py
+++ b/tutorials/python/17_vote_on_content/index.py
@@ -1,58 +1,64 @@
-import steembase
-import steem
 from pick import pick
-from steembase.exceptions import RPCError, RPCErrorRecoverable
+import getpass
+from beem import Hive
+from beem.account import Account
+from beem.vote import ActiveVotes
+from beem.transactionbuilder import TransactionBuilder
+from beembase.operations import Vote
 
-# connect to testnet
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
+# capture user information
+voter = input('Please enter your username (voter): ')
 
-#capture user information
-username = input('Please enter your username: ') #'cdemo'
-postingkey = input('Please enter your private posting key: ') #'5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz'
+# connect node
+# If using mainnet, try with demo account: cdemo, posting key: 5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz
+client = Hive('http://127.0.0.1:8091')
 
-#connect node and private posting key, demo account being used: cdemo, posting key: 5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz
-s = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[postingkey])
-
-#capture variables
+# capture variables
 author = input('Author of post/comment that you wish to vote for: ')
 permlink = input('Permlink of the post/comment you wish to vote for: ')
 
-#check vote status
+# check vote status
 # noinspection PyInterpreter
 print('checking vote status - getting current post votes')
-result = s.get_active_votes(author, permlink)
+identifier = ('@' + author + '/' + permlink)
+author_account = Account(author)
+result = ActiveVotes(identifier)
 print(len(result), ' votes retrieved')
 
 if result:
-	for vote in result :
-		if vote['voter'] == username:
-			title = "This post/comment has already been voted for"
-			break
-		else:
-			title = "No vote for this post/comment has been submitted"
+  for vote in result :
+    if vote['voter'] == voter:
+      title = "This post/comment has already been voted for"
+      break
+    else:
+      title = "No vote for this post/comment has been submitted"
 else:
-	title = "No vote for this post/comment has been submitted"
+  title = "No vote for this post/comment has been submitted"
 
-#option to continue
-options = ['Add/Change vote', 'Cancel voting process']
+# option to continue
+options = ['Add/Change vote', 'Cancel without voting']
 option, index = pick(options, title)
 
-#voting commit
 if option == 'Add/Change vote':
-	weight = input('\n'+'Please advise weight of vote between -100.0 and 100 (not zero): ')
-	identifier = ('@'+author+'/'+permlink)
-	try:
-		print('Sending vote. You may see \'ERROR:root:Downgrade-retry... \' below. This does not necessarily mean the vote failed. Just that the node you are connected to was expected to support appbase but does not. A different error, however, is a problem.')
-		s.commit.vote(identifier, float(weight), username)
-		print('\n'+'Vote sent.')
-	except (RPCErrorRecoverable, RPCError) as err: #not printing the error, as we expect it to have been output by steem-python already.
-		print('\n'+'Exception encountered. Unable to vote')
+  weight = input('\n' + 'Please advise weight of vote between -100.0 and 100 (zero removes previous vote): ')
+  try:
+    tx = TransactionBuilder(blockchain_instance=client)
+    tx.appendOps(Vote(**{
+      "voter": voter,
+      "author": author,
+      "permlink": permlink,
+      "weight": int(float(weight) * 100)
+    }))
 
-else:
-	print('Voting has been cancelled')
+    wif_posting_key = getpass.getpass('Posting Key: ')
+    tx.appendWif(wif_posting_key)
+    signed_tx = tx.sign()
+    broadcast_tx = tx.broadcast(trx_id=True)
 
-exit()
+    print("Vote cast successfully: " + str(broadcast_tx))
+  except Exception as e:
+    print('\n' + str(e) + '\nException encountered.  Unable to vote')
+
+else:
+  print('Voting has been cancelled')
 
diff --git a/tutorials/python/17_vote_on_content/requirements.txt b/tutorials/python/17_vote_on_content/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/17_vote_on_content/requirements.txt
+++ b/tutorials/python/17_vote_on_content/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/18_follow_a_user/index.py b/tutorials/python/18_follow_a_user/index.py
index 294e78f079a23733f46dde35feaa36b300bc62f1..c70ffabf1f566b58056878b633a9a6dd1bc83890 100755
--- a/tutorials/python/18_follow_a_user/index.py
+++ b/tutorials/python/18_follow_a_user/index.py
@@ -1,48 +1,79 @@
-import steembase
-import steem
+import getpass
+import json
 from pick import pick
+import beem
+from beem.account import Account
+from beem.transactionbuilder import TransactionBuilder
+from beembase.operations import Custom_json
 
-# connect to testnet
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
+# capture user information
+account = input('Please enter your username: ')
 
-#capture user information
-username = input('Please enter your username: ')
-postingkey = input('Please enter your private posting key: ')
+# capture variables
+author = input('Author to follow: ')
 
-#connect node and private posting key, demo account being used: cdemo, posting key: 5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz
-s = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[postingkey])
+if author == account:
+  print("Do you follow yourself?")
+  exit()
 
-#capture variables
-author = input('Author to follow: ')
+# connect node and private posting key, demo account being used: cdemo, posting key: 5JEZ1EiUjFKfsKP32b15Y7jybjvHQPhnvCYZ9BW62H1LDUnMvHz
+hive = beem.Hive('http://127.0.0.1:8091')
 
-#check author status
-result = s.get_account(author)
+author = Account(author, blockchain_instance=hive)
+account = Account(account, blockchain_instance=hive)
+already_following = False
 
-if result :
-	#check current follow status of specified author
-	follow = s.get_following(username, author, 'blog', 1)
-	if len(follow) > 0 and follow[0]['following'] == author :
-		title = "Author is already being followed, please choose action"
-	else:
-		title = "Author has not yet been followed, please choose action"
+if author:
+  # check current follow status of specified author
+  following = account.get_following()
+  
+  if len(following) > 0 and author.name in following:
+    title = "Author is already being followed, please choose action"
+    already_following = True
+  else:
+    title = "Author has not yet been followed, please choose action"
 else:
-	print('Author does not exist')
-	exit()
+  print('Author does not exist')
+  exit()
 
-#get index and selected action
+# get index and selected action
 options = ['Follow', 'Unfollow', 'Exit']
 option, index = pick(options, title)
+tx = TransactionBuilder(blockchain_instance=hive)
 
-#parameters: author, what=['blog'], account=user)
 if option == 'Follow' :
-	s.commit.follow(author, ['blog'], username)
-	print(author + ' is now being followed')
-else:
-	if option == 'Unfollow' :
-		s.commit.unfollow(author, ['blog'], username)
-		print(author + ' has now been unfollowed')
-	else:
-		print('Action Cancelled')
\ No newline at end of file
+  if not already_following:
+    tx.appendOps(Custom_json(**{
+      'required_auths': [],
+      'required_posting_auths': [account.name],
+      'id': 'follow',
+      'json': json.dumps(['follow', {
+        'follower': account.name,
+        'following': author.name,
+        'what': ['blog'] # set what to follow
+      }])
+    }))
+elif option == 'Unfollow' :
+  if already_following:
+    tx.appendOps(Custom_json(**{
+      'required_auths': [],
+      'required_posting_auths': [account.name],
+      'id': 'follow',
+      'json': json.dumps(['follow', {
+        'follower': account.name,
+        'following': author.name,
+        'what': [] # clear previous follow
+      }])
+    }))
+
+if len(tx.ops) == 0:
+  print('Action Cancelled')
+  exit()
+
+wif_posting_key = getpass.getpass('Posting Key: ')
+tx.appendWif(wif_posting_key)
+signed_tx = tx.sign()
+broadcast_tx = tx.broadcast(trx_id=True)
+
+print(option + ' ' + author.name + ": " + str(broadcast_tx))
+
diff --git a/tutorials/python/18_follow_a_user/requirements.txt b/tutorials/python/18_follow_a_user/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/18_follow_a_user/requirements.txt
+++ b/tutorials/python/18_follow_a_user/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/19_get_follower_and_following_list/index.py b/tutorials/python/19_get_follower_and_following_list/index.py
index f2a2cbf6e0594f39bdfde1828f4e50c160f12d77..fe8c19b5baf43f7e8cd166b2f2ef9bf09a4ae34b 100755
--- a/tutorials/python/19_get_follower_and_following_list/index.py
+++ b/tutorials/python/19_get_follower_and_following_list/index.py
@@ -1,39 +1,40 @@
 from pick import pick
 # initialize Hive class
-from steem import Hive
+from beem import Hive
+from beem.account import Account
 
-s = Hive()
+hive = Hive()
 
-#capture username
-username = input("Username: ")
+# capture username
+account = input("Username: ")
+account = Account(account, blockchain_instance=hive)
 
-#capture list limit
+# capture list limit
 limit = input("Max number of followers(ing) to display: ")
+limit = int(limit)
 
-#list type
+# list type
 title = 'Please choose the type of list: '
 options = ['Follower', 'Following']
 
-#get index and selected list name
+# get index and selected list name
 option, index = pick(options, title)
 print("List of " + option)
 
-#create empty list
-lists = []
+# create empty list
+follows = []
 
-#parameters for get_followers function:
-#account, start_follower, follow_type, limit
+# parameters for get_followers function:
+# start_follower, follow_type, limit
 if option=="Follower" :
-	follow = s.get_followers(username, '', 'blog', limit)
-	for follower in follow:
-		lists.append(follower["follower"])
-	print(*lists, sep='\n')
+  follows = account.get_followers()[:limit]
 else:
-	follow = s.get_following(username, '', 'blog', limit)
-	for following in follow:
-		lists.append(following["following"])
-	print(*lists, sep='\n')
-
-#check if follower(ing) list is empty
-if len(lists) == 0:
-	print("No "+option+" information available")
\ No newline at end of file
+  follows = account.get_following()[:limit]
+
+# check if follower(ing) list is empty
+if len(follows) == 0:
+  print("No " + option + " information available")
+  exit()
+
+print(*follows, sep='\n')
+
diff --git a/tutorials/python/19_get_follower_and_following_list/requirements.txt b/tutorials/python/19_get_follower_and_following_list/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/19_get_follower_and_following_list/requirements.txt
+++ b/tutorials/python/19_get_follower_and_following_list/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/20_account_reputation/index.py b/tutorials/python/20_account_reputation/index.py
index 978b881f8e64e1ba2fcd2db2af9dd3700c612302..96433773f4d316d4958660f4d3c990ab9eb28525 100755
--- a/tutorials/python/20_account_reputation/index.py
+++ b/tutorials/python/20_account_reputation/index.py
@@ -1,46 +1,23 @@
 import pprint
-import math
 from pick import pick
 
 # initialize Hive class
-from steem import Hive
+from beem import Hive
+from beem.account import Account
 
-
-s = Hive()
+hive = Hive()
 
 title = 'Please choose account: '
-options = ["steemitblog","esteemapp","busy.org","demo"]
+options = ["hiveio","ecency","busy.org","demo"]
 
 # get index and selected filter name
 option, index = pick(options, title)
 
 # option is printed as reference
-pprint.pprint("Selected: "+option)
-
-user = s.get_accounts([option])
-
-def rep_log10(rep):
-    """Convert raw hived rep into a UI-ready value centered at 25."""
-    def log10(string):
-        leading_digits = int(string[0:4])
-        log = math.log10(leading_digits) + 0.00000001
-        num = len(string) - 1
-        return num + (log - int(log))
-
-    rep = str(rep)
-    if rep == "0":
-        return 25
-
-    sign = -1 if rep[0] == '-' else 1
-    if sign < 0:
-        rep = rep[1:]
-
-    out = log10(rep)
-    out = max(out - 9, 0) * sign  # @ -9, $1 earned is approx magnitude 1
-    out = (out * 9) + 25          # 9 points per magnitude. center at 25
-    return round(out, 2)
-
+pprint.pprint("Selected: " + option)
 
+user = Account(option, blockchain_instance=hive)
 
 # print specified account's reputation
-pprint.pprint(rep_log10(user[0]['reputation']))
\ No newline at end of file
+pprint.pprint(user.get_reputation())
+
diff --git a/tutorials/python/20_account_reputation/requirements.txt b/tutorials/python/20_account_reputation/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/20_account_reputation/requirements.txt
+++ b/tutorials/python/20_account_reputation/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/21_transfer_steem_and_sbd/README.md b/tutorials/python/21_transfer_hive_and_hbd/README.md
similarity index 100%
rename from tutorials/python/21_transfer_steem_and_sbd/README.md
rename to tutorials/python/21_transfer_hive_and_hbd/README.md
diff --git a/tutorials/python/21_transfer_hive_and_hbd/index.py b/tutorials/python/21_transfer_hive_and_hbd/index.py
new file mode 100755
index 0000000000000000000000000000000000000000..f0045d782be096c718a5de662ad307852ed45c74
--- /dev/null
+++ b/tutorials/python/21_transfer_hive_and_hbd/index.py
@@ -0,0 +1,63 @@
+from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
+
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Active Key: ')
+
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
+
+# get account balance for HIVE and HBD
+account = Account(account, blockchain_instance=client)
+total_base = account['balance']
+total_debt = account['hbd_balance']
+base_symbol = total_base.symbol
+debt_symbol = total_debt.symbol
+
+print('CURRENT ACCOUNT BALANCE:' + '\n' + str(total_base) + '\n' + str(total_debt) + '\n')
+
+# get recipient name
+recipient = input('Enter the user you wish to transfer funds to: ')
+
+# check for valid recipient name
+recipient = Account(recipient, blockchain_instance=client)
+
+if recipient:
+    # choice of transfer
+    title = 'Please choose transfer type: '
+    options = [base_symbol, debt_symbol, 'Cancel Transfer']
+    # get index and selected transfer type
+    option, index = pick(options, title)
+else:
+    print('Invalid recipient for funds transfer')
+    exit()
+
+if option == 'Cancel Transfer':
+    print('Transaction cancelled')
+    exit()
+
+if option == base_symbol:
+  # get HIVE transfer amount
+  amount = input('Enter amount of ' + base_symbol + ' to transfer to ' + recipient.name + ': ')
+  amount = float(amount)
+  symbol = base_symbol
+else:
+  # get HBD transfer amount
+  amount = input('Enter amount of ' + debt_symbol + ' to transfer to ' + recipient.name + ': ')
+  amount = float(amount)
+  symbol = debt_symbol
+
+account.transfer(recipient.name, amount, symbol)
+
+print('\n' + str(amount) + ' ' + symbol + ' has been transferred to ' + recipient.name)
+
+# get remaining account balance for HIVE and HBD
+account = Account(account.name, blockchain_instance=client)
+total_base = account['balance']
+total_debt = account['hbd_balance']
+
+print('\n' + 'REMAINING ACCOUNT BALANCE:' + '\n' + str(total_base) + '\n' + str(total_debt) + '\n')
+
diff --git a/tutorials/python/21_transfer_hive_and_hbd/requirements.txt b/tutorials/python/21_transfer_hive_and_hbd/requirements.txt
new file mode 100755
index 0000000000000000000000000000000000000000..e359b18e025d3e80a644e7e95f10d20b2dcdeefb
--- /dev/null
+++ b/tutorials/python/21_transfer_hive_and_hbd/requirements.txt
@@ -0,0 +1,2 @@
+beem
+pick
diff --git a/tutorials/python/21_transfer_steem_and_sbd/index.py b/tutorials/python/21_transfer_steem_and_sbd/index.py
deleted file mode 100755
index 003e5bf300096e3a81ba1de6b779713ec8135a30..0000000000000000000000000000000000000000
--- a/tutorials/python/21_transfer_steem_and_sbd/index.py
+++ /dev/null
@@ -1,63 +0,0 @@
-import steembase
-import steem
-from pick import pick
-
-# connect to testnet
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
-
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private ACTIVE key: ') #demo account: 5KaNM84WWSqzwKzY82fXPaUW43idbLnPqf5SfjGxLfw6eV2kAP3
-
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
-
-#get account balance for HIVE and HBD
-userinfo = client.get_account(username)
-total_hive = userinfo['balance']
-total_hbd = userinfo['hbd_balance']
-
-print('CURRENT ACCOUNT BALANCE:' + '\n' + total_hive + '\n' + total_hbd + '\n')
-
-#get recipient name
-recipient = input('Enter the user you wish to transfer funds to: ')
-
-#check for valid recipient name
-result = client.get_account(recipient)
-
-if result:
-    #choice of transfer
-    title = 'Please choose transfer type: '
-    options = ['HIVE', 'HBD', 'Cancel Transfer']
-    # get index and selected transfer type
-    option, index = pick(options, title)
-else:
-    print('Invalid recipient for funds transfer')
-    exit()
-
-if option == 'Cancel Transfer':
-    print('Transaction cancelled')
-    exit()
-else:
-    if option == 'HIVE':
-        #get HIVE transfer amount
-        amount = input('Enter amount of HIVE to transfer to ' + recipient + ': ')
-        asset = 'HIVE'
-    else:
-        #get HBD transfer amount
-        amount = input('Enter amount of HBD to transfer to ' + recipient + ': ')
-        asset = 'HBD'
-
-#parameters: to, amount, asset, memo='', account
-client.transfer(recipient, float(amount), asset, '', username)
-print('\n' + amount + ' ' + asset + ' has been transferred to ' + recipient)
-
-#get remaining account balance for HIVE and HBD
-userinfo = client.get_account(username)
-total_hive = userinfo['balance']
-total_hbd = userinfo['hbd_balance']
-
-print('\n' + 'REMAINING ACCOUNT BALANCE:' + '\n' + total_hive + '\n' + total_hbd + '\n')
\ No newline at end of file
diff --git a/tutorials/python/21_transfer_steem_and_sbd/requirements.txt b/tutorials/python/21_transfer_steem_and_sbd/requirements.txt
deleted file mode 100755
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..0000000000000000000000000000000000000000
--- a/tutorials/python/21_transfer_steem_and_sbd/requirements.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-steem
-pick
\ No newline at end of file
diff --git a/tutorials/python/22_witness_listing_and_voting/index.py b/tutorials/python/22_witness_listing_and_voting/index.py
index 36144e60e1678d260e0ab83cd5972ec4f2b22000..5c26aefdfb2bef0c0a20c6be6fae6a68cb2b5006 100755
--- a/tutorials/python/22_witness_listing_and_voting/index.py
+++ b/tutorials/python/22_witness_listing_and_voting/index.py
@@ -1,43 +1,29 @@
-import steembase
-import steem
-from pick import pick
 import pprint
+from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
+from beem.witness import Witness, WitnessesVotedByAccount
 
-# connect to testnet
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
-
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private ACTIVE key: ') #demo account: 5KaNM84WWSqzwKzY82fXPaUW43idbLnPqf5SfjGxLfw6eV2kAP3
-
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
-
-#connect to production server with active key
-# client = steem.Hive(keys=[wif])
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Active Key: ')
 
-#check valid user
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
 
-#print list of active witnesses
-print('ACTIVE WITNESSES')
-witness_list = client.get_active_witnesses()
-pprint.pprint(witness_list)
+# check valid user
+account = Account(account, blockchain_instance=client)
 
-#print list of currently voted for witnesses
+# print list of currently voted for witnesses
 print('\n' + 'WITNESSES CURRENTLY VOTED FOR')
-vote_list = userinfo['witness_votes']
-pprint.pprint(vote_list)
+vote_list = WitnessesVotedByAccount(account.name, blockchain_instance=client)
+for witness in vote_list:
+  pprint.pprint(witness.account.name)
 
 input('Press enter to continue')
 
-#choice of action
+# choice of action
 title = ('Please choose action')
 options = ['VOTE', 'UNVOTE', 'CANCEL']
 # get index and selected permission choice
@@ -50,13 +36,11 @@ if (option == 'CANCEL') :
 if (option == 'VOTE') :
     # vote process
     witness_vote = input('Please enter the witness name you wish to vote for: ')
-    if witness_vote not in witness_list :
-        print('\n' + witness_vote + ' does not appear on the available witness list')
-        exit()
+    witness = Witness(witness_vote, blockchain_instance=client)
     if witness_vote in vote_list :
         print('\n' + witness_vote + ' cannot be voted for more than once')
         exit()
-    client.approve_witness(witness=witness_vote, account=username, approve=True)
+    account.approvewitness(witness_vote)
     print('\n' + witness_vote + ' has been successfully voted for')
 else :
     # unvote process
@@ -64,5 +48,6 @@ else :
     if witness_unvote not in vote_list :
         print('\n' + witness_unvote + ' is not in your voted for list')
         exit()
-    client.disapprove_witness(witness=witness_unvote, account=username)
-    print('\n' + witness_unvote + ' has been removed from your voted for list')
\ No newline at end of file
+    account.disapprovewitness(witness_unvote)
+    print('\n' + witness_unvote + ' has been removed from your voted for list')
+
diff --git a/tutorials/python/22_witness_listing_and_voting/requirements.txt b/tutorials/python/22_witness_listing_and_voting/requirements.txt
index f965b5285b8fa0cac36569292964ac9b7b07d0dd..2736596d91805fc034b7336925ba74bd80158266 100755
--- a/tutorials/python/22_witness_listing_and_voting/requirements.txt
+++ b/tutorials/python/22_witness_listing_and_voting/requirements.txt
@@ -1,3 +1,3 @@
-steem
+beem
 pick
-pprint
\ No newline at end of file
+pprint
diff --git a/tutorials/python/23_claim_rewards/index.py b/tutorials/python/23_claim_rewards/index.py
index b1d4ed9bc108a956fc7ef2b7cc72651c4f767f29..b81f431368cd8c784780c610df78bd8594b8fcb0 100755
--- a/tutorials/python/23_claim_rewards/index.py
+++ b/tutorials/python/23_claim_rewards/index.py
@@ -1,88 +1,76 @@
-import steembase
-import steem
+import pprint
 from pick import pick
-from steem.amount import Amount
+import getpass
+from beem import Hive
+from beem.account import Account
 
-# connect to testnet
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
+# capture user information
+account = input('Enter username: ')
+wif_posting_key = getpass.getpass('Enter private POSTING key: ')
 
-#capture user information
-username = input('Enter username: ') #demo account: demo01
-wif = input('Enter private ACTIVE key: ') #demo account: 5HxTntgeoLm4trnTz94YBsY6MpAap1qRVXEKsU5n1v2du1gAgVH
+# connect node
+client = Hive('http://127.0.0.1:8091', keys=[wif_posting_key])
 
-#connect node
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
+# get account reward balances
+account = Account(account, blockchain_instance=client)
 
-#get account reward balances
-userinfo = client.get_account(username)
-
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
-
-reward_hive = userinfo['reward_hive_balance']
-reward_hbd = userinfo['reward_hbd_balance']
-reward_sp = userinfo['reward_vesting_hive']
-reward_vests = userinfo['reward_vesting_balance']
+reward_hive = account['reward_hive_balance']
+reward_hbd = account['reward_hbd_balance']
+reward_vests = account['reward_vesting_balance']
 
 print('Reward Balances:' + '\n' + 
-    'HIVE: ' + reward_hive + '\n' + 
-    'HBD: ' + reward_hbd + '\n' + 
-    'HIVE POWER: ' + reward_sp + '\n' +
-    'VESTS: ' + reward_vests
-    )
+  '\t' + str(reward_hive) + '\n' + 
+  '\t' + str(reward_hbd) + '\n' + 
+  '\t' + str(reward_vests)
+)
+
+if reward_hive.amount + reward_hbd.amount + reward_vests.amount == 0:
+  print('\n' + 'No rewards to claim')
+  exit()
 
 input('\n' + 'Press enter to continue to claim selection')
 
-#choice of claim
+# choice of claim
 title = 'Please choose claim type: '
 options = ['ALL', 'SELECTED', 'CANCEL']
 # get index and selected claim type
 option, index = pick(options, title)
 
-#commit claim based on selection
+if option == 'CANCEL':
+  print('\n' + 'Operation cancelled')
+  exit()
+  
+# commit claim based on selection
 if option == 'ALL':
-    if Amount(reward_hive).amount + Amount(reward_hbd).amount + Amount(reward_vests).amount == 0:
-        print('\n' + 'No rewards to claim')
-        exit()
-    else:
-        client.claim_reward_balance(reward_hive, reward_hbd, reward_vests, username)
-        print('\n' + 'All reward balances have been claimed. New reward balances are:' + '\n')
+  account.claim_reward_balance
+  print('\n' + 'All reward balances have been claimed. New reward balances are:' + '\n')
 else:
-    if option == 'CANCEL':
-        print('\n' + 'Operation cancelled')
-        exit()
-    else:
-        claim_hive = input('\n' + 'Please enter the amount of HIVE to claim: ') + ' HIVE'
-        claim_hbd = input('Please enter the amount of HBD to claim: ') + ' HBD'
-        claim_vests = input('Please enter the amount of VESTS to claim: ') + ' VESTS'
-        if Amount(claim_hive).amount + Amount(claim_hbd).amount + Amount(claim_vests).amount == 0:
-            print('\n' + 'Zero values entered, no claim to submit')
-            exit()
-        else:
-            if claim_hive > reward_hive or claim_hbd > reward_hbd or claim_vests > reward_vests:
-                print('\n' + 'Requested claim value higher than available rewards')
-                exit()
-            else:
-                client.claim_reward_balance(claim_hive, claim_hbd, claim_vests, username)
-                print('\n' + 'Claim has been processed. New reward balances are:' + '\n')
-        
+  claim_hive = float(input('\n' + 'Please enter the amount of HIVE to claim: ') or '0')
+  claim_hbd = float(input('Please enter the amount of HBD to claim: ') or '0')
+  claim_vests = float(input('Please enter the amount of VESTS to claim: ') or '0')
 
-#get updated account reward balances
+  if claim_hive + claim_hbd + claim_vests == 0:
+    print('\n' + 'Zero values entered, no claim to submit')
+    exit()
+  
+  if claim_hive > reward_hive or claim_hbd > reward_hbd or claim_vests > reward_vests:
+    print('\n' + 'Requested claim value higher than available rewards')
+    exit()
+  
+  account.claim_reward_balance(reward_hive=claim_hive, reward_hbd=claim_hbd, reward_vests=claim_vests)
+  print('\n' + 'Claim has been processed. New reward balances are:' + '\n')
+
+# get updated account reward balances
 input("Press enter for new account balances")
 
-userinfo = client.get_account(username)
+account.refresh()
+
+reward_hive = account['reward_hive_balance']
+reward_hbd = account['reward_hbd_balance']
+reward_vests = account['reward_vesting_balance']
 
-reward_hive = userinfo['reward_hive_balance']
-reward_hbd = userinfo['reward_hbd_balance']
-reward_sp = userinfo['reward_vesting_hive']
-reward_vests = userinfo['reward_vesting_balance']
+print('\t' + str(reward_hive) + '\n' + 
+  '\t' + str(reward_hbd) + '\n' + 
+  '\t' + str(reward_vests)
+)
 
-print('HIVE: ' + reward_hive + '\n' + 
-    'HBD: ' + reward_hbd + '\n' + 
-    'HIVE POWER: ' + reward_sp + '\n' +
-    'VESTS: ' + reward_vests
-    )
\ No newline at end of file
diff --git a/tutorials/python/23_claim_rewards/requirements.txt b/tutorials/python/23_claim_rewards/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/23_claim_rewards/requirements.txt
+++ b/tutorials/python/23_claim_rewards/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/24_power_up_steem/README.md b/tutorials/python/24_power_up_hive/README.md
similarity index 100%
rename from tutorials/python/24_power_up_steem/README.md
rename to tutorials/python/24_power_up_hive/README.md
diff --git a/tutorials/python/24_power_up_hive/index.py b/tutorials/python/24_power_up_hive/index.py
new file mode 100755
index 0000000000000000000000000000000000000000..0bfb30ba05f686c17a54a7f5fe1d4013aea48b67
--- /dev/null
+++ b/tutorials/python/24_power_up_hive/index.py
@@ -0,0 +1,56 @@
+import pprint
+from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
+
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
+
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
+
+# check valid user and get account balance
+account = Account(account, blockchain_instance=client)
+balance = account['balance']
+symbol = balance.symbol
+
+print('Available balance: ' + str(balance) + '\n')
+
+input('Press any key to continue')
+
+# choice of account
+title = 'Please choose an option for an account to power up: '
+options = ['SELF', 'OTHER']
+# get index and selected transfer type
+option, index = pick(options, title)
+
+if (option == 'OTHER') :
+  # account to power up to
+  to_account = input('Please enter the ACCOUNT to where the ' + symbol + ' will be powered up: ')
+  to_account = Account(to_account, blockchain_instance=client)
+else :
+  print('\n' + 'Power up ' + symbol + ' to own account' + '\n')
+  to_account = account
+
+# amount to power up
+amount = float(input('Please enter the amount of ' + symbol + ' to power up: ') or '0')
+
+# parameters: amount, to, account
+if (amount == 0) :
+  print('\n' + 'No ' + symbol + ' entered for powering up')
+  exit()
+
+if (amount > balance) :
+  print('\n' + 'Insufficient funds available')
+  exit()
+
+account.transfer_to_vesting(amount, to_account.name)
+print('\n' + str(amount) + ' ' + symbol + ' has been powered up successfully to ' + to_account.name)
+
+# get new account balance
+account.refresh()
+balance = account['balance']
+print('New balance: ' + str(balance))
+
diff --git a/tutorials/python/24_power_up_hive/requirements.txt b/tutorials/python/24_power_up_hive/requirements.txt
new file mode 100755
index 0000000000000000000000000000000000000000..e359b18e025d3e80a644e7e95f10d20b2dcdeefb
--- /dev/null
+++ b/tutorials/python/24_power_up_hive/requirements.txt
@@ -0,0 +1,2 @@
+beem
+pick
diff --git a/tutorials/python/24_power_up_steem/index.py b/tutorials/python/24_power_up_steem/index.py
deleted file mode 100755
index 63ae9634139f32d0897f243b8c4da0d3ceb9255b..0000000000000000000000000000000000000000
--- a/tutorials/python/24_power_up_steem/index.py
+++ /dev/null
@@ -1,66 +0,0 @@
-import steembase
-import steem
-from steem.amount import Amount
-from pick import pick
-
-# connect to testnet
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
-
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private ACTIVE key: ') #demo account: 5KaNM84WWSqzwKzY82fXPaUW43idbLnPqf5SfjGxLfw6eV2kAP3
-
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
-
-#check valid user and get account balance
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
-balance = userinfo['balance']
-
-print('Available HIVE balance: ' + balance + '\n')
-
-input('Press any key to continue')
-
-#choice of account
-title = 'Please choose an option for an account to transfer to: '
-options = ['SELF', 'OTHER']
-# get index and selected transfer type
-option, index = pick(options, title)
-
-if (option == 'OTHER') :
-    #account to power up to
-    to_account = input('Please enter the ACCOUNT to where the HIVE will be transferred: ')
-    #check valid username
-    result = client.get_account(to_account)
-    if (not result) :
-        print(to_account + ' doesn\'t exist on this chain!')
-        exit()
-else :
-    print('\n' + 'Power up HIVE to own account' + '\n')
-    to_account = username
-
-#amount to power up
-amount = float(input('Please enter the amount of HIVE to power up: '))
-
-#parameters: amount, to, account
-if (amount == 0) :
-    print('\n' + 'No HIVE entered for powering up')
-    exit()
-else :
-    if (amount > Amount(balance).amount) :
-        print('\n' + 'Insufficient funds available')
-        exit()
-    else :
-        client.transfer_to_vesting(amount, to_account, username)
-        print('\n' + str(amount) + ' HIVE has been powered up successfully to ' + to_account)
-
-#get new account balance
-userinfo = client.get_account(username)
-balance = userinfo['balance']
-print('New HIVE balance: ' + balance)
\ No newline at end of file
diff --git a/tutorials/python/24_power_up_steem/requirements.txt b/tutorials/python/24_power_up_steem/requirements.txt
deleted file mode 100755
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..0000000000000000000000000000000000000000
--- a/tutorials/python/24_power_up_steem/requirements.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-steem
-pick
\ No newline at end of file
diff --git a/tutorials/python/25_power_down/index.py b/tutorials/python/25_power_down/index.py
index f42e8e6dfb661b0bf292c029912b3367fd07d1ce..ebad404775476b205dc26b905a653036dc69da4b 100755
--- a/tutorials/python/25_power_down/index.py
+++ b/tutorials/python/25_power_down/index.py
@@ -1,61 +1,72 @@
-import steembase
-import steem
+import pprint
 from pick import pick
-from steem.amount import Amount
+import getpass
+from beem import Hive
+from beem.account import Account
+from beem.amount import Amount
 
-# connect to testnet
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
 
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private ACTIVE key: ') #demo account: 5KaNM84WWSqzwKzY82fXPaUW43idbLnPqf5SfjGxLfw6eV2kAP3
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
 
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
+# get account balance for vesting shares
+account = Account(account, blockchain_instance=client)
+balance = account['balance']
+symbol = balance.symbol
 
-#get account balance for vesting shares
-userinfo = client.get_account(username)
-delegated_vests = userinfo['delegated_vesting_shares']
-vesting_shares = userinfo['vesting_shares']
-to_withdraw = float(userinfo['to_withdraw'])
-withdrawn = float(userinfo['withdrawn'])
+# we need high precision because VESTS
+denom = 1e6
+delegated_vests = account['delegated_vesting_shares']
+vesting_shares = account['vesting_shares']
+vesting_symbol = vesting_shares.symbol
+to_withdraw_vests = float(account['to_withdraw']) / denom
+withdrawn_vests = float(account['withdrawn']) / denom
 
-available_vests = (Amount(vesting_shares).amount - Amount(delegated_vests).amount - 
-     ((to_withdraw - withdrawn)/1000000))
+dgpo = client.get_dynamic_global_properties()
+total_vesting_fund_hive = Amount(dgpo['total_vesting_fund_hive']).amount
+total_vesting_shares_mvest = Amount(dgpo['total_vesting_shares']).amount / denom
+base_per_mvest = total_vesting_fund_hive / total_vesting_shares_mvest
+available_vests = (vesting_shares.amount - delegated_vests.amount - ((to_withdraw_vests - withdrawn_vests)))
+available_base = (available_vests / denom) * base_per_mvest
+powering_down = ((to_withdraw_vests - withdrawn_vests) / denom) * base_per_mvest
 
-print('VESTS currently powering down: ' + str(to_withdraw/1000000) + ' VESTS' +
-    '\n' + 'Available VESTS: ' + str(available_vests) + ' VESTS')
+print(symbol + ' Power currently powering down: ' + format(powering_down, '.3f') + ' ' + symbol +
+  '\n' + 'Available ' + symbol + ' Power: ' + format(available_base, '.3f') + ' ' + symbol)
 
 input('\n' + 'Press enter to continue' + '\n')
 
-#choice of transfer
+# choice of transfer
 title = 'Please choose an option: '
 options = ['Power down ALL', 'Power down PORTION', 'Cancel Transaction']
 # get index and selected transfer type
 option, index = pick(options, title)
 
-#parameters: amount, account
-if (option == 'Cancel Transaction') :
-    print('transaction cancelled')
+# parameters: amount, account
+if (option == 'Cancel Transaction'):
+  print('transaction cancelled')
+  exit()
+
+if (option == 'Power down ALL'):
+  if (available_vests == 0):
+    print('No change to withdraw amount')
     exit()
-else :
-    if (option == 'Power down ALL') :
-        if (available_vests == 0) :
-            print('No change to withdraw amount')
-        else :
-            amount = to_withdraw/1000000 + available_vests
-            client.withdraw_vesting(amount, username)
-            print(str(amount) + ' VESTS now powering down')
-    else :
-        amount = float(input('Please enter the amount of VESTS you would like to power down: '))
-        if (amount < (to_withdraw/1000000 + available_vests)) :
-            client.withdraw_vesting(amount, username)
-            print(str(amount) + ' VESTS now powering down')
-        else :
-            if (amount == to_withdraw/1000000) :
-                print('No change to withdraw amount')
-            else :
-                print('insufficient funds available')
\ No newline at end of file
+  amount_vests = to_withdraw_vests + available_vests
+  amount = (amount_vests / denom) * base_per_mvest
+else:
+  amount = float(input('Please enter the amount of ' + symbol + ' you would like to power down: ') or '0')
+  amount_vests = (amount * denom) / base_per_mvest
+
+if (amount_vests <= (to_withdraw_vests + available_vests)):
+  account.withdraw_vesting(amount_vests)
+  print(format(amount, '.3f') + ' ' + symbol + ' (' + format(amount_vests, '.6f') + ' ' + vesting_symbol + ') now powering down')
+  exit()
+
+if (amount_vests == to_withdraw_vests):
+  print('No change to withdraw amount')
+  exit()
+
+print('Insufficient funds available')
+
diff --git a/tutorials/python/25_power_down/requirements.txt b/tutorials/python/25_power_down/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/25_power_down/requirements.txt
+++ b/tutorials/python/25_power_down/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/27_delegate_power/index.py b/tutorials/python/27_delegate_power/index.py
index 125f5e11bd9a945264f835fe766538f9149eb105..2d05fa5f6b211a43eb5f79628fcff5bb8e74f548 100755
--- a/tutorials/python/27_delegate_power/index.py
+++ b/tutorials/python/27_delegate_power/index.py
@@ -1,70 +1,76 @@
-import steembase
-import steem
 from pick import pick
-import pprint
-from steem.amount import Amount
+import getpass
+from beem import Hive
+from beem.account import Account
+from beem.amount import Amount
 
-# connect to testnet
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
 
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private ACTIVE key: ') #demo account: 5KaNM84WWSqzwKzY82fXPaUW43idbLnPqf5SfjGxLfw6eV2kAP3
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
 
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
+# check valid user
+account = Account(account, blockchain_instance=client)
 
-#connect to production server with active key
-# client = steem.Hive(keys=[wif])
+balance = account['balance']
+symbol = balance.symbol
 
-#check valid user
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
+# we need high precision because VESTS
+denom = 1e6
+delegated_vests = account['delegated_vesting_shares']
+vesting_shares = account['vesting_shares']
+vesting_symbol = vesting_shares.symbol
+to_withdraw_vests = float(account['to_withdraw']) / denom
+withdrawn_vests = float(account['withdrawn']) / denom
 
-#display active delegations (refer to tutorial #29_get_delegations_by_user)
-delegations = client.get_vesting_delegations(username, '', 100)
+dgpo = client.get_dynamic_global_properties()
+total_vesting_fund_hive = Amount(dgpo['total_vesting_fund_hive']).amount
+total_vesting_shares_mvest = Amount(dgpo['total_vesting_shares']).amount / denom
+base_per_mvest = total_vesting_fund_hive / total_vesting_shares_mvest
+available_vests = (vesting_shares.amount - delegated_vests.amount - ((to_withdraw_vests - withdrawn_vests)))
+available_base = (available_vests / denom) * base_per_mvest
+
+# display active delegations (refer to tutorial #29_get_delegations_by_user)
+delegations = account.get_vesting_delegations()
 if len(delegations) == 0:
-	print('No active delegations')
+  print('No active delegations')
 else:
-	pprint.pprint(delegations)
+  print('Current delegations:')
+  for delegation in delegations:
+    delegated_vests = float(delegation['vesting_shares']['amount']) / denom
+    delegated_base = (delegated_vests / denom) * base_per_mvest
+    print('\t' + delegation['delegatee'] + ': ' + format(delegated_base, '.3f') + ' ' + symbol)
 
-#available VESTS
-avail_vests = (Amount(userinfo['vesting_shares']).amount - 
-    ((userinfo['to_withdraw']-userinfo['withdrawn'])/1000000)-
-    Amount(userinfo['delegated_vesting_shares']).amount)
-print('\n' + 'Available VESTS : ' + str(avail_vests))
+print('\n' + 'Available ' + symbol + ' Power: ' + format(available_base, '.3f') + ' ' + symbol)
 
 input('Press enter to continue' + '\n')
 
-#choice of action
+# choice of action
 title = ('Please choose action')
 options = ['DELEGATE POWER', 'UN-DELEGATE POWER', 'CANCEL']
 # get index and selected permission choice
 option, index = pick(options, title)
 
-if (option == 'CANCEL') :
-    print('operation cancelled')
-    exit()
+if (option == 'CANCEL'):
+  print('operation cancelled')
+  exit()
 
-#get account to authorise and check if valid
+# get account to authorise and check if valid
 delegatee = input('Please enter the account name to ADD / REMOVE delegation: ')
-delegatee_userinfo = client.get_account(delegatee)
-if(delegatee_userinfo is None) :
-    print('Oops. Looks like user ' + delegatee + ' doesn\'t exist on this chain!')
-    exit()
-
-# delegate_vesting_shares(to_account: str, vesting_shares: str, account=None)
-if (option == 'DELEGATE POWER') :
-    vesting_value = input('Please enter the amount of VESTS to delegate: ')
-    vesting_shares = (str(vesting_value) + ' VESTS')
-    client.delegate_vesting_shares(to_account=delegatee, vesting_shares=vesting_shares, account=username)
-    print('\n' + str(vesting_shares) + ' have been successfully been delegated to ' + delegatee)
-else :
-    vesting_shares = '0 VESTS'
-    client.delegate_vesting_shares(to_account=delegatee, vesting_shares=vesting_shares, account=username)
-    print('Delegated VESTS have been successfully removed from ' + delegatee)
\ No newline at end of file
+delegatee = Account(delegatee, blockchain_instance=client)
+
+if (option == 'DELEGATE POWER'):
+  amount = float(input('Please enter the amount of ' + symbol + ' you would like to delegate: ') or '0')
+  amount_vests = (amount * denom) / base_per_mvest
+  
+  print(format(amount, '.3f') + ' ' + symbol + ' (' + format(amount_vests, '.6f') + ' ' + vesting_symbol + ') will be delegated to ' + delegatee.name)
+else:
+  amount_vests = 0
+  print('Removing delegated VESTS from ' + delegatee.name)
+
+account.delegate_vesting_shares(delegatee.name, amount_vests)
+
+print('Success.')
+
diff --git a/tutorials/python/27_delegate_power/requirements.txt b/tutorials/python/27_delegate_power/requirements.txt
index f965b5285b8fa0cac36569292964ac9b7b07d0dd..2736596d91805fc034b7336925ba74bd80158266 100755
--- a/tutorials/python/27_delegate_power/requirements.txt
+++ b/tutorials/python/27_delegate_power/requirements.txt
@@ -1,3 +1,3 @@
-steem
+beem
 pick
-pprint
\ No newline at end of file
+pprint
diff --git a/tutorials/python/29_get_delegations_by_user/index.py b/tutorials/python/29_get_delegations_by_user/index.py
index d0b5924ec666e83ab146c53078209886b8ca6bf9..c60f594d10abca9b58e6a4a216ee516b13ebac02 100755
--- a/tutorials/python/29_get_delegations_by_user/index.py
+++ b/tutorials/python/29_get_delegations_by_user/index.py
@@ -1,41 +1,46 @@
 from pick import pick
-from steem import Hive
-
-import pprint
+from beem import Hive
+from beem.account import Account
+from beem.amount import Amount
 
 client = Hive()
 
-#capture username
-username = input('Username: ')
+# capture username
+account = input('Username: ')
+account = Account(account)
+
+balance = account['balance']
+symbol = balance.symbol
 
-#check username
-result = client.get_account(username)
-if not result:
-	print('Invalid username')
-	exit()
+# we need high precision because VESTS
+denom = 1e6
+dgpo = client.get_dynamic_global_properties()
+total_vesting_fund_hive = Amount(dgpo['total_vesting_fund_hive']).amount
+total_vesting_shares_mvest = Amount(dgpo['total_vesting_shares']).amount / denom
+base_per_mvest = total_vesting_fund_hive / total_vesting_shares_mvest
 
-#capture list limit
-limit = input('Max number of vesting delegations to display: ')
+# capture list limit
+limit = input('Max number of vesting delegations to display: ') or '10'
 
-#list type
+# list type
 title = 'Please choose the type of list: '
 options = ['Active Vesting Delegations', 'Expiring Vesting Delegations']
 
-#get index and selected list name
+# get index and selected list name
 option, index = pick(options, title)
 print('\n' + 'List of ' + option + ': ' + '\n')
 
-
-#parameters: account, from_account, limit
 if option=='Active Vesting Delegations' :
-	delegations = client.get_vesting_delegations(username, '', limit)
-	if len(delegations) == 0:
-		print('No ' + option)
-	else:
-		pprint.pprint(delegations)
-else: #parameters: account, start: steembase.types.PointInTime, limit
-	delegations = client.get_expiring_vesting_delegations(username, "2018-01-01T00:00:00", limit)
-	if len(delegations) == 0:
-		print('No ' + option)
-	else:
-		pprint.pprint(delegations)
\ No newline at end of file
+  delegations = account.get_vesting_delegations(limit=limit)
+else:
+  delegations = account.get_expiring_vesting_delegations("2018-01-01T00:00:00", limit=limit)
+
+if len(delegations) == 0:
+  print('No ' + option)
+  exit
+
+for delegation in delegations:
+  delegated_vests = float(delegation['vesting_shares']['amount']) / denom
+  delegated_base = (delegated_vests / denom) * base_per_mvest
+  print('\t' + delegation['delegatee'] + ': ' + format(delegated_base, '.3f') + ' ' + symbol)
+
diff --git a/tutorials/python/29_get_delegations_by_user/requirements.txt b/tutorials/python/29_get_delegations_by_user/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/29_get_delegations_by_user/requirements.txt
+++ b/tutorials/python/29_get_delegations_by_user/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/30_grant_posting_permission/index.py b/tutorials/python/30_grant_posting_permission/index.py
index e6123ae4c68ca0c0e199f2fc18d822c570b4d624..a045d21151c322129857f1479811f88c27790877 100755
--- a/tutorials/python/30_grant_posting_permission/index.py
+++ b/tutorials/python/30_grant_posting_permission/index.py
@@ -1,66 +1,51 @@
-import steembase
-import steem
 from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
 
-# connect to testnet
-# steembase.chains.known_chains['HIVE'] = {
-#     'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-#     'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-# }
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
 
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private ACTIVE key: ') #demo account: 5KaNM84WWSqzwKzY82fXPaUW43idbLnPqf5SfjGxLfw6eV2kAP3
+# connect to production server with active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
 
-#connect node and private active key
-# client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
+# check valid user
+account = Account(account, blockchain_instance=client)
 
-#connect to production server with active key
-client = steem.Hive(keys=[wif])
+print('Current posting authorizations: ' + str(account['posting']['account_auths']))
 
-#check valid user
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
+# get account to authorise and check if valid
+foreign = input('Please enter the account name for POSTING authorization: ')
+if (foreign == account.name):
+  print('Cannot allow or disallow posting permission to your own account')
+  exit()
 
-#get account to authorise and check if valid
-foreign_acc = input('Please enter the account name for POSTING authorisation: ')
-if (foreign_acc == username) :
-    print('Cannot allow or disallow posting permission to your own account')
-    exit()
-foreign_userinfo = client.get_account(foreign_acc)
-if(foreign_userinfo is None) :
-    print('Oops. Looks like user ' + foreign_acc + ' doesn\'t exist on this chain!')
-    exit()
+foreign = Account(foreign, blockchain_instance=client)
 
-#check if foreign_account already has posting auth
-_data = []
+# check if foreign account already has posting auth
 title = ''
-for i in range(len(userinfo['posting']['account_auths'])) :
-    _data.append(userinfo['posting']['account_auths'][i])
-    if (_data[i][0] == foreign_acc) :
-        title = (foreign_acc + ' already has posting permission. Please choose option from below list')
-        options = ['DISALLOW', 'CANCEL']
 
-if (title == '') :
-    title = (foreign_acc + ' does not yet posting permission. Please choose option from below list')
-    options = ['ALLOW', 'CANCEL']
+for auth in account['posting']['account_auths']:
+  if (auth[0] == foreign.name):
+    title = (foreign.name + ' already has posting permission. Please choose option from below list')
+    options = ['DISALLOW', 'CANCEL']
+    break
+
+if (title == ''):
+  title = (foreign.name + ' does not yet posting permission. Please choose option from below list')
+  options = ['ALLOW', 'CANCEL']
 
-#choice of action
-# options = ['ALLOW', 'DISALLOW', 'CANCEL']
-# get index and selected permission choice
 option, index = pick(options, title)
 
-if (option == 'CANCEL') :
-    print('operation cancelled')
-    exit()
+if (option == 'CANCEL'):
+  print('operation cancelled')
+  exit()
+
+if (option == 'ALLOW'):
+  account.allow(foreign=foreign.name, weight=1, permission='posting', threshold=1)
+  print(foreign.name + ' has been granted posting permission')
+else:
+  account.disallow(foreign=foreign.name, permission='posting', threshold=1)
+  print('posting permission for ' + foreign.name + ' has been removed')
 
-if (option == 'ALLOW') :
-    #allow(foreign, weight=None, permission='posting', account=None, threshold=None)
-    client.allow(foreign=foreign_acc, weight=1, permission='posting', account=username, threshold=1)
-    print(foreign_acc + ' has been granted posting permission')
-else :
-    #disallow(foreign, permission='posting', account=None, threshold=None)
-    client.disallow(foreign=foreign_acc, permission='posting', account=username, threshold=1)
-    print('posting permission for ' + foreign_acc + ' has been removed')
\ No newline at end of file
diff --git a/tutorials/python/30_grant_posting_permission/requirements.txt b/tutorials/python/30_grant_posting_permission/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/30_grant_posting_permission/requirements.txt
+++ b/tutorials/python/30_grant_posting_permission/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/31_grant_active_permission/index.py b/tutorials/python/31_grant_active_permission/index.py
index 51913868997c9cc16e3cdd70ab3335a59f9e7f19..5d702fca9725fb6bad2c2e0eac127bea21e3cade 100755
--- a/tutorials/python/31_grant_active_permission/index.py
+++ b/tutorials/python/31_grant_active_permission/index.py
@@ -1,66 +1,51 @@
-import steembase
-import steem
 from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
 
-# # connect to testnet
-# steembase.chains.known_chains['HIVE'] = {
-#     'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-#     'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-# }
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
 
-#capture user information
-username = input('Enter username: ') #demo account: cdemo
-wif = input('Enter private ACTIVE key: ') #demo account: 5KaNM84WWSqzwKzY82fXPaUW43idbLnPqf5SfjGxLfw6eV2kAP3
+# connect to production server with active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
 
-#connect node and private active key
-# client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
+# check valid user
+account = Account(account, blockchain_instance=client)
 
-#connect to production server with active key
-client = steem.Hive(keys=[wif])
+print('Current active authorizations: ' + str(account['active']['account_auths']))
 
-#check valid user
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
+# get account to authorise and check if valid
+foreign = input('Please enter the account name for ACTIVE authorization: ')
+if (foreign == account.name):
+  print('Cannot allow or disallow active permission to your own account')
+  exit()
 
-#get account to authorise and check if valid
-foreign_acc = input('Please enter the account name for ACTIVE authorisation: ')
-if (foreign_acc == username) :
-    print('Cannot allow or disallow active permission to your own account')
-    exit()
-foreign_userinfo = client.get_account(foreign_acc)
-if(foreign_userinfo is None) :
-    print('Oops. Looks like user ' + foreign_acc + ' doesn\'t exist on this chain!')
-    exit()
+foreign = Account(foreign, blockchain_instance=client)
 
-#check if foreign_account already has active auth
-_data = []
+# check if foreign account already has active auth
 title = ''
-for i in range(len(userinfo['active']['account_auths'])) :
-    _data.append(userinfo['active']['account_auths'][i])
-    if (_data[i][0] == foreign_acc) :
-        title = (foreign_acc + ' already has active permission. Please choose option from below list')
-        options = ['DISALLOW', 'CANCEL']
 
-if (title == '') :
-    title = (foreign_acc + ' does not yet active permission. Please choose option from below list')
-    options = ['ALLOW', 'CANCEL']
+for auth in account['active']['account_auths']:
+  if (auth[0] == foreign.name):
+    title = (foreign.name + ' already has active permission. Please choose option from below list')
+    options = ['DISALLOW', 'CANCEL']
+    break
+
+if (title == ''):
+  title = (foreign.name + ' does not yet active permission. Please choose option from below list')
+  options = ['ALLOW', 'CANCEL']
 
-#choice of action
-# options = ['ALLOW', 'DISALLOW', 'CANCEL']
-# get index and selected permission choice
 option, index = pick(options, title)
 
-if (option == 'CANCEL') :
-    print('operation cancelled')
-    exit()
+if (option == 'CANCEL'):
+  print('operation cancelled')
+  exit()
+
+if (option == 'ALLOW'):
+  account.allow(foreign=foreign.name, weight=1, permission='active', threshold=1)
+  print(foreign.name + ' has been granted active permission')
+else:
+  account.disallow(foreign=foreign.name, permission='active', threshold=1)
+  print('active permission for ' + foreign.name + ' has been removed')
 
-if (option == 'ALLOW') :
-    #allow(foreign, weight=None, permission='posting', account=None, threshold=None)
-    client.allow(foreign=foreign_acc, weight=1, permission='active', account=username, threshold=1)
-    print(foreign_acc + ' has been granted active permission')
-else :
-    #disallow(foreign, permission='posting', account=None, threshold=None)
-    client.disallow(foreign=foreign_acc, permission='active', account=username, threshold=1)
-    print('active permission for ' + foreign_acc + ' has been removed')
\ No newline at end of file
diff --git a/tutorials/python/31_grant_active_permission/requirements.txt b/tutorials/python/31_grant_active_permission/requirements.txt
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..e359b18e025d3e80a644e7e95f10d20b2dcdeefb 100755
--- a/tutorials/python/31_grant_active_permission/requirements.txt
+++ b/tutorials/python/31_grant_active_permission/requirements.txt
@@ -1,2 +1,2 @@
-steem
-pick
\ No newline at end of file
+beem
+pick
diff --git a/tutorials/python/32_convert_sbd_to_steem/README.md b/tutorials/python/32_convert_hbd_to_hive/README.md
similarity index 100%
rename from tutorials/python/32_convert_sbd_to_steem/README.md
rename to tutorials/python/32_convert_hbd_to_hive/README.md
diff --git a/tutorials/python/32_convert_hbd_to_hive/index.py b/tutorials/python/32_convert_hbd_to_hive/index.py
new file mode 100755
index 0000000000000000000000000000000000000000..3d6d6df20e4c3ab85b254d4771be01ca4e57b6e9
--- /dev/null
+++ b/tutorials/python/32_convert_hbd_to_hive/index.py
@@ -0,0 +1,38 @@
+from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
+
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
+
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
+
+# get account balance for HIVE and HBD
+account = Account(account, blockchain_instance=client)
+total_hive = account['balance']
+total_hbd = account['hbd_balance']
+
+print('CURRENT ACCOUNT BALANCE:' + '\n' + str(total_hive) + '\n' + str(total_hbd) + '\n')
+
+# get recipient name
+convert_amount = float(input('Enter the amount of HBD to convert to HIVE: ') or '0')
+
+if (convert_amount <= 0):
+  print("Must be greater than zero.")
+  exit()
+
+# parameters: amount, request_id
+account.convert(convert_amount)
+
+print('\n' + format(convert_amount, '.3f') + ' HBD has been converted to HIVE')
+
+# get remaining account balance for HIVE and HBD
+account.refresh()
+total_hive = account['balance']
+total_hbd = account['hbd_balance']
+
+print('\n' + 'REMAINING ACCOUNT BALANCE:' + '\n' + str(total_hive) + '\n' + str(total_hbd))
+
diff --git a/tutorials/python/32_convert_hbd_to_hive/requirements.txt b/tutorials/python/32_convert_hbd_to_hive/requirements.txt
new file mode 100755
index 0000000000000000000000000000000000000000..e514a9c54face2d01b4e2fa4888298e4b4df51a9
--- /dev/null
+++ b/tutorials/python/32_convert_hbd_to_hive/requirements.txt
@@ -0,0 +1 @@
+beem
diff --git a/tutorials/python/32_convert_sbd_to_steem/index.py b/tutorials/python/32_convert_sbd_to_steem/index.py
deleted file mode 100755
index 9aecccca413519cc01ce02c4a0740f3096dba861..0000000000000000000000000000000000000000
--- a/tutorials/python/32_convert_sbd_to_steem/index.py
+++ /dev/null
@@ -1,37 +0,0 @@
-import steembase
-import steem
-
-# connect to testnet
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
-
-#capture user information
-username = input('Enter username: ') #demo account: demo01
-wif = input('Enter private ACTIVE key: ') #demo account: 5HxTntgeoLm4trnTz94YBsY6MpAap1qRVXEKsU5n1v2du1gAgVH
-
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
-
-#get account balance for HIVE and HBD
-userinfo = client.get_account(username)
-total_hive = userinfo['balance']
-total_hbd = userinfo['hbd_balance']
-
-print('CURRENT ACCOUNT BALANCE:' + '\n' + total_hive + '\n' + total_hbd + '\n')
-
-#get recipient name
-convert_amount = input('Enter the amount of HBD to convert to HIVE: ') #must be > 0
-
-#parameters: amount, account, request_id
-client.convert(float(convert_amount), username)
-
-print('\n' + convert_amount + ' HBD has been converted to HIVE')
-
-#get remaining account balance for HIVE and HBD
-userinfo = client.get_account(username)
-total_hive = userinfo['balance']
-total_hbd = userinfo['hbd_balance']
-
-print('\n' + 'REMAINING ACCOUNT BALANCE:' + '\n' + total_hive + '\n' + total_hbd)
\ No newline at end of file
diff --git a/tutorials/python/32_convert_sbd_to_steem/requirements.txt b/tutorials/python/32_convert_sbd_to_steem/requirements.txt
deleted file mode 100755
index d2734606f477154689c43a95135215d798bbf181..0000000000000000000000000000000000000000
--- a/tutorials/python/32_convert_sbd_to_steem/requirements.txt
+++ /dev/null
@@ -1 +0,0 @@
-steem
\ No newline at end of file
diff --git a/tutorials/python/33_password_key_change/index.py b/tutorials/python/33_password_key_change/index.py
deleted file mode 100755
index afc0ca747381a1bf6f99c988ed252541adf9b22e..0000000000000000000000000000000000000000
--- a/tutorials/python/33_password_key_change/index.py
+++ /dev/null
@@ -1,60 +0,0 @@
-import steem
-import steembase
-from steembase.account import PasswordKey
-from steembase.account import PrivateKey
-from steembase import operations
-
-account = input('Account: ')
-old_password = input('Current password: ')
-new_password = input('New password: ')
-
-old_owner_key = str(
-    PasswordKey(account, old_password, "owner").get_private_key()
-)
-
-client = steem.Hive(keys=[old_owner_key])
-
-#client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
-
-new_public_keys = {}
-
-for role in ["owner", "active", "posting", "memo"]:
-    private_key = PasswordKey(account, new_password, role).get_private_key()
-    new_public_keys[role] = str(private_key.pubkey)
-
-new_data = {
-    "account": account,
-    "json_metadata": {},
-    "owner": {
-        "key_auths": [
-            [new_public_keys["owner"], 1]
-        ],
-        "account_auths": [],
-        "weight_threshold": 1
-    },
-    "active": {
-        "key_auths": [
-            [new_public_keys["active"], 1]
-        ],
-        "account_auths": [],
-        "weight_threshold": 1
-    },
-    "posting": {
-        "key_auths": [
-            [new_public_keys["posting"], 1]
-        ],
-        "account_auths": [],
-        "weight_threshold": 1
-    },
-    "memo_key": new_public_keys["memo"]
-}
-
-print("New data:")
-print(new_data)
-
-op = operations.AccountUpdate(**new_data)
-
-result = client.commit.finalizeOp(op, account, "owner")
-
-print("Result:")
-print(result)
diff --git a/tutorials/python/33_password_key_change/requirements.txt b/tutorials/python/33_password_key_change/requirements.txt
deleted file mode 100755
index 3980c4a5afc46d01ff883cf4c7d7e05ecce94ccc..0000000000000000000000000000000000000000
--- a/tutorials/python/33_password_key_change/requirements.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-steem
-pick
\ No newline at end of file
diff --git a/tutorials/python/33_transfer_steem_and_sbd_to_savings_balance/README.md b/tutorials/python/33_transfer_hive_and_hbd_to_savings_balance/README.md
similarity index 100%
rename from tutorials/python/33_transfer_steem_and_sbd_to_savings_balance/README.md
rename to tutorials/python/33_transfer_hive_and_hbd_to_savings_balance/README.md
diff --git a/tutorials/python/33_transfer_hive_and_hbd_to_savings_balance/index.py b/tutorials/python/33_transfer_hive_and_hbd_to_savings_balance/index.py
new file mode 100755
index 0000000000000000000000000000000000000000..e1aa7082c4059bfec51c02e93ff365391f7719d1
--- /dev/null
+++ b/tutorials/python/33_transfer_hive_and_hbd_to_savings_balance/index.py
@@ -0,0 +1,71 @@
+from pick import pick
+import getpass
+from beem import Hive
+from beem.account import Account
+import random
+
+# capture user information
+account = input('Enter username: ')
+wif_active_key = getpass.getpass('Enter private ACTIVE key: ')
+
+# connect node and private active key
+client = Hive('http://127.0.0.1:8091', keys=[wif_active_key])
+
+# check for valid account and get account balance for HIVE and HBD
+account = Account(account, blockchain_instance=client)
+
+total_base = account['balance']
+total_debt = account['hbd_balance']
+savings_base = account['savings_balance']
+savings_debt = account['savings_hbd_balance']
+
+symbol_base = total_base.symbol
+symbol_debt = total_debt.symbol
+
+print('CURRENT ACCOUNT BALANCE:' + '\n' + str(total_base) + '\n' + str(total_debt) + '\n')
+print('CURRENT SAVINGS BALANCE:' + '\n' + str(savings_base) + '\n' + str(savings_debt) + '\n')
+
+input('Press enter to continue with the transfer' + '\n')
+
+# choice of transfer/withdrawal
+title1 = 'Please choose transfer type: '
+options1 = ['Transfer', 'Withdrawal', 'Cancel']
+# get index and selected transfer type
+transfer_type, index = pick(options1, title1)
+
+if transfer_type == 'Cancel':
+  print('Transaction cancelled')
+  exit()
+
+# choice of currency
+title2 = 'Please choose currency: '
+options2 = [symbol_base, symbol_debt]
+# get index and selected currency
+asset, index = pick(options2, title2)
+
+if asset == symbol_base:
+  # get HIVE transfer amount
+  amount = float(input('Enter amount of ' + symbol_base + ' to transfer: ') or '0')
+else:
+  # get HBD transfer amount
+  amount = float(input('Enter amount of ' + symbol_debt + ' to transfer: ') or '0')
+
+if transfer_type == 'Transfer':
+  account.transfer_to_savings(amount, asset, '')
+  print('\n' + 'Transfer to savings balance successful')
+else:
+  # create request ID random integer
+  request_id = random.randint(1,1000000)
+  account.transfer_from_savings(amount, asset, '', request_id=request_id)
+  print('\n' + 'Withdrawal from savings successful, transaction ID: ' + str(request_id))
+
+# get remaining account balance for HIVE and HBD
+account.refresh()
+total_base = account['balance']
+total_debt = account['hbd_balance']
+savings_base = account['savings_balance']
+savings_debt = account['savings_hbd_balance']
+
+print('\n' + 'REMAINING ACCOUNT BALANCE:' + '\n' + str(total_base) + '\n' + str(total_debt) + '\n')
+print('CURRENT SAVINGS BALANCE:' + '\n' + str(savings_base) + '\n' + str(savings_debt) + '\n')
+
diff --git a/tutorials/python/33_transfer_hive_and_hbd_to_savings_balance/requirements.txt b/tutorials/python/33_transfer_hive_and_hbd_to_savings_balance/requirements.txt
new file mode 100755
index 0000000000000000000000000000000000000000..05e65634f0da859e905a8a5784307e930afcf37a
--- /dev/null
+++ b/tutorials/python/33_transfer_hive_and_hbd_to_savings_balance/requirements.txt
@@ -0,0 +1,3 @@
+beem
+pick
+random
diff --git a/tutorials/python/33_transfer_steem_and_sbd_to_savings_balance/index.py b/tutorials/python/33_transfer_steem_and_sbd_to_savings_balance/index.py
deleted file mode 100755
index 0e710ad38ac6a91bc59b801b83f82351af207f1c..0000000000000000000000000000000000000000
--- a/tutorials/python/33_transfer_steem_and_sbd_to_savings_balance/index.py
+++ /dev/null
@@ -1,79 +0,0 @@
-import steembase
-import steem
-from pick import pick
-import random
-
-# connect to testnet
-steembase.chains.known_chains['HIVE'] = {
-    'chain_id': '79276aea5d4877d9a25892eaa01b0adf019d3e5cb12a97478df3298ccdd01673',
-    'prefix': 'STX', 'hive_symbol': 'HIVE', 'hbd_symbol': 'HBD', 'vests_symbol': 'VESTS'
-}
-
-#capture user information
-username = input('Enter username: ') #demo account: demo01
-wif = input('Enter private ACTIVE key: ') #demo account: 5HxTntgeoLm4trnTz94YBsY6MpAap1qRVXEKsU5n1v2du1gAgVH
-
-#connect node and private active key
-client = steem.Hive(nodes=['https://testnet.steem.vc'], keys=[wif])
-
-#check for valid account and get account balance for HIVE and HBD
-userinfo = client.get_account(username)
-if(userinfo is None) :
-    print('Oops. Looks like user ' + username + ' doesn\'t exist on this chain!')
-    exit()
-total_hive = userinfo['balance']
-total_hbd = userinfo['hbd_balance']
-savings_hive = userinfo['savings_balance']
-savings_hbd = userinfo['savings_hbd_balance']
-
-print('CURRENT ACCOUNT BALANCE:' + '\n' + total_hive + '\n' + total_hbd + '\n')
-print('CURRENT SAVINGS BALANCE:' + '\n' + savings_hive + '\n' + savings_hbd + '\n')
-
-input('Press enter to continue with the transfer' + '\n')
-
-
-#choice of transfer/withdrawal
-title1 = 'Please choose transfer type: '
-options1 = ['Transfer', 'Withdrawal', 'Cancel']
-#get index and selected transfer type
-transfer_type, index = pick(options1, title1)
-
-if transfer_type == 'Cancel':
-    print('Transaction cancelled')
-    exit()
-
-#choice of currency
-title2 = 'Please choose currency: '
-options2 = ['HIVE', 'HBD']
-# get index and selected currency
-option, index = pick(options2, title2)
-
-if option == 'HIVE':
-    #get HIVE transfer amount
-    amount = input('Enter amount of HIVE to transfer: ')
-    asset = 'HIVE'
-else:
-    #get HBD transfer amount
-    amount = input('Enter amount of HBD to transfer: ')
-    asset = 'HBD'
-
-if transfer_type == 'Transfer':
-    #parameters: amount, asset, memo, to, account
-    client.transfer_to_savings(float(amount), asset, '', username, username)
-    print('\n' + 'Transfer to savings balance successful')
-else:
-    #create request ID random integer
-    requestID = random.randint(1,1000000)
-    #parameters: amount, asset, memo, request_id=None, to=None, account=None
-    client.transfer_from_savings(float(amount), asset, '', requestID, username, username)
-    print('\n' + 'Withdrawal from savings successful, transaction ID: ' + str(requestID))
-
-#get remaining account balance for HIVE and HBD
-userinfo = client.get_account(username)
-total_hive = userinfo['balance']
-total_hbd = userinfo['hbd_balance']
-savings_hive = userinfo['savings_balance']
-savings_hbd = userinfo['savings_hbd_balance']
-
-print('\n' + 'REMAINING ACCOUNT BALANCE:' + '\n' + total_hive + '\n' + total_hbd + '\n')
-print('CURRENT SAVINGS BALANCE:' + '\n' + savings_hive + '\n' + savings_hbd + '\n')
\ No newline at end of file
diff --git a/tutorials/python/33_transfer_steem_and_sbd_to_savings_balance/requirements.txt b/tutorials/python/33_transfer_steem_and_sbd_to_savings_balance/requirements.txt
deleted file mode 100755
index f4261b42db6dd8bfaf95345bae88a53fda4590cb..0000000000000000000000000000000000000000
--- a/tutorials/python/33_transfer_steem_and_sbd_to_savings_balance/requirements.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-steem
-pick
-random
\ No newline at end of file
diff --git a/tutorials/python/33_password_key_change/README.md b/tutorials/python/34_password_key_change/README.md
similarity index 100%
rename from tutorials/python/33_password_key_change/README.md
rename to tutorials/python/34_password_key_change/README.md
diff --git a/tutorials/python/34_password_key_change/index.py b/tutorials/python/34_password_key_change/index.py
new file mode 100755
index 0000000000000000000000000000000000000000..9c67e848f5d3d68cf5bc04424a7ab6d812588ac9
--- /dev/null
+++ b/tutorials/python/34_password_key_change/index.py
@@ -0,0 +1,68 @@
+import getpass
+import json
+from beem import Hive
+from beem.account import Account
+from beemgraphenebase.account import PasswordKey, PrivateKey
+from beem.transactionbuilder import TransactionBuilder
+from beembase.operations import Account_update
+
+account = input('Account: ')
+old_password = getpass.getpass('Current password: ')
+new_password = getpass.getpass('New password: ')
+
+if getpass.getpass('Confirm New password: ') != new_password:
+  print('New password did not confirm.')
+  exit()
+
+wif_old_owner_key = str(
+  PasswordKey(account, old_password, "owner").get_private_key()
+)
+
+client = Hive('http://127.0.0.1:8091', keys=[wif_old_owner_key])
+
+account = Account(account, blockchain_instance=client)
+new_public_keys = {}
+
+for role in ["owner", "active", "posting", "memo"]:
+  private_key = PasswordKey(account.name, new_password, role).get_private_key()
+  new_public_keys[role] = str(private_key.pubkey)
+
+new_data = {
+  "account": account.name,
+  "json_metadata": json.dumps(account.json_metadata),
+  "owner": {
+    "key_auths": [
+      [new_public_keys["owner"], 1]
+    ],
+    "account_auths": account['owner']['account_auths'],
+    "weight_threshold": 1
+  },
+  "active": {
+    "key_auths": [
+      [new_public_keys["active"], 1]
+    ],
+    "account_auths": account['active']['account_auths'],
+    "weight_threshold": 1
+  },
+  "posting": {
+    "key_auths": [
+      [new_public_keys["posting"], 1]
+    ],
+    "account_auths": account['posting']['account_auths'],
+    "weight_threshold": 1
+  },
+  "memo_key": new_public_keys["memo"]
+}
+
+print("New data:")
+print(new_data)
+
+tx = TransactionBuilder(blockchain_instance=client)
+tx.appendOps(Account_update(**new_data))
+
+tx.appendWif(wif_old_owner_key)
+signed_tx = tx.sign()
+broadcast_tx = tx.broadcast(trx_id=True)
+
+print("Account updated successfully: " + str(broadcast_tx))
+
diff --git a/tutorials/python/34_password_key_change/requirements.txt b/tutorials/python/34_password_key_change/requirements.txt
new file mode 100755
index 0000000000000000000000000000000000000000..e359b18e025d3e80a644e7e95f10d20b2dcdeefb
--- /dev/null
+++ b/tutorials/python/34_password_key_change/requirements.txt
@@ -0,0 +1,2 @@
+beem
+pick
diff --git a/tutorials/python/35_account_recovery/index.py b/tutorials/python/35_account_recovery/index.py
index d2a964fc40d2acc97b45b37a4b49208e8813f7f7..18ecdefd3bb24fa98bbb455af310dc10a92d0a0e 100755
--- a/tutorials/python/35_account_recovery/index.py
+++ b/tutorials/python/35_account_recovery/index.py
@@ -1,3 +1,4 @@
+import getpass
 import beembase
 from beem.account import Account
 from beem import Hive
@@ -5,102 +6,104 @@ from beem.transactionbuilder import TransactionBuilder
 from beemgraphenebase.account import PasswordKey
 from beembase.objects import Permission
 
-#capture user information
-username = input('account to be recovered: ')
-old_password = input('recent password for account: ')
-new_password = input('new password for account: ')
+# capture user information
+account = input('account to be recovered: ')
+old_password = getpass.getpass('recent password for account: ')
+new_password = getpass.getpass('new password for account: ')
 
-recovery_account = input('account owner (recovery account): ')
-recovery_account_private_key = input('account owner private ACTIVE key: ')
+recovery_account = input('account owner (recovery account name): ')
+recovery_account_private_key = getpass.getpass('account owner private ACTIVE key: ')
 
-s = Hive(node=['https://api.hive.blog'], keys=[recovery_account_private_key])
+client = Hive('http://127.0.0.1:8091', keys=[recovery_account_private_key])
+account = Account(account, blockchain_instance=client)
+recovery_account = Account(recovery_account, blockchain_instance=client)
 
-#create new account owner keys
-new_account_owner_private_key = PasswordKey(username, new_password, role='owner').get_private_key()
+# create new account owner keys
+new_account_owner_private_key = PasswordKey(account.name, new_password, role='owner').get_private_key()
 new_account_owner_private_key_string = str(new_account_owner_private_key)
 new_account_owner_public_key = str(new_account_owner_private_key.pubkey)
 
-#create old account owner keys
-old_account_owner_private_key = PasswordKey(username, old_password, role='owner').get_private_key()
+# create old account owner keys
+old_account_owner_private_key = PasswordKey(account.name, old_password, role='owner').get_private_key()
 old_account_owner_private_key_string = str(old_account_owner_private_key)
 old_account_owner_public_key = str(old_account_owner_private_key.pubkey)
 
-#owner key format
+# owner key format
 new_owner_authority = {
-    "key_auths": [
-        [new_account_owner_public_key, 1]
-    ],
-    "account_auths": [],
-    "weight_threshold": 1
+  "key_auths": [
+    [new_account_owner_public_key, 1]
+  ],
+  "account_auths": [],
+  "weight_threshold": 1
 }
 
-#recovery request data object creation
+# recovery request data object creation
 request_op_data = {
-    'account_to_recover': username,
-    'recovery_account': recovery_account,
-    'new_owner_authority': new_owner_authority,
-    'extensions': []
+  'account_to_recover': account.name,
+  'recovery_account': recovery_account.name,
+  'new_owner_authority': new_owner_authority,
+  'extensions': []
 }
 
-#recovery request operation creation
+# recovery request operation creation
 request_op = beembase.operations.Request_account_recovery(**request_op_data)
 
 print('request_op_data')
 print(request_op_data)
 
-#recovery request broadcast
-request_result = s.finalizeOp(request_op, recovery_account, "active")
+# recovery request broadcast
+request_result = client.finalizeOp(request_op, recovery_account.name, "active")
 
 print('request_result')
 print(request_result)
 
-#owner key format
+# owner key format
 recent_owner_authority = {
-    "key_auths": [
-        [old_account_owner_public_key, 1]
-    ],
-    "account_auths": [],
-    "weight_threshold": 1
+  "key_auths": [
+    [old_account_owner_public_key, 1]
+  ],
+  "account_auths": [],
+  "weight_threshold": 1
 }
 
-#recover account data object
+# recover account data object
 op_recover_account_data = {
-    'account_to_recover': username,
-    'new_owner_authority': new_owner_authority,
-    'recent_owner_authority': recent_owner_authority,
-    'extensions': []
+  'account_to_recover': account.name,
+  'new_owner_authority': new_owner_authority,
+  'recent_owner_authority': recent_owner_authority,
+  'extensions': []
 }
 
-#account keys update data object
+# account keys update data object
 op_account_update_data = {
-    "account": username,
-    "active": {
-        "key_auths": [
-            [str(PasswordKey(username, new_password, role='active').get_private_key().pubkey), 1]
-        ],
-        "account_auths": [],
-        "weight_threshold": 1
-    },
-    "posting": {
-        "key_auths": [
-            [str(PasswordKey(username, new_password, role='posting').get_private_key().pubkey), 1]
-        ],
-        "account_auths": [],
-        "weight_threshold": 1
-    },
-    "memo_key": str(PasswordKey(username, new_password, role='memo').get_private_key().pubkey),
-    "json_metadata": ""
+  "account": account.name,
+  "active": {
+    "key_auths": [
+      [str(PasswordKey(account.name, new_password, role='active').get_private_key().pubkey), 1]
+    ],
+    "account_auths": [],
+    "weight_threshold": 1
+  },
+  "posting": {
+    "key_auths": [
+      [str(PasswordKey(account.name, new_password, role='posting').get_private_key().pubkey), 1]
+    ],
+    "account_auths": [],
+    "weight_threshold": 1
+  },
+  "memo_key": str(PasswordKey(account.name, new_password, role='memo').get_private_key().pubkey),
+  "json_metadata": ""
 }
 
-#recover account initialisation and transmission
-s = Hive(node=['https://api.hive.blog'], keys=[recovery_account_private_key])
+# recover account initialisation and transmission
+client = Hive('http://127.0.0.1:8091', keys=[recovery_account_private_key])
 
 op_recover_account = beembase.operations.Recover_account(**op_recover_account_data)
 
 print('op_recover_account')
 print(op_recover_account)
 
-tb = TransactionBuilder()
+tb = TransactionBuilder(blockchain_instance=client)
 tb.appendOps([op_recover_account])
 tb.appendWif(str(old_account_owner_private_key))
 tb.appendWif(str(new_account_owner_private_key))
@@ -110,15 +113,15 @@ result = tb.broadcast()
 print('result')
 print(result)
 
-#update account keys initialisation and transmission
-s = Hive(node=['https://api.hive.blog'], keys=[new_account_owner_private_key])
+# update account keys initialisation and transmission
+client = Hive('http://127.0.0.1:8091', keys=[new_account_owner_private_key])
 
 op_account_update = beembase.operations.Account_update(**op_account_update_data)
 
 print('op_account_update')
 print(op_account_update)
 
-tb = TransactionBuilder()
+tb = TransactionBuilder(blockchain_instance=client)
 tb.appendOps([op_account_update])
 tb.appendWif(str(new_account_owner_private_key))
 tb.sign()
@@ -126,4 +129,5 @@ tb.sign()
 result = tb.broadcast()
 
 print('result')
-print(result)
\ No newline at end of file
+print(result)
+